Version 2.0.0-dev.64.0

Merge commit 'b6aa31f7d8cb6c880002ba4f0655b0eca873510f' into dev
diff --git a/BUILD.gn b/BUILD.gn
index b3f49d3..1957140 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -13,7 +13,7 @@
     testonly = true
   }
   deps = [
-    ":runtime_kernel",
+    ":runtime",
   ]
 }
 
@@ -34,6 +34,11 @@
 }
 
 group("runtime") {
+  import("runtime/runtime_args.gni")
+
+  target_supports_aot = dart_target_arch == "arm" ||
+                        dart_target_arch == "arm64" || dart_target_arch == "x64"
+
   if (targetting_fuchsia) {
     # Fuchsia has run_vm_tests marked testonly.
     testonly = true
@@ -45,21 +50,6 @@
     "runtime/bin:run_vm_tests",
     "runtime/bin:sample_extension",
     "runtime/bin:test_extension",
-  ]
-}
-
-group("runtime_kernel") {
-  import("runtime/runtime_args.gni")
-
-  target_supports_aot = dart_target_arch == "arm" ||
-                        dart_target_arch == "arm64" || dart_target_arch == "x64"
-
-  if (targetting_fuchsia) {
-    # Fuchsia has run_vm_tests marked testonly.
-    testonly = true
-  }
-  deps = [
-    ":runtime",
     "runtime/vm:kernel_platform_files($host_toolchain)",
 
     # TODO(rmacnak): Link this into 'dart'.
@@ -72,6 +62,12 @@
   }
 }
 
+group("runtime_kernel") {
+  deps = [
+    ":runtime",
+  ]
+}
+
 group("runtime_precompiled") {
   deps = [
     "runtime/bin:dart_bootstrap($host_toolchain)",
diff --git a/CHANGELOG.md b/CHANGELOG.md
index beb9682..1287ea8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,21 +1,65 @@
-## 2.0.0-dev.XX.0
-(Add new changes here, and they will be copied to the
- change section for the next dev version)
+## 2.0.0-dev.64.0
 
 ### Language
 
-#### Strong Mode
+* Numerous corner case bugs around return statements in synchronous and
+asynchronous functions fixed.  Specifically:
+  * Issues [31887][issue 31887], [32881][issue 32881]. Future flattening should
+    not be recursive.
+  * Issues [30638][issue 30638], [32233][issue 32233]. Incorrect downcast errors
+    with `FutureOr`
+  * Issue [32233][issue 32233]. Errors when returning `FutureOr`
+  * Issue [33218][issue 33218]. Returns in functions with void related types
+  * Issue [31278][issue 31278]. Incorrect hint on empty returns in async
+    functions
+* An empty `return;` in an async function with return type `Future<Object>` will
+    not report an error.
+* `return exp;` where `exp` has type `void` in an async function is now an error
+unless the return type of the function is `void` or `dynamic`.
+* Mixed return statements of the form `return;` and `return exp;` are now
+allowed when `exp` has type `void`.
+
+[issue 31887]: https://github.com/dart-lang/sdk/issues/31887
+[issue 30638]: https://github.com/dart-lang/sdk/issues/30638
+[issue 32233]: https://github.com/dart-lang/sdk/issues/32233
+[issue 32881]: https://github.com/dart-lang/sdk/issues/32881
+[issue 33218]: https://github.com/dart-lang/sdk/issues/33218
+[issue 31278]: https://github.com/dart-lang/sdk/issues/31278
 
 ### Dart VM
 
+* The Dart VM now runs programs by default with Dart 2.0 semantics. The flag
+  `--preview-dart-2` is not available anymore.
+
+* A new flag `--no-preview-dart-2` has been added, this flag can be used
+  to revert to Dart 1.0 semantics. The flag is temporary and only meant to
+  help users in the migration process. The flag will go away in a future dev
+  release, when we no longer support Dart 1.0.
+
 ### Tool Changes
 
-#### Pub
+#### Dart2js
 
-#### Other Tools
+* Dart2js now compiles programs by default with Dart 2.0 semantics. Apps are
+  expected to be bigger than before, because Dart 2.0 has many more implicit
+  checks (similar to the `--checked` flag in Dart 1.0). Other relevant flags:
+
+  * `--omit-implicit-checks`: is a flag that removes most of the extra implicit
+    checks. Only use this if you have enough test coverage to know that the app
+    will work well without the checks. If a check would have failed and it is
+    omitted, your app may crash or behave in unexpected ways.
+
+  * `--no-preview-dart-2`: a temporary flag to revert to Dart 1.0. This flag is
+    temporary and only meant to help users in the migration process. The flag
+    will go away in a future dev release, when we no longer support Dart 1.0.
 
 ### Core library changes
 
+* `dart:core`
+  * `int.parse` on the VM no longer accepts unsigned hexadecimal numbers
+    greater than or equal to 2**63 when not prefixed by `0x`.
+    (SDK issue [32858](https://github.com/dart-lang/sdk/issues/32858))
+
 ## 2.0.0-dev.63.0
 
 ### Tool Changes
@@ -28,7 +72,7 @@
 
 ### Language
 
-Inference chooses `void` when combining `Object` or `dynamic` and `void` ([issue
+* Inference chooses `void` when combining `Object` or `dynamic` and `void` ([issue
 3341]).  When combining with other top types, inference now prefers `void`.  So
 for example, given:
 
diff --git a/DEPS b/DEPS
index 94230ce..ae550dd 100644
--- a/DEPS
+++ b/DEPS
@@ -94,7 +94,7 @@
   "intl_tag": "0.15.2",
   "jinja2_rev": "2222b31554f03e62600cd7e383376a7c187967a1",
   "json_rpc_2_tag": "2.0.6",
-  "linter_tag": "0.1.53",
+  "linter_tag": "0.1.54",
   "logging_tag": "0.11.3+1",
   "markdown_tag": "2.0.0",
   "matcher_tag": "0.12.1+4",
diff --git a/docs/language/dartLangSpec.tex b/docs/language/dartLangSpec.tex
index aa78dff..9ab7861 100644
--- a/docs/language/dartLangSpec.tex
+++ b/docs/language/dartLangSpec.tex
@@ -58,6 +58,9 @@
 % - Specify configurable imports.
 % - Specify the dynamic type of the Iterable/Future/Stream returned from
 %   invocations of functions marked sync*/async/async*.
+% - Add appendix listing the major differences between 64-bit integers
+%   and JavaScript integers.
+% - Remove appendix on naming conventions.
 %
 % 1.15
 % - Change how language specification describes control flow.
@@ -397,7 +400,7 @@
 \commentary{
 A consequence of these rules is that it is possible to hide a type with a method or variable.
 Naming conventions usually prevent such abuses.
-Nevertheless,the following program is legal:
+Nevertheless, the following program is legal:
 }
 
 \begin{dartCode}
@@ -9276,7 +9279,18 @@
 It is a static warning if the referenced part declaration $p$ names a library other than the current library as the library to which $p$ belongs.
 
 \LMHash{}
-It's a compile-time error if the same library contains two part directives with the same URI.
+Let $L$ be a library.
+It is a compile-time error if $L$ contains two part directives with the same URI.
+Furthermore,
+let $L_1$ be $L$ or any library which is directly or indirectly imported by $L$,
+and let $L_2$ be any library distinct from $L_1$ which is directly or indirectly imported by $L$
+(\ref{imports}).
+It is a compile-time error if $L_1$ and $L_2$ both contain a part directive with the same URI.
+
+\commentary{
+In particular, it is an error to use the same part twice in the same program
+(\ref{scripts}).
+}
 
 
 \subsection{Scripts}
@@ -10457,28 +10471,40 @@
 }
 
 
-\section*{Appendix: Naming Conventions}
-\LMLabel{namingConventions}
+\section*{Appendix: Integer Implementations}
+\LMLabel{integerImplementations}
 
 \commentary{
-The following naming conventions are customary in Dart programs.
+The \code{int} type represents integers.
+The specification is written with 64-bit two's complement integers as the
+intended implementation, but when Dart is compiled to JavaScript,
+the implementation of \code{int} will instead use the JavaScript
+number type.
+
+This introduces a number of differencs:
 \begin{itemize}
-\item The names of compile-time constant variables never use lower case letters.
-If they consist of multiple words, those words are separated by underscores.
-Examples: PI, I\_AM\_A\_CONSTANT.
-\item The names of functions (including getters, setters, methods and local or library functions) and non-constant variables begin with a lowercase letter.
-If the name consists of multiple words, each word (except the first) begins with an uppercase letter.
-No other uppercase letters are used.
-Examples: camlCase, dart4TheWorld
-\item The names of types (including classes and type aliases) begin with an upper case letter.
-If the name consists of multiple words, each word begins with an uppercase letter.
-No other uppercase letters are used.
-Examples: CamlCase, Dart4TheWorld.
-\item The names of type variables are short (preferably single letter).
-Examples: T, S, K, V , E.
-\item The names of libraries or library prefixes never use upper case letters.
-If they consist of multiple words, those words are separated by underscores.
-Example: my\_favorite\_library.
+\item Valid values of JavaScript \code{int} are any
+IEEE-754 64-bit floating point number with no fractional part.
+This includes positive and negative {\em infinity},
+which can be reached by overflowing
+(integer division by zero is still not allowed).
+Otherwise valid integer literals (including any leading minus sign)
+that represent invalid JavaScript \code{int} values
+cannot be compiled to JavaScript.
+Operations on integers may lose precision since 64-bit floating point numbers
+are limited to 53 significant bits.
+\item JavaScript \code{int} instances also implement \code{double},
+and integer-valued \code{double} instances also implement \code{int}.
+The \code{int} and \code{double} class are still separate subclasses of the
+class \code{num}, but {\em instances} of either class that represent an integer,
+act as if they are actually instances of a common subclass implementing both
+\code{int} and \code{double}. Fractional numbers only implement \code{double}.
+\item Bitwise operations on integers (and, or, xor, negate and shifts)
+all truncate the operands to 32-bit values.
+\item The \code{identical} method cannot distinguish the values $0.0$ and $-0.0$,
+and it cannot recognize any {\em NaN} value as identical to itself.
+For efficiency, the \code{identical} operation uses the JavaScript \code{===}
+operator.
 \end{itemize}
 }
 
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index eb9db41..2163483 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -372,7 +372,8 @@
         new PluginWatcher(resourceProvider, pluginManager);
 
     defaultContextOptions.generateImplicitErrors = false;
-    defaultContextOptions.useFastaParser = options.useCFE;
+    defaultContextOptions.useFastaParser =
+        options.useCFE || options.useFastaParser;
     defaultContextOptions.previewDart2 = options.previewDart2;
 
     {
@@ -1189,6 +1190,11 @@
    * Whether to enable the Dart 2.0 Common Front End implementation.
    */
   bool useCFE = false;
+
+  /**
+   * Whether to enable parsing via the Fasta parser.
+   */
+  bool useFastaParser = false;
 }
 
 /**
diff --git a/pkg/analysis_server/lib/src/collections.dart b/pkg/analysis_server/lib/src/collections.dart
index 6c88a04..afde613 100644
--- a/pkg/analysis_server/lib/src/collections.dart
+++ b/pkg/analysis_server/lib/src/collections.dart
@@ -3,20 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 /**
- * Returns the concatenation of the input [iterables].
- *
- * The returned iterable is a lazily-evaluated view on the input iterables.
- */
-Iterable<E> concat<E>(Iterable<Iterable<E>> iterables) =>
-    iterables.expand((x) => x);
-
-/**
- * Returns the concatenation of the input [iterables] as a [List].
- */
-List<E> concatToList<E>(Iterable<Iterable<E>> iterables) =>
-    concat(iterables).toList();
-
-/**
  * Returns the given [list] if it is not empty, or `null` otherwise.
  */
 List<E> nullIfEmpty<E>(List<E> list) {
@@ -29,23 +15,6 @@
   return list;
 }
 
-/// A pair of values.
-class Pair<E, F> {
-  final E first;
-  final F last;
-
-  Pair(this.first, this.last);
-
-  int get hashCode => first.hashCode ^ last.hashCode;
-
-  bool operator ==(other) {
-    if (other is! Pair) return false;
-    return other.first == first && other.last == last;
-  }
-
-  String toString() => '($first, $last)';
-}
-
 /**
  * A container that remembers the last `n` items added to it.
  *
diff --git a/pkg/analysis_server/lib/src/domain_completion.dart b/pkg/analysis_server/lib/src/domain_completion.dart
index 6a4a0ff..f634061 100644
--- a/pkg/analysis_server/lib/src/domain_completion.dart
+++ b/pkg/analysis_server/lib/src/domain_completion.dart
@@ -49,11 +49,6 @@
       new RecentBuffer<CompletionPerformance>(performanceListMaxLength);
 
   /**
-   * Performance for the last priority change event.
-   */
-  CompletionPerformance computeCachePerformance;
-
-  /**
    * The current request being processed or `null` if none.
    */
   CompletionRequestImpl _currentRequest;
diff --git a/pkg/analysis_server/lib/src/domains/analysis/occurrences.dart b/pkg/analysis_server/lib/src/domains/analysis/occurrences.dart
index 3862078..eedb605 100644
--- a/pkg/analysis_server/lib/src/domains/analysis/occurrences.dart
+++ b/pkg/analysis_server/lib/src/domains/analysis/occurrences.dart
@@ -9,7 +9,7 @@
  * A concrete implementation of [OccurrencesCollector].
  */
 class OccurrencesCollectorImpl implements OccurrencesCollector {
-  Map<protocol.Element, protocol.Occurrences> elementOccurrences =
+  final Map<protocol.Element, protocol.Occurrences> elementOccurrences =
       <protocol.Element, protocol.Occurrences>{};
 
   List<protocol.Occurrences> get allOccurrences {
diff --git a/pkg/analysis_server/lib/src/edit/edit_domain.dart b/pkg/analysis_server/lib/src/edit/edit_domain.dart
index 2857e67..e80dadc 100644
--- a/pkg/analysis_server/lib/src/edit/edit_domain.dart
+++ b/pkg/analysis_server/lib/src/edit/edit_domain.dart
@@ -593,11 +593,13 @@
     List<RefactoringKind> kinds = <RefactoringKind>[];
     // Check nodes.
     {
-      var unit = await server.getResolvedCompilationUnit(file);
-      var analysisSession = server.getAnalysisDriver(file)?.currentSession;
-      if (unit != null && analysisSession != null) {
+      var analysisResult = await server.getAnalysisResult(file);
+      if (analysisResult != null) {
+        // TODO(scheglov) Update other refactorings to use ResolveResult.
+        var unit = analysisResult.unit;
         // Try EXTRACT_LOCAL_VARIABLE.
-        if (new ExtractLocalRefactoring(unit, offset, length).isAvailable()) {
+        if (new ExtractLocalRefactoring(analysisResult, offset, length)
+            .isAvailable()) {
           kinds.add(RefactoringKind.EXTRACT_LOCAL_VARIABLE);
         }
         // Try EXTRACT_METHOD.
@@ -608,7 +610,7 @@
         }
         // Try EXTRACT_WIDGETS.
         if (new ExtractWidgetRefactoring(
-                searchEngine, analysisSession, unit, offset, length)
+                searchEngine, analysisResult.session, unit, offset, length)
             .isAvailable()) {
           kinds.add(RefactoringKind.EXTRACT_WIDGET);
         }
@@ -939,9 +941,10 @@
       }
     }
     if (kind == RefactoringKind.EXTRACT_LOCAL_VARIABLE) {
-      CompilationUnit unit = await server.getResolvedCompilationUnit(file);
-      if (unit != null) {
-        refactoring = new ExtractLocalRefactoring(unit, offset, length);
+      var analysisResult = await server.getAnalysisResult(file);
+      if (analysisResult != null) {
+        refactoring =
+            new ExtractLocalRefactoring(analysisResult, offset, length);
         feedback = new ExtractLocalVariableFeedback(
             <String>[], <int>[], <int>[],
             coveringExpressionOffsets: <int>[],
diff --git a/pkg/analysis_server/lib/src/plugin/plugin_watcher.dart b/pkg/analysis_server/lib/src/plugin/plugin_watcher.dart
index 6a96170..996f97a 100644
--- a/pkg/analysis_server/lib/src/plugin/plugin_watcher.dart
+++ b/pkg/analysis_server/lib/src/plugin/plugin_watcher.dart
@@ -35,7 +35,7 @@
   /**
    * A table mapping analysis drivers to information related to the driver.
    */
-  Map<AnalysisDriver, _DriverInfo> _driverInfo =
+  final Map<AnalysisDriver, _DriverInfo> _driverInfo =
       <AnalysisDriver, _DriverInfo>{};
 
   /**
diff --git a/pkg/analysis_server/lib/src/search/type_hierarchy.dart b/pkg/analysis_server/lib/src/search/type_hierarchy.dart
index 40b71ad..65eee55 100644
--- a/pkg/analysis_server/lib/src/search/type_hierarchy.dart
+++ b/pkg/analysis_server/lib/src/search/type_hierarchy.dart
@@ -18,7 +18,7 @@
 class TypeHierarchyComputer {
   final SearchEngine _searchEngine;
 
-  Element _pivotElement;
+  final Element _pivotElement;
   LibraryElement _pivotLibrary;
   ElementKind _pivotKind;
   String _pivotName;
diff --git a/pkg/analysis_server/lib/src/server/driver.dart b/pkg/analysis_server/lib/src/server/driver.dart
index af6e262..d452c44 100644
--- a/pkg/analysis_server/lib/src/server/driver.dart
+++ b/pkg/analysis_server/lib/src/server/driver.dart
@@ -263,6 +263,11 @@
   static const String USE_CFE = "use-cfe";
 
   /**
+   * Whether to enable parsing via the Fasta parser.
+   */
+  static const String USE_FASTA_PARSER = "use-fasta-parser";
+
+  /**
    * The instrumentation server that is to be used by the analysis server.
    */
   InstrumentationServer instrumentationServer;
@@ -313,6 +318,7 @@
       analysisServerOptions.previewDart2 = true;
     }
     analysisServerOptions.useCFE = results[USE_CFE];
+    analysisServerOptions.useFastaParser = results[USE_FASTA_PARSER];
 
     telemetry.Analytics analytics = telemetry.createAnalyticsInstance(
         'UA-26406144-29', 'analysis-server',
@@ -537,6 +543,8 @@
     parser.addFlag(PREVIEW_DART2, help: "Enable the Dart 2.0 preview");
     parser.addFlag(USE_CFE,
         help: "Enable the Dart 2.0 Common Front End implementation");
+    parser.addFlag(USE_FASTA_PARSER,
+        help: "Whether to enable parsing via the Fasta parser");
 
     return parser;
   }
diff --git a/pkg/analysis_server/lib/src/server/http_server.dart b/pkg/analysis_server/lib/src/server/http_server.dart
index 6acfe4e..c5cff7d 100644
--- a/pkg/analysis_server/lib/src/server/http_server.dart
+++ b/pkg/analysis_server/lib/src/server/http_server.dart
@@ -29,8 +29,8 @@
   @override
   void handleGetRequest(HttpRequest request) {
     HttpResponse response = request.response;
-    response.statusCode = HttpStatus.NOT_FOUND;
-    response.headers.contentType = ContentType.TEXT;
+    response.statusCode = HttpStatus.notFound;
+    response.headers.contentType = ContentType.text;
     response.write(message);
     response.close();
   }
@@ -146,7 +146,7 @@
     httpServer.listen((HttpRequest request) async {
       // TODO(brianwilkerson) Determine whether this await is necessary.
       await null;
-      List<String> updateValues = request.headers[HttpHeaders.UPGRADE];
+      List<String> updateValues = request.headers[HttpHeaders.upgradeHeader];
       if (request.method == 'GET') {
         await _handleGetRequest(request);
       } else if (updateValues != null &&
@@ -154,8 +154,8 @@
         // We no longer support serving analysis server communications over
         // WebSocket connections.
         HttpResponse response = request.response;
-        response.statusCode = HttpStatus.NOT_FOUND;
-        response.headers.contentType = ContentType.TEXT;
+        response.statusCode = HttpStatus.notFound;
+        response.headers.contentType = ContentType.text;
         response.write(
             'WebSocket connections not supported (${request.uri.path}).');
         response.close();
@@ -171,8 +171,8 @@
    */
   void _returnUnknownRequest(HttpRequest request) {
     HttpResponse response = request.response;
-    response.statusCode = HttpStatus.NOT_FOUND;
-    response.headers.contentType = ContentType.TEXT;
+    response.statusCode = HttpStatus.notFound;
+    response.headers.contentType = ContentType.text;
     response.write('Not found');
     response.close();
   }
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 c47f71a..7a97f72 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -481,6 +481,7 @@
       await _addFix_createClass();
     }
     if (errorCode == StaticTypeWarningCode.UNDEFINED_FUNCTION) {
+      await _addFix_createClass();
       await _addFix_importLibrary_withFunction();
       await _addFix_importLibrary_withType();
       await _addFix_undefinedFunction_useSimilar();
@@ -494,6 +495,7 @@
     }
     if (errorCode == HintCode.UNDEFINED_METHOD ||
         errorCode == StaticTypeWarningCode.UNDEFINED_METHOD) {
+      await _addFix_createClass();
       await _addFix_importLibrary_withFunction();
       await _addFix_importLibrary_withType();
       await _addFix_undefinedMethod_useSimilar();
diff --git a/pkg/analysis_server/lib/src/services/correction/statement_analyzer.dart b/pkg/analysis_server/lib/src/services/correction/statement_analyzer.dart
index 4199f27..49cd58e 100644
--- a/pkg/analysis_server/lib/src/services/correction/statement_analyzer.dart
+++ b/pkg/analysis_server/lib/src/services/correction/statement_analyzer.dart
@@ -39,7 +39,7 @@
 class StatementAnalyzer extends SelectionAnalyzer {
   final CompilationUnit unit;
 
-  RefactoringStatus _status = new RefactoringStatus();
+  final RefactoringStatus _status = new RefactoringStatus();
 
   StatementAnalyzer(this.unit, SourceRange selection) : super(selection);
 
diff --git a/pkg/analysis_server/lib/src/services/correction/util.dart b/pkg/analysis_server/lib/src/services/correction/util.dart
index d5bd83e..247729dd 100644
--- a/pkg/analysis_server/lib/src/services/correction/util.dart
+++ b/pkg/analysis_server/lib/src/services/correction/util.dart
@@ -1399,32 +1399,6 @@
  */
 class TokenUtils {
   /**
-   * Return the first token in the list of [tokens] representing the given
-   * [keyword], or `null` if there is no such token.
-   */
-  static Token findKeywordToken(List<Token> tokens, Keyword keyword) {
-    for (Token token in tokens) {
-      if (token.keyword == keyword) {
-        return token;
-      }
-    }
-    return null;
-  }
-
-  /**
-   * @return the first [Token] with given [TokenType], may be <code>null</code> if not
-   *         found.
-   */
-  static Token findToken(List<Token> tokens, TokenType type) {
-    for (Token token in tokens) {
-      if (token.type == type) {
-        return token;
-      }
-    }
-    return null;
-  }
-
-  /**
    * @return [Token]s of the given Dart source, not <code>null</code>, may be empty if no
    *         tokens or some exception happens.
    */
@@ -1442,13 +1416,6 @@
       return [];
     }
   }
-
-  /**
-   * @return <code>true</code> if given [Token]s contain only single [Token] with given
-   *         [TokenType].
-   */
-  static bool hasOnly(List<Token> tokens, TokenType type) =>
-      tokens.length == 1 && tokens[0].type == type;
 }
 
 class _CollectReferencedUnprefixedNames extends RecursiveAstVisitor {
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart b/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
index 011ce65..bfbb2d1 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
@@ -14,6 +14,7 @@
 import 'package:analysis_server/src/services/refactoring/naming_conventions.dart';
 import 'package:analysis_server/src/services/refactoring/refactoring.dart';
 import 'package:analysis_server/src/services/refactoring/refactoring_internal.dart';
+import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
@@ -30,11 +31,9 @@
  */
 class ExtractLocalRefactoringImpl extends RefactoringImpl
     implements ExtractLocalRefactoring {
-  final CompilationUnit unit;
+  final ResolveResult resolveResult;
   final int selectionOffset;
   final int selectionLength;
-  CompilationUnitElement unitElement;
-  String file;
   SourceRange selectionRange;
   CorrectionUtils utils;
 
@@ -55,16 +54,20 @@
   Set<String> excludedVariableNames = new Set<String>();
 
   ExtractLocalRefactoringImpl(
-      this.unit, this.selectionOffset, this.selectionLength) {
-    unitElement = unit.element;
+      this.resolveResult, this.selectionOffset, this.selectionLength) {
     selectionRange = new SourceRange(selectionOffset, selectionLength);
-    utils = new CorrectionUtils(unit);
-    file = unitElement.source.fullName;
+    utils = new CorrectionUtils(unit, buffer: resolveResult.content);
   }
 
+  String get file => resolveResult.path;
+
   @override
   String get refactoringName => 'Extract Local Variable';
 
+  CompilationUnit get unit => resolveResult.unit;
+
+  CompilationUnitElement get unitElement => unit.element;
+
   String get _declarationKeyword {
     if (_isPartOfConstantExpression(rootExpression)) {
       return "const";
diff --git a/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart b/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
index dc7777c..a93e45b 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
@@ -20,6 +20,7 @@
 import 'package:analysis_server/src/services/refactoring/rename_local.dart';
 import 'package:analysis_server/src/services/refactoring/rename_unit_member.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
+import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -65,11 +66,8 @@
   /**
    * Returns a new [ExtractLocalRefactoring] instance.
    */
-  factory ExtractLocalRefactoring(
-      CompilationUnit unit, int selectionOffset, int selectionLength) {
-    return new ExtractLocalRefactoringImpl(
-        unit, selectionOffset, selectionLength);
-  }
+  factory ExtractLocalRefactoring(ResolveResult resolveResult,
+      int selectionOffset, int selectionLength) = ExtractLocalRefactoringImpl;
 
   /**
    * The lengths of the expressions that cover the specified selection,
diff --git a/pkg/analysis_server/lib/src/status/pages.dart b/pkg/analysis_server/lib/src/status/pages.dart
index d13e0de..f9c7e06 100644
--- a/pkg/analysis_server/lib/src/status/pages.dart
+++ b/pkg/analysis_server/lib/src/status/pages.dart
@@ -156,22 +156,22 @@
       for (Page page in pages) {
         if (page.path == path) {
           HttpResponse response = request.response;
-          response.headers.contentType = ContentType.HTML;
+          response.headers.contentType = ContentType.html;
           response.write(await page.generate(request.uri.queryParameters));
           response.close();
           return;
         }
       }
 
-      await respond(request, createUnknownPage(path), HttpStatus.NOT_FOUND);
+      await respond(request, createUnknownPage(path), HttpStatus.notFound);
     } catch (e, st) {
       try {
         await respond(request, createExceptionPage('$e', st),
-            HttpStatus.INTERNAL_SERVER_ERROR);
+            HttpStatus.internalServerError);
       } catch (e, st) {
         HttpResponse response = request.response;
-        response.statusCode = HttpStatus.INTERNAL_SERVER_ERROR;
-        response.headers.contentType = ContentType.TEXT;
+        response.statusCode = HttpStatus.internalServerError;
+        response.headers.contentType = ContentType.text;
         response.write('$e\n\n$st');
         response.close();
       }
@@ -179,19 +179,19 @@
   }
 
   Future<Null> respond(HttpRequest request, Page page,
-      [int code = HttpStatus.OK]) async {
+      [int code = HttpStatus.ok]) async {
     // TODO(brianwilkerson) Determine whether this await is necessary.
     await null;
     HttpResponse response = request.response;
     response.statusCode = code;
-    response.headers.contentType = ContentType.HTML;
+    response.headers.contentType = ContentType.html;
     response.write(await page.generate(request.uri.queryParameters));
     response.close();
   }
 
   void respondRedirect(HttpRequest request, String pathFragment) {
     HttpResponse response = request.response;
-    response.statusCode = HttpStatus.MOVED_TEMPORARILY;
+    response.statusCode = HttpStatus.movedTemporarily;
     response.redirect(request.uri.resolve(pathFragment));
   }
 }
diff --git a/pkg/analysis_server/test/benchmarks_test.dart b/pkg/analysis_server/test/benchmarks_test.dart
index 165760f..355a0e9 100644
--- a/pkg/analysis_server/test/benchmarks_test.dart
+++ b/pkg/analysis_server/test/benchmarks_test.dart
@@ -48,7 +48,7 @@
       });
 
       // TODO(scheglov): Restore similar test coverage when the front-end API
-      // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+      // allows it.  See https://github.com/dart-lang/sdk/issues/33520.
       // test('$benchmarkId-use-cfe', () {
       //   ProcessResult r = Process.runSync(
       //     Platform.resolvedExecutable,
diff --git a/pkg/analysis_server/test/integration/analysis/error_test.dart b/pkg/analysis_server/test/integration/analysis/error_test.dart
index a69de4a..f7974b4 100644
--- a/pkg/analysis_server/test/integration/analysis/error_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/error_test.dart
@@ -12,9 +12,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisErrorIntegrationTest);
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(AnalysisErrorIntegrationTest_UseCFE);
+    defineReflectiveTests(AnalysisErrorIntegrationTest_UseCFE);
   });
 }
 
@@ -109,14 +107,20 @@
 
   @override
   @failingTest
+  test_detect_simple_error() {
+    return super.test_detect_simple_error();
+  }
+
+  @override
+  @failingTest
   test_super_mixins_disabled() {
     // Disabling super mixins is not supported in the new FE.
     return super.test_super_mixins_disabled();
   }
 
   @override
+  @failingTest
   test_super_mixins_enabled() {
-    // This does pass with the new FE.
     return super.test_super_mixins_enabled();
   }
 }
diff --git a/pkg/analysis_server/test/integration/analysis/get_errors_test.dart b/pkg/analysis_server/test/integration/analysis/get_errors_test.dart
index b106bf0..981e904 100644
--- a/pkg/analysis_server/test/integration/analysis/get_errors_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_errors_test.dart
@@ -12,9 +12,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetErrorsTest);
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(GetErrorsTest_UseCFE);
+    defineReflectiveTests(GetErrorsTest_UseCFE);
   });
 }
 
@@ -42,4 +40,10 @@
 class GetErrorsTest_UseCFE extends GetErrorsTest {
   @override
   bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_getErrors() {
+    return super.test_getErrors();
+  }
 }
diff --git a/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart b/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart
index 08f8e52..7a10b8a 100644
--- a/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart
@@ -15,9 +15,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisGetImportedElementsIntegrationTest);
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(AnalysisGetImportedElementsIntegrationTest_UseCFE);
+    defineReflectiveTests(AnalysisGetImportedElementsIntegrationTest_UseCFE);
   });
 }
 
@@ -147,4 +145,16 @@
     extends AnalysisGetImportedElementsIntegrationTest {
   @override
   bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_getImportedElements_none() {
+    return super.test_getImportedElements_none();
+  }
+
+  @failingTest
+  @override
+  test_getImportedElements_some() {
+    return super.test_getImportedElements_some();
+  }
 }
diff --git a/pkg/analysis_server/test/integration/analysis/get_navigation_test.dart b/pkg/analysis_server/test/integration/analysis/get_navigation_test.dart
index a9d7bb7..96995ae 100644
--- a/pkg/analysis_server/test/integration/analysis/get_navigation_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_navigation_test.dart
@@ -75,4 +75,10 @@
   @override
   @failingTest
   test_navigation() => super.test_navigation();
+
+  @override
+  @failingTest
+  test_navigation_no_result() {
+    fail('This test crashes with CFE');
+  }
 }
diff --git a/pkg/analysis_server/test/integration/analysis/lint_test.dart b/pkg/analysis_server/test/integration/analysis/lint_test.dart
index d217042..ae9649d 100644
--- a/pkg/analysis_server/test/integration/analysis/lint_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/lint_test.dart
@@ -87,4 +87,22 @@
 class LintIntegrationTest_UseCFE extends LintIntegrationTest {
   @override
   bool get useCFE => true;
+
+  @override
+  @failingTest
+  test_no_lints_when_not_specified() {
+    return super.test_no_lints_when_not_specified();
+  }
+
+  @override
+  @failingTest
+  test_simple_lint_newOptionsFile() {
+    return super.test_simple_lint_newOptionsFile();
+  }
+
+  @override
+  @failingTest
+  test_simple_lint_oldOptionsFile() {
+    return super.test_simple_lint_oldOptionsFile();
+  }
 }
diff --git a/pkg/analysis_server/test/integration/analysis/occurrences_test.dart b/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
index 7054ac4..eeda63a 100644
--- a/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
@@ -12,9 +12,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OccurrencesTest);
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(OccurrencesTest_UseCFE);
+    defineReflectiveTests(OccurrencesTest_UseCFE);
   });
 }
 
@@ -73,4 +71,10 @@
 class OccurrencesTest_UseCFE extends OccurrencesTest {
   @override
   bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_occurrences() {
+    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 0952955..6192813 100644
--- a/pkg/analysis_server/test/integration/analysis/outline_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/outline_test.dart
@@ -12,9 +12,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OutlineTest);
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(OutlineTest_UseCFE);
+    defineReflectiveTests(OutlineTest_UseCFE);
   });
 }
 
@@ -77,4 +75,10 @@
 class OutlineTest_UseCFE extends OutlineTest {
   @override
   bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_outline() {
+    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 39c4bb4..2cfb696 100644
--- a/pkg/analysis_server/test/integration/analysis/overrides_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/overrides_test.dart
@@ -126,4 +126,10 @@
 class OverridesTest_UseCFE extends OverridesTest {
   @override
   bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_overrides() {
+    return super.test_overrides();
+  }
 }
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 4411cc6..5cca2f0 100644
--- a/pkg/analysis_server/test/integration/analysis/package_root_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/package_root_test.dart
@@ -13,9 +13,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetAnalysisRootsTest);
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(SetAnalysisRootsTest_UseCFE);
+    defineReflectiveTests(SetAnalysisRootsTest_UseCFE);
   });
 }
 
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 2ee347d..0cb0424 100644
--- a/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart
@@ -55,4 +55,10 @@
 class ReanalyzeTest_UseCFE extends ReanalyzeTest {
   @override
   bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_reanalyze_concurrent() {
+    fail('This test crashes under the CFE');
+  }
 }
diff --git a/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart b/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart
index 319a4a4..27a4c81 100644
--- a/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart
@@ -44,4 +44,10 @@
 class ReanalyzeTest_UseCFE extends ReanalyzeTest {
   @override
   bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_reanalyze() {
+    fail('This test crashes under the CFE');
+  }
 }
diff --git a/pkg/analysis_server/test/integration/analysis/set_analysis_roots_test.dart b/pkg/analysis_server/test/integration/analysis/set_analysis_roots_test.dart
index f9ebcb0..dfbbe69 100644
--- a/pkg/analysis_server/test/integration/analysis/set_analysis_roots_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/set_analysis_roots_test.dart
@@ -36,4 +36,10 @@
 class SetAnalysisRootsTest_UseCFE extends SetAnalysisRootsTest {
   @override
   bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_options() {
+    return super.test_options();
+  }
 }
diff --git a/pkg/analysis_server/test/integration/analysis/set_general_subscriptions_test.dart b/pkg/analysis_server/test/integration/analysis/set_general_subscriptions_test.dart
index c75655b..bbd07a0 100644
--- a/pkg/analysis_server/test/integration/analysis/set_general_subscriptions_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/set_general_subscriptions_test.dart
@@ -46,4 +46,10 @@
 class SetGeneralSubscriptionsTest_UseCFE extends SetGeneralSubscriptionsTest {
   @override
   bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_options() {
+    fail('This test crashes under the CFE');
+  }
 }
diff --git a/pkg/analysis_server/test/integration/analysis/set_priority_files_test.dart b/pkg/analysis_server/test/integration/analysis/set_priority_files_test.dart
index 7d86706..64aeb6d 100644
--- a/pkg/analysis_server/test/integration/analysis/set_priority_files_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/set_priority_files_test.dart
@@ -34,4 +34,10 @@
 class SetPriorityFilesTest_UseCFE extends SetPriorityFilesTest {
   @override
   bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_options() {
+    fail('This test crashes under the CFE');
+  }
 }
diff --git a/pkg/analysis_server/test/integration/analysis/set_subscriptions_test.dart b/pkg/analysis_server/test/integration/analysis/set_subscriptions_test.dart
index 02dcd05..c1fcead 100644
--- a/pkg/analysis_server/test/integration/analysis/set_subscriptions_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/set_subscriptions_test.dart
@@ -36,4 +36,10 @@
 class SetSubscriptionsTest_UseCFE extends SetSubscriptionsTest {
   @override
   bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_subscriptions() {
+    return super.test_subscriptions();
+  }
 }
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 55e1e84..2c084a5 100644
--- a/pkg/analysis_server/test/integration/analysis/update_content_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/update_content_test.dart
@@ -11,9 +11,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UpdateContentTest);
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(UpdateContentTest_UseCFE);
+    defineReflectiveTests(UpdateContentTest_UseCFE);
   });
 }
 
@@ -112,4 +110,16 @@
 class UpdateContentTest_UseCFE extends UpdateContentTest {
   @override
   bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_updateContent() {
+    return super.test_updateContent();
+  }
+
+  @failingTest
+  @override
+  test_updateContent_multipleAdds() {
+    return super.test_updateContent_multipleAdds();
+  }
 }
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 dbdc7fa..b5087a9 100644
--- a/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
+++ b/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
@@ -12,9 +12,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetSuggestionsTest);
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(GetSuggestionsTest_UseCFE);
+    defineReflectiveTests(GetSuggestionsTest_UseCFE);
   });
 }
 
@@ -123,4 +121,22 @@
 class GetSuggestionsTest_UseCFE extends GetSuggestionsTest {
   @override
   bool get useCFE => true;
+
+  @override
+  @failingTest
+  test_getSuggestions() {
+    return super.test_getSuggestions();
+  }
+
+  @override
+  @failingTest
+  test_getSuggestions_onlyOverlay() {
+    return super.test_getSuggestions_onlyOverlay();
+  }
+
+  @override
+  @failingTest
+  test_getSuggestions_onlyOverlay_noWait() {
+    return super.test_getSuggestions_onlyOverlay_noWait();
+  }
 }
diff --git a/pkg/analysis_server/test/integration/edit/get_available_refactorings_test.dart b/pkg/analysis_server/test/integration/edit/get_available_refactorings_test.dart
index 0d359f6..260ab07 100644
--- a/pkg/analysis_server/test/integration/edit/get_available_refactorings_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_available_refactorings_test.dart
@@ -41,4 +41,10 @@
 class GetAvailableRefactoringsTest_UseCFE extends GetAvailableRefactoringsTest {
   @override
   bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_has_refactorings() {
+    return super.test_has_refactorings();
+  }
 }
diff --git a/pkg/analysis_server/test/integration/edit/get_fixes_test.dart b/pkg/analysis_server/test/integration/edit/get_fixes_test.dart
index c0e52b7..6fd7413 100644
--- a/pkg/analysis_server/test/integration/edit/get_fixes_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_fixes_test.dart
@@ -70,4 +70,10 @@
   @override
   @failingTest
   Future test_has_fixes() => super.test_has_fixes();
+
+  @failingTest
+  @override
+  test_no_fixes() {
+    fail('Test crashes with CFE');
+  }
 }
diff --git a/pkg/analysis_server/test/integration/edit/get_postfix_completion_test.dart b/pkg/analysis_server/test/integration/edit/get_postfix_completion_test.dart
index 842e443..7d7faba 100644
--- a/pkg/analysis_server/test/integration/edit/get_postfix_completion_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_postfix_completion_test.dart
@@ -12,9 +12,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetPostfixCompletionTest);
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(GetPostfixCompletionTest_UseCFE);
+    defineReflectiveTests(GetPostfixCompletionTest_UseCFE);
   });
 }
 
@@ -58,4 +56,10 @@
 class GetPostfixCompletionTest_UseCFE extends GetPostfixCompletionTest {
   @override
   bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_postfix_completion() {
+    return super.test_postfix_completion();
+  }
 }
diff --git a/pkg/analysis_server/test/integration/edit/import_elements_test.dart b/pkg/analysis_server/test/integration/edit/import_elements_test.dart
index da142fc..e565a1e 100644
--- a/pkg/analysis_server/test/integration/edit/import_elements_test.dart
+++ b/pkg/analysis_server/test/integration/edit/import_elements_test.dart
@@ -144,4 +144,22 @@
     extends AnalysisGetImportElementsIntegrationTest {
   @override
   bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_importElements_definingUnit() {
+    return super.test_importElements_definingUnit();
+  }
+
+  @failingTest
+  @override
+  test_importElements_noEdits() {
+    return super.test_importElements_noEdits();
+  }
+
+  @failingTest
+  @override
+  test_importElements_part() {
+    return super.test_importElements_part();
+  }
 }
diff --git a/pkg/analysis_server/test/integration/edit/is_postfix_completion_applicable_test.dart b/pkg/analysis_server/test/integration/edit/is_postfix_completion_applicable_test.dart
index 02025b9..4dbf569 100644
--- a/pkg/analysis_server/test/integration/edit/is_postfix_completion_applicable_test.dart
+++ b/pkg/analysis_server/test/integration/edit/is_postfix_completion_applicable_test.dart
@@ -11,9 +11,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(IsPostfixCompletionApplicableTest);
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(IsPostfixCompletionApplicableTest_UseCFE);
+    defineReflectiveTests(IsPostfixCompletionApplicableTest_UseCFE);
   });
 }
 
@@ -48,4 +46,10 @@
     extends IsPostfixCompletionApplicableTest {
   @override
   bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_is_postfix_completion_applicable() {
+    return super.test_is_postfix_completion_applicable();
+  }
 }
diff --git a/pkg/analysis_server/test/integration/edit/list_postfix_completion_templates_test.dart b/pkg/analysis_server/test/integration/edit/list_postfix_completion_templates_test.dart
index 6bb94c5..a9009c7 100644
--- a/pkg/analysis_server/test/integration/edit/list_postfix_completion_templates_test.dart
+++ b/pkg/analysis_server/test/integration/edit/list_postfix_completion_templates_test.dart
@@ -11,9 +11,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ListPostfixCompletionTemplatesTest);
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(ListPostfixCompletionTemplatesTest_UseCFE);
+    defineReflectiveTests(ListPostfixCompletionTemplatesTest_UseCFE);
   });
 }
 
@@ -48,4 +46,10 @@
     extends ListPostfixCompletionTemplatesTest {
   @override
   bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_list_postfix_completion_templates() {
+    fail('Test crashes with CFE');
+  }
 }
diff --git a/pkg/analysis_server/test/integration/edit/organize_directives_test.dart b/pkg/analysis_server/test/integration/edit/organize_directives_test.dart
index 3a9f686..a30d913 100644
--- a/pkg/analysis_server/test/integration/edit/organize_directives_test.dart
+++ b/pkg/analysis_server/test/integration/edit/organize_directives_test.dart
@@ -12,9 +12,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OrganizeDirectivesTest);
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(OrganizeDirectivesTest_UseCFE);
+    defineReflectiveTests(OrganizeDirectivesTest_UseCFE);
   });
 }
 
@@ -82,4 +80,22 @@
 class OrganizeDirectivesTest_UseCFE extends OrganizeDirectivesTest {
   @override
   bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_organize_directives() {
+    return super.test_organize_directives();
+  }
+
+  @failingTest
+  @override
+  test_organize_directives_no_changes() {
+    return super.test_organize_directives_no_changes();
+  }
+
+  @failingTest
+  @override
+  test_organize_directives_with_errors() {
+    return super.test_organize_directives_with_errors();
+  }
 }
diff --git a/pkg/analysis_server/test/integration/execution/delete_context_test.dart b/pkg/analysis_server/test/integration/execution/delete_context_test.dart
index 3cf0e19..07904fd 100644
--- a/pkg/analysis_server/test/integration/execution/delete_context_test.dart
+++ b/pkg/analysis_server/test/integration/execution/delete_context_test.dart
@@ -47,4 +47,10 @@
 class DeleteContextTest_UseCFE extends DeleteContextTest {
   @override
   bool get useCFE => true;
+
+  @override
+  @failingTest
+  test_delete() {
+    fail('Test crashes with CFE');
+  }
 }
diff --git a/pkg/analysis_server/test/integration/execution/map_uri_test.dart b/pkg/analysis_server/test/integration/execution/map_uri_test.dart
index 9990a23..d0c886c 100644
--- a/pkg/analysis_server/test/integration/execution/map_uri_test.dart
+++ b/pkg/analysis_server/test/integration/execution/map_uri_test.dart
@@ -44,4 +44,10 @@
 class MapUriTest_UseCFE extends MapUriTest {
   @override
   bool get useCFE => true;
+
+  @override
+  @failingTest
+  test_mapUri() {
+    fail('Test crashes with CFE');
+  }
 }
diff --git a/pkg/analysis_server/test/integration/kythe/get_kythe_entries_test.dart b/pkg/analysis_server/test/integration/kythe/get_kythe_entries_test.dart
index 823ac4d..234fd49 100644
--- a/pkg/analysis_server/test/integration/kythe/get_kythe_entries_test.dart
+++ b/pkg/analysis_server/test/integration/kythe/get_kythe_entries_test.dart
@@ -43,4 +43,10 @@
 class GetKytheEntriesTest_UseCFE extends GetKytheEntriesTest {
   @override
   bool get useCFE => true;
+
+  @override
+  @failingTest
+  test_getKytheEntries() {
+    return super.test_getKytheEntries();
+  }
 }
diff --git a/pkg/analysis_server/test/integration/search/find_element_references_test.dart b/pkg/analysis_server/test/integration/search/find_element_references_test.dart
index 3b7e1a0..4f1cdd7 100644
--- a/pkg/analysis_server/test/integration/search/find_element_references_test.dart
+++ b/pkg/analysis_server/test/integration/search/find_element_references_test.dart
@@ -13,9 +13,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FindElementReferencesTest);
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(FindElementReferencesTest_UseCFE);
+    defineReflectiveTests(FindElementReferencesTest_UseCFE);
   });
 }
 
@@ -81,6 +79,12 @@
 
   @override
   @failingTest
+  test_badTarget() {
+    fail('Test times out with CFE.');
+  }
+
+  @override
+  @failingTest
   // TODO(devoncarew): 'NoSuchMethodError: The getter 'source' was called on null'
   Future test_findReferences() => new Future.error('failing test');
 }
diff --git a/pkg/analysis_server/test/integration/search/find_member_declarations_test.dart b/pkg/analysis_server/test/integration/search/find_member_declarations_test.dart
index 28a8828..bdab78a 100644
--- a/pkg/analysis_server/test/integration/search/find_member_declarations_test.dart
+++ b/pkg/analysis_server/test/integration/search/find_member_declarations_test.dart
@@ -11,9 +11,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FindMemberDeclarationsTest);
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(FindMemberDeclarationsTest_UseCFE);
+    defineReflectiveTests(FindMemberDeclarationsTest_UseCFE);
   });
 }
 
@@ -57,4 +55,10 @@
 class FindMemberDeclarationsTest_UseCFE extends FindMemberDeclarationsTest {
   @override
   bool get useCFE => true;
+
+  @override
+  @failingTest
+  test_findMemberDeclarations() {
+    fail('Test times out with CFE.');
+  }
 }
diff --git a/pkg/analysis_server/test/integration/server/status_test.dart b/pkg/analysis_server/test/integration/server/status_test.dart
index de8e9b7..231aa4f 100644
--- a/pkg/analysis_server/test/integration/server/status_test.dart
+++ b/pkg/analysis_server/test/integration/server/status_test.dart
@@ -13,9 +13,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(StatusTest);
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(StatusTest_UseCFE);
+    defineReflectiveTests(StatusTest_UseCFE);
   });
 }
 
@@ -56,4 +54,10 @@
 class StatusTest_UseCFE extends StatusTest {
   @override
   bool get useCFE => true;
+
+  @override
+  @failingTest
+  test_status() {
+    fail('This test crashes CFE');
+  }
 }
diff --git a/pkg/analysis_server/test/integration/support/integration_tests.dart b/pkg/analysis_server/test/integration/support/integration_tests.dart
index 97527b1..418189d 100644
--- a/pkg/analysis_server/test/integration/support/integration_tests.dart
+++ b/pkg/analysis_server/test/integration/support/integration_tests.dart
@@ -711,9 +711,6 @@
     } else if (servicesPort != null) {
       arguments.add('--enable-vm-service=$servicesPort');
     }
-    if (Platform.packageRoot != null) {
-      arguments.add('--package-root=${Platform.packageRoot}');
-    }
     if (Platform.packageConfig != null) {
       arguments.add('--packages=${Platform.packageConfig}');
     }
@@ -741,9 +738,6 @@
     if (useCFE) {
       arguments.add('--use-cfe');
     }
-    // TODO(devoncarew): We could experiment with instead launching the analysis
-    // server in a separate isolate. This would make it easier to debug the
-    // integration tests, and would likely speed up the tests as well.
     _process = await Process.start(dartBinary, arguments);
     _process.exitCode.then((int code) {
       if (code != 0) {
diff --git a/pkg/analysis_server/test/services/correction/fix_test.dart b/pkg/analysis_server/test/services/correction/fix_test.dart
index 2a4974a..9845594 100644
--- a/pkg/analysis_server/test/services/correction/fix_test.dart
+++ b/pkg/analysis_server/test/services/correction/fix_test.dart
@@ -95,11 +95,6 @@
     expect(resultCode, expected);
   }
 
-  assertNoFix(FixKind kind) async {
-    AnalysisError error = await _findErrorToFix();
-    await _assertNoFix(kind, error);
-  }
-
   assertHasFixAllFix(ErrorCode errorCode, FixKind kind, String expected,
       {String target}) async {
     AnalysisError error = await _findErrorToFixOfType(errorCode);
@@ -121,6 +116,11 @@
     expect(resultCode, expected);
   }
 
+  assertNoFix(FixKind kind) async {
+    AnalysisError error = await _findErrorToFix();
+    await _assertNoFix(kind, error);
+  }
+
   List<LinkedEditSuggestion> expectedSuggestions(
       LinkedEditSuggestionKind kind, List<String> values) {
     return values.map((value) {
@@ -139,8 +139,8 @@
   Future<Fix> _assertHasFix(FixKind kind, AnalysisError error,
       {bool hasFixAllFix: false}) async {
     if (hasFixAllFix && !kind.canBeAppliedTogether()) {
-      fail(
-          'Expected to find and return fix-all FixKind for $kind, but kind.canBeAppliedTogether is ${kind.canBeAppliedTogether}');
+      fail('Expected to find and return fix-all FixKind for $kind, '
+          'but kind.canBeAppliedTogether is ${kind.canBeAppliedTogether}');
     }
 
     // Compute the fixes for this AnalysisError
@@ -148,35 +148,39 @@
 
     // If hasFixAllFix is false, assert that none of the fixes are a fix-all fix
     if (!hasFixAllFix) {
-      for (Fix f in fixes) {
-        if (f.isFixAllFix()) {
-          fail("The boolean hasFixAllFix is false, but such a fix was found in "
-              "the computed set of fixes: $fixes, error: $error.");
+      for (Fix fix in fixes) {
+        if (fix.isFixAllFix()) {
+          fail('The boolean hasFixAllFix is false, but such a fix was found '
+              'in the computed set of fixes: $fixes, error: $error.');
         }
       }
     }
     // If hasFixAllFix is true, assert that there exists such a fix in the list
     else {
       bool foundFixAllFix = false;
-      for (Fix f in fixes) {
-        if (f.isFixAllFix()) {
+      for (Fix fix in fixes) {
+        if (fix.isFixAllFix()) {
           foundFixAllFix = true;
           break;
         }
       }
       if (!foundFixAllFix) {
-        fail("The boolean hasFixAllFix is true, but no fix-all fix was found "
-            "in the computed set of fixes: $fixes, error: $error.");
+        fail('The boolean hasFixAllFix is true, but no fix-all fix was found '
+            'in the computed set of fixes: $fixes, error: $error.');
       }
     }
 
     Fix foundFix = null;
     if (!hasFixAllFix) {
-      foundFix =
-          fixes.firstWhere((fix) => fix.kind == kind && !fix.isFixAllFix());
+      foundFix = fixes.firstWhere(
+        (fix) => fix.kind == kind && !fix.isFixAllFix(),
+        orElse: () => null,
+      );
     } else {
-      foundFix =
-          fixes.lastWhere((fix) => fix.kind == kind && fix.isFixAllFix());
+      foundFix = fixes.lastWhere(
+        (fix) => fix.kind == kind && fix.isFixAllFix(),
+        orElse: () => null,
+      );
     }
     if (foundFix == null) {
       fail('Expected to find fix $kind in\n${fixes.join('\n')}, hasFixAllFix = '
@@ -2104,6 +2108,44 @@
     _assertLinkedGroup(change.linkedEditGroups[0], ['Test v =', 'Test {']);
   }
 
+  test_createClass_instanceCreation_withoutNew_fromFunction() async {
+    await resolveTestUnit('''
+main() {
+  Test ();
+}
+''');
+    await assertHasFix(DartFixKind.CREATE_CLASS, '''
+main() {
+  Test ();
+}
+
+class Test {
+}
+''');
+    _assertLinkedGroup(change.linkedEditGroups[0], ['Test ()', 'Test {']);
+  }
+
+  test_createClass_instanceCreation_withoutNew_fromMethod() async {
+    await resolveTestUnit('''
+class A {
+  main() {
+    Test ();
+  }
+}
+''');
+    await assertHasFix(DartFixKind.CREATE_CLASS, '''
+class A {
+  main() {
+    Test ();
+  }
+}
+
+class Test {
+}
+''');
+    _assertLinkedGroup(change.linkedEditGroups[0], ['Test ()', 'Test {']);
+  }
+
   test_createClass_itemOfList() async {
     await resolveTestUnit('''
 main() {
@@ -5476,36 +5518,6 @@
 ''');
   }
 
-  test_removeUnusedImport_anotherImportOnLine() async {
-    await resolveTestUnit('''
-import 'dart:math'; import 'dart:async';
-
-main() {
-  Future f;
-}
-''');
-    await assertHasFix(DartFixKind.REMOVE_UNUSED_IMPORT, '''
-import 'dart:async';
-
-main() {
-  Future f;
-}
-''');
-  }
-
-  test_removeUnusedImport_severalLines() async {
-    await resolveTestUnit('''
-import
-  'dart:math';
-main() {
-}
-''');
-    await assertHasFix(DartFixKind.REMOVE_UNUSED_IMPORT, '''
-main() {
-}
-''');
-  }
-
   test_removeUnusedImport_all() async {
     await resolveTestUnit('''
 import 'dart:math';
@@ -5571,6 +5583,36 @@
 ''');
   }
 
+  test_removeUnusedImport_anotherImportOnLine() async {
+    await resolveTestUnit('''
+import 'dart:math'; import 'dart:async';
+
+main() {
+  Future f;
+}
+''');
+    await assertHasFix(DartFixKind.REMOVE_UNUSED_IMPORT, '''
+import 'dart:async';
+
+main() {
+  Future f;
+}
+''');
+  }
+
+  test_removeUnusedImport_severalLines() async {
+    await resolveTestUnit('''
+import
+  'dart:math';
+main() {
+}
+''');
+    await assertHasFix(DartFixKind.REMOVE_UNUSED_IMPORT, '''
+main() {
+}
+''');
+  }
+
   test_replaceVarWithDynamic() async {
     errorFilter = (AnalysisError error) {
       return error.errorCode == ParserErrorCode.VAR_AS_TYPE_NAME;
diff --git a/pkg/analysis_server/test/services/refactoring/extract_local_test.dart b/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
index c6f022e..8eb5778 100644
--- a/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
@@ -1302,7 +1302,8 @@
   }
 
   void _createRefactoring(int offset, int length) {
-    refactoring = new ExtractLocalRefactoring(testUnit, offset, length);
+    refactoring =
+        new ExtractLocalRefactoring(testAnalysisResult, offset, length);
     refactoring.name = 'res';
   }
 
diff --git a/pkg/analysis_server/test/stress/utilities/server.dart b/pkg/analysis_server/test/stress/utilities/server.dart
index 8f7f3a3..0beb104 100644
--- a/pkg/analysis_server/test/stress/utilities/server.dart
+++ b/pkg/analysis_server/test/stress/utilities/server.dart
@@ -648,9 +648,6 @@
     } else if (servicesPort != null) {
       arguments.add('--enable-vm-service=$servicesPort');
     }
-    if (Platform.packageRoot != null) {
-      arguments.add('--package-root=${Platform.packageRoot}');
-    }
     if (Platform.packageConfig != null) {
       arguments.add('--packages=${Platform.packageConfig}');
     }
diff --git a/pkg/analysis_server/tool/instrumentation/server.dart b/pkg/analysis_server/tool/instrumentation/server.dart
index 64f77bb..558cac1 100644
--- a/pkg/analysis_server/tool/instrumentation/server.dart
+++ b/pkg/analysis_server/tool/instrumentation/server.dart
@@ -102,7 +102,9 @@
    */
   void serveHttp(int port) {
     _server = HttpServer.bind(InternetAddress.loopbackIPv4, port);
-    _server.then(_handleServer).catchError((_) {/* Ignore errors. */});
+    _server.then(_handleServer).catchError((_) {
+      /* Ignore errors. */
+    });
   }
 
   /**
@@ -127,7 +129,7 @@
       return;
     } catch (exception, stackTrace) {
       HttpResponse response = request.response;
-      response.statusCode = HttpStatus.OK;
+      response.statusCode = HttpStatus.ok;
       response.headers.contentType = _htmlContent;
       StringBuffer buffer = new StringBuffer();
       buffer.write('<p><b>Exception while composing page:</b></p>');
@@ -141,7 +143,7 @@
     }
 
     HttpResponse response = request.response;
-    response.statusCode = HttpStatus.OK;
+    response.statusCode = HttpStatus.ok;
     response.headers.contentType = _htmlContent;
     response.write(buffer.toString());
     response.close();
@@ -176,11 +178,11 @@
    */
   void _returnUnknownRequest(HttpRequest request) {
     HttpResponse response = request.response;
-    response.statusCode = HttpStatus.NOT_FOUND;
+    response.statusCode = HttpStatus.notFound;
     response.headers.contentType =
         new ContentType("text", "html", charset: "utf-8");
-    response.write(
-        '<html><head></head><body><h3>Page not found: "${request.uri.path}".</h3></body></html>');
+    response.write('<html><head></head><body><h3>Page not found: "${request.uri
+            .path}".</h3></body></html>');
     response.close();
   }
 
diff --git a/pkg/analyzer/lib/dart/analysis/analysis_context_collection.dart b/pkg/analyzer/lib/dart/analysis/analysis_context_collection.dart
new file mode 100644
index 0000000..bc5e6c5
--- /dev/null
+++ b/pkg/analyzer/lib/dart/analysis/analysis_context_collection.dart
@@ -0,0 +1,30 @@
+// Copyright (c) 2018, 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/analysis/analysis_context.dart';
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/src/dart/analysis/analysis_context_collection.dart';
+import 'package:meta/meta.dart';
+
+/// A collection of analysis contexts.
+///
+/// Clients may not extend, implement or mix-in this class.
+abstract class AnalysisContextCollection {
+  /// Initialize a newly created collection of analysis contexts that can
+  /// analyze the files that are included by the list of [includedPaths].
+  ///
+  /// All paths must be absolute and normalized.
+  ///
+  /// If a [resourceProvider] is given, then it will be used to access the file
+  /// system, otherwise the default resource provider will be used.
+  factory AnalysisContextCollection({
+    @required List<String> includedPaths,
+    ResourceProvider resourceProvider,
+  }) = AnalysisContextCollectionImpl;
+
+  /// Return the existing [AnalysisContext] that should be used to analyze
+  /// the given [path], or throw [StateError] if the [path] is not analyzed
+  /// in any of the created analysis contexts.
+  AnalysisContext contextFor(String path);
+}
diff --git a/pkg/analyzer/lib/file_system/overlay_file_system.dart b/pkg/analyzer/lib/file_system/overlay_file_system.dart
new file mode 100644
index 0000000..666e5722
--- /dev/null
+++ b/pkg/analyzer/lib/file_system/overlay_file_system.dart
@@ -0,0 +1,422 @@
+// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:core';
+
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/src/generated/source_io.dart';
+import 'package:analyzer/src/source/source_resource.dart';
+import 'package:meta/meta.dart';
+import 'package:path/path.dart' as pathos;
+import 'package:watcher/watcher.dart';
+
+/**
+ * A resource provider that allows clients to overlay the file system provided
+ * by a base resource provider. These overlays allow both the contents and
+ * modification stamps of files to be different than what the base resource
+ * provider would report.
+ *
+ * This provider does not report watch events when overlays are added, modified
+ * or removed.
+ */
+class OverlayResourceProvider implements ResourceProvider {
+  /**
+   * The underlying resource provider used to access files and folders that
+   * do not have an overlay.
+   */
+  final ResourceProvider baseProvider;
+
+  /**
+   * A map from the paths of files for which there is an overlay to the contents
+   * of the files.
+   */
+  final Map<String, String> _overlayContent = <String, String>{};
+
+  /**
+   * A map from the paths of files for which there is an overlay to the
+   * modification stamps of the files.
+   */
+  final Map<String, int> _overlayModificationStamps = <String, int>{};
+
+  /**
+   * Initialize a newly created resource provider to represent an overlay on the
+   * given [baseProvider].
+   */
+  OverlayResourceProvider(this.baseProvider);
+
+  @override
+  pathos.Context get pathContext => baseProvider.pathContext;
+
+  @override
+  File getFile(String path) =>
+      new _OverlayFile(this, baseProvider.getFile(path));
+
+  @override
+  Folder getFolder(String path) =>
+      new _OverlayFolder(this, baseProvider.getFolder(path));
+
+  @override
+  Future<List<int>> getModificationTimes(List<Source> sources) async {
+    // TODO(brianwilkerson) Determine whether this await is necessary.
+    await null;
+    return sources.map((source) {
+      String path = source.fullName;
+      return _overlayModificationStamps[path] ??
+          baseProvider.getFile(path).modificationStamp;
+    }).toList();
+  }
+
+  @override
+  Resource getResource(String path) {
+    return new _OverlayResource._from(this, baseProvider.getResource(path));
+  }
+
+  @override
+  Folder getStateLocation(String pluginId) =>
+      new _OverlayFolder(this, baseProvider.getStateLocation(pluginId));
+
+  /**
+   * Remove any overlay of the file at the given [path]. The state of the file
+   * in the base resource provider will not be affected.
+   */
+  bool removeOverlay(String path) {
+    bool hadOverlay = _overlayContent.containsKey(path);
+    _overlayContent.remove(path);
+    _overlayModificationStamps.remove(path);
+    return hadOverlay;
+  }
+
+  /**
+   * Overlay the content of the file at the given [path]. The file will appear
+   * to have the given [content] and [modificationStamp] even if the file is
+   * modified in the base resource provider.
+   */
+  void setOverlay(String path,
+      {@required String content, @required int modificationStamp}) {
+    if (content == null) {
+      throw new ArgumentError(
+          'OverlayResourceProvider.setOverlay: content cannot be null');
+    } else if (modificationStamp == null) {
+      throw new ArgumentError(
+          'OverlayResourceProvider.setOverlay: modificationStamp cannot be null');
+    }
+    _overlayContent[path] = content;
+    _overlayModificationStamps[path] = modificationStamp;
+  }
+
+  /**
+   * Copy any overlay for the file at the [oldPath] to be an overlay for the
+   * file with the [newPath].
+   */
+  void _copyOverlay(String oldPath, String newPath) {
+    if (_hasOverlay(oldPath)) {
+      _overlayContent[newPath] = _overlayContent[oldPath];
+      _overlayModificationStamps[newPath] = _overlayModificationStamps[oldPath];
+    }
+  }
+
+  /**
+   * Return the content of the overlay of the file at the given [path], or
+   * `null` if there is no overlay for the specified file.
+   */
+  String _getOverlayContent(String path) {
+    return _overlayContent[path];
+  }
+
+  /**
+   * Return the modification stamp of the overlay of the file at the given
+   * [path], or `null` if there is no overlay for the specified file.
+   */
+  int _getOverlayModificationStamp(String path) {
+    return _overlayModificationStamps[path];
+  }
+
+  /**
+   * Return `true` if there is an overlay associated with the file at the given
+   * [path].
+   */
+  bool _hasOverlay(String path) => _overlayContent.containsKey(path);
+
+  /**
+   * Return the paths of all of the overlaid files that are immediate children
+   * of the given [folder].
+   */
+  Iterable<String> _overlaysInFolder(Folder folder) {
+    String folderPath = folder.path;
+    return _overlayContent.keys
+        .where((path) => pathContext.dirname(path) == folderPath);
+  }
+}
+
+/**
+ * A file from an [OverlayResourceProvider].
+ */
+class _OverlayFile extends _OverlayResource implements File {
+  /**
+   * Initialize a newly created file to have the given [provider] and to
+   * correspond to the given [file] from the provider's base resource provider.
+   */
+  _OverlayFile(OverlayResourceProvider provider, File file)
+      : super(provider, file);
+
+  @override
+  Stream<WatchEvent> get changes => _file.changes;
+
+  @override
+  bool get exists => _provider._hasOverlay(path) || _resource.exists;
+
+  @override
+  int get lengthSync {
+    String content = _provider._getOverlayContent(path);
+    if (content != null) {
+      return content.length;
+    }
+    return _file.lengthSync;
+  }
+
+  @override
+  int get modificationStamp {
+    int stamp = _provider._getOverlayModificationStamp(path);
+    if (stamp != null) {
+      return stamp;
+    }
+    return _file.modificationStamp;
+  }
+
+  /**
+   * Return the file from the base resource provider that corresponds to this
+   * folder.
+   */
+  File get _file => _resource as File;
+
+  @override
+  File copyTo(Folder parentFolder) {
+    String newPath = _provider.pathContext.join(parentFolder.path, shortName);
+    _provider._copyOverlay(path, newPath);
+    if (_file.exists) {
+      if (parentFolder is _OverlayFolder) {
+        return new _OverlayFile(_provider, _file.copyTo(parentFolder._folder));
+      }
+      return new _OverlayFile(_provider, _file.copyTo(parentFolder));
+    } else {
+      return new _OverlayFile(
+          _provider, _provider.baseProvider.getFile(newPath));
+    }
+  }
+
+  @override
+  Source createSource([Uri uri]) =>
+      new FileSource(this, uri ?? _provider.pathContext.toUri(path));
+
+  @override
+  void delete() {
+    bool hadOverlay = _provider.removeOverlay(path);
+    if (_resource.exists) {
+      _resource.delete();
+    } else if (!hadOverlay) {
+      throw new FileSystemException(path, 'does not exist');
+    }
+  }
+
+  @override
+  List<int> readAsBytesSync() {
+    String content = _provider._getOverlayContent(path);
+    if (content != null) {
+      return content.codeUnits;
+    }
+    return _file.readAsBytesSync();
+  }
+
+  @override
+  String readAsStringSync() {
+    String content = _provider._getOverlayContent(path);
+    if (content != null) {
+      return content;
+    }
+    return _file.readAsStringSync();
+  }
+
+  @override
+  File renameSync(String newPath) {
+    File newFile = _file.renameSync(newPath);
+    if (_provider._hasOverlay(path)) {
+      _provider.setOverlay(newPath,
+          content: _provider._getOverlayContent(path),
+          modificationStamp: _provider._getOverlayModificationStamp(path));
+      _provider.removeOverlay(path);
+    }
+    return new _OverlayFile(_provider, newFile);
+  }
+
+  @override
+  void writeAsBytesSync(List<int> bytes) {
+    writeAsStringSync(new String.fromCharCodes(bytes));
+  }
+
+  @override
+  void writeAsStringSync(String content) {
+    if (_provider._hasOverlay(path)) {
+      throw new FileSystemException(
+          path, 'Cannot write a file with an overlay');
+    }
+    _file.writeAsStringSync(content);
+  }
+}
+
+/**
+ * A folder from an [OverlayResourceProvider].
+ */
+class _OverlayFolder extends _OverlayResource implements Folder {
+  /**
+   * Initialize a newly created folder to have the given [provider] and to
+   * correspond to the given [folder] from the provider's base resource
+   * provider.
+   */
+  _OverlayFolder(OverlayResourceProvider provider, Folder folder)
+      : super(provider, folder);
+
+  @override
+  Stream<WatchEvent> get changes => _folder.changes;
+
+  @override
+  bool get exists => _resource.exists;
+
+  /**
+   * Return the folder from the base resource provider that corresponds to this
+   * folder.
+   */
+  Folder get _folder => _resource as Folder;
+
+  @override
+  String canonicalizePath(String relPath) {
+    pathos.Context context = _provider.pathContext;
+    relPath = context.normalize(relPath);
+    String childPath = context.join(path, relPath);
+    childPath = context.normalize(childPath);
+    return childPath;
+  }
+
+  @override
+  bool contains(String path) => _folder.contains(path);
+
+  @override
+  Folder copyTo(Folder parentFolder) {
+    Folder destination = parentFolder.getChildAssumingFolder(shortName);
+    destination.create();
+    for (Resource child in getChildren()) {
+      child.copyTo(destination);
+    }
+    return destination;
+  }
+
+  @override
+  void create() {
+    _folder.create();
+  }
+
+  @override
+  Resource getChild(String relPath) =>
+      new _OverlayResource._from(_provider, _folder.getChild(relPath));
+
+  @override
+  File getChildAssumingFile(String relPath) =>
+      new _OverlayFile(_provider, _folder.getChildAssumingFile(relPath));
+
+  @override
+  Folder getChildAssumingFolder(String relPath) =>
+      new _OverlayFolder(_provider, _folder.getChildAssumingFolder(relPath));
+
+  @override
+  List<Resource> getChildren() {
+    List<Resource> children = _folder
+        .getChildren()
+        .map((child) => new _OverlayResource._from(_provider, child))
+        .toList();
+    for (String overlayPath in _provider._overlaysInFolder(this)) {
+      children.add(_provider.getFile(overlayPath));
+    }
+    return children;
+  }
+}
+
+/**
+ * The base class for resources from an [OverlayResourceProvider].
+ */
+abstract class _OverlayResource implements Resource {
+  /**
+   * The resource provider associated with this resource.
+   */
+  final OverlayResourceProvider _provider;
+
+  /**
+   * The resource from the provider's base provider that corresponds to this
+   * resource.
+   */
+  final Resource _resource;
+
+  /**
+   * Initialize a newly created instance of a resource to have the given
+   * [_provider] and to represent the [_resource] from the provider's base
+   * resource provider.
+   */
+  _OverlayResource(this._provider, this._resource);
+
+  /**
+   * Return an instance of the subclass of this class corresponding to the given
+   * [resource] that is associated with the given [provider].
+   */
+  factory _OverlayResource._from(
+      OverlayResourceProvider provider, Resource resource) {
+    if (resource is Folder) {
+      return new _OverlayFolder(provider, resource);
+    } else if (resource is File) {
+      return new _OverlayFile(provider, resource);
+    }
+    throw new ArgumentError('Unknown resource type: ${resource.runtimeType}');
+  }
+
+  @override
+  int get hashCode => path.hashCode;
+
+  @override
+  Folder get parent {
+    Folder parent = _resource.parent;
+    if (parent == null) {
+      return null;
+    }
+    return new _OverlayFolder(_provider, parent);
+  }
+
+  @override
+  String get path => _resource.path;
+
+  @override
+  String get shortName => _resource.shortName;
+
+  @override
+  bool operator ==(other) {
+    if (runtimeType != other.runtimeType) {
+      return false;
+    }
+    return path == other.path;
+  }
+
+  @override
+  void delete() {
+    _resource.delete();
+  }
+
+  @override
+  bool isOrContains(String path) {
+    return _resource.isOrContains(path);
+  }
+
+  @override
+  Resource resolveSymbolicLinksSync() => new _OverlayResource._from(
+      _provider, _resource.resolveSymbolicLinksSync());
+
+  @override
+  Uri toUri() => _resource.toUri();
+}
diff --git a/pkg/analyzer/lib/src/command_line/arguments.dart b/pkg/analyzer/lib/src/command_line/arguments.dart
index 263d250..a0a3140 100644
--- a/pkg/analyzer/lib/src/command_line/arguments.dart
+++ b/pkg/analyzer/lib/src/command_line/arguments.dart
@@ -27,7 +27,6 @@
 const String implicitCastsFlag = 'implicit-casts';
 const String lintsFlag = 'lints';
 const String noImplicitDynamicFlag = 'no-implicit-dynamic';
-const String packageDefaultAnalysisOptions = 'package-default-analysis-options';
 const String packageRootOption = 'package-root';
 const String packagesOption = 'packages';
 const String sdkPathOption = 'dart-sdk';
@@ -94,11 +93,6 @@
   builderOptions.defaultPackageFilePath = args[packagesOption];
   builderOptions.defaultPackagesDirectoryPath = args[packageRootOption];
   //
-  // Flags.
-  //
-  builderOptions.packageDefaultAnalysisOptions =
-      args[packageDefaultAnalysisOptions];
-  //
   // Analysis options.
   //
   AnalysisOptionsImpl defaultOptions = new AnalysisOptionsImpl();
@@ -200,17 +194,6 @@
       help: 'Define environment variables. For example, "-Dfoo=bar" defines an '
           'environment variable named "foo" whose value is "bar".',
       hide: hide);
-  parser.addFlag(packageDefaultAnalysisOptions,
-      help: 'If an analysis options file is not explicitly specified '
-          'via the "--$analysisOptionsFileOption" option\n'
-          'and an analysis options file cannot be found '
-          'in the project directory or any parent directory,\n'
-          'then look for analysis options in the following locations:\n'
-          '- $flutterAnalysisOptionsPath\n'
-          '- $bazelAnalysisOptionsPath',
-      defaultsTo: true,
-      negatable: true,
-      hide: hide);
   parser.addOption(packagesOption,
       help: 'The path to the package resolution configuration file, which '
           'supplies a mapping of package names\nto paths. This option cannot be '
diff --git a/pkg/analyzer/lib/src/context/builder.dart b/pkg/analyzer/lib/src/context/builder.dart
index e967809..e346ba6 100644
--- a/pkg/analyzer/lib/src/context/builder.dart
+++ b/pkg/analyzer/lib/src/context/builder.dart
@@ -452,28 +452,26 @@
         verbose('Exception: $e\n  when loading ${optionsFile.path}');
       }
     } else {
-      // Search for the default analysis options
-      // unless explicitly directed not to do so.
+      // Search for the default analysis options.
+      // TODO(danrubel) determine if bazel or gn project depends upon flutter
       Source source;
-      if (builderOptions.packageDefaultAnalysisOptions) {
-        // TODO(danrubel) determine if bazel or gn project depends upon flutter
-        if (workspace.hasFlutterDependency) {
-          source = sourceFactory.forUri(flutterAnalysisOptionsPath);
-        }
-        if (source == null || !source.exists()) {
-          source = sourceFactory.forUri(bazelAnalysisOptionsPath);
-        }
-        if (source != null && source.exists()) {
-          try {
-            optionMap = optionsProvider.getOptionsFromSource(source);
-            if (contextRoot != null) {
-              contextRoot.optionsFilePath = source.fullName;
-            }
-            verbose('Loaded analysis options from ${source.fullName}');
-          } catch (e) {
-            // Ignore exceptions thrown while trying to load the options file.
-            verbose('Exception: $e\n  when loading ${source.fullName}');
+      if (workspace.hasFlutterDependency) {
+        source = sourceFactory.forUri(flutterAnalysisOptionsPath);
+      }
+      if (source == null || !source.exists()) {
+        source = sourceFactory.forUri(bazelAnalysisOptionsPath);
+      }
+
+      if (source != null && source.exists()) {
+        try {
+          optionMap = optionsProvider.getOptionsFromSource(source);
+          if (contextRoot != null) {
+            contextRoot.optionsFilePath = source.fullName;
           }
+          verbose('Loaded analysis options from ${source.fullName}');
+        } catch (e) {
+          // Ignore exceptions thrown while trying to load the options file.
+          verbose('Exception: $e\n  when loading ${source.fullName}');
         }
       }
     }
@@ -693,11 +691,6 @@
   String defaultPackagesDirectoryPath;
 
   /**
-   * Allow Flutter and bazel default analysis options to be used.
-   */
-  bool packageDefaultAnalysisOptions = true;
-
-  /**
    * Initialize a newly created set of options
    */
   ContextBuilderOptions();
diff --git a/pkg/analyzer/lib/src/dart/analysis/analysis_context_collection.dart b/pkg/analyzer/lib/src/dart/analysis/analysis_context_collection.dart
new file mode 100644
index 0000000..428a48c
--- /dev/null
+++ b/pkg/analyzer/lib/src/dart/analysis/analysis_context_collection.dart
@@ -0,0 +1,78 @@
+// Copyright (c) 2018, 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/analysis/analysis_context.dart';
+import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
+import 'package:analyzer/dart/analysis/context_builder.dart';
+import 'package:analyzer/dart/analysis/context_locator.dart';
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/file_system/physical_file_system.dart';
+import 'package:meta/meta.dart';
+
+/// An implementation of [AnalysisContextCollection].
+class AnalysisContextCollectionImpl implements AnalysisContextCollection {
+  /// The resource provider used to access the file system.
+  final ResourceProvider resourceProvider;
+
+  /// The list of analysis contexts.
+  final List<AnalysisContext> contexts = [];
+
+  /// Initialize a newly created analysis context manager.
+  AnalysisContextCollectionImpl({
+    @required List<String> includedPaths,
+    ResourceProvider resourceProvider,
+    String sdkPath,
+  }) : resourceProvider =
+            resourceProvider ?? PhysicalResourceProvider.INSTANCE {
+    _throwIfAnyNotAbsoluteNormalizedPath(includedPaths);
+    if (sdkPath != null) {
+      _throwIfNotAbsoluteNormalizedPath(sdkPath);
+    }
+
+    var contextLocator = new ContextLocator(
+      resourceProvider: this.resourceProvider,
+    );
+    var roots = contextLocator.locateRoots(includedPaths: includedPaths);
+    for (var root in roots) {
+      var contextBuilder = new ContextBuilder(
+        resourceProvider: this.resourceProvider,
+      );
+      var context = contextBuilder.createContext(
+        contextRoot: root,
+        sdkPath: sdkPath,
+      );
+      contexts.add(context);
+    }
+  }
+
+  @override
+  AnalysisContext contextFor(String path) {
+    _throwIfNotAbsoluteNormalizedPath(path);
+
+    for (var context in contexts) {
+      if (context.contextRoot.isAnalyzed(path)) {
+        return context;
+      }
+    }
+
+    throw new StateError('Unable to find the context to $path');
+  }
+
+  /// Check every element with [_throwIfNotAbsoluteNormalizedPath].
+  void _throwIfAnyNotAbsoluteNormalizedPath(List<String> paths) {
+    for (var path in paths) {
+      _throwIfNotAbsoluteNormalizedPath(path);
+    }
+  }
+
+  /// The driver supports only absolute normalized paths, this method is used
+  /// to validate any input paths to prevent errors later.
+  void _throwIfNotAbsoluteNormalizedPath(String path) {
+    var pathContext = resourceProvider.pathContext;
+    if (!pathContext.isAbsolute(path) || pathContext.normalize(path) != path) {
+      throw new ArgumentError(
+          'Only absolute normalized paths are supported: $path');
+    }
+  }
+}
diff --git a/pkg/analyzer/lib/src/dart/analysis/context_root.dart b/pkg/analyzer/lib/src/dart/analysis/context_root.dart
index 463b9f6..349da1b 100644
--- a/pkg/analyzer/lib/src/dart/analysis/context_root.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/context_root.dart
@@ -103,7 +103,7 @@
     }
     for (String excludedPath in excludedPaths) {
       if (context.isAbsolute(excludedPath)) {
-        if (context.isWithin(excludedPath, path)) {
+        if (path == excludedPath || context.isWithin(excludedPath, path)) {
           return true;
         }
       } else {
@@ -127,7 +127,7 @@
   bool _isIncluded(String path) {
     Context context = resourceProvider.pathContext;
     for (String includedPath in includedPaths) {
-      if (context.isWithin(includedPath, path)) {
+      if (path == includedPath || context.isWithin(includedPath, path)) {
         return true;
       }
     }
diff --git a/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart b/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart
index 8cfdda3..ff4bb12 100644
--- a/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart
@@ -4,6 +4,7 @@
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/dart/analysis/file_state.dart';
 import 'package:analyzer/src/dart/analysis/kernel_metadata.dart';
+import 'package:analyzer/src/fasta/resolution_storer.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
@@ -26,6 +27,7 @@
 import 'package:front_end/src/fasta/source/stack_listener.dart';
 import 'package:front_end/src/fasta/target_implementation.dart';
 import 'package:front_end/src/fasta/type_inference/type_inference_engine.dart';
+import 'package:front_end/src/fasta/type_inference/type_inference_listener.dart';
 import 'package:front_end/src/fasta/uri_translator.dart';
 import 'package:front_end/src/fasta/uri_translator_impl.dart';
 import 'package:kernel/class_hierarchy.dart';
@@ -39,31 +41,7 @@
 
 /// Resolution information in a single function body.
 class CollectedResolution {
-  /// The list of local declarations stored by body builders while
-  /// compiling the library.
-  final List<TreeNode> kernelDeclarations = [];
-
-  /// The list of references to local or external stored by body builders
-  /// while compiling the library.
-  final List<Node> kernelReferences = [];
-
-  /// The list of types stored by body builders while compiling the library.
-  final List<DartType> kernelTypes = [];
-
-  /// File offsets corresponding to the declarations in [kernelDeclarations].
-  ///
-  /// These are used strictly for validation purposes.
-  final List<int> declarationOffsets = [];
-
-  /// File offsets corresponding to the objects in [kernelReferences].
-  ///
-  /// These are used strictly for validation purposes.
-  final List<int> referenceOffsets = [];
-
-  /// File offsets corresponding to the types in [kernelTypes].
-  ///
-  /// These are used strictly for validation purposes.
-  final List<int> typeOffsets = [];
+  final Map<int, ResolutionData<DartType, int, Node, int>> kernelData = {};
 }
 
 /// The compilation result for a single file.
@@ -399,7 +377,9 @@
 
   StackListener createListener(
       ModifierBuilder builder, Scope memberScope, bool isInstanceMember,
-      [Scope formalParameterScope]) {
+      [Scope formalParameterScope,
+      TypeInferenceListener<int, int, Node, int> listener]) {
+    ResolutionStorer<int, int, Node, int> storer;
     var fileResolutions = _resolutions[builder.fileUri];
     if (fileResolutions == null) {
       fileResolutions = <CollectedResolution>[];
@@ -407,8 +387,9 @@
     }
     var resolution = new CollectedResolution();
     fileResolutions.add(resolution);
+    storer = new ResolutionStorer<int, int, Node, int>(resolution.kernelData);
     return super.createListener(
-        builder, memberScope, isInstanceMember, formalParameterScope);
+        builder, memberScope, isInstanceMember, formalParameterScope, storer);
   }
 }
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index a9090d2..c58b12b 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:async';
-import 'dart:collection';
 
 import 'package:analyzer/dart/analysis/declared_variables.dart';
 import 'package:analyzer/dart/ast/ast.dart';
@@ -21,7 +20,6 @@
 import 'package:analyzer/src/dart/constant/utilities.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/handle.dart';
-import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/error/pending_error.dart';
 import 'package:analyzer/src/fasta/error_converter.dart';
@@ -32,7 +30,6 @@
 import 'package:analyzer/src/generated/error_verifier.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer/src/kernel/resynthesize.dart';
 import 'package:analyzer/src/lint/linter.dart';
 import 'package:analyzer/src/lint/linter_visitor.dart';
@@ -452,10 +449,10 @@
   /// Create a new [ResolutionApplier] for the given front-end [resolution].
   /// The [context] element is used to associate synthetic elements and access
   /// type parameters from the enclosing scopes.
-  ResolutionApplier _createResolutionApplier(
-      ElementImpl context, CollectedResolution resolution) {
-    return new _ResolutionApplierContext(
-            _resynthesizer, _typeProvider, _libraryElement, resolution, context)
+  ResolutionApplier _createResolutionApplier(ElementImpl context,
+      CollectedResolution resolution, Map<int, AstNode> localDeclarations) {
+    return new _ResolutionApplierContext(_resynthesizer, _typeProvider,
+            _libraryElement, resolution, context, localDeclarations)
         .applier;
   }
 
@@ -738,24 +735,26 @@
     }
   }
 
-  void _resolveFile2(
-      FileState file, CompilationUnit unit, _ResolutionProvider resolutions) {
+  void _resolveFile2(FileState file, CompilationUnitImpl unit,
+      _ResolutionProvider resolutions) {
     CompilationUnitElement unitElement = unit.element;
     new DeclarationResolver(enableKernelDriver: true, applyKernelTypes: true)
         .resolve(unit, unitElement);
 
-    if (_libraryElement.context.analysisOptions.previewDart2) {
-      unit.accept(new AstRewriteVisitor(_context.typeSystem, _libraryElement,
-          file.source, _typeProvider, AnalysisErrorListener.NULL_LISTENER));
-    }
+    // TODO(paulberry): need to find a better way to do this.
+    // See dartbug.com/33506.
+//    if (_libraryElement.context.analysisOptions.previewDart2) {
+//      unit.accept(new AstRewriteVisitor(_context.typeSystem, _libraryElement,
+//          file.source, _typeProvider, AnalysisErrorListener.NULL_LISTENER));
+//    }
 
     for (var declaration in unit.declarations) {
       if (declaration is ClassDeclaration) {
         if (declaration.metadata.isNotEmpty) {
           var resolution = resolutions.next();
-          var applier = _createResolutionApplier(null, resolution);
+          var applier = _createResolutionApplier(
+              null, resolution, unit.localDeclarations);
           applier.applyToAnnotations(declaration);
-          applier.checkDone();
         }
         for (var member in declaration.members) {
           if (member is ConstructorDeclaration) {
@@ -774,31 +773,31 @@
               // TODO(scheglov) Add support for type parameterized redirects.
             } else {
               var resolution = resolutions.next();
-              var applier = _createResolutionApplier(context, resolution);
+              var applier = _createResolutionApplier(
+                  context, resolution, unit.localDeclarations);
               member.initializers.accept(applier);
               member.parameters.accept(applier);
               member.body.accept(applier);
               applier.applyToAnnotations(member);
-              applier.checkDone();
             }
           } else if (member is FieldDeclaration) {
             List<VariableDeclaration> fields = member.fields.variables;
             var context = fields[0].element as ElementImpl;
             var resolution = resolutions.next();
-            var applier = _createResolutionApplier(context, resolution);
+            var applier = _createResolutionApplier(
+                context, resolution, unit.localDeclarations);
             for (var field in fields.reversed) {
               field.initializer?.accept(applier);
             }
             applier.applyToAnnotations(member);
-            applier.checkDone();
           } else if (member is MethodDeclaration) {
             ExecutableElementImpl context = member.element;
             var resolution = resolutions.next();
-            var applier = _createResolutionApplier(context, resolution);
+            var applier = _createResolutionApplier(
+                context, resolution, unit.localDeclarations);
             member.parameters?.accept(applier);
             member.body.accept(applier);
             applier.applyToAnnotations(member);
-            applier.checkDone();
           } else {
             throw new StateError('(${declaration.runtimeType}) $declaration');
           }
@@ -810,11 +809,11 @@
       } else if (declaration is FunctionDeclaration) {
         var context = declaration.element as ExecutableElementImpl;
         var resolution = resolutions.next();
-        var applier = _createResolutionApplier(context, resolution);
+        var applier = _createResolutionApplier(
+            context, resolution, unit.localDeclarations);
         declaration.functionExpression.parameters?.accept(applier);
         declaration.functionExpression.body.accept(applier);
         applier.applyToAnnotations(declaration);
-        applier.checkDone();
       } else if (declaration is FunctionTypeAlias) {
         // No bodies to resolve.
       } else if (declaration is GenericTypeAlias) {
@@ -823,12 +822,12 @@
         List<VariableDeclaration> variables = declaration.variables.variables;
         var context = variables[0].element as ElementImpl;
         var resolution = resolutions.next();
-        var applier = _createResolutionApplier(context, resolution);
+        var applier = _createResolutionApplier(
+            context, resolution, unit.localDeclarations);
         for (var variable in variables.reversed) {
           variable.initializer?.accept(applier);
         }
         applier.applyToAnnotations(declaration);
-        applier.checkDone();
       } else {
         throw new StateError('(${declaration.runtimeType}) $declaration');
       }
@@ -1039,6 +1038,7 @@
   final TypeProvider typeProvider;
   final LibraryElement libraryElement;
   final CollectedResolution resolution;
+  final Map<int, AstNode> localDeclarations;
 
   @override
   ClassElement enclosingClassElement;
@@ -1046,17 +1046,15 @@
   List<ElementImpl> contextStack = [];
   ElementImpl context;
 
-  List<Element> declaredElements = [];
-  Map<kernel.TreeNode, Element> declarationToElement = new HashMap.identity();
-  Map<FunctionElementImpl, kernel.TreeNode> functionElementToDeclaration =
-      new HashMap.identity();
-  Map<ParameterElementImpl, kernel.VariableDeclaration>
-      parameterElementToDeclaration = new HashMap.identity();
-
   ResolutionApplier applier;
 
-  _ResolutionApplierContext(this.resynthesizer, this.typeProvider,
-      this.libraryElement, this.resolution, this.context) {
+  _ResolutionApplierContext(
+      this.resynthesizer,
+      this.typeProvider,
+      this.libraryElement,
+      this.resolution,
+      this.context,
+      this.localDeclarations) {
     for (Element element = context;
         element != null;
         element = element.enclosingElement) {
@@ -1066,108 +1064,30 @@
       }
     }
 
-    // Convert local declarations into elements.
-    for (var declaredNode in resolution.kernelDeclarations) {
-      translateKernelDeclaration(declaredNode);
-    }
-
     // Convert referenced nodes into elements.
-    List<Element> referencedElements = [];
-    for (var referencedNode in resolution.kernelReferences) {
-      Element element;
-      if (referencedNode is kernel.VariableDeclaration) {
-        kernel.TreeNode parent = referencedNode.parent;
-        if (parent is kernel.Statement) {
-          element = declarationToElement[referencedNode];
-        } else {
-          assert(parent is kernel.FunctionNode || parent is kernel.Catch);
-          // Might be a parameter of a local function.
-          element = declarationToElement[referencedNode];
-          // If no element, then it is a parameter of the context executable.
-          if (element == null) {
-            ExecutableElementImpl contextExecutable = context;
-            for (var parameter in contextExecutable.parameters) {
-              if (parameter.name == referencedNode.name) {
-                element = parameter;
-                break;
-              }
-            }
-          }
-        }
-        assert(element != null);
-      } else if (referencedNode is kernel.NamedNode) {
-        element = resynthesizer
-            .getElementFromCanonicalName(referencedNode.canonicalName);
-        assert(element != null);
-      } else if (referencedNode is kernel.DynamicType) {
-        element = DynamicElementImpl.instance;
-      } else if (referencedNode is kernel.FunctionType) {
-        element = resynthesizer
-            .getElementFromCanonicalName(referencedNode.typedef.canonicalName);
-        assert(element != null);
-      } else if (referencedNode is kernel.InterfaceType) {
-        element = resynthesizer.getElementFromCanonicalName(
-            referencedNode.classNode.canonicalName);
-        assert(element != null);
-      } else if (referencedNode is kernel.MemberGetterNode) {
-        if (referencedNode.member == null) {
-          element = null;
-        } else {
-          var memberElement = resynthesizer
-              .getElementFromCanonicalName(referencedNode.member.canonicalName);
-          assert(memberElement != null);
-          if (memberElement is PropertyInducingElementImpl) {
-            element = memberElement.getter;
-            assert(element != null);
-          } else {
-            element = memberElement;
-          }
-        }
-      } else if (referencedNode is kernel.MemberSetterNode) {
-        if (referencedNode.member == null) {
-          element = null;
-        } else {
-          var memberElement = resynthesizer
-              .getElementFromCanonicalName(referencedNode.member.canonicalName);
-          assert(memberElement != null);
-          if (memberElement is PropertyInducingElementImpl) {
-            element = memberElement.setter;
-            assert(element != null);
-          } else {
-            element = memberElement;
-          }
-        }
-      } else if (referencedNode is kernel.ImportPrefixNode) {
-        assert(referencedNode.name != null);
-        for (var import in libraryElement.imports) {
-          if (import.prefix?.name == referencedNode.name) {
-            element = import.prefix;
-            break;
-          }
-        }
-        assert(element != null);
-      } else if (referencedNode is kernel.NullNode) {
-        element = null;
-      } else if (referencedNode == null) {
-        // This will occur if an identifier could not be resolved, such as a
-        // reference to a member when the target has type `dynamic`.
-        element = null;
-      } else {
-        throw new UnimplementedError(
-            'Declaration: (${referencedNode.runtimeType}) $referencedNode');
-      }
-      referencedElements.add(element);
+    Map<int, kernel.ResolutionData<DartType, Element, Element, PrefixElement>>
+        convertedData = {};
+    for (var location in resolution.kernelData.keys) {
+      var data = resolution.kernelData[location];
+      convertedData[location] = new kernel.ResolutionData(
+          argumentTypes: data.argumentTypes == null
+              ? null
+              : data.argumentTypes.map(translateType).toList(),
+          combiner: _translateReference(data.combiner),
+          declaration: _translateDeclaration(data.declaration),
+          inferredType: translateType(data.inferredType),
+          invokeType: translateType(data.invokeType),
+          isExplicitCall: data.isExplicitCall,
+          isImplicitCall: data.isImplicitCall,
+          isWriteReference: data.isWriteReference,
+          literalType: translateType(data.literalType),
+          prefixInfo: _translatePrefixInfo(data.prefixInfo),
+          reference: _translateReference(data.reference,
+              isWriteReference: data.isWriteReference),
+          writeContext: translateType(data.writeContext));
     }
 
-    applier = new ValidatingResolutionApplier(
-        libraryElement,
-        this,
-        declaredElements,
-        referencedElements,
-        resolution.kernelTypes,
-        resolution.declarationOffsets,
-        resolution.referenceOffsets,
-        resolution.typeOffsets);
+    applier = new ResolutionApplier(libraryElement, this, convertedData);
   }
 
   @override
@@ -1188,28 +1108,6 @@
     // The function is the new resolution context.
     contextStack.add(context);
     context = element;
-
-    var declaration = functionElementToDeclaration[element];
-
-    // Get the declaration kernel type.
-    kernel.FunctionType kernelType;
-    if (declaration is kernel.VariableDeclaration) {
-      kernelType = declaration.type;
-    } else if (declaration is kernel.FunctionExpression) {
-      kernelType = declaration.function.functionType;
-    } else {
-      throw new StateError('(${declaration.runtimeType}) $declaration');
-    }
-
-    element.returnType = resynthesizer.getType(context, kernelType.returnType);
-
-    for (var parameter in element.parameters) {
-      ParameterElementImpl parameterImpl = parameter;
-      var kernelParameter = parameterElementToDeclaration[parameter];
-      parameterImpl.type = resynthesizer.getType(context, kernelParameter.type);
-    }
-
-    element.type = new FunctionTypeImpl(element);
   }
 
   @override
@@ -1218,43 +1116,62 @@
     context = contextStack.removeLast();
   }
 
-  /// Translate the given [declaration].
-  void translateKernelDeclaration(kernel.TreeNode declaration) {
-    if (declaration is kernel.VariableDeclaration) {
-      kernel.TreeNode functionDeclaration = declaration.parent;
-      if (functionDeclaration is kernel.FunctionDeclaration) {
-        var element =
-            new FunctionElementImpl(declaration.name, declaration.fileOffset);
-        functionElementToDeclaration[element] = declaration;
-        _addFormalParameters(element, functionDeclaration.function);
-        declaredElements.add(element);
-        declarationToElement[declaration] = element;
-      } else {
-        // TODO(scheglov) Do we need ConstLocalVariableElementImpl?
-        var element = new LocalVariableElementImpl(
-            declaration.name, declaration.fileOffset);
-        declaredElements.add(element);
-        declarationToElement[declaration] = element;
-      }
-    } else if (declaration is kernel.FunctionExpression) {
-      var element = new FunctionElementImpl('', declaration.fileOffset);
-      functionElementToDeclaration[element] = declaration;
-      _addFormalParameters(element, declaration.function);
-      declaredElements.add(element);
-      declarationToElement[declaration] = element;
+  Element _translateDeclaration(int declarationOffset) {
+    if (declarationOffset == null) return null;
+    var declaration = localDeclarations[declarationOffset];
+    Element element;
+    if (declaration is VariableDeclaration) {
+      element = declaration.element;
+    } else if (declaration is FormalParameter) {
+      element = declaration.element;
+    } else if (declaration is DeclaredSimpleIdentifier) {
+      element = declaration.staticElement;
+    } else if (declaration is FunctionDeclaration) {
+      element = declaration.element;
+    } else {
+      throw new UnimplementedError('${declaration.runtimeType}');
+    }
+    assert(element != null);
+    return element;
+  }
+
+  PrefixElement _translatePrefixInfo(int importIndex) {
+    if (importIndex == null) return null;
+    return libraryElement.imports[importIndex].prefix;
+  }
+
+  Element _translateReference(kernel.Node referencedNode,
+      {bool isWriteReference = false}) {
+    if (referencedNode == null) return null;
+    Element element;
+    if (referencedNode is kernel.NamedNode) {
+      element = resynthesizer
+          .getElementFromCanonicalName(referencedNode.canonicalName);
+    } else if (referencedNode is kernel.FunctionType) {
+      element = resynthesizer
+          .getElementFromCanonicalName(referencedNode.typedef.canonicalName);
+      assert(element != null);
+    } else if (referencedNode is kernel.InterfaceType) {
+      element = resynthesizer
+          .getElementFromCanonicalName(referencedNode.classNode.canonicalName);
+      assert(element != null);
     } else {
       throw new UnimplementedError(
-          'Declaration: (${declaration.runtimeType}) $declaration');
+          'TODO(paulberry): ${referencedNode.runtimeType}');
+    }
+    if (element is PropertyInducingElement) {
+      return isWriteReference ? element.setter : element.getter;
+    } else {
+      return element;
     }
   }
 
   @override
   DartType translateType(kernel.DartType kernelType) {
-    if (kernelType is kernel.NullType) {
-      return null;
-    } else if (kernelType is kernel.IndexAssignNullFunctionType) {
+    if (kernelType == null) {
       return null;
     } else if (kernelType is kernel.TypeArgumentsDartType) {
+      // TODO(paulberry): get rid of this case
       List<kernel.DartType> kernelTypes = kernelType.types;
       var types = new List<DartType>(kernelTypes.length);
       for (var i = 0; i < kernelTypes.length; i++) {
@@ -1265,54 +1182,6 @@
       return resynthesizer.getType(context, kernelType);
     }
   }
-
-  /// Add formal parameters defined in the [kernelFunction] to the [element].
-  void _addFormalParameters(
-      FunctionElementImpl element, kernel.FunctionNode kernelFunction) {
-    // Set type parameters.
-    {
-      var astParameters = <TypeParameterElement>[];
-      for (var kernelParameter in kernelFunction.typeParameters) {
-        var astParameter = new TypeParameterElementImpl(
-            kernelParameter.name, kernelParameter.fileOffset);
-        astParameter.type = new TypeParameterTypeImpl(astParameter);
-        // TODO(scheglov) remember mapping to set bounds later
-        astParameters.add(astParameter);
-      }
-      element.typeParameters = astParameters;
-    }
-
-    // Set formal parameters.
-    {
-      var astParameters = <ParameterElement>[];
-
-      // Add positional parameters
-      var kernelPositionalParameters = kernelFunction.positionalParameters;
-      for (var i = 0; i < kernelPositionalParameters.length; i++) {
-        var kernelParameter = kernelPositionalParameters[i];
-        var astParameter = new ParameterElementImpl(
-            kernelParameter.name, kernelParameter.fileOffset);
-        astParameter.parameterKind = i < kernelFunction.requiredParameterCount
-            ? ParameterKind.REQUIRED
-            : ParameterKind.POSITIONAL;
-        astParameters.add(astParameter);
-        declarationToElement[kernelParameter] = astParameter;
-        parameterElementToDeclaration[astParameter] = kernelParameter;
-      }
-
-      // Add named parameters.
-      for (var kernelParameter in kernelFunction.namedParameters) {
-        var astParameter = new ParameterElementImpl(
-            kernelParameter.name, kernelParameter.fileOffset);
-        astParameter.parameterKind = ParameterKind.NAMED;
-        astParameters.add(astParameter);
-        declarationToElement[kernelParameter] = astParameter;
-        parameterElementToDeclaration[astParameter] = kernelParameter;
-      }
-
-      element.parameters = astParameters;
-    }
-  }
 }
 
 /// [Iterator] like object that provides [CollectedResolution]s.
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index 59dcb83..e017334 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -767,12 +767,13 @@
  * Container that keeps track of file owners.
  */
 class SearchedFiles {
-  final Map<String, Search> owners = {};
+  final Map<Uri, Search> owners = {};
 
   bool add(String path, Search search) {
-    var owner = owners[path];
+    var file = search._driver.fsState.getFileForPath(path);
+    var owner = owners[file.uri];
     if (owner == null) {
-      owners[path] = search;
+      owners[file.uri] = search;
       return true;
     }
     return identical(owner, search);
@@ -780,7 +781,7 @@
 
   void ownAdded(Search search) {
     for (var path in search._driver.addedFiles) {
-      owners[path] = search;
+      add(path, search);
     }
   }
 }
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 265a55c..457bb8e 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -2424,6 +2424,8 @@
   @override
   LineInfo lineInfo;
 
+  Map<int, AstNode> localDeclarations;
+
   /**
    * Initialize a newly created compilation unit to have the given directives
    * and declarations. The [scriptTag] can be `null` if there is no script tag
diff --git a/pkg/analyzer/lib/src/dart/element/builder.dart b/pkg/analyzer/lib/src/dart/element/builder.dart
index e0101c1..8fde0c3 100644
--- a/pkg/analyzer/lib/src/dart/element/builder.dart
+++ b/pkg/analyzer/lib/src/dart/element/builder.dart
@@ -1182,6 +1182,7 @@
     _visitChildren(holder, node);
 
     FunctionElementImpl element = new FunctionElementImpl.forNode(node.name);
+    element.type = new FunctionTypeImpl(element);
     _setCodeRange(element, node);
     setElementDocumentationComment(element, node);
     element.metadata = _createElementAnnotations(node.metadata);
diff --git a/pkg/analyzer/lib/src/dart/element/type.dart b/pkg/analyzer/lib/src/dart/element/type.dart
index d9d126a..8514e4f 100644
--- a/pkg/analyzer/lib/src/dart/element/type.dart
+++ b/pkg/analyzer/lib/src/dart/element/type.dart
@@ -1447,9 +1447,13 @@
 
   @override
   DartType flattenFutures(TypeSystem typeSystem) {
-    // Implement the case: "If T = Future<S> then flatten(T) = flatten(S)."
-    if (isDartAsyncFuture && typeArguments.isNotEmpty) {
-      return typeArguments[0].flattenFutures(typeSystem);
+    // Implement the cases:
+    //  - "If T = FutureOr<S> then flatten(T) = S."
+    //  - "If T = Future<S> then flatten(T) = S."
+    if (isDartAsyncFutureOr || isDartAsyncFuture) {
+      return typeArguments.isNotEmpty
+          ? typeArguments[0]
+          : DynamicTypeImpl.instance;
     }
 
     // Implement the case: "Otherwise if T <: Future then let S be a type
diff --git a/pkg/analyzer/lib/src/fasta/analyzer_expression_generator.dart b/pkg/analyzer/lib/src/fasta/analyzer_expression_generator.dart
index f37feab..c007f79 100644
--- a/pkg/analyzer/lib/src/fasta/analyzer_expression_generator.dart
+++ b/pkg/analyzer/lib/src/fasta/analyzer_expression_generator.dart
@@ -30,6 +30,55 @@
   Expression buildSimpleRead() => generator.buildSimpleRead();
 }
 
+class AnalyzerDelayedAssignmentGenerator extends AnalyzerExpressionGenerator
+    with fasta.DelayedAssignment<Expression, Statement, Arguments> {
+  final Token token;
+  final fasta.Generator<Expression, Statement, Arguments> generator;
+  final String assignmentOperator;
+  final Expression value;
+
+  AnalyzerDelayedAssignmentGenerator(
+      ExpressionGeneratorHelper<Expression, Statement, Arguments> helper,
+      AstFactory astFactory,
+      this.token,
+      this.generator,
+      this.assignmentOperator,
+      this.value)
+      : super(helper, astFactory);
+
+  @override
+  Expression buildSimpleRead() => astFactory.assignmentExpression(
+      generator.buildSimpleRead(), token, value);
+
+  @override
+  Expression doInvocation(int offset, Arguments arguments) => buildSimpleRead();
+}
+
+class AnalyzerDelayedPostfixIncrementGenerator
+    extends AnalyzerExpressionGenerator
+    with fasta.DelayedPostfixIncrement<Expression, Statement, Arguments> {
+  final Token token;
+  final fasta.Generator<Expression, Statement, Arguments> generator;
+  final kernel.Name binaryOperator;
+  final kernel.Procedure interfaceTarget;
+
+  AnalyzerDelayedPostfixIncrementGenerator(
+      ExpressionGeneratorHelper<Expression, Statement, Arguments> helper,
+      AstFactory astFactory,
+      this.token,
+      this.generator,
+      this.binaryOperator,
+      this.interfaceTarget)
+      : super(helper, astFactory);
+
+  @override
+  Expression buildSimpleRead() =>
+      astFactory.postfixExpression(generator.buildSimpleRead(), token);
+
+  @override
+  Expression doInvocation(int offset, Arguments arguments) => buildSimpleRead();
+}
+
 abstract class AnalyzerExpressionGenerator
     implements fasta.Generator<Expression, Statement, Arguments> {
   final ExpressionGeneratorHelper<Expression, Statement, Arguments> helper;
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index ce8de6c..b34a4c1 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -62,6 +62,7 @@
   ScriptTag scriptTag;
   final List<Directive> directives = <Directive>[];
   final List<CompilationUnitMember> declarations = <CompilationUnitMember>[];
+  final localDeclarations = <int, AstNode>{};
 
   @override
   final Uri uri;
@@ -206,7 +207,7 @@
 
     if (interpolationCount == 0) {
       Token token = pop();
-      String value = unescapeString(token.lexeme);
+      String value = unescapeString(token.lexeme, token, this);
       push(ast.simpleStringLiteral(token, value));
     } else {
       List<Object> parts = popTypedList(1 + interpolationCount * 2);
@@ -215,7 +216,7 @@
       Quote quote = analyzeQuote(first.lexeme);
       List<InterpolationElement> elements = <InterpolationElement>[];
       elements.add(ast.interpolationString(
-          first, unescapeFirstStringPart(first.lexeme, quote)));
+          first, unescapeFirstStringPart(first.lexeme, quote, first, this)));
       for (int i = 1; i < parts.length - 1; i++) {
         var part = parts[i];
         if (part is Token) {
@@ -228,7 +229,7 @@
         }
       }
       elements.add(ast.interpolationString(
-          last, unescapeLastStringPart(last.lexeme, quote)));
+          last, unescapeLastStringPart(last.lexeme, quote, last, this)));
       push(ast.stringInterpolation(elements));
     }
   }
@@ -500,7 +501,7 @@
         identical(token.kind, HEXADECIMAL_TOKEN));
     debugEvent("LiteralInt");
 
-    push(ast.integerLiteral(token, int.parse(token.lexeme)));
+    push(ast.integerLiteral(token, int.tryParse(token.lexeme)));
   }
 
   void handleExpressionFunctionBody(Token arrowToken, Token semicolon) {
@@ -626,7 +627,15 @@
     Expression initializer = pop();
     SimpleIdentifier identifier = pop();
     // TODO(ahe): Don't push initializers, instead install them.
-    push(ast.variableDeclaration(identifier, assignmentOperator, initializer));
+    push(_makeVariableDeclaration(identifier, assignmentOperator, initializer));
+  }
+
+  VariableDeclaration _makeVariableDeclaration(
+      SimpleIdentifier name, Token equals, Expression initializer) {
+    var variableDeclaration =
+        ast.variableDeclaration(name, equals, initializer);
+    localDeclarations[name.offset] = variableDeclaration;
+    return variableDeclaration;
   }
 
   @override
@@ -668,7 +677,7 @@
     if (node is VariableDeclaration) {
       variable = node;
     } else if (node is SimpleIdentifier) {
-      variable = ast.variableDeclaration(node, null, null);
+      variable = _makeVariableDeclaration(node, null, null);
     } else {
       unhandled("${node.runtimeType}", "identifier", nameToken.charOffset, uri);
     }
@@ -1206,6 +1215,7 @@
       parameter = ast.defaultFormalParameter(node, ParameterKind.NAMED,
           defaultValue.separator, defaultValue.value);
     }
+    localDeclarations[nameToken.offset] = parameter;
     push(parameter);
   }
 
@@ -1351,9 +1361,11 @@
       List<FormalParameter> catchParameters = catchParameterList.parameters;
       if (catchParameters.length > 0) {
         exception = catchParameters[0].identifier;
+        localDeclarations[exception.offset] = exception;
       }
       if (catchParameters.length > 1) {
         stackTrace = catchParameters[1].identifier;
+        localDeclarations[stackTrace.offset] = stackTrace;
       }
     }
     push(ast.catchClause(
@@ -2011,7 +2023,7 @@
     debugEvent("NoFieldInitializer");
 
     SimpleIdentifier name = pop();
-    push(ast.variableDeclaration(name, null, null));
+    push(_makeVariableDeclaration(name, null, null));
   }
 
   @override
@@ -2088,7 +2100,7 @@
 
     Expression initializer = pop();
     SimpleIdentifier name = pop();
-    push(ast.variableDeclaration(name, assignment, initializer));
+    push(_makeVariableDeclaration(name, assignment, initializer));
   }
 
   @override
@@ -2122,8 +2134,10 @@
     List<Annotation> metadata = pop(NullValue.Metadata);
     FunctionExpression functionExpression =
         ast.functionExpression(typeParameters, parameters, body);
-    push(ast.functionDeclarationStatement(ast.functionDeclaration(
-        null, metadata, null, returnType, null, name, functionExpression)));
+    var functionDeclaration = ast.functionDeclaration(
+        null, metadata, null, returnType, null, name, functionExpression);
+    localDeclarations[name.offset] = functionDeclaration;
+    push(ast.functionDeclarationStatement(functionDeclaration));
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/fasta/ast_building_factory.dart b/pkg/analyzer/lib/src/fasta/ast_building_factory.dart
index 2a7ab90..436b733 100644
--- a/pkg/analyzer/lib/src/fasta/ast_building_factory.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_building_factory.dart
@@ -192,8 +192,8 @@
       Generator<Expression, Statement, Arguments> generator,
       Expression value,
       String assignmentOperator) {
-    // TODO(brianwilkerson) Implement this.
-    throw new UnimplementedError();
+    return new AnalyzerDelayedAssignmentGenerator(
+        helper, astFactory, token, generator, assignmentOperator, value);
   }
 
   @override
@@ -203,8 +203,8 @@
       Generator<Expression, Statement, Arguments> generator,
       kernel.Name binaryOperator,
       kernel.Procedure interfaceTarget) {
-    // TODO(brianwilkerson) Implement this.
-    throw new UnimplementedError();
+    return new AnalyzerDelayedPostfixIncrementGenerator(
+        helper, astFactory, token, generator, binaryOperator, interfaceTarget);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/fasta/error_converter.dart b/pkg/analyzer/lib/src/fasta/error_converter.dart
index acfe8432..17763f1 100644
--- a/pkg/analyzer/lib/src/fasta/error_converter.dart
+++ b/pkg/analyzer/lib/src/fasta/error_converter.dart
@@ -349,6 +349,10 @@
         errorReporter?.reportErrorForOffset(
             StrongModeCode.INVALID_CAST_NEW_EXPR, offset, length);
         return;
+      case "INVALID_CODE_POINT":
+        errorReporter?.reportErrorForOffset(
+            ParserErrorCode.INVALID_CODE_POINT, offset, length, ['\\u{...}']);
+        return;
       case "INVALID_CONSTRUCTOR_NAME":
         errorReporter?.reportErrorForOffset(
             CompileTimeErrorCode.INVALID_CONSTRUCTOR_NAME, offset, length);
@@ -357,6 +361,10 @@
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.INVALID_GENERIC_FUNCTION_TYPE, offset, length);
         return;
+      case "INVALID_HEX_ESCAPE":
+        errorReporter?.reportErrorForOffset(
+            ParserErrorCode.INVALID_HEX_ESCAPE, offset, length);
+        return;
       case "INVALID_METHOD_OVERRIDE":
         errorReporter?.reportErrorForOffset(
             StrongModeCode.INVALID_METHOD_OVERRIDE, offset, length);
@@ -373,6 +381,10 @@
         _reportByCode(ParserErrorCode.INVALID_OPERATOR_FOR_SUPER, message,
             offset, length);
         return;
+      case "INVALID_UNICODE_ESCAPE":
+        errorReporter?.reportErrorForOffset(
+            ParserErrorCode.INVALID_UNICODE_ESCAPE, offset, length);
+        return;
       case "LIBRARY_DIRECTIVE_NOT_FIRST":
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.LIBRARY_DIRECTIVE_NOT_FIRST, offset, length);
diff --git a/pkg/analyzer/lib/src/fasta/resolution_applier.dart b/pkg/analyzer/lib/src/fasta/resolution_applier.dart
index 4d2414f..5aa09cd 100644
--- a/pkg/analyzer/lib/src/fasta/resolution_applier.dart
+++ b/pkg/analyzer/lib/src/fasta/resolution_applier.dart
@@ -21,48 +21,18 @@
   final LibraryElement _enclosingLibraryElement;
   final TypeContext _typeContext;
 
-  final List<Element> _declaredElements;
-  int _declaredElementIndex = 0;
-
-  final List<Element> _referencedElements;
-  int _referencedElementIndex = 0;
-
-  final List<kernel.DartType> _types;
-  int _typeIndex = 0;
+  final Map<int, ResolutionData<DartType, Element, Element, PrefixElement>>
+      _data;
 
   /// The current label scope. Each [Block] adds a new one.
   _LabelScope _labelScope = new _LabelScope(null);
 
-  /// Indicates whether we are applying resolution to an annotation.
-  ///
-  /// When this field is `true`, [PropertyInducingElement]s should be replaced
-  /// with corresponding getters.
-  bool _inAnnotation = false;
-
-  ResolutionApplier(this._enclosingLibraryElement, this._typeContext,
-      this._declaredElements, this._referencedElements, this._types);
+  ResolutionApplier(
+      this._enclosingLibraryElement, this._typeContext, this._data);
 
   /// Apply resolution to annotations of the given [node].
   void applyToAnnotations(AnnotatedNode node) {
-    _inAnnotation = true;
     node.metadata.accept(this);
-    _inAnnotation = false;
-  }
-
-  /// Verifies that all types passed to the constructor have been applied.
-  void checkDone() {
-    if (_declaredElementIndex != _declaredElements.length) {
-      throw new StateError('Some declarations were not consumed, starting at '
-          '${_declaredElements[_declaredElementIndex]}');
-    }
-    if (_referencedElementIndex != _referencedElements.length) {
-      throw new StateError('Some references were not consumed, starting at '
-          '${_referencedElements[_referencedElementIndex]}');
-    }
-    if (_typeIndex != _types.length) {
-      throw new StateError(
-          'Some types were not consumed, starting at ${_types[_typeIndex]}');
-    }
   }
 
   @override
@@ -74,24 +44,33 @@
   @override
   void visitAnnotation(Annotation node) {
     SimpleIdentifier constructorName = node.constructorName;
+    SyntacticEntity entity;
+    if (constructorName != null) {
+      entity = constructorName;
+    } else {
+      var name = node.name;
+      if (name is PrefixedIdentifier) {
+        entity = name.identifier;
+      } else {
+        entity = name;
+      }
+    }
+    var data = _get(entity);
 
-    // Peek forward and check if the next element is a PrefixElement.
     SimpleIdentifier topEntity;
-    if (_referencedElements[_referencedElementIndex] is PrefixElement) {
+    if (data.prefixInfo != null) {
       PrefixedIdentifier prefixedIdentifier = node.name;
 
       SimpleIdentifier prefix = prefixedIdentifier.prefix;
-      PrefixElement prefixElement = _getReferenceFor(prefix);
-      _getTypeFor(prefix); // prefix type
-      prefix.staticElement = prefixElement;
+      prefix.staticElement = data.prefixInfo;
 
       topEntity = prefixedIdentifier.identifier;
     } else {
       topEntity = node.name;
     }
 
-    Element element = _getReferenceFor(topEntity);
-    DartType type = _getTypeFor(topEntity);
+    Element element = data.reference;
+    DartType type = data.inferredType;
     node.element = element;
 
     if (element is ConstructorElement) {
@@ -117,12 +96,24 @@
     }
   }
 
+  ResolutionData<DartType, Element, Element, PrefixElement> _get(
+      SyntacticEntity entity,
+      {bool failIfAbsent: true}) {
+    int entityOffset = entity.offset;
+    var data = _data[entityOffset];
+    if (failIfAbsent && data == null) {
+      throw new StateError('No data for $entity at $entityOffset');
+    }
+    return data;
+  }
+
   @override
   void visitAsExpression(AsExpression node) {
     node.expression.accept(this);
+    var data = _get(node.asOperator);
     applyToTypeAnnotation(
-        _enclosingLibraryElement, _getTypeFor(node.asOperator), node.type);
-    node.staticType = _getTypeFor(node.asOperator);
+        _enclosingLibraryElement, data.literalType, node.type);
+    node.staticType = data.inferredType;
   }
 
   @override
@@ -131,33 +122,27 @@
     node.rightHandSide.accept(this);
 
     SyntacticEntity entity = _getAssignmentEntity(node.leftHandSide);
-    node.staticElement = _getReferenceFor(entity);
-    node.staticType = _getTypeFor(entity);
+    var data = _get(entity);
+    node.staticElement = data.combiner;
+    node.staticType = data.inferredType;
   }
 
   @override
   void visitBinaryExpression(BinaryExpression node) {
     node.leftOperand.accept(this);
 
+    var data = _get(node.operator);
     TokenType operatorType = node.operator.type;
     if (operatorType != TokenType.QUESTION_QUESTION &&
         operatorType != TokenType.AMPERSAND_AMPERSAND &&
         operatorType != TokenType.BAR_BAR) {
-      node.staticElement = _getReferenceFor(node.operator);
-      _getTypeFor(node.operator); // callee type
-      _getTypeFor(node.operator); // invocation type
-      _getTypeFor(node.operator); // type arguments
+      node.staticElement = data.reference;
     }
 
     // Record the return type of the expression.
-    node.staticType = _getTypeFor(node.operator);
+    node.staticType = data.inferredType;
 
     node.rightOperand.accept(this);
-
-    // Skip the synthetic Not for `!=`.
-    if (operatorType == TokenType.BANG_EQ) {
-      _getTypeFor(null, synthetic: true);
-    }
   }
 
   @override
@@ -184,7 +169,7 @@
 
   @override
   void visitCatchClause(CatchClause node) {
-    DartType guardType = _getTypeFor(node.onKeyword ?? node.catchKeyword);
+    DartType guardType = _get(node.onKeyword ?? node.catchKeyword).literalType;
     if (node.exceptionType != null) {
       applyToTypeAnnotation(
           _enclosingLibraryElement, guardType, node.exceptionType);
@@ -192,8 +177,8 @@
 
     SimpleIdentifier exception = node.exceptionParameter;
     if (exception != null) {
-      LocalVariableElementImpl element = _getDeclarationFor(exception);
-      DartType type = _getTypeFor(exception);
+      LocalVariableElementImpl element = exception.staticElement;
+      DartType type = _get(exception).literalType;
       element.type = type;
       exception.staticElement = element;
       exception.staticType = type;
@@ -201,8 +186,8 @@
 
     SimpleIdentifier stackTrace = node.stackTraceParameter;
     if (stackTrace != null) {
-      LocalVariableElementImpl element = _getDeclarationFor(stackTrace);
-      DartType type = _getTypeFor(stackTrace);
+      LocalVariableElementImpl element = stackTrace.staticElement;
+      DartType type = _get(stackTrace).literalType;
       element.type = type;
       stackTrace.staticElement = element;
       stackTrace.staticType = type;
@@ -216,12 +201,14 @@
     node.condition.accept(this);
     node.thenExpression.accept(this);
     node.elseExpression.accept(this);
-    node.staticType = _getTypeFor(node.question);
+    node.staticType = _get(node.question).inferredType;
   }
 
   @override
   void visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
-    FieldElement fieldElement = _getReferenceFor(node.equals);
+    var element = _get(node.equals).reference;
+    FieldElement fieldElement =
+        element is PropertyAccessorElement ? element.variable : null;
     node.fieldName.staticElement = fieldElement;
     node.fieldName.staticType = fieldElement.type;
 
@@ -240,7 +227,7 @@
   @override
   void visitExpression(Expression node) {
     visitNode(node);
-    node.staticType = _getTypeFor(node);
+    node.staticType = _get(node).inferredType;
   }
 
   @override
@@ -249,7 +236,7 @@
     if (loopVariable != null) {
       SimpleIdentifier identifier = loopVariable.identifier;
 
-      DartType type = _getTypeFor(identifier);
+      DartType type = _get(identifier).inferredType;
       identifier.staticType = type;
 
       if (loopVariable.type != null) {
@@ -257,15 +244,14 @@
             _enclosingLibraryElement, type, loopVariable.type);
       }
 
-      VariableElementImpl element = _getDeclarationFor(identifier);
+      VariableElementImpl element = identifier.staticElement;
       if (element != null) {
         _typeContext.encloseVariable(element);
         identifier.staticElement = element;
         element.type = type;
       }
     } else {
-      node.identifier.staticElement = _getReferenceFor(node.identifier);
-      node.identifier.staticType = _getTypeFor(node.identifier);
+      node.identifier.accept(this);
     }
     node.iterable.accept(this);
     node.body.accept(this);
@@ -275,10 +261,7 @@
   void visitFormalParameterList(FormalParameterList parameterList) {
     for (var parameter in parameterList.parameters) {
       if (parameter is DefaultFormalParameter) {
-        if (parameter.defaultValue == null) {
-          // Consume the Null type, for the implicit default value.
-          _getTypeFor(null, synthetic: true);
-        } else {
+        if (parameter.defaultValue != null) {
           parameter.defaultValue.accept(this);
         }
       }
@@ -293,13 +276,11 @@
     // Apply resolution to default values.
     parameterList.accept(this);
 
-    FunctionElementImpl element = _getDeclarationFor(node);
+    FunctionElementImpl element = node.element;
     _typeContext.enterLocalFunction(element);
 
-    if (node.returnType != null && element != null) {
-      applyToTypeAnnotation(
-          _enclosingLibraryElement, element.returnType, node.returnType);
-    }
+    functionExpression.body?.accept(this);
+    _storeFunctionType(_get(node).inferredType, element);
 
     // Associate the elements with the nodes.
     if (element != null) {
@@ -319,11 +300,12 @@
         }
       }
 
+      applyToTypeAnnotation(
+          _enclosingLibraryElement, element.returnType, node.returnType);
       applyParameters(
           _enclosingLibraryElement, element.parameters, parameterList);
     }
 
-    functionExpression.body?.accept(this);
     _typeContext.exitLocalFunction(element);
   }
 
@@ -331,9 +313,15 @@
   void visitFunctionExpression(FunctionExpression node) {
     FormalParameterList parameterList = node.parameters;
 
-    FunctionElementImpl element = _getDeclarationFor(node);
+    FunctionElementImpl element = node.element;
     _typeContext.enterLocalFunction(element);
 
+    // Apply resolution to default values.
+    parameterList.accept(this);
+
+    node.body.accept(this);
+    _storeFunctionType(_get(node).inferredType, element);
+
     // Associate the elements with the nodes.
     if (element != null) {
       node.element = element;
@@ -342,28 +330,45 @@
           _enclosingLibraryElement, element.parameters, parameterList);
     }
 
-    // Apply resolution to default values.
-    parameterList.accept(this);
-
-    node.body.accept(this);
     _typeContext.exitLocalFunction(element);
   }
 
+  void _storeFunctionType(DartType type, FunctionElementImpl element) {
+    if (type is FunctionType && element != null) {
+      element.returnType = type.returnType;
+      int normalParameterIndex = 0;
+      int optionalParameterIndex = 0;
+      for (ParameterElementImpl parameter in element.parameters) {
+        if (parameter.isNamed) {
+          parameter.type = type.namedParameterTypes[parameter.name];
+        } else if (normalParameterIndex < type.normalParameterTypes.length) {
+          parameter.type = type.normalParameterTypes[normalParameterIndex++];
+        } else if (optionalParameterIndex <
+            type.optionalParameterTypes.length) {
+          parameter.type =
+              type.optionalParameterTypes[optionalParameterIndex++];
+        }
+      }
+    }
+  }
+
   @override
   void visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
     node.function.accept(this);
 
-    DartType invokeType = _getTypeFor(node.argumentList);
+    var data = _get(node.argumentList);
+    DartType invokeType = data.invokeType;
     node.staticInvokeType = invokeType;
 
-    DartType typeArgumentsDartType = _getTypeFor(node.argumentList);
-    if (node.typeArguments != null &&
-        typeArgumentsDartType is TypeArgumentsDartType) {
-      _applyTypeArgumentsToList(_enclosingLibraryElement, typeArgumentsDartType,
+    List<DartType> typeArguments = data.argumentTypes;
+    if (node.typeArguments != null && typeArguments is TypeArgumentsDartType) {
+      _applyTypeArgumentsToList(
+          _enclosingLibraryElement,
+          new TypeArgumentsDartType(typeArguments),
           node.typeArguments.arguments);
     }
 
-    DartType resultType = _getTypeFor(node.argumentList);
+    DartType resultType = data.inferredType;
     node.staticType = resultType;
 
     node.argumentList.accept(this);
@@ -374,7 +379,8 @@
     node.target.accept(this);
 
     DartType targetType = node.target.staticType;
-    MethodElement element = _getReferenceFor(node.leftBracket);
+    var data = _get(node.leftBracket);
+    MethodElement element = data.reference;
 
     // Convert the raw element into a member.
     if (targetType is InterfaceType) {
@@ -382,11 +388,7 @@
       node.staticElement = member;
     }
 
-    _getTypeFor(node.leftBracket); // callee type
-    _getTypeFor(node.leftBracket); // invoke type
-    _getTypeFor(node.leftBracket); // type arguments
-
-    node.staticType = _getTypeFor(node.leftBracket);
+    node.staticType = data.inferredType;
 
     node.index.accept(this);
   }
@@ -394,19 +396,12 @@
   @override
   void visitInstanceCreationExpression(InstanceCreationExpression node) {
     ConstructorName constructorName = node.constructorName;
+    var data = _get(constructorName);
 
-    // Peek forward and check if the next element is a PrefixElement.
-    PrefixElement prefix;
-    AstNode constructorEntity = constructorName;
-    if (_referencedElements[_referencedElementIndex] is PrefixElement) {
-      PrefixedIdentifier typeIdentifier = constructorName.type.name;
-      prefix = _getReferenceFor(typeIdentifier.prefix);
-      _getTypeFor(typeIdentifier.prefix); // prefix type
-      constructorEntity = typeIdentifier.identifier;
-    }
+    PrefixElement prefix = data.prefixInfo;
 
-    ConstructorElement constructor = _getReferenceFor(constructorEntity);
-    DartType type = _getTypeFor(constructorEntity);
+    ConstructorElement constructor = data.reference;
+    DartType type = data.inferredType;
 
     applyConstructorElement(
         _enclosingLibraryElement, prefix, constructor, type, constructorName);
@@ -422,9 +417,10 @@
   @override
   void visitIsExpression(IsExpression node) {
     node.expression.accept(this);
+    var data = _get(node.isOperator);
     applyToTypeAnnotation(
-        _enclosingLibraryElement, _getTypeFor(node.isOperator), node.type);
-    node.staticType = _getTypeFor(node.isOperator);
+        _enclosingLibraryElement, data.literalType, node.type);
+    node.staticType = data.inferredType;
   }
 
   @override
@@ -439,7 +435,7 @@
   @override
   void visitListLiteral(ListLiteral node) {
     node.elements.accept(this);
-    DartType type = _getTypeFor(node.constKeyword ?? node.leftBracket);
+    DartType type = _get(node.constKeyword ?? node.leftBracket).inferredType;
     node.staticType = type;
     if (node.typeArguments != null) {
       _applyTypeArgumentsToList(
@@ -450,7 +446,7 @@
   @override
   void visitMapLiteral(MapLiteral node) {
     node.entries.accept(this);
-    DartType type = _getTypeFor(node.constKeyword ?? node.leftBracket);
+    DartType type = _get(node.constKeyword ?? node.leftBracket).inferredType;
     node.staticType = type;
     if (node.typeArguments != null) {
       _applyTypeArgumentsToList(
@@ -464,11 +460,19 @@
 
     ArgumentList argumentList = node.argumentList;
 
-    Element invokeElement = _getReferenceFor(node.methodName);
-    _getTypeFor(node.methodName); // static element type
-    DartType invokeType = _getTypeFor(argumentList);
-    DartType typeArgumentsDartType = _getTypeFor(argumentList);
-    DartType resultType = _getTypeFor(argumentList);
+    var data = _get(argumentList);
+    Element invokeElement;
+    if (data.isImplicitCall) {
+      if (node.methodName != null) {
+        node.methodName.accept(this);
+        invokeElement = node.methodName.staticElement;
+      }
+    } else {
+      invokeElement = data.reference;
+    }
+    DartType invokeType = data.invokeType;
+    List<DartType> typeArguments = data.argumentTypes;
+    DartType resultType = data.inferredType;
 
     if (invokeElement is PropertyInducingElement) {
       PropertyInducingElement property = invokeElement;
@@ -480,16 +484,19 @@
 
     if (node.methodName.name == 'call' && invokeElement == null) {
       // Don't resolve explicit call() invocation of function types.
+    } else if (_get(node.methodName, failIfAbsent: false) != null) {
+      node.methodName.accept(this);
     } else {
       node.methodName.staticElement = invokeElement;
       node.methodName.staticType = invokeType;
     }
 
     if (invokeType is FunctionType) {
-      if (node.typeArguments != null &&
-          typeArgumentsDartType is TypeArgumentsDartType) {
-        _applyTypeArgumentsToList(_enclosingLibraryElement,
-            typeArgumentsDartType, node.typeArguments.arguments);
+      if (node.typeArguments != null && typeArguments != null) {
+        _applyTypeArgumentsToList(
+            _enclosingLibraryElement,
+            new TypeArgumentsDartType(typeArguments),
+            node.typeArguments.arguments);
       }
     }
 
@@ -523,8 +530,9 @@
   void visitPostfixExpression(PostfixExpression node) {
     node.operand.accept(this);
     SyntacticEntity entity = _getAssignmentEntity(node.operand);
-    node.staticElement = _getReferenceFor(entity);
-    node.staticType = _getTypeFor(entity);
+    var data = _get(entity);
+    node.staticElement = data.combiner;
+    node.staticType = data.inferredType;
   }
 
   @override
@@ -542,20 +550,19 @@
       // ++v;
       // This is an assignment, it is associated with the operand.
       SyntacticEntity entity = _getAssignmentEntity(node.operand);
-      node.staticElement = _getReferenceFor(entity);
-      node.staticType = _getTypeFor(entity);
+      var data = _get(entity);
+      node.staticElement = data.combiner;
+      node.staticType = data.inferredType;
     } else if (tokenType == TokenType.BANG) {
       // !boolExpression;
-      node.staticType = _getTypeFor(node);
+      node.staticType = _get(node).inferredType;
     } else {
       // ~v;
       // This is a method invocation, it is associated with the operator.
       SyntacticEntity entity = node.operator;
-      node.staticElement = _getReferenceFor(entity);
-      _getTypeFor(entity); // The static function type of the operator.
-      _getTypeFor(entity); // The invoke function type of the operator.
-      _getTypeFor(entity); // The type arguments (empty).
-      node.staticType = _getTypeFor(entity);
+      var data = _get(entity);
+      node.staticElement = data.reference;
+      node.staticType = data.inferredType;
     }
   }
 
@@ -571,7 +578,7 @@
       RedirectingConstructorInvocation node) {
     SimpleIdentifier constructorName = node.constructorName;
 
-    ConstructorElement element = _getReferenceFor(constructorName ?? node);
+    ConstructorElement element = _get(constructorName ?? node).reference;
     node.staticElement = element;
     constructorName?.staticElement = element;
 
@@ -582,18 +589,24 @@
 
   @override
   void visitSimpleIdentifier(SimpleIdentifier node) {
-    node.staticElement = _getReferenceFor(node);
-    super.visitSimpleIdentifier(node);
+    var data = _get(node);
+    if (data.prefixInfo != null) {
+      node.staticElement = data.prefixInfo;
+    } else if (data.declaration != null) {
+      node.staticElement = data.declaration;
+    } else if (data.reference != null) {
+      node.staticElement = data.reference;
+    } else {
+      node.staticElement = null;
+    }
+    node.staticType =
+        data.isWriteReference ? data.writeContext : data.inferredType;
   }
 
   @override
   void visitStringInterpolation(StringInterpolation node) {
     for (var element in node.elements) {
-      if (element is InterpolationString) {
-        if (element.value.isNotEmpty) {
-          _getTypeFor(element);
-        }
-      } else if (element is InterpolationExpression) {
+      if (element is InterpolationExpression) {
         element.expression.accept(this);
       }
     }
@@ -630,11 +643,6 @@
   }
 
   @override
-  void visitTypeAnnotation(TypeAnnotation node) {
-    applyToTypeAnnotation(_enclosingLibraryElement, _getTypeFor(node), node);
-  }
-
-  @override
   void visitVariableDeclaration(VariableDeclaration node) {
     AstNode parent = node.parent;
     if (parent is VariableDeclarationList &&
@@ -642,10 +650,10 @@
             parent.parent is FieldDeclaration)) {
       // Don't visit the name; resolution for it will come from the outline.
     } else {
-      DartType type = _getTypeFor(node.name);
+      DartType type = _get(node.name).inferredType;
       node.name.staticType = type;
 
-      VariableElementImpl element = _getDeclarationFor(node.name);
+      VariableElementImpl element = node.name.staticElement;
       if (element != null) {
         _typeContext.encloseVariable(element);
         node.name.staticElement = element;
@@ -703,33 +711,6 @@
     }
   }
 
-  /// Return the element associated with the declaration represented by the
-  /// given [node].
-  Element _getDeclarationFor(AstNode node) {
-    return _declaredElements[_declaredElementIndex++];
-  }
-
-  /// Return the element associated with the reference represented by the
-  /// given [entity].
-  Element _getReferenceFor(SyntacticEntity entity) {
-    Element element = _referencedElements[_referencedElementIndex++];
-    if (_inAnnotation && element is PropertyInducingElement) {
-      return element.getter;
-    }
-    return element;
-  }
-
-  /// Return the type associated with the given [entity].
-  ///
-  /// If [synthetic] is `true`, the [entity] must be `null` and the type is
-  /// an implicit type, e.g. the type of the absent default values of an
-  /// optional parameter (i.e. [Null]).
-  DartType _getTypeFor(SyntacticEntity entity, {bool synthetic: false}) {
-    assert(!synthetic || entity == null);
-    kernel.DartType kernelType = _types[_typeIndex++];
-    return _typeContext.translateType(kernelType);
-  }
-
   /// Apply resolution to named arguments of the [argumentList].
   void _resolveNamedArguments(
       ArgumentList argumentList, List<ParameterElement> parameters) {
@@ -973,107 +954,6 @@
   DartType translateType(kernel.DartType kernelType);
 }
 
-/// Visitor that applies resolution data from the front end (obtained via
-/// [ResolutionStorer]) to an analyzer AST, and also checks file offsets to
-/// verify that the types are applied to the correct subexpressions.
-class ValidatingResolutionApplier extends ResolutionApplier {
-  /// The offset that is used when the actual offset is not know.
-  /// The applier should not validate this offset.
-  static const UNKNOWN_OFFSET = -2;
-
-  /// Indicates whether debug messages should be printed.
-  static const bool _debug = false;
-
-  final List<int> _declaredElementOffsets;
-  final List<int> _referencedElementOffsets;
-  final List<int> _typeOffsets;
-
-  ValidatingResolutionApplier(
-      LibraryElement enclosingLibraryElement,
-      TypeContext typeContext,
-      List<Element> declaredElements,
-      List<Element> referencedElements,
-      List<kernel.DartType> types,
-      this._declaredElementOffsets,
-      this._referencedElementOffsets,
-      this._typeOffsets)
-      : super(enclosingLibraryElement, typeContext, declaredElements,
-            referencedElements, types);
-
-  @override
-  void checkDone() {
-    if (_declaredElementIndex != _declaredElements.length) {
-      throw new StateError('Some declarations were not consumed, starting at '
-          'offset ${_declaredElementOffsets[_declaredElementIndex]}');
-    }
-    if (_referencedElementIndex != _referencedElements.length) {
-      throw new StateError('Some references were not consumed, starting at '
-          'offset ${_referencedElementOffsets[_referencedElementIndex]}');
-    }
-    if (_typeIndex != _types.length) {
-      throw new StateError('Some types were not consumed, starting at offset '
-          '${_typeOffsets[_typeIndex]}');
-    }
-  }
-
-  @override
-  Element _getDeclarationFor(AstNode node) {
-    int nodeOffset = node.offset;
-    if (_debug) {
-      print('Getting declaration element for $node at $nodeOffset');
-    }
-    if (_declaredElementIndex >= _declaredElements.length) {
-      throw new StateError(
-          'No declaration information for $node at $nodeOffset');
-    }
-    int elementOffset = _declaredElementOffsets[_declaredElementIndex];
-    if (nodeOffset != elementOffset) {
-      throw new StateError(
-          'Expected element declaration for analyzer offset $nodeOffset; '
-          'got one for kernel offset $elementOffset');
-    }
-    return super._getDeclarationFor(node);
-  }
-
-  @override
-  Element _getReferenceFor(SyntacticEntity entity) {
-    int entityOffset = entity.offset;
-    if (_debug) {
-      print('Getting reference element for $entity at $entityOffset');
-    }
-    if (_referencedElementIndex >= _referencedElements.length) {
-      throw new StateError(
-          'No reference information for $entity at $entityOffset');
-    }
-    int elementOffset = _referencedElementOffsets[_referencedElementIndex];
-    if (elementOffset != UNKNOWN_OFFSET && entityOffset != elementOffset) {
-      throw new StateError(
-          'Expected element reference for analyzer offset $entityOffset; '
-          'got one for kernel offset $elementOffset');
-    }
-    return super._getReferenceFor(entity);
-  }
-
-  @override
-  DartType _getTypeFor(SyntacticEntity entity, {bool synthetic: false}) {
-    var entityOffset = synthetic ? -1 : entity.offset;
-    if (_debug) {
-      print('Getting type for $entity at $entityOffset');
-    }
-    if (_typeIndex >= _types.length) {
-      throw new StateError('No type information for $entity at $entityOffset');
-    }
-    int typeOffset = _typeOffsets[_typeIndex];
-    if (typeOffset != UNKNOWN_OFFSET &&
-        entity != null &&
-        entityOffset != typeOffset) {
-      throw new StateError('Expected a type for $entity at $entityOffset; '
-          'got one for kernel offset $typeOffset');
-    }
-    return super._getTypeFor(entity);
-  }
-}
-
 /// The hierarchical scope for labels.
 class _LabelScope {
   final _LabelScope parent;
diff --git a/pkg/analyzer/lib/src/fasta/resolution_storer.dart b/pkg/analyzer/lib/src/fasta/resolution_storer.dart
index 454fc62..ebdd2cc 100644
--- a/pkg/analyzer/lib/src/fasta/resolution_storer.dart
+++ b/pkg/analyzer/lib/src/fasta/resolution_storer.dart
@@ -3,679 +3,421 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/src/fasta/resolution_applier.dart';
-import 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart';
+import 'package:front_end/src/fasta/type_inference/type_inference_listener.dart';
 import 'package:kernel/ast.dart';
 import 'package:kernel/type_algebra.dart';
 
-/// The reference to the import prefix with the [name].
-class ImportPrefixNode implements TreeNode {
-  final String name;
+class ResolutionData<Type, Declaration, Reference, PrefixInfo> {
+  final List<Type> argumentTypes;
+  final Reference combiner;
+  final Declaration declaration;
+  final Type inferredType;
+  final Type invokeType;
+  final bool isExplicitCall;
+  final bool isImplicitCall;
+  final bool isWriteReference;
+  final Type literalType;
+  final PrefixInfo prefixInfo;
+  final Reference reference;
+  final Type writeContext;
 
-  ImportPrefixNode(this.name);
-
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-
-  @override
-  String toString() {
-    return '(prefix-$name)';
-  }
-}
-
-/// The type of [DartType] node that is used as a marker for using `null`
-/// as the [FunctionType] for index assignment.
-class IndexAssignNullFunctionType implements DartType {
-  const IndexAssignNullFunctionType();
-
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-
-  @override
-  String toString() {
-    return 'IndexAssignNullFunctionType';
-  }
-}
-
-/// Type inference listener that records inferred types and file offsets for
-/// later use by [ValidatingResolutionApplier].
-class InstrumentedResolutionStorer extends ResolutionStorer {
-  /// Indicates whether debug messages should be printed.
-  static const bool _debug = false;
-
-  final List<int> _declarationOffsets;
-  final List<int> _referenceOffsets;
-  final List<int> _typeOffsets;
-
-  final List<int> _deferredReferenceOffsets = [];
-  final List<int> _deferredTypeOffsets = [];
-
-  InstrumentedResolutionStorer(
-      List<TreeNode> declarations,
-      List<Node> references,
-      List<DartType> types,
-      this._declarationOffsets,
-      this._referenceOffsets,
-      this._typeOffsets)
-      : super(declarations, references, types);
-
-  @override
-  void _deferReference(int offset) {
-    super._deferReference(offset);
-    if (_debug) {
-      _deferredReferenceOffsets.add(offset);
-    }
-  }
-
-  @override
-  void _deferType(int offset) {
-    super._deferType(offset);
-    if (_debug) {
-      _deferredTypeOffsets.add(offset);
-    }
-  }
-
-  @override
-  void _recordDeclaration(TreeNode declaration, int offset) {
-    if (_debug) {
-      print('Recording declaration of $declaration for offset $offset');
-    }
-    _declarationOffsets.add(offset);
-    super._recordDeclaration(declaration, offset);
-  }
-
-  @override
-  int _recordReference(Node target, int offset) {
-    if (_debug) {
-      print('Recording reference to $target for offset $offset');
-    }
-    _referenceOffsets.add(offset);
-    return super._recordReference(target, offset);
-  }
-
-  @override
-  int _recordType(DartType type, int offset) {
-    if (_debug) {
-      print('Recording type $type for offset $offset');
-    }
-    assert(_types.length == _typeOffsets.length);
-    _typeOffsets.add(offset);
-    return super._recordType(type, offset);
-  }
-
-  @override
-  void _replaceReference(Node reference) {
-    if (_debug) {
-      int offset = _deferredReferenceOffsets.removeLast();
-      print('Replacing reference $reference for offset $offset');
-    }
-    super._replaceReference(reference);
-  }
-
-  @override
-  void _replaceType(DartType type, [int newOffset = -1]) {
-    if (newOffset != -1) {
-      _typeOffsets[_deferredTypeSlots.last] = newOffset;
-    }
-    if (_debug) {
-      if (newOffset != -1) {
-        _deferredTypeOffsets.removeLast();
-        _deferredTypeOffsets.add(newOffset);
-      }
-      int offset = _deferredTypeOffsets.removeLast();
-      print('Replacing type $type for offset $offset');
-    }
-    super._replaceType(type, newOffset);
-  }
-}
-
-/// A reference to the getter represented by the [member].
-/// The [member] might be either a getter itself, or a field.
-class MemberGetterNode implements TreeNode {
-  /// The member representing the getter, or `null` if the getter could not be
-  /// resolved.
-  final Member member;
-
-  MemberGetterNode(this.member);
-
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-
-  @override
-  String toString() {
-    return '$member.getter';
-  }
-}
-
-/// A reference to the setter represented by the [member].
-/// The [member] might be either a setter itself, or a field.
-class MemberSetterNode implements TreeNode {
-  /// The member representing the setter, or `null` if the setter could not be
-  /// resolved.
-  final Member member;
-
-  MemberSetterNode(this.member);
-
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-
-  @override
-  String toString() {
-    return '$member.setter';
-  }
-}
-
-/// The type of [TreeNode] node that is used as a marker for `null`.
-class NullNode implements TreeNode {
-  final String kind;
-
-  const NullNode(this.kind);
-
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-
-  @override
-  String toString() {
-    return '(null-$kind)';
-  }
-}
-
-/// The type of [DartType] node that is used as a marker for `null`.
-///
-/// It is used for import prefix identifiers, which are resolved to elements,
-/// but don't have any types.
-class NullType implements DartType {
-  const NullType();
-
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-
-  @override
-  String toString() {
-    return '(null-type)';
-  }
+  ResolutionData(
+      {this.argumentTypes,
+      this.combiner,
+      this.declaration,
+      this.inferredType,
+      this.invokeType,
+      this.isExplicitCall = false,
+      this.isImplicitCall = false,
+      this.isWriteReference = false,
+      this.literalType,
+      this.prefixInfo,
+      this.reference,
+      this.writeContext});
 }
 
 /// Type inference listener that records inferred types for later use by
 /// [ResolutionApplier].
-class ResolutionStorer {
-  /// The offset that is used when the actual offset is not know.
-  /// The consumer of information should not validate this offset.
-  static const UNKNOWN_OFFSET = -2;
+class ResolutionStorer<Location, Declaration, Reference, PrefixInfo>
+    extends TypeInferenceListener<Location, Declaration, Reference,
+        PrefixInfo> {
+  final Map<Location,
+      ResolutionData<DartType, Declaration, Reference, PrefixInfo>> _data;
 
-  final List<TreeNode> _declarations;
-  final List<Node> _references;
-  final List<DartType> _types;
+  final _stack = <Function>[];
 
-  /// Indices into [_references] which need to be filled in later.
-  final _deferredReferenceSlots = <int>[];
+  ResolutionStorer(this._data);
 
-  /// Indices into [_types] which need to be filled in later.
-  final _deferredTypeSlots = <int>[];
-
-  ResolutionStorer(this._declarations, this._references, this._types);
-
-  void asExpressionExit(AsExpression expression, DartType inferredType) {
-    _recordType(expression.type, expression.fileOffset);
-    _recordType(inferredType, expression.fileOffset);
+  void _store(Location location,
+      {List<DartType> argumentTypes,
+      Reference combiner,
+      Declaration declaration,
+      DartType inferredType,
+      DartType invokeType,
+      bool isExplicitCall = false,
+      bool isImplicitCall = false,
+      bool isWriteReference = false,
+      DartType literalType,
+      PrefixInfo prefixInfo,
+      Reference reference,
+      bool replace = false,
+      DartType writeContext}) {
+    if (!replace && _data.containsKey(location)) {
+      throw new StateError('Data already stored for offset $location');
+    }
+    _data[location] = new ResolutionData(
+        argumentTypes: argumentTypes,
+        combiner: combiner,
+        declaration: declaration,
+        inferredType: inferredType,
+        invokeType: invokeType,
+        isExplicitCall: isExplicitCall,
+        isImplicitCall: isImplicitCall,
+        isWriteReference: isWriteReference,
+        literalType: literalType,
+        prefixInfo: prefixInfo,
+        reference: reference,
+        writeContext: writeContext);
   }
 
-  void cascadeExpressionExit(Let expression, DartType inferredType) {
+  void _unstore(Location location) {
+    _data.remove(location) == null;
+  }
+
+  @override
+  void asExpressionExit(Location location, DartType inferredType) {
+    _store(location, literalType: inferredType, inferredType: inferredType);
+  }
+
+  @override
+  void cascadeExpressionExit(Location location, DartType inferredType) {
     // Overridden so that the type of the expression will not be recorded. We
     // don't need to record the type because the type is always the same as the
     // type of the target, and we don't have the appropriate offset so we can't
     // correctly apply the type even if we recorded it.
   }
 
-  void catchStatementEnter(Catch node) {
-    _recordType(node.guard, node.fileOffset);
+  @override
+  void catchStatementEnter(
+      Location location,
+      DartType guardType,
+      Location exceptionLocation,
+      DartType exceptionType,
+      Location stackTraceLocation,
+      DartType stackTraceType) {
+    _store(location, literalType: guardType);
 
-    VariableDeclaration exception = node.exception;
-    if (exception != null) {
-      _recordDeclaration(exception, exception.fileOffset);
-      _recordType(exception.type, exception.fileOffset);
+    if (exceptionLocation != null) {
+      _store(exceptionLocation, literalType: exceptionType);
     }
 
-    VariableDeclaration stackTrace = node.stackTrace;
-    if (stackTrace != null) {
-      _recordDeclaration(stackTrace, stackTrace.fileOffset);
-      _recordType(stackTrace.type, stackTrace.fileOffset);
+    if (stackTraceLocation != null) {
+      _store(stackTraceLocation, literalType: stackTraceType);
     }
   }
 
-  void constructorInvocationEnter(InvocationExpression expression,
-      String prefixName, DartType typeContext) {
-    _recordImportPrefix(prefixName);
-    _deferReference(expression.fileOffset);
-    _deferType(expression.fileOffset);
+  @override
+  void constructorInvocationEnter(Location location, DartType typeContext) {
+    _push((Reference expressionTarget, DartType inferredType) {
+      // A class reference may have already been stored at this location by
+      // storeClassReference.  We want to replace it with a constructor
+      // reference.
+      _unstore(location);
+      _store(location, inferredType: inferredType, reference: expressionTarget);
+    });
   }
 
+  @override
   void constructorInvocationExit(
-      InvocationExpression expression, DartType inferredType) {
-    _replaceType(inferredType);
-    if (expression is ConstructorInvocation) {
-      _replaceReference(expression.target);
-    } else if (expression is StaticInvocation) {
-      _replaceReference(expression.target);
-    } else {
-      throw new UnimplementedError('${expression.runtimeType}');
-    }
+      Location location, Reference expressionTarget, DartType inferredType) {
+    _pop()(expressionTarget, inferredType);
   }
 
-  void fieldInitializerEnter(FieldInitializer initializer) {
-    _recordReference(initializer.field, initializer.fileOffset);
+  @override
+  void fieldInitializerEnter(Location location, Reference initializerField) {
+    _store(location, reference: initializerField);
   }
 
-  /// Verifies that all deferred work has been completed.
   void finished() {
-    assert(_deferredTypeSlots.isEmpty);
+    assert(_stack.isEmpty);
   }
 
-  void forInStatementEnter(ForInStatement statement,
-      VariableDeclaration variable, Expression write) {
-    if (variable != null) {
-      _deferType(variable.fileOffset);
-      _recordDeclaration(variable, variable.fileOffset);
-    } else {
-      if (write is VariableSet) {
-        _recordReference(write.variable, write.fileOffset);
-        _recordType(write.variable.type, write.fileOffset);
-      } else if (write is PropertySet) {
-        Field field = write.interfaceTarget;
-        _recordReference(new MemberSetterNode(field), write.fileOffset);
-        _recordType(field.type, write.fileOffset);
-      } else if (write is StaticSet) {
-        Field field = write.target;
-        _recordReference(new MemberSetterNode(field), write.fileOffset);
-        _recordType(field.type, write.fileOffset);
+  @override
+  void forInStatementEnter(
+      Location location,
+      Location variableLocation,
+      Location writeLocation,
+      DartType writeType,
+      Declaration writeVariable,
+      Reference writeTarget) {
+    _push((DartType variableType) {
+      if (variableLocation != null) {
+        _store(variableLocation, inferredType: variableType);
       } else {
-        throw new UnimplementedError('(${write.runtimeType}) $write');
+        if (writeVariable != null) {
+          _store(writeLocation,
+              declaration: writeVariable, inferredType: writeType);
+        } else {
+          _store(writeLocation,
+              reference: writeTarget,
+              isWriteReference: true,
+              writeContext: writeType);
+        }
       }
-    }
+    });
   }
 
+  @override
   void forInStatementExit(
-      ForInStatement statement, VariableDeclaration variable) {
-    if (variable != null) {
-      _replaceType(variable.type);
-    }
+      Location location, bool variablePresent, DartType variableType) {
+    _pop()(variableType);
   }
 
-  void functionDeclarationEnter(FunctionDeclaration statement) {
-    _recordDeclaration(statement.variable, statement.fileOffset);
-  }
-
-  void functionExpressionEnter(
-      FunctionExpression expression, DartType typeContext) {
-    _recordDeclaration(expression, expression.fileOffset);
-  }
-
-  void functionExpressionExit(
-      FunctionExpression expression, DartType inferredType) {
-    // We don't need to record the inferred type.
-    // It is already set in the function declaration.
-  }
-
+  @override
   void genericExpressionEnter(
-      String expressionType, Expression expression, DartType typeContext) {}
+      String expressionType, Location location, DartType typeContext) {
+    super.genericExpressionEnter(expressionType, location, typeContext);
+  }
 
+  @override
   void genericExpressionExit(
-      String expressionType, Expression expression, DartType inferredType) {
-    _recordType(inferredType, expression.fileOffset);
+      String expressionType, Location location, DartType inferredType) {
+    _store(location, inferredType: inferredType);
+    super.genericExpressionExit(expressionType, location, inferredType);
   }
 
-  void ifNullBeforeRhs(Expression expression) {
-    _deferType(expression.fileOffset);
+  @override
+  void functionDeclarationExit(Location location, FunctionType inferredType) {
+    _store(location, inferredType: inferredType);
   }
 
-  void ifNullExit(Expression expression, DartType inferredType) {
-    _replaceType(inferredType);
+  @override
+  void nullLiteralExit(
+      Location location, bool isSynthetic, DartType inferredType) {
+    if (isSynthetic) return null;
+    super.nullLiteralExit(location, isSynthetic, inferredType);
   }
 
-  void indexAssignAfterReceiver(Expression write, DartType typeContext) {
-    _deferReference(write.fileOffset);
-    _recordType(const IndexAssignNullFunctionType(), write.fileOffset);
-    _recordType(const IndexAssignNullFunctionType(), write.fileOffset);
-    _recordType(new TypeArgumentsDartType(<DartType>[]), write.fileOffset);
-    _deferType(write.fileOffset);
+  @override
+  void indexAssignExit(Location location, Reference writeMember,
+      Reference combiner, DartType inferredType) {
+    _store(location,
+        reference: writeMember, inferredType: inferredType, combiner: combiner);
   }
 
-  void indexAssignExit(Expression expression, Expression write,
-      Member writeMember, Procedure combiner, DartType inferredType) {
-    _replaceReference(writeMember);
-    _replaceType(inferredType);
-    _recordReference(
-        combiner ?? const NullNode('assign-combiner'), write.fileOffset);
-    _recordType(inferredType, write.fileOffset);
-  }
-
-  void isExpressionExit(IsExpression expression, DartType inferredType) {
-    _recordType(expression.type, expression.fileOffset);
-    _recordType(inferredType, expression.fileOffset);
+  @override
+  void isExpressionExit(
+      Location location, DartType testedType, DartType inferredType) {
+    _store(location, literalType: testedType, inferredType: inferredType);
   }
 
   void isNotExpressionExit(
-      Not expression, DartType type, DartType inferredType) {
-    _recordType(type, expression.fileOffset);
-    _recordType(inferredType, expression.fileOffset);
+      Location location, DartType type, DartType inferredType) {
+    _store(location, literalType: type, inferredType: inferredType);
   }
 
-  void logicalExpressionBeforeRhs(LogicalExpression expression) {
-    _deferType(expression.fileOffset);
-  }
-
-  void logicalExpressionExit(
-      LogicalExpression expression, DartType inferredType) {
-    _replaceType(inferredType);
-  }
-
-  void methodInvocationBeforeArgs(Expression expression, bool isImplicitCall) {
-    if (!isImplicitCall) {
-      // When the invocation target is `VariableGet`, we record the target
-      // before arguments. To ensure this order for method invocations, we
-      // first record `null`, and then replace it on exit.
-      _deferReference(expression.fileOffset);
-      _deferType(expression.fileOffset); // callee type
-    }
-    _deferType(expression.fileOffset); // invoke type
-    _deferType(expression.fileOffset); // type arguments
-    _deferType(expression.fileOffset); // result type
-  }
-
+  @override
   void methodInvocationExit(
-      Expression expression,
-      Arguments arguments,
+      Location resultOffset,
+      List<DartType> argumentsTypes,
       bool isImplicitCall,
-      Member interfaceMember,
+      Reference interfaceMember,
       FunctionType calleeType,
       Substitution substitution,
       DartType inferredType) {
-    int resultOffset = arguments.fileOffset != -1
-        ? arguments.fileOffset
-        : expression.fileOffset;
-    _replaceType(inferredType, resultOffset);
-    _replaceType(new TypeArgumentsDartType(arguments.types), resultOffset);
-
     FunctionType invokeType = substitution == null
         ? calleeType
         : substitution.substituteType(calleeType.withoutTypeParameters);
-    _replaceType(invokeType, resultOffset);
 
-    if (!isImplicitCall) {
-      interfaceMember = _getRealTarget(interfaceMember);
-      _replaceReference(interfaceMember);
-      _replaceType(const NullType()); // callee type
-    }
+    _store(resultOffset,
+        inferredType: inferredType,
+        argumentTypes: argumentsTypes,
+        invokeType: invokeType,
+        isImplicitCall: isImplicitCall,
+        reference: interfaceMember);
+
+    super.genericExpressionExit("methodInvocation", resultOffset, inferredType);
   }
 
+  @override
   void methodInvocationExitCall(
-      Expression expression,
-      Arguments arguments,
+      Location resultOffset,
+      List<DartType> argumentsTypes,
       bool isImplicitCall,
       FunctionType calleeType,
       Substitution substitution,
       DartType inferredType) {
-    int resultOffset = arguments.fileOffset != -1
-        ? arguments.fileOffset
-        : expression.fileOffset;
-    _replaceType(inferredType, resultOffset);
-    _replaceType(new TypeArgumentsDartType(arguments.types), resultOffset);
-
     FunctionType invokeType = substitution == null
         ? calleeType
         : substitution.substituteType(calleeType.withoutTypeParameters);
-    _replaceType(invokeType, resultOffset);
 
-    if (!isImplicitCall) {
-      _replaceReference(const NullNode('explicit-call'));
-      _replaceType(const NullType()); // callee type
-    }
+    _store(resultOffset,
+        inferredType: inferredType,
+        argumentTypes: argumentsTypes,
+        invokeType: invokeType,
+        isImplicitCall: isImplicitCall);
+
+    super.genericExpressionExit("methodInvocation", resultOffset, inferredType);
   }
 
-  void propertyAssignEnter(
-      Expression expression, Expression write, DartType typeContext) {
-    _deferReference(write.fileOffset);
-    _deferType(write.fileOffset);
+  @override
+  void propertyAssignExit(Location location, Reference writeMember,
+      DartType writeContext, Reference combiner, DartType inferredType) {
+    _store(location,
+        isWriteReference: true,
+        reference: writeMember,
+        writeContext: writeContext,
+        combiner: combiner,
+        inferredType: inferredType);
   }
 
-  void propertyAssignExit(
-      Expression expression,
-      Expression write,
-      Member writeMember,
-      DartType writeContext,
-      Procedure combiner,
-      DartType inferredType) {
-    writeMember = _getRealTarget(writeMember);
-    _replaceReference(new MemberSetterNode(writeMember));
-    _replaceType(writeContext);
-    _recordReference(
-        combiner ?? const NullNode('assign-combiner'), write.fileOffset);
-    _recordType(inferredType, write.fileOffset);
-  }
-
+  @override
   void propertyGetExit(
-      Expression expression, Member member, DartType inferredType) {
-    _recordReference(new MemberGetterNode(member), expression.fileOffset);
+      Location location, Reference member, DartType inferredType) {
+    _store(location, reference: member, inferredType: inferredType);
   }
 
-  void propertyGetExitCall(Expression expression, DartType inferredType) {
-    _recordReference(const NullNode('explicit-call'), expression.fileOffset);
-    _recordType(const NullType(), expression.fileOffset);
+  @override
+  void propertyGetExitCall(Location location, DartType inferredType) {
+    _store(location, isExplicitCall: true);
   }
 
-  void redirectingInitializerEnter(RedirectingInitializer initializer) {
-    _recordReference(initializer.target, initializer.fileOffset);
+  @override
+  void redirectingInitializerEnter(
+      Location location, Reference initializerTarget) {
+    _store(location, reference: initializerTarget);
   }
 
-  void staticAssignEnter(
-      Expression expression,
-      String prefixName,
-      int targetOffset,
-      Class targetClass,
-      Expression write,
-      DartType typeContext) {
-    // if there was an import prefix, record it.
-    _recordImportPrefix(prefixName);
-    // If the static target is explicit (and is a class), record it.
-    if (targetClass != null) {
-      _recordReference(targetClass, targetOffset);
-      _recordType(targetClass.rawType, targetOffset);
-    }
-
-    _deferReference(write.fileOffset);
-    _deferType(write.fileOffset);
+  @override
+  void staticAssignEnter(Location location, DartType typeContext) {
+    _push((Reference writeMember, DartType writeContext, Reference combiner,
+        DartType inferredType) {
+      _store(location,
+          reference: writeMember,
+          isWriteReference: true,
+          writeContext: writeContext,
+          combiner: combiner,
+          inferredType: inferredType);
+    });
   }
 
-  void staticAssignExit(
-      Expression expression,
-      Expression write,
-      Member writeMember,
-      DartType writeContext,
-      Procedure combiner,
-      DartType inferredType) {
-    _replaceReference(new MemberSetterNode(writeMember));
-    _replaceType(writeContext);
-    _recordReference(
-        combiner ?? const NullNode('assign-combiner'), write.fileOffset);
-    _recordType(inferredType, write.fileOffset);
+  @override
+  void staticAssignExit(Location location, Reference writeMember,
+      DartType writeContext, Reference combiner, DartType inferredType) {
+    _pop()(writeMember, writeContext, combiner, inferredType);
   }
 
-  void staticGetEnter(StaticGet expression, String prefixName, int targetOffset,
-      Class targetClass, DartType typeContext) {
-    // if there was an import prefix, record it.
-    _recordImportPrefix(prefixName);
-    // If the static target is explicit (and is a class), record it.
-    if (targetClass != null) {
-      _recordReference(targetClass, targetOffset);
-      _recordType(targetClass.rawType, targetOffset);
-    }
+  @override
+  void staticGetEnter(Location location, DartType typeContext) {
+    _push(
+        (Location location, Reference expressionTarget, DartType inferredType) {
+      _store(location, reference: expressionTarget, inferredType: inferredType);
+    });
   }
 
-  void staticGetExit(StaticGet expression, DartType inferredType) {
-    _recordReference(
-        new MemberGetterNode(expression.target), expression.fileOffset);
+  @override
+  void staticGetExit(
+      Location location, Reference expressionTarget, DartType inferredType) {
+    _pop()(location, expressionTarget, inferredType);
   }
 
-  void staticInvocationEnter(StaticInvocation expression, String prefixName,
-      int targetOffset, Class targetClass, DartType typeContext) {
-    // if there was an import prefix, record it.
-    _recordImportPrefix(prefixName);
-    // If the static target is explicit (and is a class), record it.
-    if (targetClass != null) {
-      _recordReference(targetClass, targetOffset);
-      _recordType(targetClass.rawType, targetOffset);
-    }
-    // When the invocation target is `VariableGet`, we record the target
-    // before arguments. To ensure this order for method invocations, we
-    // first record `null`, and then replace it on exit.
-    _deferReference(expression.fileOffset);
-    // We are visiting a static invocation like: f(args), and we haven't visited
-    // args yet.
-    //
-    // The analyzer AST will expect a type for f at this point.  (It can't wait
-    // until later, because for all it knows, f is a method on `this`, and
-    // methods need a type for f at this point--see comments in
-    // [methodInvocationBeforeArgs]).  But the type isn't known yet (because it
-    // may depend on type inference based on arguments).
-    //
-    // So we add a `null` to our list of types; we'll update it with the actual
-    // type later.
-    _deferType(expression.fileOffset); // callee type
-    _deferType(expression.arguments.fileOffset); // invoke type
-    _deferType(expression.arguments.fileOffset); // type arguments
-    _deferType(expression.arguments.fileOffset); // result type
+  @override
+  void staticInvocationEnter(Location location,
+      Location expressionArgumentsLocation, DartType typeContext) {
+    _push((Reference expressionTarget,
+        List<DartType> expressionArgumentsTypes,
+        FunctionType calleeType,
+        Substitution substitution,
+        DartType inferredType) {
+      FunctionType invokeType = substitution == null
+          ? calleeType
+          : substitution.substituteType(calleeType.withoutTypeParameters);
+      _store(expressionArgumentsLocation,
+          invokeType: invokeType,
+          argumentTypes: expressionArgumentsTypes,
+          reference: expressionTarget,
+          inferredType: inferredType);
+    });
   }
 
+  @override
   void staticInvocationExit(
-      StaticInvocation expression,
+      Location location,
+      Reference expressionTarget,
+      List<DartType> expressionArgumentsTypes,
       FunctionType calleeType,
       Substitution substitution,
       DartType inferredType) {
-    _replaceType(inferredType);
-    _replaceReference(expression.target);
-    _replaceType(new TypeArgumentsDartType(expression.arguments.types));
-    FunctionType invokeType = substitution == null
-        ? calleeType
-        : substitution.substituteType(calleeType.withoutTypeParameters);
-    _replaceType(invokeType);
-    _replaceType(const NullType()); // callee type
+    _pop()(expressionTarget, expressionArgumentsTypes, calleeType, substitution,
+        inferredType);
   }
 
-  void stringConcatenationExit(
-      StringConcatenation expression, DartType inferredType) {
+  @override
+  void stringConcatenationExit(Location location, DartType inferredType) {
     // We don't need the type - we already know that it is String.
     // Moreover, the file offset for StringConcatenation is `-1`.
   }
 
-  void thisExpressionExit(ThisExpression expression, DartType inferredType) {}
+  @override
+  void thisExpressionExit(Location location, DartType inferredType) {}
 
-  void typeLiteralEnter(@override TypeLiteral expression, String prefixName,
-      DartType typeContext) {
-    // if there was an import prefix, record it.
-    _recordImportPrefix(prefixName);
+  @override
+  void typeLiteralEnter(Location location, DartType typeContext) {
+    _push((Reference expressionType, DartType inferredType) {
+      _store(location, reference: expressionType, inferredType: inferredType);
+    });
   }
 
-  void typeLiteralExit(TypeLiteral expression, DartType inferredType) {
-    _recordReference(expression.type, expression.fileOffset);
+  void typeLiteralExit(
+      Location location, Reference expressionType, DartType inferredType) {
+    _pop()(expressionType, inferredType);
   }
 
-  void variableAssignEnter(
-      Expression expression, DartType typeContext, Expression write) {
-    _deferReference(write.fileOffset);
-    _deferType(write.fileOffset);
+  @override
+  void variableAssignExit(Location location, DartType writeContext,
+      Declaration writeVariable, Reference combiner, DartType inferredType) {
+    _store(location,
+        declaration: writeVariable,
+        isWriteReference: true,
+        writeContext: writeContext,
+        combiner: combiner,
+        inferredType: inferredType);
   }
 
-  void variableAssignExit(Expression expression, DartType writeContext,
-      Expression write, Procedure combiner, DartType inferredType) {
-    _replaceReference(write is VariableSet
-        ? write.variable
-        : const NullNode('writable-variable'));
-    _replaceType(writeContext);
-    _recordReference(
-        combiner ?? const NullNode('assign-combiner'), write.fileOffset);
-    _recordType(inferredType, write.fileOffset);
-  }
-
-  void variableDeclarationEnter(VariableDeclaration statement) {
-    _recordDeclaration(statement, statement.fileOffset);
-    _deferType(statement.fileOffset);
-  }
-
+  @override
   void variableDeclarationExit(
-      VariableDeclaration statement, DartType inferredType) {
-    _replaceType(statement.type);
+      Location location, DartType statementType, DartType inferredType) {
+    _store(location, literalType: statementType, inferredType: inferredType);
   }
 
-  void variableGetExit(VariableGet expression, DartType inferredType) {
-    /// Return `true` if the given [variable] declaration occurs in a let
-    /// expression that is, or is part of, a cascade expression.
-    bool isInCascade(VariableDeclaration variable) {
-      TreeNode ancestor = variable.parent;
-      while (ancestor is Let) {
-        if (ancestor is ShadowCascadeExpression) {
-          return true;
-        }
-        ancestor = ancestor.parent;
-      }
-      return false;
-    }
-
-    VariableDeclaration variable = expression.variable;
-    if (isInCascade(variable)) {
+  @override
+  void variableGetExit(Location location, bool isInCascade,
+      Declaration expressionVariable, DartType inferredType) {
+    if (isInCascade) {
       return;
     }
-    _recordReference(variable, expression.fileOffset);
-    _recordType(inferredType, expression.fileOffset);
+    _store(location,
+        declaration: expressionVariable, inferredType: inferredType);
   }
 
-  /// Record `null` as the reference at the given [offset], and put the current
-  /// slot into the [_deferredReferenceSlots] stack.
-  void _deferReference(int offset) {
-    int slot = _recordReference(null, offset);
-    _deferredReferenceSlots.add(slot);
+  void _push(Function f) {
+    _stack.add(f);
   }
 
-  /// Record `null` as the type at the given [offset], and put the current
-  /// slot into the [_deferredTypeSlots] stack.
-  void _deferType(int offset) {
-    int slot = _recordType(null, offset);
-    _deferredTypeSlots.add(slot);
+  Function _pop() {
+    return _stack.removeLast();
   }
 
-  void _recordDeclaration(TreeNode declaration, int offset) {
-    _declarations.add(declaration);
+  @override
+  void storePrefixInfo(Location location, PrefixInfo prefixInfo) {
+    _store(location, prefixInfo: prefixInfo);
   }
 
-  /// If the [prefixName] is not `null` record the reference to it.
-  void _recordImportPrefix(String prefixName) {
-    if (prefixName != null) {
-      _recordReference(new ImportPrefixNode(prefixName), UNKNOWN_OFFSET);
-      _recordType(const NullType(), UNKNOWN_OFFSET);
-    }
-  }
-
-  int _recordReference(Node target, int offset) {
-    int slot = _references.length;
-    _references.add(target);
-    return slot;
-  }
-
-  int _recordType(DartType type, int offset) {
-    int slot = _types.length;
-    _types.add(type);
-    return slot;
-  }
-
-  void _replaceReference(Node reference) {
-    int slot = _deferredReferenceSlots.removeLast();
-    _references[slot] = reference;
-  }
-
-  void _replaceType(DartType type, [int newOffset = -1]) {
-    int slot = _deferredTypeSlots.removeLast();
-    _types[slot] = type;
-  }
-
-  /// If the [member] is a forwarding stub, return the target it forwards to.
-  /// Otherwise return the given [member].
-  static Member _getRealTarget(Member member) {
-    if (member is Procedure && member.isForwardingStub) {
-      return member.forwardingStubInterfaceTarget;
-    }
-    return member;
+  @override
+  void storeClassReference(
+      Location location, Reference reference, DartType rawType) {
+    // TODO(paulberry): would it be better to use literalType?
+    _store(location, reference: reference, inferredType: rawType);
   }
 }
 
diff --git a/pkg/analyzer/lib/src/generated/declaration_resolver.dart b/pkg/analyzer/lib/src/generated/declaration_resolver.dart
index 27e5169..ba1885e 100644
--- a/pkg/analyzer/lib/src/generated/declaration_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/declaration_resolver.dart
@@ -91,10 +91,7 @@
   Object visitBlockFunctionBody(BlockFunctionBody node) {
     if (_isBodyToCreateElementsFor(node)) {
       _walker.consumeLocalElements();
-      // With kernel local elements are created in resolution applier.
-      if (!_applyKernelTypes) {
-        node.accept(_walker.elementBuilder);
-      }
+      node.accept(_walker.elementBuilder);
       return null;
     } else {
       return super.visitBlockFunctionBody(node);
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 86a305f..204542e 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -209,24 +209,6 @@
    */
   ClassElementImpl _enclosingClass;
 
-  ClassElement get enclosingClass => _enclosingClass;
-
-  /**
-   * For consumers of error verification as a library, (currently just the
-   * angular plugin), expose a setter that can make the errors reported more
-   * accurate when dangling code snippets are being resolved from a class
-   * context. Note that this setter is very defensive for potential misuse; it
-   * should not be modified in the middle of visiting a tree and requires an
-   * analyzer-provided Impl instance to work.
-   */
-  set enclosingClass(ClassElement classElement) {
-    assert(classElement is ClassElementImpl);
-    assert(_enclosingClass == null);
-    assert(_enclosingEnum == null);
-    assert(_enclosingFunction == null);
-    _enclosingClass = classElement;
-  }
-
   /**
    * The enum containing the AST nodes being visited, or `null` if we are not
    * in the scope of an enum.
@@ -345,6 +327,24 @@
     _options = _currentLibrary.context.analysisOptions;
   }
 
+  ClassElement get enclosingClass => _enclosingClass;
+
+  /**
+   * For consumers of error verification as a library, (currently just the
+   * angular plugin), expose a setter that can make the errors reported more
+   * accurate when dangling code snippets are being resolved from a class
+   * context. Note that this setter is very defensive for potential misuse; it
+   * should not be modified in the middle of visiting a tree and requires an
+   * analyzer-provided Impl instance to work.
+   */
+  set enclosingClass(ClassElement classElement) {
+    assert(classElement is ClassElementImpl);
+    assert(_enclosingClass == null);
+    assert(_enclosingEnum == null);
+    assert(_enclosingFunction == null);
+    _enclosingClass = classElement;
+  }
+
   @override
   Object visitAnnotation(Annotation node) {
     _checkForInvalidAnnotationFromDeferredLibrary(node);
@@ -1619,6 +1619,57 @@
   }
 
   /**
+   * Check that return statements without expressions are not in a generative
+   * constructor and the return type is not assignable to `null`; that is, we
+   * don't have `return;` if the enclosing method has a non-void containing
+   * return type.
+   *
+   * See [CompileTimeErrorCode.RETURN_IN_GENERATIVE_CONSTRUCTOR],
+   * [StaticWarningCode.RETURN_WITHOUT_VALUE], and
+   * [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE].
+   */
+  void _checkForAllEmptyReturnStatementErrorCodes(
+      ReturnStatement statement, DartType expectedReturnType) {
+    if (_inGenerator) {
+      return;
+    }
+    if (_options.strongMode) {
+      var returnType = _inAsync
+          ? expectedReturnType.flattenFutures(_typeSystem)
+          : expectedReturnType;
+      if (returnType.isDynamic ||
+          returnType.isDartCoreNull ||
+          returnType.isVoid) {
+        return;
+      }
+    } else {
+      // TODO(leafp): Delete this non-strong path
+      if (_inAsync) {
+        if (expectedReturnType.isDynamic || expectedReturnType.isVoid) {
+          return;
+        }
+        if (expectedReturnType is InterfaceType &&
+            expectedReturnType.isDartAsyncFuture) {
+          DartType futureArgument = expectedReturnType.typeArguments[0];
+          if (futureArgument.isDynamic ||
+              futureArgument.isDartCoreNull ||
+              futureArgument.isVoid ||
+              futureArgument.isObject) {
+            return;
+          }
+        }
+      } else if (expectedReturnType.isDynamic || expectedReturnType.isVoid) {
+        return;
+      }
+    }
+    // If we reach here, this is an invalid return
+    _hasReturnWithoutValue = true;
+    _errorReporter.reportErrorForNode(
+        StaticWarningCode.RETURN_WITHOUT_VALUE, statement);
+    return;
+  }
+
+  /**
    * Verify that the given [constructor] declaration does not violate any of the
    * error codes relating to the initialization of fields in the enclosing
    * class.
@@ -2307,7 +2358,8 @@
    *
    * Check that return statements without expressions are not in a generative
    * constructor and the return type is not assignable to `null`; that is, we
-   * don't have `return;` if the enclosing method has a return type.
+   * don't have `return;` if the enclosing method has a non-void containing
+   * return type.
    *
    * Check that the return type matches the type of the declared return type in
    * the enclosing method or function.
@@ -2322,6 +2374,7 @@
         ? DynamicTypeImpl.instance
         : functionType.returnType;
     Expression returnExpression = statement.expression;
+
     // RETURN_IN_GENERATIVE_CONSTRUCTOR
     bool isGenerativeConstructor(ExecutableElement element) =>
         element is ConstructorElement && !element.isFactory;
@@ -2336,34 +2389,7 @@
     }
     // RETURN_WITHOUT_VALUE
     if (returnExpression == null) {
-      if (_inGenerator) {
-        return;
-      } else if (_inAsync) {
-        if (expectedReturnType.isDynamic || expectedReturnType.isVoid) {
-          return;
-        }
-        if (expectedReturnType is InterfaceType &&
-            expectedReturnType.isDartAsyncFuture) {
-          DartType futureArgument = expectedReturnType.typeArguments[0];
-          if (futureArgument.isDynamic ||
-              futureArgument.isDartCoreNull ||
-              futureArgument.isVoid ||
-              futureArgument.isObject) {
-            return;
-          }
-        }
-      } else if (expectedReturnType.isDynamic ||
-          expectedReturnType.isVoid ||
-          (expectedReturnType.isDartCoreNull && _options.strongMode)) {
-        // TODO(leafp): Empty returns shouldn't be allowed for Null in strong
-        // mode either once we allow void as a type argument.  But for now, the
-        // only type we can validly infer for f.then((_) {print("hello");}) is
-        // Future<Null>, so we allow this.
-        return;
-      }
-      _hasReturnWithoutValue = true;
-      _errorReporter.reportErrorForNode(
-          StaticWarningCode.RETURN_WITHOUT_VALUE, statement);
+      _checkForAllEmptyReturnStatementErrorCodes(statement, expectedReturnType);
       return;
     } else if (_inGenerator) {
       // RETURN_IN_GENERATOR
@@ -2371,6 +2397,7 @@
           CompileTimeErrorCode.RETURN_IN_GENERATOR,
           statement,
           [_inAsync ? "async*" : "sync*"]);
+      return;
     }
 
     _checkForReturnOfInvalidType(returnExpression, expectedReturnType);
@@ -4837,8 +4864,10 @@
     if (_hasReturnWithoutValue) {
       return;
     }
-    if (_returnsWith.isNotEmpty && _returnsWithout.isNotEmpty) {
-      for (ReturnStatement returnWith in _returnsWith) {
+    var nonVoidReturnsWith =
+        _returnsWith.where((stmt) => !getStaticType(stmt.expression).isVoid);
+    if (nonVoidReturnsWith.isNotEmpty && _returnsWithout.isNotEmpty) {
+      for (ReturnStatement returnWith in nonVoidReturnsWith) {
         _errorReporter.reportErrorForToken(
             StaticWarningCode.MIXED_RETURN_TYPES, returnWith.returnKeyword);
       }
@@ -5647,7 +5676,7 @@
    * See [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE].
    */
   void _checkForReturnOfInvalidType(
-      Expression returnExpression, DartType expectedReturnType,
+      Expression returnExpression, DartType expectedType,
       {bool isArrowFunction = false}) {
     if (_enclosingFunction == null) {
       return;
@@ -5658,19 +5687,79 @@
       // of the return type.  So no need to do any further checking.
       return;
     }
+    if (_options.strongMode) {
+      if (returnExpression == null) {
+        return; // Empty returns are handled elsewhere
+      }
+
+      DartType expressionType = getStaticType(returnExpression);
+
+      void reportTypeError() {
+        String displayName = _enclosingFunction.displayName;
+
+        if (displayName.isEmpty) {
+          _errorReporter.reportTypeErrorForNode(
+              StaticTypeWarningCode.RETURN_OF_INVALID_TYPE_FROM_CLOSURE,
+              returnExpression,
+              [expressionType, expectedType]);
+        } else {
+          _errorReporter.reportTypeErrorForNode(
+              StaticTypeWarningCode.RETURN_OF_INVALID_TYPE,
+              returnExpression,
+              [expressionType, expectedType, displayName]);
+        }
+      }
+
+      var toType = expectedType;
+      var fromType = expressionType;
+
+      if (isArrowFunction) {
+        if (_inAsync && toType.flattenFutures(_typeSystem).isVoid) {
+          return;
+        } else if (toType.isVoid) {
+          return;
+        }
+      }
+
+      if (toType.isDynamic) {
+        return;
+      }
+
+      if (toType.isVoid) {
+        if (fromType.isVoid) {
+          return;
+        }
+        if (!_inAsync && fromType.isDynamic ||
+            fromType.isDartCoreNull ||
+            fromType.isBottom) {
+          return;
+        }
+      } else if (!fromType.isVoid) {
+        if (_inAsync) {
+          fromType = _typeProvider.futureType
+              .instantiate(<DartType>[fromType.flattenFutures(_typeSystem)]);
+        }
+        if (_expressionIsAssignableAtType(returnExpression, fromType, toType)) {
+          return;
+        }
+      }
+      reportTypeError();
+      return;
+    }
+    // TODO(leafp): Delete this non Dart 2 path
     DartType staticReturnType = _computeReturnTypeForMethod(returnExpression);
     String displayName = _enclosingFunction.displayName;
 
     void reportTypeError() => _errorReporter.reportTypeErrorForNode(
         StaticTypeWarningCode.RETURN_OF_INVALID_TYPE,
         returnExpression,
-        [staticReturnType, expectedReturnType, displayName]);
+        [staticReturnType, expectedType, displayName]);
     void reportTypeErrorFromClosure() => _errorReporter.reportTypeErrorForNode(
         StaticTypeWarningCode.RETURN_OF_INVALID_TYPE_FROM_CLOSURE,
         returnExpression,
-        [staticReturnType, expectedReturnType]);
+        [staticReturnType, expectedType]);
 
-    if (expectedReturnType.isVoid) {
+    if (expectedType.isVoid) {
       if (isArrowFunction) {
         // "void f(..) => e" admits all types for "e".
         return;
@@ -5691,10 +5780,10 @@
 
     // TODO(mfairhurst) Make this stricter once codebases are compliant.
     final invalidVoidReturn = staticReturnType.isVoid &&
-        !(expectedReturnType.isVoid || expectedReturnType.isDynamic);
+        !(expectedType.isVoid || expectedType.isDynamic);
     if (!invalidVoidReturn &&
         _expressionIsAssignableAtType(
-            returnExpression, staticReturnType, expectedReturnType)) {
+            returnExpression, staticReturnType, expectedType)) {
       return;
     }
     if (displayName.isEmpty) {
diff --git a/pkg/analyzer/lib/src/generated/parser.dart b/pkg/analyzer/lib/src/generated/parser.dart
index 1a5a68a..9422646 100644
--- a/pkg/analyzer/lib/src/generated/parser.dart
+++ b/pkg/analyzer/lib/src/generated/parser.dart
@@ -4637,7 +4637,7 @@
       Token token = getAndAdvance();
       int value = null;
       try {
-        value = int.parse(token.lexeme.substring(2), radix: 16);
+        value = int.parse(token.lexeme);
       } on FormatException {
         // The invalid format should have been reported by the scanner.
       }
diff --git a/pkg/analyzer/lib/src/generated/parser_fasta.dart b/pkg/analyzer/lib/src/generated/parser_fasta.dart
index 69905bb..6f5e77a 100644
--- a/pkg/analyzer/lib/src/generated/parser_fasta.dart
+++ b/pkg/analyzer/lib/src/generated/parser_fasta.dart
@@ -110,7 +110,7 @@
     currentToken = fastaParser.parseClassMember(currentToken);
     ClassDeclaration declaration = astBuilder.classDeclaration;
     astBuilder.classDeclaration = null;
-    return declaration.members[0];
+    return declaration.members.isNotEmpty ? declaration.members[0] : null;
   }
 
   @override
@@ -130,7 +130,9 @@
   @override
   CompilationUnit parseCompilationUnit2() {
     currentToken = fastaParser.parseUnit(currentToken);
-    return astBuilder.pop();
+    CompilationUnitImpl compilationUnit = astBuilder.pop();
+    compilationUnit.localDeclarations = astBuilder.localDeclarations;
+    return compilationUnit;
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 09d4a84..663b76e 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -1186,7 +1186,30 @@
       if (body.isGenerator) {
         return;
       }
-      // Check that the type is resolvable, and is not "void"
+
+      if (_typeSystem is StrongTypeSystemImpl) {
+        // Check that the type is resolvable, and is not "void"
+        DartType returnTypeType = returnType.type;
+        if (returnTypeType == null) {
+          return;
+        }
+
+        var flattenedType = body.isAsynchronous
+            ? returnTypeType.flattenFutures(_typeSystem)
+            : returnTypeType;
+        if (flattenedType.isDynamic ||
+            flattenedType.isDartCoreNull ||
+            flattenedType.isVoid) {
+          return;
+        }
+        // Check the block for a return statement, if not, create the hint
+        if (!ExitDetector.exits(body)) {
+          _errorReporter.reportErrorForNode(HintCode.MISSING_RETURN, returnType,
+              [returnTypeType.displayName]);
+        }
+      }
+      // TODO(leafp): Delete this non-strong mode path
+      // Check that the type is resolvable and not "void"
       DartType returnTypeType = returnType.type;
       if (returnTypeType == null ||
           returnTypeType.isVoid ||
diff --git a/pkg/analyzer/lib/src/kernel/resynthesize.dart b/pkg/analyzer/lib/src/kernel/resynthesize.dart
index 43cb699..876f47d 100644
--- a/pkg/analyzer/lib/src/kernel/resynthesize.dart
+++ b/pkg/analyzer/lib/src/kernel/resynthesize.dart
@@ -372,7 +372,8 @@
     }
 
     // Replace Analyzer type parameters with type arguments.
-    throw new UnimplementedError('TODO(paulberry)');
+    throw new UnimplementedError(
+        'TODO(paulberry): resynthesize generic typedef');
   }
 
   /// Return the [TypeParameterElement] for the given [kernelTypeParameter].
diff --git a/pkg/analyzer/lib/src/pubspec/pubspec_validator.dart b/pkg/analyzer/lib/src/pubspec/pubspec_validator.dart
index bb05401..47bdf9f 100644
--- a/pkg/analyzer/lib/src/pubspec/pubspec_validator.dart
+++ b/pkg/analyzer/lib/src/pubspec/pubspec_validator.dart
@@ -74,6 +74,13 @@
    * [assetPath] or in a subdirectory of the parent of the file.
    */
   bool _assetExistsAtPath(String assetPath) {
+    // Check for asset directories.
+    Folder assetDirectory = provider.getFolder(assetPath);
+    if (assetDirectory.exists) {
+      return true;
+    }
+
+    // Else, check for an asset file.
     File assetFile = provider.getFile(assetPath);
     if (assetFile.exists) {
       return true;
@@ -159,15 +166,16 @@
               if (entry.startsWith('packages/')) {
                 // TODO(brianwilkerson) Add validation of package references.
               } else {
+                bool isDirectoryEntry = entry.endsWith("/");
                 String normalizedEntry =
                     context.joinAll(path.posix.split(entry));
                 String assetPath = context.join(packageRoot, normalizedEntry);
                 if (!_assetExistsAtPath(assetPath)) {
+                  ErrorCode errorCode = isDirectoryEntry
+                      ? PubspecWarningCode.ASSET_DIRECTORY_DOES_NOT_EXIST
+                      : PubspecWarningCode.ASSET_DOES_NOT_EXIST;
                   _reportErrorForNode(
-                      reporter,
-                      entryValue,
-                      PubspecWarningCode.ASSET_DOES_NOT_EXIST,
-                      [entryValue.value]);
+                      reporter, entryValue, errorCode, [entryValue.value]);
                 }
               }
             } else {
diff --git a/pkg/analyzer/lib/src/pubspec/pubspec_warning_code.dart b/pkg/analyzer/lib/src/pubspec/pubspec_warning_code.dart
index d4d4c2d..0e3461b 100644
--- a/pkg/analyzer/lib/src/pubspec/pubspec_warning_code.dart
+++ b/pkg/analyzer/lib/src/pubspec/pubspec_warning_code.dart
@@ -23,6 +23,18 @@
           correction: "Try creating the file or fixing the path to the file.");
 
   /**
+   * A code indicating that a specified asset directory does not exist.
+   *
+   * Parameters:
+   * 0: the path to the asset directory as given in the file.
+   */
+  static const PubspecWarningCode ASSET_DIRECTORY_DOES_NOT_EXIST =
+      const PubspecWarningCode('ASSET_DIRECTORY_DOES_NOT_EXIST',
+          "The asset directory {0} does not exist.",
+          correction: "Try creating the directory or fixing the path to the "
+              "directory.");
+
+  /**
    * A code indicating that the value of the asset field is not a list.
    */
   static const PubspecWarningCode ASSET_FIELD_NOT_LIST = const PubspecWarningCode(
diff --git a/pkg/analyzer/lib/src/test_utilities/resource_provider_mixin.dart b/pkg/analyzer/lib/src/test_utilities/resource_provider_mixin.dart
index d89deab..bee56b9 100644
--- a/pkg/analyzer/lib/src/test_utilities/resource_provider_mixin.dart
+++ b/pkg/analyzer/lib/src/test_utilities/resource_provider_mixin.dart
@@ -6,6 +6,7 @@
 
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/memory_file_system.dart';
+import 'package:analyzer/src/dart/analysis/context_locator.dart';
 
 /**
  * A mixin for test classes that adds a [ResourceProvider] and utility methods
@@ -15,6 +16,24 @@
 class ResourceProviderMixin {
   MemoryResourceProvider resourceProvider = new MemoryResourceProvider();
 
+  String convertPath(String path) => resourceProvider.convertPath(path);
+
+  /// Convert the given [path] to be a valid import uri for this provider's path context.
+  String convertPathForImport(String path) {
+    path = resourceProvider.convertPath(path);
+
+    // On Windows, absolute import paths are not quite the same as a normal fs path.
+    // C:\test.dart must be imported as one of:
+    //   import "file:///C:/test.dart"
+    //   import "/C:/test.dart"
+    if (Platform.isWindows && resourceProvider.pathContext.isAbsolute(path)) {
+      // The .path on a file Uri is in the form "/C:/test.dart"
+      path = new Uri.file(path).path;
+    }
+
+    return path;
+  }
+
   void deleteFile(String path) {
     String convertedPath = resourceProvider.convertPath(path);
     resourceProvider.deleteFile(convertedPath);
@@ -35,6 +54,17 @@
     return resourceProvider.getFolder(convertedPath);
   }
 
+  String join(String part1,
+          [String part2,
+          String part3,
+          String part4,
+          String part5,
+          String part6,
+          String part7,
+          String part8]) =>
+      resourceProvider.pathContext
+          .join(part1, part2, part3, part4, part5, part6, part7, part8);
+
   void modifyFile(String path, String content) {
     String convertedPath = resourceProvider.convertPath(path);
     resourceProvider.modifyFile(convertedPath, content);
@@ -55,32 +85,13 @@
     return resourceProvider.newFolder(convertedPath);
   }
 
-  String join(String part1,
-          [String part2,
-          String part3,
-          String part4,
-          String part5,
-          String part6,
-          String part7,
-          String part8]) =>
-      resourceProvider.pathContext
-          .join(part1, part2, part3, part4, part5, part6, part7, part8);
+  File newOptionsFile(String directoryPath) {
+    return newFile(resourceProvider.pathContext
+        .join(directoryPath, ContextLocatorImpl.ANALYSIS_OPTIONS_NAME));
+  }
 
-  String convertPath(String path) => resourceProvider.convertPath(path);
-
-  /// Convert the given [path] to be a valid import uri for this provider's path context.
-  String convertPathForImport(String path) {
-    path = resourceProvider.convertPath(path);
-
-    // On Windows, absolute import paths are not quite the same as a normal fs path.
-    // C:\test.dart must be imported as one of:
-    //   import "file:///C:/test.dart"
-    //   import "/C:/test.dart"
-    if (Platform.isWindows && resourceProvider.pathContext.isAbsolute(path)) {
-      // The .path on a file Uri is in the form "/C:/test.dart"
-      path = new Uri.file(path).path;
-    }
-
-    return path;
+  File newPackagesFile(String directoryPath) {
+    return newFile(resourceProvider.pathContext
+        .join(directoryPath, ContextLocatorImpl.PACKAGES_FILE_NAME));
   }
 }
diff --git a/pkg/analyzer/test/file_system/overlay_file_system_test.dart b/pkg/analyzer/test/file_system/overlay_file_system_test.dart
new file mode 100644
index 0000000..e06fafd
--- /dev/null
+++ b/pkg/analyzer/test/file_system/overlay_file_system_test.dart
@@ -0,0 +1,784 @@
+// Copyright (c) 2018, 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:core';
+
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/file_system/memory_file_system.dart';
+import 'package:analyzer/file_system/overlay_file_system.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:meta/meta.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(FileTest);
+    defineReflectiveTests(FolderTest);
+    defineReflectiveTests(OverlayResourceProviderTest);
+  });
+}
+
+var _isFile = new isInstanceOf<File>();
+var _isFileSystemException = new isInstanceOf<FileSystemException>();
+var _isFolder = new isInstanceOf<Folder>();
+
+@reflectiveTest
+class FileTest extends OverlayTestSupport {
+  @failingTest
+  test_changes() {
+    // TODO(brianwilkerson) Implement this.
+    fail('Not tested');
+  }
+
+  test_copyTo_noOverlay() {
+    File file = _file(exists: true);
+    File targetFile =
+        provider.getFile(baseProvider.convertPath('/foo/test.dart'));
+    expect(targetFile.exists, isFalse);
+    file.copyTo(file.parent.parent);
+    expect(targetFile.exists, isTrue);
+  }
+
+  test_copyTo_onlyOverlay() {
+    File file = _file(exists: false);
+    provider.setOverlay(file.path, content: 'overlay', modificationStamp: 3);
+    File targetFile =
+        provider.getFile(baseProvider.convertPath('/foo/test.dart'));
+    expect(targetFile.exists, isFalse);
+    file.copyTo(file.parent.parent);
+    expect(targetFile.exists, isTrue);
+    expect(targetFile.readAsStringSync(), 'overlay');
+    provider.removeOverlay(targetFile.path);
+    expect(targetFile.exists, isFalse);
+  }
+
+  test_copyTo_withOverlay() {
+    File file = _file(exists: true, content: 'base');
+    provider.setOverlay(file.path, content: 'overlay', modificationStamp: 3);
+    File targetFile =
+        provider.getFile(baseProvider.convertPath('/foo/test.dart'));
+    expect(targetFile.exists, isFalse);
+    file.copyTo(file.parent.parent);
+    expect(targetFile.exists, isTrue);
+    expect(targetFile.readAsStringSync(), 'overlay');
+    provider.removeOverlay(targetFile.path);
+    expect(targetFile.exists, isTrue);
+    expect(targetFile.readAsStringSync(), 'base');
+  }
+
+  test_createSource() {
+    File file = _file(exists: true);
+    Source source = file.createSource();
+    expect(source, isNotNull);
+    expect(source.fullName, defaultFilePath);
+    expect(source.uri, new Uri.file(defaultFilePath));
+  }
+
+  test_delete_existing_withoutOverlay() {
+    File file = _file(exists: true);
+    expect(file.exists, isTrue);
+    file.delete();
+    expect(file.exists, isFalse);
+  }
+
+  test_delete_existing_withOverlay() {
+    File file = _file(exists: true, withOverlay: true);
+    expect(file.exists, isTrue);
+    file.delete();
+    expect(file.exists, isFalse);
+  }
+
+  test_delete_notExisting_withoutOverlay() {
+    File file = _file(exists: false);
+    expect(file.exists, isFalse);
+    expect(() => file.delete(), throwsA(_isFileSystemException));
+  }
+
+  test_delete_notExisting_withOverlay() {
+    File file = _file(exists: false, withOverlay: true);
+    expect(file.exists, isTrue);
+    file.delete();
+    expect(file.exists, isFalse);
+  }
+
+  test_exists_existing_withoutOverlay() {
+    File file = _file(exists: true);
+    expect(file.exists, isTrue);
+  }
+
+  test_exists_existing_withOverlay() {
+    File file = _file(exists: true, withOverlay: true);
+    expect(file.exists, isTrue);
+  }
+
+  test_exists_notExisting_withoutOverlay() {
+    File file = _file(exists: false);
+    expect(file.exists, isFalse);
+  }
+
+  test_exists_notExisting_withOverlay() {
+    File file = _file(exists: false, withOverlay: true);
+    expect(file.exists, isTrue);
+  }
+
+  test_isOrContains_false() {
+    File file = _file(exists: true);
+    expect(file.isOrContains(baseProvider.convertPath('/foo/bar/a.dart')),
+        isFalse);
+  }
+
+  test_isOrContains_true() {
+    File file = _file(exists: true);
+    expect(file.isOrContains(file.path), isTrue);
+  }
+
+  test_lengthSync_withoutOverlay() {
+    File file = _file(exists: true);
+    expect(file.lengthSync, 1);
+  }
+
+  test_lengthSync_withOverlay() {
+    File file = _file(exists: true, withOverlay: true);
+    expect(file.lengthSync, 3);
+  }
+
+  test_modificationStamp_existing_withoutOverlay() {
+    File file = _file(exists: true);
+    expect(file.modificationStamp, isNotNull);
+  }
+
+  test_modificationStamp_existing_withOverlay() {
+    File file = _file(exists: true, withOverlay: true);
+    expect(file.modificationStamp, 42);
+  }
+
+  test_modificationStamp_notExisting_withoutOverlay() {
+    File file = _file(exists: false);
+    expect(() => file.modificationStamp, throwsA(_isFileSystemException));
+  }
+
+  test_modificationStamp_notExisting_withOverlay() {
+    File file = _file(exists: false, withOverlay: true);
+    expect(file.modificationStamp, 42);
+  }
+
+  test_parent() {
+    Folder parent = _file(exists: true).parent;
+    expect(parent, isNotNull);
+    expect(parent.exists, isTrue);
+    expect(parent.path, defaultFolderPath);
+  }
+
+  test_readAsBytesSync_existing_withoutOverlay() {
+    File file = _file(exists: true);
+    expect(file.readAsBytesSync(), <int>[97]);
+  }
+
+  test_readAsBytesSync_existing_withOverlay() {
+    File file = _file(exists: true, withOverlay: true);
+    expect(file.readAsBytesSync(), <int>[98, 98, 98]);
+  }
+
+  test_readAsBytesSync_notExisting_withoutOverlay() {
+    File file = _file(exists: false);
+    expect(() => file.readAsBytesSync(), throwsA(_isFileSystemException));
+  }
+
+  test_readAsBytesSync_notExisting_withOverlay() {
+    File file = _file(exists: false, withOverlay: true);
+    expect(file.readAsBytesSync(), <int>[98, 98, 98]);
+  }
+
+  test_readAsStringSync_existing_withoutOverlay() {
+    File file = _file(exists: true);
+    expect(file.readAsStringSync(), 'a');
+  }
+
+  test_readAsStringSync_existing_withOverlay() {
+    File file = _file(exists: true, withOverlay: true);
+    expect(file.readAsStringSync(), 'bbb');
+  }
+
+  test_readAsStringSync_notExisting_withoutOverlay() {
+    File file = _file(exists: false);
+    expect(() {
+      file.readAsStringSync();
+    }, throwsA(_isFileSystemException));
+  }
+
+  test_readAsStringSync_notExisting_withOverlay() {
+    File file = _file(exists: false, withOverlay: true);
+    expect(file.readAsStringSync(), 'bbb');
+  }
+
+  test_renameSync_existingFile_conflictsWithFile() {
+    String oldPath = '/foo/bar/file.txt';
+    String newPath = baseProvider.convertPath('/foo/bar/new-file.txt');
+    File oldFile = _file(content: 'old', exists: true, path: oldPath);
+    File newFile = _file(content: 'new', exists: true, path: newPath);
+    oldFile.renameSync(newPath);
+    expect(oldFile.path, baseProvider.convertPath(oldPath));
+    expect(oldFile.exists, isFalse);
+    expect(newFile.path, newPath);
+    expect(newFile.exists, isTrue);
+    expect(newFile.readAsStringSync(), 'old');
+  }
+
+  test_renameSync_existingFile_conflictsWithFolder() {
+    String oldPath = '/foo/bar/file.txt';
+    String newPath = baseProvider.convertPath('/foo/bar/new-baz');
+    File oldFile = _file(exists: true, path: oldPath);
+    Folder newFolder = _folder(exists: true, path: newPath);
+    expect(() => oldFile.renameSync(newPath), throwsA(_isFileSystemException));
+    expect(oldFile.path, baseProvider.convertPath(oldPath));
+    expect(oldFile.exists, isTrue);
+    expect(newFolder.path, newPath);
+    expect(newFolder.exists, isTrue);
+  }
+
+  test_renameSync_existingFile_withoutOverlay() {
+    String oldPath = '/foo/bar/file.txt';
+    String newPath = baseProvider.convertPath('/foo/bar/new-file.txt');
+    File oldFile = _file(exists: true, path: oldPath);
+    File newFile = oldFile.renameSync(newPath);
+    expect(oldFile.path, baseProvider.convertPath(oldPath));
+    expect(oldFile.exists, isFalse);
+    expect(newFile.path, newPath);
+    expect(newFile.exists, isTrue);
+    expect(newFile.readAsStringSync(), 'a');
+  }
+
+  test_renameSync_existingFile_withOverlay() {
+    String oldPath = '/foo/bar/file.txt';
+    String newPath = baseProvider.convertPath('/foo/bar/new-file.txt');
+    File oldFile = _file(exists: true, path: oldPath, withOverlay: true);
+    File newFile = oldFile.renameSync(newPath);
+    expect(oldFile.path, baseProvider.convertPath(oldPath));
+    expect(oldFile.exists, isFalse);
+    expect(newFile.path, newPath);
+    expect(newFile.exists, isTrue);
+    expect(newFile.readAsStringSync(), 'bbb');
+  }
+
+  test_renameSync_notExisting_withoutOverlay() {
+    String oldPath = '/foo/bar/file.txt';
+    String newPath = baseProvider.convertPath('/foo/bar/new-file.txt');
+    File oldFile = _file(exists: true, path: oldPath);
+    File newFile = oldFile.renameSync(newPath);
+    expect(oldFile.path, baseProvider.convertPath(oldPath));
+    expect(oldFile.exists, isFalse);
+    expect(newFile.path, newPath);
+    expect(newFile.exists, isTrue);
+    expect(newFile.readAsStringSync(), 'a');
+  }
+
+  test_renameSync_notExisting_withOverlay() {
+    String oldPath = '/foo/bar/file.txt';
+    String newPath = baseProvider.convertPath('/foo/bar/new-file.txt');
+    File oldFile = _file(exists: false, path: oldPath, withOverlay: true);
+    File newFile = oldFile.renameSync(newPath);
+    expect(oldFile.path, baseProvider.convertPath(oldPath));
+    expect(oldFile.exists, isFalse);
+    expect(newFile.path, newPath);
+    expect(newFile.exists, isTrue);
+    expect(newFile.readAsStringSync(), 'bbb');
+  }
+
+  @failingTest
+  void test_resolveSymbolicLinksSync_links_existingFile_withoutOverlay() {
+    fail('Not tested');
+    // TODO(brianwilkerson) Decide how to test this given that we cannot
+    // create a link in a MemoryResourceProvider.
+//    // Create a file at '/temp/a/b/test.txt'.
+//    String pathA = baseProvider.convertPath('/temp/a');
+//    String pathB = baseProvider.convertPath('/temp/a/b');
+//    baseProvider.newFolder(pathB);
+//    String filePath = baseProvider.convertPath('/temp/a/b/test.txt');
+//    File testFile = baseProvider.newFile(filePath, 'test');
+//
+//    // Create a symbolic link from '/temp/c/d' to '/temp/a'.
+//    String pathC = baseProvider.convertPath('/temp/c');
+//    String pathD = baseProvider.convertPath('/temp/c/d');
+//    new io.Link(pathD).createSync(pathA, recursive: true);
+//
+//    // Create a symbolic link from '/temp/e/f' to '/temp/c'.
+//    String pathE = baseProvider.convertPath('/temp/e');
+//    String pathF = baseProvider.convertPath('/temp/e/f');
+//    new io.Link(pathF).createSync(pathC, recursive: true);
+//
+//    // Resolve the path '/temp/e/f/d/b/test.txt' to '/temp/a/b/test.txt'.
+//    String linkPath = baseProvider.convertPath('/temp/e/f/d/b/test.txt');
+//    File file = baseProvider.getFile(linkPath);
+//    expect(file.resolveSymbolicLinksSync().path,
+//        testFile.resolveSymbolicLinksSync());
+  }
+
+  void test_resolveSymbolicLinksSync_noLinks_existingFile_withoutOverlay() {
+    _resolveSymbolicLinksSync_noLinks(
+        _file(exists: true, path: '/temp/a/b/test.txt'));
+  }
+
+  void test_resolveSymbolicLinksSync_noLinks_existingFile_withOverlay() {
+    _resolveSymbolicLinksSync_noLinks(
+        _file(exists: true, path: '/temp/a/b/test.txt', withOverlay: true));
+  }
+
+  void test_resolveSymbolicLinksSync_noLinks_notExisting_withoutOverlay() {
+    _resolveSymbolicLinksSync_noLinks(
+        _file(exists: false, path: '/temp/a/b/test.txt'));
+  }
+
+  void test_resolveSymbolicLinksSync_noLinks_notExisting_withOverlay() {
+    _resolveSymbolicLinksSync_noLinks(
+        _file(exists: false, path: '/temp/a/b/test.txt', withOverlay: true));
+  }
+
+  test_shortName() {
+    expect(_file(exists: true).shortName, 'test.dart');
+  }
+
+  test_toUri() {
+    File file = _file(exists: true);
+    expect(file.toUri(), new Uri.file(file.path));
+  }
+
+  test_writeAsBytesSync_withoutOverlay() {
+    File file = _file(exists: true);
+    file.writeAsBytesSync(<int>[99, 99]);
+    expect(file.readAsBytesSync(), <int>[99, 99]);
+  }
+
+  test_writeAsBytesSync_withOverlay() {
+    File file = _file(exists: true, withOverlay: true);
+    expect(() => file.writeAsBytesSync(<int>[99, 99]),
+        throwsA(_isFileSystemException));
+  }
+
+  test_writeAsStringSync_withoutOverlay() {
+    File file = _file(exists: true);
+    file.writeAsStringSync('cc');
+    expect(file.readAsStringSync(), 'cc');
+  }
+
+  test_writeAsStringSync_withOverlay() {
+    File file = _file(exists: true, withOverlay: true);
+    expect(() => file.writeAsStringSync('cc'), throwsA(_isFileSystemException));
+  }
+
+  void _resolveSymbolicLinksSync_noLinks(File file) {
+    //
+    // On some platforms the path to the temp directory includes a symbolic
+    // link. We remove that from the equation before creating the File in order
+    // to show that the operation works as expected without symbolic links.
+    //
+    file = baseProvider.getFile(file.resolveSymbolicLinksSync().path);
+    expect(file.resolveSymbolicLinksSync(), file);
+  }
+}
+
+@reflectiveTest
+class FolderTest extends OverlayTestSupport {
+  test_canonicalizePath_dot_absolute() {
+    Folder folder = _folder(exists: true, path: '/foo/bar');
+    expect(folder.canonicalizePath(baseProvider.convertPath('/a/b/./c')),
+        equals(baseProvider.convertPath('/a/b/c')));
+  }
+
+  test_canonicalizePath_dot_relative() {
+    Folder folder = _folder(exists: true, path: '/foo/bar');
+    expect(folder.canonicalizePath(baseProvider.convertPath('./baz')),
+        equals(baseProvider.convertPath('/foo/bar/baz')));
+  }
+
+  test_canonicalizePath_dotDot_absolute() {
+    Folder folder = _folder(exists: true, path: '/foo/bar');
+    expect(folder.canonicalizePath(baseProvider.convertPath('/a/b/../c')),
+        equals(baseProvider.convertPath('/a/c')));
+  }
+
+  test_canonicalizePath_dotDot_relative() {
+    Folder folder = _folder(exists: true, path: '/foo/bar');
+    expect(folder.canonicalizePath(baseProvider.convertPath('../baz')),
+        equals(baseProvider.convertPath('/foo/baz')));
+  }
+
+  test_canonicalizePath_simple_absolute() {
+    Folder folder = _folder(exists: true, path: '/foo/bar');
+    expect(folder.canonicalizePath(baseProvider.convertPath('/baz')),
+        equals(baseProvider.convertPath('/baz')));
+  }
+
+  test_canonicalizePath_simple_relative() {
+    Folder folder = _folder(exists: true, path: '/foo/bar');
+    expect(folder.canonicalizePath(baseProvider.convertPath('baz')),
+        equals(baseProvider.convertPath('/foo/bar/baz')));
+  }
+
+  @failingTest
+  test_changes() {
+    // TODO(brianwilkerson) Implement this.
+    fail('Not tested');
+  }
+
+  test_contains() {
+    Folder folder = _folder(exists: true);
+    expect(folder.contains(defaultFilePath), isTrue);
+  }
+
+  test_copyTo() {
+    String sourcePath = baseProvider.convertPath('/source');
+    String subdirPath = baseProvider.convertPath('/source/subdir');
+    baseProvider.newFolder(sourcePath);
+    baseProvider.newFolder(subdirPath);
+    baseProvider.newFile(
+        baseProvider.convertPath('/source/file1.txt'), 'file1');
+    baseProvider.newFile(
+        baseProvider.convertPath('/source/subdir/file2.txt'), 'file2');
+    Folder source = provider.getFolder(sourcePath);
+    Folder destination =
+        provider.getFolder(baseProvider.convertPath('/destination'));
+
+    Folder copy = source.copyTo(destination);
+    expect(copy.parent, destination);
+    _verifyStructure(copy, source);
+  }
+
+  test_create() {
+    Folder folder = _folder(exists: false);
+    expect(folder.exists, isFalse);
+    folder.create();
+    expect(folder.exists, isTrue);
+  }
+
+  test_delete_existing() {
+    Folder folder = _folder(exists: true);
+    expect(folder.exists, isTrue);
+    folder.delete();
+    expect(folder.exists, isFalse);
+  }
+
+  test_delete_notExisting() {
+    Folder folder = _folder(exists: false);
+    expect(folder.exists, isFalse);
+    expect(() => folder.delete(), throwsA(new isInstanceOf<ArgumentError>()));
+  }
+
+  test_exists_false() {
+    Folder folder = _folder(exists: false);
+    expect(folder.exists, isFalse);
+  }
+
+  test_exists_true() {
+    Folder folder = _folder(exists: true);
+    expect(folder.exists, isTrue);
+  }
+
+  test_getChild_file_existing() {
+    Folder folder = _folder(exists: true);
+    _file(exists: true);
+    Resource child = folder.getChild(defaultFilePath);
+    expect(child, _isFile);
+  }
+
+  test_getChild_file_notExisting() {
+    Folder folder = _folder(exists: true);
+    Resource child = folder.getChild(defaultFilePath);
+    expect(child, _isFile);
+  }
+
+  test_getChild_folder() {
+    Folder folder = _folder(exists: true);
+    String childPath = provider.pathContext.join(folder.path, 'lib');
+    _folder(exists: true, path: childPath);
+    Resource child = folder.getChild(childPath);
+    expect(child, _isFolder);
+  }
+
+  test_getChildAssumingFile() {
+    Folder folder = _folder(exists: true);
+    File child = folder.getChildAssumingFile('README.md');
+    expect(child, isNotNull);
+  }
+
+  test_getChildAssumingFolder() {
+    Folder folder = _folder(exists: true);
+    Folder child = folder.getChildAssumingFolder('lib');
+    expect(child, isNotNull);
+  }
+
+  test_getChildren() {
+    Folder folder = _folder(exists: true);
+    Folder child1 = _folder(
+        exists: true, path: provider.pathContext.join(folder.path, 'lib'));
+    _file(exists: true, path: provider.pathContext.join(child1.path, 'a.dart'));
+    File child2 = _file(
+        exists: true, path: provider.pathContext.join(folder.path, 'b.dart'));
+    File child3 = _file(
+        exists: false,
+        path: provider.pathContext.join(folder.path, 'c.dart'),
+        withOverlay: true);
+    List<Resource> children = folder.getChildren();
+    expect(children, hasLength(3));
+    expect(children.map((resource) => resource.path),
+        unorderedEquals([child1.path, child2.path, child3.path]));
+  }
+
+  test_isOrContains_false() {
+    Folder folder = _folder(exists: true);
+    expect(folder.isOrContains(baseProvider.convertPath('/foo/baz')), isFalse);
+  }
+
+  test_isOrContains_true_child() {
+    Folder folder = _folder(exists: true);
+    expect(folder.isOrContains(defaultFilePath), isTrue);
+  }
+
+  test_isOrContains_true_same() {
+    Folder folder = _folder(exists: true);
+    expect(folder.isOrContains(folder.path), isTrue);
+  }
+
+  test_parent_ofNonRoot() {
+    Folder parent = _folder(exists: true).parent;
+    expect(parent, isNotNull);
+    expect(parent.exists, isTrue);
+    expect(parent.path, baseProvider.convertPath('/foo'));
+  }
+
+  test_parent_ofRoot() {
+    Folder parent = _folder(exists: true, path: '/').parent;
+    expect(parent, isNull);
+  }
+
+  @failingTest
+  test_resolveSymbolicLinksSync_links() {
+    // TODO(brianwilkerson) Implement this.
+    fail('Not tested');
+  }
+
+  void test_resolveSymbolicLinksSync_noLinks_existingFile() {
+    _resolveSymbolicLinksSync_noLinks(
+        _folder(exists: true, path: '/temp/a/b/test.txt'));
+  }
+
+  void test_resolveSymbolicLinksSync_noLinks_notExisting() {
+    _resolveSymbolicLinksSync_noLinks(
+        _folder(exists: false, path: '/temp/a/b/test.txt'));
+  }
+
+  test_shortName() {
+    expect(_folder(exists: true).shortName, 'bar');
+  }
+
+  test_toUri() {
+    Folder folder = _folder(exists: true);
+    expect(folder.toUri(), new Uri.directory(folder.path));
+  }
+
+  void _resolveSymbolicLinksSync_noLinks(Folder folder) {
+    //
+    // On some platforms the path to the temp directory includes a symbolic
+    // link. We remove that from the equation before creating the File in order
+    // to show that the operation works as expected without symbolic links.
+    //
+    folder = baseProvider.getFolder(folder.resolveSymbolicLinksSync().path);
+    expect(folder.resolveSymbolicLinksSync(), folder);
+  }
+
+  /**
+   * Verify that the [copy] has the same name and content as the [source].
+   */
+  void _verifyStructure(Folder copy, Folder source) {
+    expect(copy.shortName, source.shortName);
+    Map<String, File> sourceFiles = <String, File>{};
+    Map<String, Folder> sourceFolders = <String, Folder>{};
+    for (Resource child in source.getChildren()) {
+      if (child is File) {
+        sourceFiles[child.shortName] = child;
+      } else if (child is Folder) {
+        sourceFolders[child.shortName] = child;
+      } else {
+        fail('Unknown class of resource: ${child.runtimeType}');
+      }
+    }
+    Map<String, File> copyFiles = <String, File>{};
+    Map<String, Folder> copyFolders = <String, Folder>{};
+    for (Resource child in source.getChildren()) {
+      if (child is File) {
+        copyFiles[child.shortName] = child;
+      } else if (child is Folder) {
+        copyFolders[child.shortName] = child;
+      } else {
+        fail('Unknown class of resource: ${child.runtimeType}');
+      }
+    }
+    for (String fileName in sourceFiles.keys) {
+      File sourceChild = sourceFiles[fileName];
+      File copiedChild = copyFiles[fileName];
+      if (copiedChild == null) {
+        fail('Failed to copy file ${sourceChild.path}');
+      }
+      expect(copiedChild.readAsStringSync(), sourceChild.readAsStringSync(),
+          reason: 'Incorrectly copied file ${sourceChild.path}');
+    }
+    for (String fileName in sourceFolders.keys) {
+      Folder sourceChild = sourceFolders[fileName];
+      Folder copiedChild = copyFolders[fileName];
+      if (copiedChild == null) {
+        fail('Failed to copy folder ${sourceChild.path}');
+      }
+      _verifyStructure(copiedChild, sourceChild);
+    }
+  }
+}
+
+@reflectiveTest
+class OverlayResourceProviderTest extends OverlayTestSupport {
+  test_getFile_existing_withoutOverlay() {
+    File file = _file(exists: true);
+    expect(file, isNotNull);
+    expect(file.path, defaultFilePath);
+    expect(file.exists, isTrue);
+  }
+
+  test_getFile_existing_withOverlay() {
+    File file = _file(exists: true, withOverlay: true);
+    expect(file, isNotNull);
+    expect(file.path, defaultFilePath);
+    expect(file.exists, isTrue);
+  }
+
+  test_getFile_notExisting_withoutOverlay() {
+    File file = _file(exists: false);
+    expect(file, isNotNull);
+    expect(file.path, defaultFilePath);
+    expect(file.exists, isFalse);
+  }
+
+  test_getFile_notExisting_withOverlay() {
+    File file = _file(exists: false, withOverlay: true);
+    expect(file, isNotNull);
+    expect(file.path, defaultFilePath);
+    expect(file.exists, isTrue);
+  }
+
+  test_getFolder_existing() {
+    Folder folder = _folder(exists: true);
+    expect(folder, isNotNull);
+    expect(folder.path, defaultFolderPath);
+    expect(folder.exists, isTrue);
+  }
+
+  test_getFolder_notExisting() {
+    Folder folder = _folder(exists: false);
+    expect(folder, isNotNull);
+    expect(folder.path, defaultFolderPath);
+    expect(folder.exists, isFalse);
+  }
+
+  test_getModificationTimes_withoutOverlay() async {
+    Source source = _file(exists: true).createSource();
+    List<int> times = await provider.getModificationTimes([source]);
+    expect(times, [source.modificationStamp]);
+  }
+
+  test_getModificationTimes_withOverlay() async {
+    Source source = _file(exists: true, withOverlay: true).createSource();
+    List<int> times = await provider.getModificationTimes([source]);
+    expect(times, [42]);
+  }
+
+  test_getResource_existingFile_withoutOverlay() {
+    String path = _file(exists: true).path;
+    Resource resource = provider.getResource(path);
+    expect(resource, _isFile);
+  }
+
+  test_getResource_existingFile_withOverlay() {
+    String path = _file(exists: true, withOverlay: true).path;
+    Resource resource = provider.getResource(path);
+    expect(resource, _isFile);
+  }
+
+  test_getResource_existingFolder() {
+    String path = _folder(exists: true).path;
+    Resource resource = provider.getResource(path);
+    expect(resource, _isFolder);
+  }
+
+  test_getResource_notExisting_withoutOverlay() {
+    String path = _file(exists: false).path;
+    Resource resource = provider.getResource(path);
+    expect(resource, _isFile);
+  }
+
+  test_getResource_notExisting_withOverlay() {
+    String path = _file(exists: false, withOverlay: true).path;
+    Resource resource = provider.getResource(path);
+    expect(resource, _isFile);
+  }
+
+  test_getStateLocation_uniqueness() {
+    String idOne = 'one';
+    Folder folderOne = provider.getStateLocation(idOne);
+    expect(folderOne, isNotNull);
+    String idTwo = 'two';
+    Folder folderTwo = provider.getStateLocation(idTwo);
+    expect(folderTwo, isNotNull);
+    expect(folderTwo, isNot(equals(folderOne)));
+    expect(provider.getStateLocation(idOne), equals(folderOne));
+  }
+
+  test_pathContext() {
+    expect(provider.pathContext, baseProvider.pathContext);
+  }
+}
+
+class OverlayTestSupport {
+  MemoryResourceProvider baseProvider;
+  OverlayResourceProvider provider;
+
+  String defaultFolderPath;
+  String defaultFilePath;
+
+  void setUp() {
+    baseProvider = new MemoryResourceProvider();
+    provider = new OverlayResourceProvider(baseProvider);
+
+    defaultFolderPath = baseProvider.convertPath('/foo/bar');
+    defaultFilePath = baseProvider.convertPath('/foo/bar/test.dart');
+  }
+
+  File _file(
+      {@required bool exists,
+      String content,
+      String path,
+      bool withOverlay = false}) {
+    if (path == null) {
+      path = defaultFilePath;
+    } else {
+      path = baseProvider.convertPath(path);
+    }
+    if (exists) {
+      baseProvider.newFile(path, content ?? 'a');
+    }
+    if (withOverlay) {
+      provider.setOverlay(path, content: 'bbb', modificationStamp: 42);
+    }
+    return provider.getFile(path);
+  }
+
+  Folder _folder({@required bool exists, String path}) {
+    if (path == null) {
+      path = defaultFolderPath;
+    } else {
+      path = baseProvider.convertPath(path);
+    }
+    if (exists) {
+      baseProvider.newFolder(path);
+    }
+    return provider.getFolder(path);
+  }
+}
diff --git a/pkg/analyzer/test/file_system/test_all.dart b/pkg/analyzer/test/file_system/test_all.dart
index 75a06d2..05d9220 100644
--- a/pkg/analyzer/test/file_system/test_all.dart
+++ b/pkg/analyzer/test/file_system/test_all.dart
@@ -2,20 +2,19 @@
 // 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.file_system.test_all;
-
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import 'memory_file_system_test.dart' as memory_file_system_test;
-import 'physical_resource_provider_test.dart'
-    as physical_resource_provider_test;
-import 'resource_uri_resolver_test.dart' as resource_uri_resolver_test;
+import 'memory_file_system_test.dart' as memory_file_system;
+import 'overlay_file_system_test.dart' as overlay_file_system;
+import 'physical_resource_provider_test.dart' as physical_resource_provider;
+import 'resource_uri_resolver_test.dart' as resource_uri_resolver;
 
 /// Utility for manually running all tests.
 main() {
   defineReflectiveSuite(() {
-    memory_file_system_test.main();
-    physical_resource_provider_test.main();
-    resource_uri_resolver_test.main();
+    memory_file_system.main();
+    overlay_file_system.main();
+    physical_resource_provider.main();
+    resource_uri_resolver.main();
   }, name: 'file system');
 }
diff --git a/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_kernel_test.dart b/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_kernel_test.dart
index 629ddde..171376f 100644
--- a/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_kernel_test.dart
@@ -8,9 +8,7 @@
 
 main() {
   defineReflectiveSuite(() {
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(CheckedModeCompileTimeErrorCodeTest_Kernel);
+    defineReflectiveTests(CheckedModeCompileTimeErrorCodeTest_Kernel);
   });
 }
 
@@ -172,6 +170,12 @@
   }
 
   @failingTest
+  @FastaProblem('https://github.com/dart-lang/sdk/issues/31936')
+  @override
+  test_listLiteral_inferredElementType() async =>
+      super.test_listLiteral_inferredElementType();
+
+  @failingTest
   @override
   test_mapKeyTypeNotAssignable() async {
     // Expected 1 errors of type CheckedModeCompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, found 0;
@@ -180,6 +184,18 @@
   }
 
   @failingTest
+  @FastaProblem('https://github.com/dart-lang/sdk/issues/31936')
+  @override
+  test_mapLiteral_inferredKeyType() async =>
+      super.test_mapLiteral_inferredKeyType();
+
+  @failingTest
+  @FastaProblem('https://github.com/dart-lang/sdk/issues/31936')
+  @override
+  test_mapLiteral_inferredValueType() async =>
+      super.test_mapLiteral_inferredValueType();
+
+  @failingTest
   @override
   test_mapValueTypeNotAssignable() async {
     // Expected 1 errors of type CheckedModeCompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, found 0;
diff --git a/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart b/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart
index 9832e8c..765ee32 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart
@@ -8,9 +8,7 @@
 
 main() {
   defineReflectiveSuite(() {
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(CompileTimeErrorCodeTest_Kernel);
+    defineReflectiveTests(CompileTimeErrorCodeTest_Kernel);
   });
 }
 
@@ -35,6 +33,11 @@
 
   @override
   @failingTest
+  @FastaProblem('https://github.com/dart-lang/sdk/issues/12916')
+  test_ambiguousExport() async => super.test_ambiguousExport();
+
+  @override
+  @failingTest
   test_annotationWithNotClass() async {
     // Bad state: No reference information for property at 117
     await super.test_annotationWithNotClass();
@@ -70,6 +73,13 @@
 
   @override
   @failingTest
+  test_async_used_as_identifier_in_prefix() {
+    // NoSuchMethodError: The getter 'element' was called on null.
+    return super.test_async_used_as_identifier_in_prefix();
+  }
+
+  @override
+  @failingTest
   test_bug_23176() async {
     // This test fails because the kernel driver element model produces a
     // different element model result than the regular parser produces. Once these
@@ -438,22 +448,6 @@
 
   @override
   @failingTest
-  test_constInitializedWithNonConstValue_missingConstInListLiteral() async {
-    // Expected 1 errors of type CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE, found 0
-    await super
-        .test_constInitializedWithNonConstValue_missingConstInListLiteral();
-  }
-
-  @override
-  @failingTest
-  test_constInitializedWithNonConstValue_missingConstInMapLiteral() async {
-    // Expected 1 errors of type CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE, found 0
-    await super
-        .test_constInitializedWithNonConstValue_missingConstInMapLiteral();
-  }
-
-  @override
-  @failingTest
   test_constInitializedWithNonConstValueFromDeferredClass() async {
     // Bad state: Expected element reference for analyzer offset 58; got one for kernel offset 60
     await super.test_constInitializedWithNonConstValueFromDeferredClass();
@@ -965,21 +959,6 @@
 
   @override
   @failingTest
-  test_fieldInitializerOutsideConstructor_defaultParameter() async {
-    // Expected 1 errors of type CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, found 0
-    await super.test_fieldInitializerOutsideConstructor_defaultParameter();
-  }
-
-  @override
-  @failingTest
-  test_fieldInitializerOutsideConstructor_inFunctionTypeParameter() async {
-    // Expected 1 errors of type CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, found 0
-    await super
-        .test_fieldInitializerOutsideConstructor_inFunctionTypeParameter();
-  }
-
-  @override
-  @failingTest
   @FastaProblem('https://github.com/dart-lang/sdk/issues/30982')
   test_fieldInitializerRedirectingConstructor_afterRedirection() async {
     return super.test_fieldInitializerRedirectingConstructor_afterRedirection();
@@ -1025,20 +1004,6 @@
 
   @override
   @failingTest
-  test_finalNotInitialized_instanceField_const_static() async {
-    // Bad state: Some types were not consumed, starting at offset 26
-    await super.test_finalNotInitialized_instanceField_const_static();
-  }
-
-  @override
-  @failingTest
-  test_finalNotInitialized_library_const() async {
-    // Bad state: Some types were not consumed, starting at offset 7
-    await super.test_finalNotInitialized_library_const();
-  }
-
-  @override
-  @failingTest
   test_finalNotInitialized_local_const() async {
     // Expected 1 errors of type CompileTimeErrorCode.CONST_NOT_INITIALIZED, found 0
     await super.test_finalNotInitialized_local_const();
@@ -2724,13 +2689,6 @@
 
   @override
   @failingTest
-  test_referencedBeforeDeclaration_hideInBlock_function() async {
-    // Bad state: No declaration information for v() {} at 34
-    await super.test_referencedBeforeDeclaration_hideInBlock_function();
-  }
-
-  @override
-  @failingTest
   test_referencedBeforeDeclaration_hideInBlock_local() async {
     // Bad state: No type information for v at 38
     await super.test_referencedBeforeDeclaration_hideInBlock_local();
@@ -2759,13 +2717,6 @@
 
   @override
   @failingTest
-  test_referencedBeforeDeclaration_type_localFunction() async {
-    // Bad state: No declaration information for int String(int x) => x + 1; at 40
-    await super.test_referencedBeforeDeclaration_type_localFunction();
-  }
-
-  @override
-  @failingTest
   test_referencedBeforeDeclaration_type_localVariable() async {
     // Bad state: No type information for String at 44
     await super.test_referencedBeforeDeclaration_type_localVariable();
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 06b1454..5423d74 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code_test.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code_test.dart
@@ -564,7 +564,6 @@
     verify([source]);
   }
 
-  @failingTest
   test_awaitInWrongContext_syncStar() async {
     // This test requires better error recovery than we currently have. In
     // particular, we need to be able to distinguish between an await expression
@@ -574,7 +573,9 @@
   yield await x;
 }''');
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT]);
+    if (usingFastaParser) {
+      assertErrors(source, [CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT]);
+    }
     verify([source]);
   }
 
@@ -588,10 +589,18 @@
 }
 ''');
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      ParserErrorCode.EXPECTED_CLASS_MEMBER,
-      ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE
-    ]);
+    assertErrors(
+        source,
+        usingFastaParser
+            ? [
+                ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE,
+                ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE,
+                ParserErrorCode.EXPECTED_TOKEN
+              ]
+            : [
+                ParserErrorCode.EXPECTED_CLASS_MEMBER,
+                ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE
+              ]);
     verify([source]);
   }
 
@@ -655,7 +664,15 @@
   typedef x;
 }''');
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE]);
+    assertErrors(
+        source,
+        usingFastaParser
+            ? [
+                StaticWarningCode.UNDEFINED_IDENTIFIER,
+                StaticWarningCode.UNDEFINED_IDENTIFIER,
+                ParserErrorCode.EXPECTED_TOKEN
+              ]
+            : [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE]);
     verify([source]);
   }
 
@@ -2203,17 +2220,32 @@
   test_extendsDisallowedClass_class_double() async {
     Source source = addSource("class A extends double {}");
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
+    assertErrors(
+        source,
+        useCFE
+            ? [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+              ]
+            : [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
   test_extendsDisallowedClass_class_int() async {
     Source source = addSource("class A extends int {}");
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-      CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
-    ]);
+    assertErrors(
+        source,
+        useCFE
+            ? [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT,
+                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+              ]
+            : [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
+              ]);
     verify([source]);
   }
 
@@ -2230,17 +2262,32 @@
   test_extendsDisallowedClass_class_num() async {
     Source source = addSource("class A extends num {}");
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
+    assertErrors(
+        source,
+        useCFE
+            ? [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+              ]
+            : [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
   test_extendsDisallowedClass_class_String() async {
     Source source = addSource("class A extends String {}");
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-      CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
-    ]);
+    assertErrors(
+        source,
+        useCFE
+            ? [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT,
+                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+              ]
+            : [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
+              ]);
     verify([source]);
   }
 
@@ -2265,7 +2312,14 @@
 class M {}
 class C = double with M;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
+    assertErrors(
+        source,
+        useCFE
+            ? [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+              ]
+            : [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -2279,7 +2333,8 @@
         useCFE
             ? [
                 CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
+                CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT,
+                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
               ]
             : [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
     verify([source]);
@@ -2299,7 +2354,14 @@
 class M {}
 class C = num with M;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
+    assertErrors(
+        source,
+        useCFE
+            ? [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+              ]
+            : [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -2313,7 +2375,8 @@
         useCFE
             ? [
                 CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
+                CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT,
+                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
               ]
             : [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
     verify([source]);
@@ -2738,22 +2801,28 @@
   test_implementsDisallowedClass_class_double() async {
     Source source = addSource("class A implements double {}");
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
-          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
-    ]);
+    assertErrors(
+        source,
+        useCFE
+            ? [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+              ]
+            : [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
   test_implementsDisallowedClass_class_int() async {
     Source source = addSource("class A implements int {}");
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
-          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
-    ]);
+    assertErrors(
+        source,
+        useCFE
+            ? [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+              ]
+            : [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -2771,22 +2840,28 @@
   test_implementsDisallowedClass_class_num() async {
     Source source = addSource("class A implements num {}");
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
-          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
-    ]);
+    assertErrors(
+        source,
+        useCFE
+            ? [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+              ]
+            : [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
   test_implementsDisallowedClass_class_String() async {
     Source source = addSource("class A implements String {}");
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
-          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
-    ]);
+    assertErrors(
+        source,
+        useCFE
+            ? [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+              ]
+            : [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -2824,11 +2899,14 @@
 class M {}
 class C = A with M implements double;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
-          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
-    ]);
+    assertErrors(
+        source,
+        useCFE
+            ? [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+              ]
+            : [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -2838,11 +2916,14 @@
 class M {}
 class C = A with M implements int;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
-          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
-    ]);
+    assertErrors(
+        source,
+        useCFE
+            ? [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+              ]
+            : [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -2866,11 +2947,14 @@
 class M {}
 class C = A with M implements num;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
-          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
-    ]);
+    assertErrors(
+        source,
+        useCFE
+            ? [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+              ]
+            : [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -2880,11 +2964,14 @@
 class M {}
 class C = A with M implements String;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
-          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
-    ]);
+    assertErrors(
+        source,
+        useCFE
+            ? [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+              ]
+            : [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -4370,22 +4457,28 @@
   test_mixinOfDisallowedClass_class_double() async {
     Source source = addSource("class A extends Object with double {}");
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
-          : CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
-    ]);
+    assertErrors(
+        source,
+        useCFE
+            ? [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+              ]
+            : [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
   test_mixinOfDisallowedClass_class_int() async {
     Source source = addSource("class A extends Object with int {}");
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
-          : CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
-    ]);
+    assertErrors(
+        source,
+        useCFE
+            ? [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+              ]
+            : [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -4403,22 +4496,28 @@
   test_mixinOfDisallowedClass_class_num() async {
     Source source = addSource("class A extends Object with num {}");
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
-          : CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
-    ]);
+    assertErrors(
+        source,
+        useCFE
+            ? [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+              ]
+            : [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
   test_mixinOfDisallowedClass_class_String() async {
     Source source = addSource("class A extends Object with String {}");
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
-          : CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
-    ]);
+    assertErrors(
+        source,
+        useCFE
+            ? [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+              ]
+            : [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -4440,11 +4539,14 @@
 class A {}
 class C = A with double;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
-          : CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
-    ]);
+    assertErrors(
+        source,
+        useCFE
+            ? [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+              ]
+            : [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -4453,11 +4555,14 @@
 class A {}
 class C = A with int;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
-          : CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
-    ]);
+    assertErrors(
+        source,
+        useCFE
+            ? [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+              ]
+            : [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -4479,11 +4584,14 @@
 class A {}
 class C = A with num;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
-          : CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
-    ]);
+    assertErrors(
+        source,
+        useCFE
+            ? [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+              ]
+            : [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -4492,11 +4600,14 @@
 class A {}
 class C = A with String;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
-          : CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
-    ]);
+    assertErrors(
+        source,
+        useCFE
+            ? [
+                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+              ]
+            : [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -5105,7 +5216,23 @@
 }''');
     await computeAnalysisResult(source);
     assertErrors(
-        source, [CompileTimeErrorCode.NON_CONST_MAP_AS_EXPRESSION_STATEMENT]);
+        source,
+        usingFastaParser
+            ? [
+                // TODO(danrubel): Consider improving recovery
+                ParserErrorCode.EXPECTED_TOKEN,
+                ParserErrorCode.EXPECTED_TOKEN,
+                ParserErrorCode.EXPECTED_TOKEN,
+                ParserErrorCode.EXPECTED_TOKEN,
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.UNEXPECTED_TOKEN,
+                ParserErrorCode.UNEXPECTED_TOKEN,
+                ParserErrorCode.UNEXPECTED_TOKEN,
+              ]
+            : [CompileTimeErrorCode.NON_CONST_MAP_AS_EXPRESSION_STATEMENT]);
     verify([source]);
   }
 
@@ -5116,7 +5243,21 @@
 }''');
     await computeAnalysisResult(source);
     assertErrors(
-        source, [CompileTimeErrorCode.NON_CONST_MAP_AS_EXPRESSION_STATEMENT]);
+        source,
+        usingFastaParser
+            ? [
+                ParserErrorCode.EXPECTED_TOKEN,
+                ParserErrorCode.EXPECTED_TOKEN,
+                ParserErrorCode.EXPECTED_TOKEN,
+                ParserErrorCode.EXPECTED_TOKEN,
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.UNEXPECTED_TOKEN,
+                ParserErrorCode.UNEXPECTED_TOKEN,
+                ParserErrorCode.UNEXPECTED_TOKEN,
+              ]
+            : [CompileTimeErrorCode.NON_CONST_MAP_AS_EXPRESSION_STATEMENT]);
     verify([source]);
   }
 
@@ -6494,7 +6635,14 @@
   return 0;
 }''');
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.RETURN_IN_GENERATOR]);
+    assertErrors(
+        source,
+        usingFastaParser
+            ? [
+                CompileTimeErrorCode.RETURN_IN_GENERATOR,
+                CompileTimeErrorCode.RETURN_IN_GENERATOR
+              ]
+            : [CompileTimeErrorCode.RETURN_IN_GENERATOR]);
     verify([source]);
   }
 
@@ -6504,7 +6652,14 @@
   return 0;
 }''');
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.RETURN_IN_GENERATOR]);
+    assertErrors(
+        source,
+        usingFastaParser
+            ? [
+                CompileTimeErrorCode.RETURN_IN_GENERATOR,
+                CompileTimeErrorCode.RETURN_IN_GENERATOR
+              ]
+            : [CompileTimeErrorCode.RETURN_IN_GENERATOR]);
     verify([source]);
   }
 
@@ -6680,10 +6835,14 @@
 f(this.x(y)) {}
 ''');
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR,
-      CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR
-    ]);
+    assertErrors(
+        source,
+        usingFastaParser
+            ? [CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR]
+            : [
+                ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR,
+                CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR
+              ]);
     verify([source]);
   }
 
diff --git a/pkg/analyzer/test/generated/declaration_resolver_test.dart b/pkg/analyzer/test/generated/declaration_resolver_test.dart
index 6ad2446..e93560a3 100644
--- a/pkg/analyzer/test/generated/declaration_resolver_test.dart
+++ b/pkg/analyzer/test/generated/declaration_resolver_test.dart
@@ -247,7 +247,12 @@
     // analyzer.  TODO(paulberry): is this a bug?
     FunctionDeclaration node = EngineTestCase.findNode(
         unit, code, 'g', (AstNode n) => n is FunctionDeclaration);
-    expect((node as FunctionDeclarationImpl).metadata, isEmpty);
+    NodeList<Annotation> metadata = (node as FunctionDeclarationImpl).metadata;
+    if (usingFastaParser) {
+      expect(metadata, hasLength(1));
+    } else {
+      expect(metadata, isEmpty);
+    }
   }
 
   test_metadata_localVariableDeclaration() async {
@@ -814,6 +819,8 @@
   }
 
   test_genericFunction_typeParameter() async {
+    // Fasta ignores generic type comments
+    if (usingFastaParser) return;
     String code = r'''
 /*=T*/ max/*<T>*/(/*=T*/ x, /*=T*/ y) => null;
 ''';
@@ -836,6 +843,8 @@
   }
 
   test_genericMethod_typeParameter() async {
+    // Fasta ignores generic type comments
+    if (usingFastaParser) return;
     String code = r'''
 class C {
   /*=T*/ max/*<T>*/(/*=T*/ x, /*=T*/ y) => null;
diff --git a/pkg/analyzer/test/generated/error_suppression_kernel_test.dart b/pkg/analyzer/test/generated/error_suppression_kernel_test.dart
index 34fc3ca..410dd7e 100644
--- a/pkg/analyzer/test/generated/error_suppression_kernel_test.dart
+++ b/pkg/analyzer/test/generated/error_suppression_kernel_test.dart
@@ -8,9 +8,7 @@
 
 main() {
   defineReflectiveSuite(() {
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(ErrorSuppressionTest_Kernel);
+    defineReflectiveTests(ErrorSuppressionTest_Kernel);
   });
 }
 
diff --git a/pkg/analyzer/test/generated/hint_code_kernel_test.dart b/pkg/analyzer/test/generated/hint_code_kernel_test.dart
index 6f6314d..ad843c2 100644
--- a/pkg/analyzer/test/generated/hint_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/hint_code_kernel_test.dart
@@ -8,9 +8,7 @@
 
 main() {
   defineReflectiveSuite(() {
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(HintCodeTest_Kernel);
+    defineReflectiveTests(HintCodeTest_Kernel);
   });
 }
 
@@ -66,41 +64,6 @@
 
   @failingTest
   @override
-  test_canBeNullAfterNullAware_after_cascade() async {
-    // Expected 1 errors of type HintCode.CAN_BE_NULL_AFTER_NULL_AWARE, found 0
-    return super.test_canBeNullAfterNullAware_after_cascade();
-  }
-
-  @failingTest
-  @override
-  test_deadCode_deadBlock_else() async {
-    // Expected 1 errors of type HintCode.DEAD_CODE, found 0
-    return super.test_deadCode_deadBlock_else();
-  }
-
-  @failingTest
-  @override
-  test_deadCode_deadBlock_else_nested() async {
-    // Expected 1 errors of type HintCode.DEAD_CODE, found 0
-    return super.test_deadCode_deadBlock_else_nested();
-  }
-
-  @failingTest
-  @override
-  test_deadCode_deadBlock_if() async {
-    // Expected 1 errors of type HintCode.DEAD_CODE, found 0
-    return super.test_deadCode_deadBlock_if();
-  }
-
-  @failingTest
-  @override
-  test_deadCode_deadBlock_if_nested() async {
-    // Expected 1 errors of type HintCode.DEAD_CODE, found 0
-    return super.test_deadCode_deadBlock_if_nested();
-  }
-
-  @failingTest
-  @override
   test_deadCode_deadFinalStatementInCase() async {
     // Expected 1 errors of type StaticWarningCode.CASE_BLOCK_NOT_TERMINATED, found 0
     return super.test_deadCode_deadFinalStatementInCase();
@@ -173,37 +136,16 @@
 
   @failingTest
   @override
-  test_divisionOptimization_propagatedType() async {
-    // Expected 1 errors of type HintCode.DIVISION_OPTIMIZATION, found 0
-    return super.test_divisionOptimization_propagatedType();
+  test_duplicateShownHiddenName_hidden() {
+    // Expected 1 errors of type HintCode.DUPLICATE_HIDDEN_NAME, found 0
+    return super.test_duplicateShownHiddenName_hidden();
   }
 
   @failingTest
   @override
-  test_invalidAssignment_instanceVariable() async {
-    // Expected 1 errors of type HintCode.INVALID_ASSIGNMENT, found 0
-    return super.test_invalidAssignment_instanceVariable();
-  }
-
-  @failingTest
-  @override
-  test_invalidAssignment_localVariable() async {
-    // Expected 1 errors of type HintCode.INVALID_ASSIGNMENT, found 0
-    return super.test_invalidAssignment_localVariable();
-  }
-
-  @failingTest
-  @override
-  test_invalidAssignment_staticVariable() async {
-    // Expected 1 errors of type HintCode.INVALID_ASSIGNMENT, found 0
-    return super.test_invalidAssignment_staticVariable();
-  }
-
-  @failingTest
-  @override
-  test_invalidAssignment_variableDeclaration() async {
-    // UnimplementedError: Multiple field
-    return super.test_invalidAssignment_variableDeclaration();
+  test_duplicateShownHiddenName_shown() {
+    // Expected 1 errors of type HintCode.DUPLICATE_SHOWN_NAME, found 0
+    return super.test_duplicateShownHiddenName_shown();
   }
 
   @override
@@ -237,6 +179,13 @@
     return super.test_invalidRequiredParam_valid();
   }
 
+  @override
+  @failingTest
+  test_isNotDouble() {
+    // Bad state: No data for is at 10
+    return super.test_isNotDouble();
+  }
+
   @failingTest
   @override
   test_js_lib_OK() async {
@@ -300,6 +249,13 @@
     return super.test_mustCallSuper_indirect();
   }
 
+  @failingTest
+  @override
+  test_nullAwareBeforeOperator_ok_is_not() {
+    // Bad state: No data for is at 14
+    return super.test_nullAwareBeforeOperator_ok_is_not();
+  }
+
   @override
   @failingTest
   test_required_constructor_param() async {
@@ -374,6 +330,14 @@
     return super.test_strongMode_downCastCompositeWarn();
   }
 
+  @failingTest
+  @override
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_field_call() {
+    // NoSuchMethodError: The setter 'enclosingElement=' was called on null.
+    return super
+        .test_strongMode_topLevelInstanceGetter_implicitlyTyped_field_call();
+  }
+
   @override
   @failingTest
   test_strongMode_topLevelInstanceGetter_implicitlyTyped_invoke() {
@@ -390,23 +354,41 @@
 
   @failingTest
   @override
-  test_undefinedGetter() async {
-    // Expected 1 errors of type HintCode.UNDEFINED_GETTER, found 0
-    return super.test_undefinedGetter();
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_invoke_not_generic() {
+    // NoSuchMethodError: The setter 'enclosingElement=' was called on null.
+    return super
+        .test_strongMode_topLevelInstanceGetter_implicitlyTyped_invoke_not_generic();
   }
 
   @failingTest
   @override
-  test_undefinedMethod() async {
-    // Expected 1 errors of type HintCode.UNDEFINED_METHOD, found 0
-    return super.test_undefinedMethod();
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_new_explicit_type_params_prefixed() {
+    // NoSuchMethodError: The setter 'enclosingElement=' was called on null.
+    return super
+        .test_strongMode_topLevelInstanceGetter_implicitlyTyped_new_explicit_type_params_prefixed();
   }
 
   @failingTest
   @override
-  test_undefinedMethod_assignmentExpression() async {
-    // Expected 1 errors of type HintCode.UNDEFINED_METHOD, found 0
-    return super.test_undefinedMethod_assignmentExpression();
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_new_not_generic_prefixed() {
+    // NoSuchMethodError: The getter 'element' was called on null.
+    return super
+        .test_strongMode_topLevelInstanceGetter_implicitlyTyped_new_not_generic_prefixed();
+  }
+
+  @failingTest
+  @override
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_new_prefixed() {
+    // NoSuchMethodError: The getter 'element' was called on null.
+    return super
+        .test_strongMode_topLevelInstanceGetter_implicitlyTyped_new_prefixed();
+  }
+
+  @failingTest
+  @override
+  test_typeCheck_type_not_Null() {
+    // Bad state: No data for is at 20
+    return super.test_typeCheck_type_not_Null();
   }
 
   @failingTest
@@ -439,23 +421,23 @@
 
   @failingTest
   @override
-  test_undefinedOperator_postfixExpression() async {
-    // Expected 1 errors of type HintCode.UNDEFINED_OPERATOR, found 0
-    return super.test_undefinedOperator_postfixExpression();
+  test_unnecessaryTypeCheck_null_not_Null() {
+    // Bad state: No data for is at 14
+    return super.test_unnecessaryTypeCheck_null_not_Null();
   }
 
   @failingTest
   @override
-  test_undefinedOperator_prefixExpression() async {
-    // Expected 1 errors of type HintCode.UNDEFINED_OPERATOR, found 0
-    return super.test_undefinedOperator_prefixExpression();
+  test_unnecessaryTypeCheck_type_not_dynamic() {
+    // Bad state: No data for is at 20
+    return super.test_unnecessaryTypeCheck_type_not_dynamic();
   }
 
   @failingTest
   @override
-  test_undefinedSetter() async {
-    // Expected 1 errors of type HintCode.UNDEFINED_SETTER, found 0
-    return super.test_undefinedSetter();
+  test_unnecessaryTypeCheck_type_not_object() {
+    // Bad state: No data for is at 20
+    return super.test_unnecessaryTypeCheck_type_not_object();
   }
 
   @failingTest
@@ -493,16 +475,4 @@
     // Expected 1 errors of type HintCode.UNUSED_SHOWN_NAME, found 0
     return super.test_unusedShownName_topLevelVariable();
   }
-
-  @failingTest
-  @override
-  test_importDeferredLibraryWithLoadFunction() async {
-    await super.test_importDeferredLibraryWithLoadFunction();
-  }
-
-  @failingTest
-  @override
-  test_no_missingReturn_async_futureOrVoid() async {
-    await super.test_no_missingReturn_async_futureOrVoid();
-  }
 }
diff --git a/pkg/analyzer/test/generated/hint_code_test.dart b/pkg/analyzer/test/generated/hint_code_test.dart
index f37baf0..1ee7d3e 100644
--- a/pkg/analyzer/test/generated/hint_code_test.dart
+++ b/pkg/analyzer/test/generated/hint_code_test.dart
@@ -2573,11 +2573,7 @@
 FutureOr<void> f(Future f) async {}
 ''');
     await computeAnalysisResult(source);
-    if (previewDart2) {
-      assertErrors(source, [HintCode.MISSING_RETURN]);
-    } else {
-      assertNoErrors(source);
-    }
+    assertNoErrors(source);
     verify([source]);
   }
 
diff --git a/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart b/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart
index c52404a..2f7a8c9 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart
@@ -8,9 +8,7 @@
 
 main() {
   defineReflectiveSuite(() {
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(NonErrorResolverTest_Kernel);
+    defineReflectiveTests(NonErrorResolverTest_Kernel);
   });
 }
 
@@ -45,10 +43,16 @@
 
   @override
   @failingTest
-  @notForDart2
-  test_async_return_flattens_futures() async {
-    // Only FutureOr is flattened.
-    return super.test_async_return_flattens_futures();
+  test_argumentTypeNotAssignable_invocation_typedef_generic() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_argumentTypeNotAssignable_invocation_typedef_generic();
+  }
+
+  @override
+  @failingTest
+  test_argumentTypeNotAssignable_optionalNew() {
+    // Bad state: No data for (builder: () {return Widget();}) at 164
+    return super.test_argumentTypeNotAssignable_optionalNew();
   }
 
   @override
@@ -123,6 +127,13 @@
 
   @override
   @failingTest
+  test_const_dynamic() {
+    // UnimplementedError: TODO(paulberry): DynamicType
+    return super.test_const_dynamic();
+  }
+
+  @override
+  @failingTest
   @potentialAnalyzerProblem
   test_constConstructorWithNonConstSuper_unresolved() async {
     return super.test_constConstructorWithNonConstSuper_unresolved();
@@ -151,6 +162,34 @@
 
   @override
   @failingTest
+  test_duplicateDefinition_emptyName() {
+    // NoSuchMethodError: The setter 'enclosingElement=' was called on null.
+    return super.test_duplicateDefinition_emptyName();
+  }
+
+  @override
+  @failingTest
+  test_dynamicIdentifier() {
+    // UnimplementedError: TODO(paulberry): DynamicType
+    return super.test_dynamicIdentifier();
+  }
+
+  @override
+  @failingTest
+  test_fieldFormalParameter_genericFunctionTyped() {
+    // Expected 0 errors of type ParserErrorCode.EXPECTED_TOKEN, found 1 (88)
+    return super.test_fieldFormalParameter_genericFunctionTyped();
+  }
+
+  @override
+  @failingTest
+  test_fieldFormalParameter_genericFunctionTyped_named() {
+    // Expected 0 errors of type ParserErrorCode.EXPECTED_TOKEN, found 1 (89)
+    return super.test_fieldFormalParameter_genericFunctionTyped_named();
+  }
+
+  @override
+  @failingTest
   @potentialAnalyzerProblem
   test_finalNotInitialized_hasNativeClause_hasConstructor() async {
     return super.test_finalNotInitialized_hasNativeClause_hasConstructor();
@@ -165,13 +204,6 @@
 
   @override
   @failingTest
-  @potentialAnalyzerProblem
-  test_forEach_genericFunctionType() async {
-    return super.test_forEach_genericFunctionType();
-  }
-
-  @override
-  @failingTest
   @FastaProblem('https://github.com/dart-lang/sdk/issues/28434')
   test_functionDeclaration_scope_signature() async {
     return super.test_functionDeclaration_scope_signature();
@@ -186,11 +218,62 @@
 
   @override
   @failingTest
+  test_genericTypeAlias_castsAndTypeChecks_hasTypeParameters() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_genericTypeAlias_castsAndTypeChecks_hasTypeParameters();
+  }
+
+  @override
+  @failingTest
+  test_genericTypeAlias_castsAndTypeChecks_noTypeParameters() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_genericTypeAlias_castsAndTypeChecks_noTypeParameters();
+  }
+
+  @override
+  @failingTest
+  test_genericTypeAlias_fieldAndReturnType_noTypeParameters() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_genericTypeAlias_fieldAndReturnType_noTypeParameters();
+  }
+
+  @override
+  @failingTest
+  test_genericTypeAlias_fieldAndReturnType_typeParameters_arguments() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super
+        .test_genericTypeAlias_fieldAndReturnType_typeParameters_arguments();
+  }
+
+  @override
+  @failingTest
+  test_genericTypeAlias_fieldAndReturnType_typeParameters_noArguments() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super
+        .test_genericTypeAlias_fieldAndReturnType_typeParameters_noArguments();
+  }
+
+  @override
+  @failingTest
   @potentialAnalyzerProblem
   test_genericTypeAlias_invalidGenericFunctionType() async {
     return super.test_genericTypeAlias_invalidGenericFunctionType();
   }
 
+  @override
+  @failingTest
+  test_genericTypeAlias_noTypeParameters() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_genericTypeAlias_noTypeParameters();
+  }
+
+  @override
+  @failingTest
+  test_genericTypeAlias_typeParameters() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_genericTypeAlias_typeParameters();
+  }
+
   @override // passes with kernel
   test_infer_mixin() => super.test_infer_mixin();
 
@@ -200,16 +283,6 @@
 
   @override
   @failingTest
-  test_infer_mixin_with_substitution() =>
-      super.test_infer_mixin_with_substitution();
-
-  @override
-  @failingTest
-  test_infer_mixin_with_substitution_functionType() =>
-      super.test_infer_mixin_with_substitution_functionType();
-
-  @override
-  @failingTest
   @potentialAnalyzerProblem
   test_integerLiteralOutOfRange_negative_valid() async {
     return super.test_integerLiteralOutOfRange_negative_valid();
@@ -224,6 +297,47 @@
 
   @override
   @failingTest
+  test_invalidAnnotation_constantVariable_field_importWithPrefix() {
+    // type 'PrefixedIdentifierImpl' is not a subtype of type 'SimpleIdentifier'
+    // of 'topEntity'
+    return super
+        .test_invalidAnnotation_constantVariable_field_importWithPrefix();
+  }
+
+  @override
+  @failingTest
+  test_invalidAnnotation_constantVariable_topLevel_importWithPrefix() {
+    // type 'PrefixedIdentifierImpl' is not a subtype of type 'SimpleIdentifier'
+    // of 'topEntity'
+    return super
+        .test_invalidAnnotation_constantVariable_topLevel_importWithPrefix();
+  }
+
+  @override
+  @failingTest
+  test_invalidAnnotation_constConstructor_importWithPrefix() {
+    // type 'PrefixedIdentifierImpl' is not a subtype of type 'SimpleIdentifier'
+    // of 'topEntity'
+    return super.test_invalidAnnotation_constConstructor_importWithPrefix();
+  }
+
+  @override
+  @failingTest
+  test_invalidAnnotation_constConstructor_named_importWithPrefix() {
+    // Bad state: No data for named at 29
+    return super
+        .test_invalidAnnotation_constConstructor_named_importWithPrefix();
+  }
+
+  @override
+  @failingTest
+  test_invocationOfNonFunction_functionTypeTypeParameter() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_invocationOfNonFunction_functionTypeTypeParameter();
+  }
+
+  @override
+  @failingTest
   @FastaProblem('https://github.com/dart-lang/sdk/issues/31758')
   test_invocationOfNonFunction_Object() async {
     return super.test_invocationOfNonFunction_Object();
@@ -231,6 +345,13 @@
 
   @override
   @failingTest
+  test_issue_32394() {
+    // Failed assertion: line 1133 pos 12: 'element != null': is not true.
+    return super.test_issue_32394();
+  }
+
+  @override
+  @failingTest
   @potentialAnalyzerProblem
   test_loadLibraryDefined() async {
     return super.test_loadLibraryDefined();
@@ -238,6 +359,14 @@
 
   @override
   @failingTest
+  @FastaProblem('https://github.com/dart-lang/sdk/issues/30609')
+  test_metadata_enumConstantDeclaration() {
+    // Failed to resolve 2 nodes
+    return super.test_metadata_enumConstantDeclaration();
+  }
+
+  @override
+  @failingTest
   @FastaProblem('https://github.com/dart-lang/sdk/issues/28434')
   test_methodDeclaration_scope_signature() async {
     return super.test_methodDeclaration_scope_signature();
@@ -245,6 +374,13 @@
 
   @override
   @failingTest
+  test_nativeConstConstructor() {
+    // Expected 0 errors of type ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY, found 1 (35)
+    return super.test_nativeConstConstructor();
+  }
+
+  @override
+  @failingTest
   @FastaProblem('https://github.com/dart-lang/sdk/issues/31628')
   test_nonConstCaseExpression_constField() async {
     return super.test_nonConstCaseExpression_constField();
@@ -273,16 +409,16 @@
 
   @override
   @failingTest
-  @potentialAnalyzerProblem
-  test_returnOfInvalidType_typeParameter_18468() async {
-    return super.test_returnOfInvalidType_typeParameter_18468();
+  test_optionalNew_rewrite_instantiatesToBounds() {
+    // Bad state: No data for named1 at 21
+    return super.test_optionalNew_rewrite_instantiatesToBounds();
   }
 
   @override
   @failingTest
   @potentialAnalyzerProblem
-  test_sharedDeferredPrefix() async {
-    return super.test_sharedDeferredPrefix();
+  test_returnOfInvalidType_typeParameter_18468() async {
+    return super.test_returnOfInvalidType_typeParameter_18468();
   }
 
   @override
@@ -301,9 +437,9 @@
 
   @override
   @failingTest
-  @potentialAnalyzerProblem
-  test_undefinedIdentifier_synthetic_whenExpression() async {
-    return super.test_undefinedIdentifier_synthetic_whenExpression();
+  test_undefinedGetter_static_conditionalAccess() {
+    // Bad state: No data for A at 36
+    return super.test_undefinedGetter_static_conditionalAccess();
   }
 
   @override
@@ -312,4 +448,18 @@
   test_undefinedIdentifier_synthetic_whenMethodName() async {
     return super.test_undefinedIdentifier_synthetic_whenMethodName();
   }
+
+  @override
+  @failingTest
+  test_undefinedMethod_static_conditionalAccess() {
+    // Bad state: No data for A at 39
+    return super.test_undefinedMethod_static_conditionalAccess();
+  }
+
+  @override
+  @failingTest
+  test_undefinedSetter_static_conditionalAccess() {
+    // Bad state: No data for A at 34
+    return super.test_undefinedSetter_static_conditionalAccess();
+  }
 }
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index f425dce..1084149 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -664,18 +664,6 @@
     verify([source]);
   }
 
-  test_async_future_object_with_return() async {
-    Source source = addSource('''
-import 'dart:async';
-Future<Object> f() async {
-  return;
-}
-''');
-    await computeAnalysisResult(source);
-    assertNoErrors(source);
-    verify([source]);
-  }
-
   test_async_future_object_with_return_value() async {
     Source source = addSource('''
 import 'dart:async';
@@ -722,19 +710,6 @@
     verify([source]);
   }
 
-  test_async_return_flattens_futures() async {
-    Source source = addSource('''
-import 'dart:async';
-Future<int> f() async {
-  return g();
-}
-Future<Future<int>> g() => null;
-''');
-    await computeAnalysisResult(source);
-    assertNoErrors(source);
-    verify([source]);
-  }
-
   test_async_with_return() async {
     Source source = addSource('''
 f() async {
@@ -789,14 +764,11 @@
   }
 
   test_await_flattened() async {
-    // The analyzer type system over-flattens so it considers `await ffi()` to
-    // have type `int` - see dartbug.com/31887
-    var expectedType = enableKernelDriver ? 'Future<int>' : 'int';
     Source source = addSource('''
 import 'dart:async';
 Future<Future<int>> ffi() => null;
 f() async {
-  $expectedType b = await ffi();
+  Future<int> b = await ffi();
 }
 ''');
     await computeAnalysisResult(source);
diff --git a/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart b/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart
index 082ef32..dc39f65 100644
--- a/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart
@@ -11,9 +11,7 @@
 
 main() {
   defineReflectiveSuite(() {
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(NonHintCodeTest_Kernel);
+    defineReflectiveTests(NonHintCodeTest_Kernel);
   });
 }
 
@@ -39,6 +37,40 @@
   @override
   bool get useCFE => true;
 
+  @override
+  @failingTest
+  test_deprecatedAnnotationUse_namedParameter_inDefiningFunction() {
+    // Failed assertion: line 215 pos 14: 'node.parent is PartOfDirective ||
+    // node.parent is EnumConstantDeclaration': is not true.
+    return super
+        .test_deprecatedAnnotationUse_namedParameter_inDefiningFunction();
+  }
+
+  @override
+  @failingTest
+  test_deprecatedAnnotationUse_namedParameter_inNestedLocalFunction() {
+    // Failed assertion: line 215 pos 14: 'node.parent is PartOfDirective ||
+    // node.parent is EnumConstantDeclaration': is not true.
+    return super
+        .test_deprecatedAnnotationUse_namedParameter_inNestedLocalFunction();
+  }
+
+  @override
+  @failingTest
+  test_deprecatedAnnotationUse_namedParameter_inDefiningMethod() {
+    // Failed assertion: line 215 pos 14: 'node.parent is PartOfDirective ||
+    // node.parent is EnumConstantDeclaration': is not true.
+    return super.test_deprecatedAnnotationUse_namedParameter_inDefiningMethod();
+  }
+
+  @override
+  @failingTest
+  test_deprecatedAnnotationUse_namedParameter_inDefiningLocalFunction() {
+    // Failed to resolve 1 nodes
+    return super
+        .test_deprecatedAnnotationUse_namedParameter_inDefiningLocalFunction();
+  }
+
   @failingTest
   @override
   @potentialAnalyzerProblem
@@ -51,20 +83,6 @@
   @override
   @failingTest
   @notForDart2
-  test_undefinedGetter_inSubtype() async {
-    await super.test_undefinedGetter_inSubtype();
-  }
-
-  @override
-  @failingTest
-  @notForDart2
-  test_undefinedMethod_inSubtype() async {
-    await super.test_undefinedMethod_inSubtype();
-  }
-
-  @override
-  @failingTest
-  @notForDart2
   test_undefinedOperator_binaryExpression_inSubtype() async {
     await super.test_undefinedOperator_binaryExpression_inSubtype();
   }
@@ -91,13 +109,6 @@
   }
 
   @override
-  @failingTest
-  @notForDart2
-  test_undefinedSetter_inSubtype() async {
-    await super.test_undefinedSetter_inSubtype();
-  }
-
-  @override
   test_unnecessaryCast_generics() async {
     // dartbug.com/18953
     // Overridden because type inference now produces more information and there
@@ -122,17 +133,26 @@
 //    await super.test_unusedImport_annotationOnDirective();
   }
 
-  @failingTest
   @override
-  @potentialAnalyzerProblem
-  test_unusedImport_metadata() async {
-    await super.test_unusedImport_metadata();
+  @failingTest
+  test_overrideOnNonOverridingField_inSuperclass() {
+    // Expected 1 errors of type
+    // StrongModeCode.STRONG_MODE_INVALID_METHOD_OVERRIDE, found 0
+    return super.test_overrideOnNonOverridingField_inSuperclass();
+  }
+
+  @override
+  @failingTest
+  test_overrideOnNonOverridingField_inInterface() {
+    // Expected 1 errors of type
+    // StrongModeCode.STRONG_MODE_INVALID_METHOD_OVERRIDE, found 0
+    return super.test_overrideOnNonOverridingField_inInterface();
   }
 
   @failingTest
   @override
   @potentialAnalyzerProblem
-  test_importDeferredLibraryWithLoadFunction() async {
-    await super.test_importDeferredLibraryWithLoadFunction();
+  test_unusedImport_metadata() async {
+    await super.test_unusedImport_metadata();
   }
 }
diff --git a/pkg/analyzer/test/generated/non_hint_code_test.dart b/pkg/analyzer/test/generated/non_hint_code_test.dart
index d418538..e18c1e1 100644
--- a/pkg/analyzer/test/generated/non_hint_code_test.dart
+++ b/pkg/analyzer/test/generated/non_hint_code_test.dart
@@ -44,7 +44,7 @@
 Future<Object> f() async {}
 ''');
     await computeAnalysisResult(source);
-    assertNoErrors(source);
+    assertErrors(source, [HintCode.MISSING_RETURN]);
     verify([source]);
   }
 
diff --git a/pkg/analyzer/test/generated/parser_fasta_test.dart b/pkg/analyzer/test/generated/parser_fasta_test.dart
index 8c02681..6999dfb 100644
--- a/pkg/analyzer/test/generated/parser_fasta_test.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_test.dart
@@ -126,249 +126,6 @@
   }
 
   @override
-  @failingTest
-  void test_invalidCodePoint() {
-    // TODO(brianwilkerson) Does not recover.
-    //   Internal problem: Compiler cannot run without a compiler context.
-    //   Tip: Are calls to the compiler wrapped in CompilerContext.runInContext?
-    //   package:front_end/src/fasta/compiler_context.dart 81:7             CompilerContext.current
-    //   package:front_end/src/fasta/command_line_reporting.dart 112:30     shouldThrowOn
-    //   package:front_end/src/fasta/deprecated_problems.dart 41:7          deprecated_inputError
-    //   package:front_end/src/fasta/quote.dart 181:5                       unescapeCodeUnits.error
-    //   package:front_end/src/fasta/quote.dart 251:40                      unescapeCodeUnits
-    //   package:front_end/src/fasta/quote.dart 147:13                      unescape
-    //   package:front_end/src/fasta/quote.dart 135:10                      unescapeString
-    //   package:analyzer/src/fasta/ast_builder.dart 159:22                 AstBuilder.endLiteralString
-    //   test/generated/parser_fasta_listener.dart 896:14                   ForwardingTestListener.endLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3497:14             Parser.parseSingleLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3434:13             Parser.parseLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3133:14             Parser.parsePrimary
-    //   package:front_end/src/fasta/parser/parser.dart 3097:14             Parser.parseUnaryExpression
-    //   package:front_end/src/fasta/parser/parser.dart 2968:13             Parser.parsePrecedenceExpression
-    //   package:front_end/src/fasta/parser/parser.dart 2942:11             Parser.parseExpression
-    //   test/generated/parser_fasta_test.dart 3196:39                      ParserProxy._run
-    super.test_invalidCodePoint();
-  }
-
-  @override
-  @failingTest
-  void test_invalidHexEscape_invalidDigit() {
-    // TODO(brianwilkerson) Does not recover.
-    //   Internal problem: Compiler cannot run without a compiler context.
-    //   Tip: Are calls to the compiler wrapped in CompilerContext.runInContext?
-    //   package:front_end/src/fasta/compiler_context.dart 81:7             CompilerContext.current
-    //   package:front_end/src/fasta/command_line_reporting.dart 112:30     shouldThrowOn
-    //   package:front_end/src/fasta/deprecated_problems.dart 41:7          deprecated_inputError
-    //   package:front_end/src/fasta/quote.dart 181:5                       unescapeCodeUnits.error
-    //   package:front_end/src/fasta/quote.dart 221:47                      unescapeCodeUnits
-    //   package:front_end/src/fasta/quote.dart 147:13                      unescape
-    //   package:front_end/src/fasta/quote.dart 135:10                      unescapeString
-    //   package:analyzer/src/fasta/ast_builder.dart 159:22                 AstBuilder.endLiteralString
-    //   test/generated/parser_fasta_listener.dart 896:14                   ForwardingTestListener.endLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3497:14             Parser.parseSingleLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3434:13             Parser.parseLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3133:14             Parser.parsePrimary
-    //   package:front_end/src/fasta/parser/parser.dart 3097:14             Parser.parseUnaryExpression
-    //   package:front_end/src/fasta/parser/parser.dart 2968:13             Parser.parsePrecedenceExpression
-    //   package:front_end/src/fasta/parser/parser.dart 2942:11             Parser.parseExpression
-    //   test/generated/parser_fasta_test.dart 3196:39                      ParserProxy._run
-    super.test_invalidHexEscape_invalidDigit();
-  }
-
-  @override
-  @failingTest
-  void test_invalidHexEscape_tooFewDigits() {
-    // TODO(brianwilkerson) Does not recover.
-    //   Internal problem: Compiler cannot run without a compiler context.
-    //   Tip: Are calls to the compiler wrapped in CompilerContext.runInContext?
-    //   package:front_end/src/fasta/compiler_context.dart 81:7             CompilerContext.current
-    //   package:front_end/src/fasta/command_line_reporting.dart 112:30     shouldThrowOn
-    //   package:front_end/src/fasta/deprecated_problems.dart 41:7          deprecated_inputError
-    //   package:front_end/src/fasta/quote.dart 181:5                       unescapeCodeUnits.error
-    //   package:front_end/src/fasta/quote.dart 217:52                      unescapeCodeUnits
-    //   package:front_end/src/fasta/quote.dart 147:13                      unescape
-    //   package:front_end/src/fasta/quote.dart 135:10                      unescapeString
-    //   package:analyzer/src/fasta/ast_builder.dart 159:22                 AstBuilder.endLiteralString
-    //   test/generated/parser_fasta_listener.dart 896:14                   ForwardingTestListener.endLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3497:14             Parser.parseSingleLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3434:13             Parser.parseLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3133:14             Parser.parsePrimary
-    //   package:front_end/src/fasta/parser/parser.dart 3097:14             Parser.parseUnaryExpression
-    //   package:front_end/src/fasta/parser/parser.dart 2968:13             Parser.parsePrecedenceExpression
-    //   package:front_end/src/fasta/parser/parser.dart 2942:11             Parser.parseExpression
-    //   test/generated/parser_fasta_test.dart 3196:39                      ParserProxy._run
-    super.test_invalidHexEscape_tooFewDigits();
-  }
-
-  @override
-  @failingTest
-  void test_invalidUnicodeEscape_incomplete_noDigits() {
-    // TODO(brianwilkerson) Does not recover.
-    //   Internal problem: Compiler cannot run without a compiler context.
-    //   Tip: Are calls to the compiler wrapped in CompilerContext.runInContext?
-    //   package:front_end/src/fasta/compiler_context.dart 81:7             CompilerContext.current
-    //   package:front_end/src/fasta/command_line_reporting.dart 112:30     shouldThrowOn
-    //   package:front_end/src/fasta/deprecated_problems.dart 41:7          deprecated_inputError
-    //   package:front_end/src/fasta/quote.dart 181:5                       unescapeCodeUnits.error
-    //   package:front_end/src/fasta/quote.dart 232:54                      unescapeCodeUnits
-    //   package:front_end/src/fasta/quote.dart 147:13                      unescape
-    //   package:front_end/src/fasta/quote.dart 135:10                      unescapeString
-    //   package:analyzer/src/fasta/ast_builder.dart 159:22                 AstBuilder.endLiteralString
-    //   test/generated/parser_fasta_listener.dart 896:14                   ForwardingTestListener.endLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3497:14             Parser.parseSingleLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3434:13             Parser.parseLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3133:14             Parser.parsePrimary
-    //   package:front_end/src/fasta/parser/parser.dart 3097:14             Parser.parseUnaryExpression
-    //   package:front_end/src/fasta/parser/parser.dart 2968:13             Parser.parsePrecedenceExpression
-    //   package:front_end/src/fasta/parser/parser.dart 2942:11             Parser.parseExpression
-    //   package:front_end/src/fasta/parser/parser.dart 2862:13             Parser.parseExpressionStatement
-    //   package:front_end/src/fasta/parser/parser.dart 2790:14             Parser.parseStatementX
-    //   package:front_end/src/fasta/parser/parser.dart 2722:20             Parser.parseStatement
-    //   test/generated/parser_fasta_test.dart 3287:39                      ParserProxy._run
-    super.test_invalidUnicodeEscape_incomplete_noDigits();
-  }
-
-  @override
-  @failingTest
-  void test_invalidUnicodeEscape_incomplete_someDigits() {
-    // TODO(brianwilkerson) Does not recover.
-    //   Internal problem: Compiler cannot run without a compiler context.
-    //   Tip: Are calls to the compiler wrapped in CompilerContext.runInContext?
-    //   package:front_end/src/fasta/compiler_context.dart 81:7             CompilerContext.current
-    //   package:front_end/src/fasta/command_line_reporting.dart 112:30     shouldThrowOn
-    //   package:front_end/src/fasta/deprecated_problems.dart 41:7          deprecated_inputError
-    //   package:front_end/src/fasta/quote.dart 181:5                       unescapeCodeUnits.error
-    //   package:front_end/src/fasta/quote.dart 232:54                      unescapeCodeUnits
-    //   package:front_end/src/fasta/quote.dart 147:13                      unescape
-    //   package:front_end/src/fasta/quote.dart 135:10                      unescapeString
-    //   package:analyzer/src/fasta/ast_builder.dart 159:22                 AstBuilder.endLiteralString
-    //   test/generated/parser_fasta_listener.dart 896:14                   ForwardingTestListener.endLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3497:14             Parser.parseSingleLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3434:13             Parser.parseLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3133:14             Parser.parsePrimary
-    //   package:front_end/src/fasta/parser/parser.dart 3097:14             Parser.parseUnaryExpression
-    //   package:front_end/src/fasta/parser/parser.dart 2968:13             Parser.parsePrecedenceExpression
-    //   package:front_end/src/fasta/parser/parser.dart 2942:11             Parser.parseExpression
-    //   package:front_end/src/fasta/parser/parser.dart 2862:13             Parser.parseExpressionStatement
-    //   package:front_end/src/fasta/parser/parser.dart 2790:14             Parser.parseStatementX
-    //   package:front_end/src/fasta/parser/parser.dart 2722:20             Parser.parseStatement
-    //   test/generated/parser_fasta_test.dart 3287:39                      ParserProxy._run
-    super.test_invalidUnicodeEscape_incomplete_someDigits();
-  }
-
-  @override
-  @failingTest
-  void test_invalidUnicodeEscape_invalidDigit() {
-    // TODO(brianwilkerson) Does not recover.
-    //   Internal problem: Compiler cannot run without a compiler context.
-    //   Tip: Are calls to the compiler wrapped in CompilerContext.runInContext?
-    //   package:front_end/src/fasta/compiler_context.dart 81:7             CompilerContext.current
-    //   package:front_end/src/fasta/command_line_reporting.dart 112:30     shouldThrowOn
-    //   package:front_end/src/fasta/deprecated_problems.dart 41:7          deprecated_inputError
-    //   package:front_end/src/fasta/quote.dart 181:5                       unescapeCodeUnits.error
-    //   package:front_end/src/fasta/quote.dart 240:54                      unescapeCodeUnits
-    //   package:front_end/src/fasta/quote.dart 147:13                      unescape
-    //   package:front_end/src/fasta/quote.dart 135:10                      unescapeString
-    //   package:analyzer/src/fasta/ast_builder.dart 159:22                 AstBuilder.endLiteralString
-    //   test/generated/parser_fasta_listener.dart 896:14                   ForwardingTestListener.endLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3497:14             Parser.parseSingleLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3434:13             Parser.parseLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3133:14             Parser.parsePrimary
-    //   package:front_end/src/fasta/parser/parser.dart 3097:14             Parser.parseUnaryExpression
-    //   package:front_end/src/fasta/parser/parser.dart 2968:13             Parser.parsePrecedenceExpression
-    //   package:front_end/src/fasta/parser/parser.dart 2942:11             Parser.parseExpression
-    //   package:front_end/src/fasta/parser/parser.dart 2862:13             Parser.parseExpressionStatement
-    //   package:front_end/src/fasta/parser/parser.dart 2790:14             Parser.parseStatementX
-    //   package:front_end/src/fasta/parser/parser.dart 2722:20             Parser.parseStatement
-    //   test/generated/parser_fasta_test.dart 3287:39                      ParserProxy._run
-    super.test_invalidUnicodeEscape_invalidDigit();
-  }
-
-  @override
-  @failingTest
-  void test_invalidUnicodeEscape_tooFewDigits_fixed() {
-    // TODO(brianwilkerson) Does not recover.
-    //   Internal problem: Compiler cannot run without a compiler context.
-    //   Tip: Are calls to the compiler wrapped in CompilerContext.runInContext?
-    //   package:front_end/src/fasta/compiler_context.dart 81:7             CompilerContext.current
-    //   package:front_end/src/fasta/command_line_reporting.dart 112:30     shouldThrowOn
-    //   package:front_end/src/fasta/deprecated_problems.dart 41:7          deprecated_inputError
-    //   package:front_end/src/fasta/quote.dart 181:5                       unescapeCodeUnits.error
-    //   package:front_end/src/fasta/quote.dart 240:54                      unescapeCodeUnits
-    //   package:front_end/src/fasta/quote.dart 147:13                      unescape
-    //   package:front_end/src/fasta/quote.dart 135:10                      unescapeString
-    //   package:analyzer/src/fasta/ast_builder.dart 159:22                 AstBuilder.endLiteralString
-    //   test/generated/parser_fasta_listener.dart 896:14                   ForwardingTestListener.endLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3497:14             Parser.parseSingleLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3434:13             Parser.parseLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3133:14             Parser.parsePrimary
-    //   package:front_end/src/fasta/parser/parser.dart 3097:14             Parser.parseUnaryExpression
-    //   package:front_end/src/fasta/parser/parser.dart 2968:13             Parser.parsePrecedenceExpression
-    //   package:front_end/src/fasta/parser/parser.dart 2942:11             Parser.parseExpression
-    //   package:front_end/src/fasta/parser/parser.dart 2862:13             Parser.parseExpressionStatement
-    //   package:front_end/src/fasta/parser/parser.dart 2790:14             Parser.parseStatementX
-    //   package:front_end/src/fasta/parser/parser.dart 2722:20             Parser.parseStatement
-    //   test/generated/parser_fasta_test.dart 3287:39                      ParserProxy._run
-    super.test_invalidUnicodeEscape_tooFewDigits_fixed();
-  }
-
-  @override
-  @failingTest
-  void test_invalidUnicodeEscape_tooFewDigits_variable() {
-    // TODO(brianwilkerson) Does not recover.
-    //   Internal problem: Compiler cannot run without a compiler context.
-    //   Tip: Are calls to the compiler wrapped in CompilerContext.runInContext?
-    //   package:front_end/src/fasta/compiler_context.dart 81:7             CompilerContext.current
-    //   package:front_end/src/fasta/command_line_reporting.dart 112:30     shouldThrowOn
-    //   package:front_end/src/fasta/deprecated_problems.dart 41:7          deprecated_inputError
-    //   package:front_end/src/fasta/quote.dart 181:5                       unescapeCodeUnits.error
-    //   package:front_end/src/fasta/quote.dart 235:49                      unescapeCodeUnits
-    //   package:front_end/src/fasta/quote.dart 147:13                      unescape
-    //   package:front_end/src/fasta/quote.dart 135:10                      unescapeString
-    //   package:analyzer/src/fasta/ast_builder.dart 159:22                 AstBuilder.endLiteralString
-    //   test/generated/parser_fasta_listener.dart 896:14                   ForwardingTestListener.endLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3497:14             Parser.parseSingleLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3434:13             Parser.parseLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3133:14             Parser.parsePrimary
-    //   package:front_end/src/fasta/parser/parser.dart 3097:14             Parser.parseUnaryExpression
-    //   package:front_end/src/fasta/parser/parser.dart 2968:13             Parser.parsePrecedenceExpression
-    //   package:front_end/src/fasta/parser/parser.dart 2942:11             Parser.parseExpression
-    //   package:front_end/src/fasta/parser/parser.dart 2862:13             Parser.parseExpressionStatement
-    //   package:front_end/src/fasta/parser/parser.dart 2790:14             Parser.parseStatementX
-    //   package:front_end/src/fasta/parser/parser.dart 2722:20             Parser.parseStatement
-    //   test/generated/parser_fasta_test.dart 3287:39                      ParserProxy._run
-    super.test_invalidUnicodeEscape_tooFewDigits_variable();
-  }
-
-  @override
-  @failingTest
-  void test_invalidUnicodeEscape_tooManyDigits_variable() {
-    // TODO(brianwilkerson) Does not recover.
-    //   Internal problem: Compiler cannot run without a compiler context.
-    //   Tip: Are calls to the compiler wrapped in CompilerContext.runInContext?
-    //   package:front_end/src/fasta/compiler_context.dart 81:7             CompilerContext.current
-    //   package:front_end/src/fasta/command_line_reporting.dart 112:30     shouldThrowOn
-    //   package:front_end/src/fasta/deprecated_problems.dart 41:7          deprecated_inputError
-    //   package:front_end/src/fasta/quote.dart 181:5                       unescapeCodeUnits.error
-    //   package:front_end/src/fasta/quote.dart 251:40                      unescapeCodeUnits
-    //   package:front_end/src/fasta/quote.dart 147:13                      unescape
-    //   package:front_end/src/fasta/quote.dart 135:10                      unescapeString
-    //   package:analyzer/src/fasta/ast_builder.dart 159:22                 AstBuilder.endLiteralString
-    //   test/generated/parser_fasta_listener.dart 896:14                   ForwardingTestListener.endLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3497:14             Parser.parseSingleLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3434:13             Parser.parseLiteralString
-    //   package:front_end/src/fasta/parser/parser.dart 3133:14             Parser.parsePrimary
-    //   package:front_end/src/fasta/parser/parser.dart 3097:14             Parser.parseUnaryExpression
-    //   package:front_end/src/fasta/parser/parser.dart 2968:13             Parser.parsePrecedenceExpression
-    //   package:front_end/src/fasta/parser/parser.dart 2942:11             Parser.parseExpression
-    //   package:front_end/src/fasta/parser/parser.dart 2862:13             Parser.parseExpressionStatement
-    //   package:front_end/src/fasta/parser/parser.dart 2790:14             Parser.parseStatementX
-    //   package:front_end/src/fasta/parser/parser.dart 2722:20             Parser.parseStatement
-    //   test/generated/parser_fasta_test.dart 3287:39                      ParserProxy._run
-    super.test_invalidUnicodeEscape_tooManyDigits_variable();
-  }
-
-  @override
   void test_method_invalidTypeParameterComments() {
     // Ignored: Fasta does not support the generic comment syntax.
   }
@@ -496,7 +253,7 @@
   @override
   @failingTest
   void test_parseUnaryExpression_decrement_super() {
-    // TODO(brianwilkerson) Does not recover.
+    // TODO(danrubel) Reports a different error and different token stream.
     // Expected: TokenType:<MINUS>
     //   Actual: TokenType:<MINUS_MINUS>
     super.test_parseUnaryExpression_decrement_super();
@@ -505,7 +262,7 @@
   @override
   @failingTest
   void test_parseUnaryExpression_decrement_super_withComment() {
-    // TODO(brianwilkerson) Does not recover.
+    // TODO(danrubel) Reports a different error and different token stream.
     // Expected: TokenType:<MINUS>
     //   Actual: TokenType:<MINUS_MINUS>
     super.test_parseUnaryExpression_decrement_super_withComment();
@@ -1204,13 +961,6 @@
   }
 
   @override
-  @failingTest
-  void test_missingIdentifier_afterAnnotation() {
-    // TODO(brianwilkerson) reportUnrecoverableErrorWithToken
-    super.test_missingIdentifier_afterAnnotation();
-  }
-
-  @override
   void test_relationalExpression_missing_LHS_RHS() {
     parseExpression("is", codes: [
       ParserErrorCode.EXPECTED_TYPE_NAME,
@@ -1230,14 +980,7 @@
 
 @reflectiveTest
 class SimpleParserTest_Fasta extends FastaParserTestCase
-    with SimpleParserTestMixin {
-  @override
-  @failingTest
-  void test_parseTypeParameterList_single() {
-    // TODO(brianwilkerson) Does not use all tokens.
-    super.test_parseTypeParameterList_single();
-  }
-}
+    with SimpleParserTestMixin {}
 
 /**
  * Tests of the fasta parser based on [StatementParserTestMixin].
diff --git a/pkg/analyzer/test/generated/parser_forest_test.dart b/pkg/analyzer/test/generated/parser_forest_test.dart
index b0a2885..7ca4c06 100644
--- a/pkg/analyzer/test/generated/parser_forest_test.dart
+++ b/pkg/analyzer/test/generated/parser_forest_test.dart
@@ -1560,11 +1560,6 @@
   }
 
   @failingTest
-  void test_invalidCodePoint() {
-    super.test_invalidCodePoint();
-  }
-
-  @failingTest
   void test_invalidCommentReference__new_nonIdentifier() {
     super.test_invalidCommentReference__new_nonIdentifier();
   }
@@ -1595,16 +1590,6 @@
   }
 
   @failingTest
-  void test_invalidHexEscape_invalidDigit() {
-    super.test_invalidHexEscape_invalidDigit();
-  }
-
-  @failingTest
-  void test_invalidHexEscape_tooFewDigits() {
-    super.test_invalidHexEscape_tooFewDigits();
-  }
-
-  @failingTest
   void test_invalidInterpolationIdentifier_startWithDigit() {
     super.test_invalidInterpolationIdentifier_startWithDigit();
   }
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index f9edf37..3c85986 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -25,6 +25,9 @@
 import 'test_support.dart';
 
 main() {
+  // The fasta parser has a parallel set of tests in parser_fasta_test.dart
+  if (Parser.useFasta) return;
+
   defineReflectiveSuite(() {
     defineReflectiveTests(ClassMemberParserTest);
     defineReflectiveTests(ComplexParserTest);
@@ -3998,8 +4001,8 @@
   }
 
   void test_invalidCodePoint() {
-    StringLiteral literal = parseExpression("'\\u{110000}'",
-        errors: [expectedError(ParserErrorCode.INVALID_CODE_POINT, 0, 10)]);
+    StringLiteral literal = parseExpression("'begin \\u{110000}'",
+        errors: [expectedError(ParserErrorCode.INVALID_CODE_POINT, 7, 9)]);
     expectNotNullIfNoErrors(literal);
   }
 
@@ -4065,8 +4068,8 @@
   }
 
   void test_invalidHexEscape_invalidDigit() {
-    StringLiteral literal = parseExpression("'\\x0 a'",
-        errors: [expectedError(ParserErrorCode.INVALID_HEX_ESCAPE, 1, 3)]);
+    StringLiteral literal = parseExpression("'not \\x0 a'",
+        errors: [expectedError(ParserErrorCode.INVALID_HEX_ESCAPE, 5, 3)]);
     expectNotNullIfNoErrors(literal);
   }
 
@@ -4248,7 +4251,7 @@
   }
 
   void test_invalidUnicodeEscape_invalidDigit() {
-    Expression expression = parseStringLiteral("'\\u0 a'");
+    Expression expression = parseStringLiteral("'\\u0 and some more'");
     expectNotNullIfNoErrors(expression);
     listener.assertErrors(
         [expectedError(ParserErrorCode.INVALID_UNICODE_ESCAPE, 1, 3)]);
@@ -4271,10 +4274,12 @@
   void test_invalidUnicodeEscape_tooManyDigits_variable() {
     Expression expression = parseStringLiteral("'\\u{12345678}'");
     expectNotNullIfNoErrors(expression);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.INVALID_UNICODE_ESCAPE, 1, 12),
-      expectedError(ParserErrorCode.INVALID_CODE_POINT, 1, 12)
-    ]);
+    listener.assertErrors(usingFastaParser
+        ? [expectedError(ParserErrorCode.INVALID_CODE_POINT, 1, 9)]
+        : [
+            expectedError(ParserErrorCode.INVALID_UNICODE_ESCAPE, 1, 12),
+            expectedError(ParserErrorCode.INVALID_CODE_POINT, 1, 12)
+          ]);
   }
 
   void test_libraryDirectiveNotFirst() {
@@ -11813,17 +11818,23 @@
   }
 
   void test_missingIdentifier_afterAnnotation() {
-    createParser('@override }');
+    createParser('@override }', expectedEndOffset: 10);
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors(
         [expectedError(ParserErrorCode.EXPECTED_CLASS_MEMBER, 10, 1)]);
-    expect(member, new isInstanceOf<MethodDeclaration>());
-    MethodDeclaration method = member;
-    expect(method.documentationComment, isNull);
-    NodeList<Annotation> metadata = method.metadata;
-    expect(metadata, hasLength(1));
-    expect(metadata[0].name.name, "override");
+    if (usingFastaParser) {
+      // TODO(danrubel): Consider generating a sub method so that the
+      // existing annotation can be associated with a class member.
+      expect(member, isNull);
+    } else {
+      expect(member, new isInstanceOf<MethodDeclaration>());
+      MethodDeclaration method = member;
+      expect(method.documentationComment, isNull);
+      NodeList<Annotation> metadata = method.metadata;
+      expect(metadata, hasLength(1));
+      expect(metadata[0].name.name, "override");
+    }
   }
 
   void test_missingSemicolon_varialeDeclarationList() {
@@ -14592,13 +14603,20 @@
   }
 
   void test_parseTypeParameterList_single() {
-    createParser('<<A>');
+    createParser('<<A>', expectedEndOffset: 0);
     TypeParameterList parameterList = parser.parseTypeParameterList();
-    expectNotNullIfNoErrors(parameterList);
-    assertNoErrors();
-    expect(parameterList.leftBracket, isNotNull);
-    expect(parameterList.rightBracket, isNotNull);
-    expect(parameterList.typeParameters, hasLength(1));
+    if (usingFastaParser) {
+      // TODO(danrubel): Consider splitting `<<` and marking the first `<`
+      // as an unexpected token.
+      expect(parameterList, isNull);
+      assertNoErrors();
+    } else {
+      expectNotNullIfNoErrors(parameterList);
+      assertNoErrors();
+      expect(parameterList.leftBracket, isNotNull);
+      expect(parameterList.rightBracket, isNotNull);
+      expect(parameterList.typeParameters, hasLength(1));
+    }
   }
 
   void test_parseTypeParameterList_withTrailingEquals() {
diff --git a/pkg/analyzer/test/generated/resolver_kernel_test.dart b/pkg/analyzer/test/generated/resolver_kernel_test.dart
index a3537a4..bc11b8b 100644
--- a/pkg/analyzer/test/generated/resolver_kernel_test.dart
+++ b/pkg/analyzer/test/generated/resolver_kernel_test.dart
@@ -8,9 +8,7 @@
 
 main() {
   defineReflectiveSuite(() {
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(StrictModeTest_Kernel);
+    defineReflectiveTests(StrictModeTest_Kernel);
   });
 }
 
diff --git a/pkg/analyzer/test/generated/static_type_analyzer_kernel_test.dart b/pkg/analyzer/test/generated/static_type_analyzer_kernel_test.dart
index 07c4b89..bdee524 100644
--- a/pkg/analyzer/test/generated/static_type_analyzer_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_type_analyzer_kernel_test.dart
@@ -8,9 +8,7 @@
 
 main() {
   defineReflectiveSuite(() {
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(StaticTypeAnalyzer2Test_Kernel);
+    defineReflectiveTests(StaticTypeAnalyzer2Test_Kernel);
   });
 }
 
@@ -24,20 +22,6 @@
 
   @override
   @failingTest
-  test_FunctionExpressionInvocation_block() async {
-    // Bad state: No reference information for (() {return 1;})() at 21
-    await super.test_FunctionExpressionInvocation_block();
-  }
-
-  @override
-  @failingTest
-  test_MethodInvocation_nameType_parameter_propagatedType() async {
-    // Expected: DynamicTypeImpl:<dynamic>
-    await super.test_MethodInvocation_nameType_parameter_propagatedType();
-  }
-
-  @override
-  @failingTest
   test_staticMethods_classTypeParameters_genericMethod() async {
     // Expected: '(dynamic) → void'
     await super.test_staticMethods_classTypeParameters_genericMethod();
diff --git a/pkg/analyzer/test/generated/static_type_analyzer_test.dart b/pkg/analyzer/test/generated/static_type_analyzer_test.dart
index 0d314be..7ee2030 100644
--- a/pkg/analyzer/test/generated/static_type_analyzer_test.dart
+++ b/pkg/analyzer/test/generated/static_type_analyzer_test.dart
@@ -342,10 +342,10 @@
     expect(_flatten(futureDynamicType), dynamicType);
     // flatten(Future<int>) = int
     expect(_flatten(futureIntType), intType);
-    // flatten(Future<Future>) = dynamic
-    expect(_flatten(futureFutureDynamicType), dynamicType);
-    // flatten(Future<Future<int>>) = int
-    expect(_flatten(futureFutureIntType), intType);
+    // flatten(Future<Future>) = Future<dynamic>
+    expect(_flatten(futureFutureDynamicType), futureDynamicType);
+    // flatten(Future<Future<int>>) = Future<int>
+    expect(_flatten(futureFutureIntType), futureIntType);
   }
 
   void test_flatten_unrelated_types() {
@@ -482,7 +482,7 @@
         _typeProvider.futureType.instantiate(<DartType>[futureIntType]);
     Expression node = AstTestFactory
         .awaitExpression(_resolvedVariable(futureFutureIntType, 'e'));
-    expect(_analyze(node), same(intType));
+    expect(_analyze(node), same(futureIntType));
     _listener.assertNoErrors();
   }
 
diff --git a/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart b/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
index f864c75..234c2ff 100644
--- a/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
@@ -8,10 +8,8 @@
 
 main() {
   defineReflectiveSuite(() {
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(StaticTypeWarningCodeTest_Kernel);
-    // defineReflectiveTests(StrongModeStaticTypeWarningCodeTest_Kernel);
+    defineReflectiveTests(StaticTypeWarningCodeTest_Kernel);
+    defineReflectiveTests(StrongModeStaticTypeWarningCodeTest_Kernel);
   });
 }
 
@@ -66,6 +64,13 @@
 
   @override
   @failingTest
+  test_bug21912() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_bug21912();
+  }
+
+  @override
+  @failingTest
   test_expectedOneListTypeArgument() async {
     // Bad state: Found 1 argument types for 2 type arguments
     await super.test_expectedOneListTypeArgument();
@@ -431,6 +436,16 @@
 
   @override
   @failingTest
+  test_returnOfInvalidType_async_future_future_int_mismatches_future_int() {
+    // Expected 1 errors of type StaticTypeWarningCode.RETURN_OF_INVALID_TYPE,
+    // found 0; 0 errors of type StaticTypeWarningCode.INVALID_ASSIGNMENT, found
+    // 1 (54)
+    return super
+        .test_returnOfInvalidType_async_future_future_int_mismatches_future_int();
+  }
+
+  @override
+  @failingTest
   test_returnOfInvalidType_async_future_int_mismatches_future_string() async {
     // Expected 1 errors of type StaticTypeWarningCode.RETURN_OF_INVALID_TYPE, found 0
     await super
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 ca84d57..1912d7f 100644
--- a/pkg/analyzer/test/generated/static_type_warning_code_test.dart
+++ b/pkg/analyzer/test/generated/static_type_warning_code_test.dart
@@ -143,14 +143,13 @@
   }
 
   test_await_flattened() async {
-    // The analyzer type system over-flattens - see dartbug.com/31887
     await assertErrorsInCode('''
 import 'dart:async';
 Future<Future<int>> ffi() => null;
 f() async {
-  Future<int> b = await ffi(); // Warning: int not assignable to Future<int>
+  Future<int> b = await ffi(); 
 }
-''', useCFE ? [] : [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
+''', []);
   }
 
   test_await_simple() async {
@@ -921,6 +920,16 @@
 f(B<A> b) {}''', [StaticTypeWarningCode.NON_TYPE_AS_TYPE_ARGUMENT]);
   }
 
+  test_returnOfInvalidType_async_future_future_int_mismatches_future_int() async {
+    await assertErrorsInCode('''
+import 'dart:async';
+Future<int> f() async {
+  return g();
+}
+Future<Future<int>> g() => null;
+''', [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
+  }
+
   test_returnOfInvalidType_async_future_int_mismatches_future_string() async {
     await assertErrorsInCode('''
 import 'dart:async';
diff --git a/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart b/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
index da2d2e9..ff7880f 100644
--- a/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
@@ -8,9 +8,7 @@
 
 main() {
   defineReflectiveSuite(() {
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(StaticWarningCodeTest_Kernel);
+    defineReflectiveTests(StaticWarningCodeTest_Kernel);
   });
 }
 
@@ -150,6 +148,13 @@
 
   @override
   @failingTest
+  test_argumentTypeNotAssignable_call() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_argumentTypeNotAssignable_call();
+  }
+
+  @override
+  @failingTest
   @potentialAnalyzerProblem
   test_argumentTypeNotAssignable_cascadeSecond() async {
     return super.test_argumentTypeNotAssignable_cascadeSecond();
@@ -476,20 +481,6 @@
   @override
   @failingTest
   @potentialAnalyzerProblem
-  test_concreteClassWithAbstractMember() async {
-    return super.test_concreteClassWithAbstractMember();
-  }
-
-  @override
-  @failingTest
-  @potentialAnalyzerProblem
-  test_concreteClassWithAbstractMember_noSuchMethod_interface() async {
-    return super.test_concreteClassWithAbstractMember_noSuchMethod_interface();
-  }
-
-  @override
-  @failingTest
-  @potentialAnalyzerProblem
   test_conflictingDartImport() async {
     return super.test_conflictingDartImport();
   }
@@ -759,58 +750,188 @@
 
   @override
   @failingTest
-  @potentialAnalyzerProblem
-  test_functionWithoutCall_direct() async {
-    return super.test_functionWithoutCall_direct();
+  test_generalizedVoid_invocationOfVoidFieldError() async {
+    return super.test_generalizedVoid_invocationOfVoidFieldError();
   }
 
   @override
   @failingTest
-  @potentialAnalyzerProblem
-  test_functionWithoutCall_direct_typeAlias() async {
-    return super.test_functionWithoutCall_direct_typeAlias();
+  test_generalizedVoid_invocationOfVoidLocalError() async {
+    return super.test_generalizedVoid_invocationOfVoidLocalError();
   }
 
   @override
   @failingTest
-  @potentialAnalyzerProblem
-  test_functionWithoutCall_indirect_extends() async {
-    return super.test_functionWithoutCall_indirect_extends();
+  test_generalizedVoid_invocationOfVoidResultError() async {
+    return super.test_generalizedVoid_invocationOfVoidResultError();
   }
 
   @override
   @failingTest
-  @potentialAnalyzerProblem
-  test_functionWithoutCall_indirect_extends_typeAlias() async {
-    return super.test_functionWithoutCall_indirect_extends_typeAlias();
+  test_generalizedVoid_invocationOfVoidToplevelError() async {
+    return super.test_generalizedVoid_invocationOfVoidToplevelError();
   }
 
   @override
   @failingTest
-  @potentialAnalyzerProblem
-  test_functionWithoutCall_indirect_implements() async {
-    return super.test_functionWithoutCall_indirect_implements();
+  test_generalizedVoid_throwVoidValueError() async {
+    return super.test_generalizedVoid_throwVoidValueError();
   }
 
   @override
   @failingTest
-  @potentialAnalyzerProblem
-  test_functionWithoutCall_indirect_implements_typeAlias() async {
-    return super.test_functionWithoutCall_indirect_implements_typeAlias();
+  test_generalizedVoid_useOfInForeachIterableError() async {
+    return super.test_generalizedVoid_useOfInForeachIterableError();
   }
 
   @override
   @failingTest
-  @potentialAnalyzerProblem
-  test_functionWithoutCall_mixin_implements() async {
-    return super.test_functionWithoutCall_mixin_implements();
+  test_generalizedVoid_useOfVoidAsIndexAssignError() async {
+    return super.test_generalizedVoid_useOfVoidAsIndexAssignError();
   }
 
   @override
   @failingTest
-  @potentialAnalyzerProblem
-  test_functionWithoutCall_mixin_implements_typeAlias() async {
-    return super.test_functionWithoutCall_mixin_implements_typeAlias();
+  test_generalizedVoid_useOfVoidAsIndexError() async {
+    return super.test_generalizedVoid_useOfVoidAsIndexError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidAssignedToDynamicError() async {
+    return super.test_generalizedVoid_useOfVoidAssignedToDynamicError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidByIndexingError() async {
+    return super.test_generalizedVoid_useOfVoidByIndexingError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidCallMethodError() async {
+    return super.test_generalizedVoid_useOfVoidCallMethodError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidCallMethodWithNullError() async {
+    return super.test_generalizedVoid_useOfVoidCallMethodWithNullError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidCallSetterError() async {
+    return super.test_generalizedVoid_useOfVoidCallSetterError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidCascadeError() async {
+    return super.test_generalizedVoid_useOfVoidCascadeError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInConditionalConditionError() async {
+    return super.test_generalizedVoid_useOfVoidInConditionalConditionError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInConditionalLhsError() async {
+    return super.test_generalizedVoid_useOfVoidInConditionalLhsError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInConditionalRhsError() async {
+    return super.test_generalizedVoid_useOfVoidInConditionalRhsError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInDoWhileConditionError() async {
+    return super.test_generalizedVoid_useOfVoidInDoWhileConditionError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInForeachVariableError() async {
+    return super.test_generalizedVoid_useOfVoidInForeachVariableError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInIsTestError() async {
+    return super.test_generalizedVoid_useOfVoidInIsTestError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInListLiteralError() async {
+    return super.test_generalizedVoid_useOfVoidInListLiteralError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInMapLiteralKeyError() async {
+    return super.test_generalizedVoid_useOfVoidInMapLiteralKeyError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInMapLiteralValueError() async {
+    return super.test_generalizedVoid_useOfVoidInMapLiteralValueError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInNullOperatorLhsError() async {
+    return super.test_generalizedVoid_useOfVoidInNullOperatorLhsError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInSpecialAssignmentError() async {
+    return super.test_generalizedVoid_useOfVoidInSpecialAssignmentError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInSwitchExpressionError() async {
+    return super.test_generalizedVoid_useOfVoidInSwitchExpressionError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInWhileConditionError() async {
+    return super.test_generalizedVoid_useOfVoidInWhileConditionError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidNullPropertyAccessError() async {
+    return super.test_generalizedVoid_useOfVoidNullPropertyAccessError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidPropertyAccessError() async {
+    return super.test_generalizedVoid_useOfVoidPropertyAccessError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidReturnInNonVoidFunctionError() async {
+    return super.test_generalizedVoid_useOfVoidReturnInNonVoidFunctionError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidWhenArgumentError() async {
+    return super.test_generalizedVoid_useOfVoidWhenArgumentError();
   }
 
   @override
@@ -973,34 +1094,6 @@
   @override
   @failingTest
   @potentialAnalyzerProblem
-  test_invalidOverride_defaultOverridesNonDefault() async {
-    return super.test_invalidOverride_defaultOverridesNonDefault();
-  }
-
-  @override
-  @failingTest
-  @potentialAnalyzerProblem
-  test_invalidOverride_defaultOverridesNonDefault_named() async {
-    return super.test_invalidOverride_defaultOverridesNonDefault_named();
-  }
-
-  @override
-  @failingTest
-  @potentialAnalyzerProblem
-  test_invalidOverrideDifferentDefaultValues_named() async {
-    return super.test_invalidOverrideDifferentDefaultValues_named();
-  }
-
-  @override
-  @failingTest
-  @potentialAnalyzerProblem
-  test_invalidOverrideDifferentDefaultValues_positional() async {
-    return super.test_invalidOverrideDifferentDefaultValues_positional();
-  }
-
-  @override
-  @failingTest
-  @potentialAnalyzerProblem
   test_invalidOverrideNamed_fewerNamedParameters() async {
     return super.test_invalidOverrideNamed_fewerNamedParameters();
   }
@@ -1520,6 +1613,13 @@
 
   @override
   @failingTest
+  test_returnWithoutValue_async_future_object_with_return() {
+    // Expected 1 errors of type StaticWarningCode.RETURN_WITHOUT_VALUE, found 0
+    return super.test_returnWithoutValue_async_future_object_with_return();
+  }
+
+  @override
+  @failingTest
   @potentialAnalyzerProblem
   test_returnWithoutValue_factoryConstructor() async {
     return super.test_returnWithoutValue_factoryConstructor();
@@ -1549,13 +1649,6 @@
   @override
   @failingTest
   @potentialAnalyzerProblem
-  test_returnWithoutValue_Null() async {
-    return super.test_returnWithoutValue_Null();
-  }
-
-  @override
-  @failingTest
-  @potentialAnalyzerProblem
   test_staticAccessToInstanceMember_method_invocation() async {
     return super.test_staticAccessToInstanceMember_method_invocation();
   }
@@ -1663,13 +1756,6 @@
   @override
   @failingTest
   @potentialAnalyzerProblem
-  test_typePromotion_functionType_arg_InterToDyn() async {
-    return super.test_typePromotion_functionType_arg_InterToDyn();
-  }
-
-  @override
-  @failingTest
-  @potentialAnalyzerProblem
   test_typeTestNonType() async {
     return super.test_typeTestNonType();
   }
@@ -1814,204 +1900,6 @@
     return super.test_undefinedStaticMethodOrGetter_setter_inSuperclass();
   }
 
-  @override
-  @failingTest
-  test_generalizedVoid_assignToVoid_notStrong_error() async {
-    return super.test_generalizedVoid_assignToVoid_notStrong_error();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidInForPartsOk() async {
-    return super.test_generalizedVoid_useOfVoidInForPartsOk();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidInIsTestError() async {
-    return super.test_generalizedVoid_useOfVoidInIsTestError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidInConditionalConditionError() async {
-    return super.test_generalizedVoid_useOfVoidInConditionalConditionError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidInConditionalLhsError() async {
-    return super.test_generalizedVoid_useOfVoidInConditionalLhsError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidInConditionalRhsError() async {
-    return super.test_generalizedVoid_useOfVoidInConditionalRhsError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidWhenArgumentError() async {
-    return super.test_generalizedVoid_useOfVoidWhenArgumentError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidAssignedToDynamicError() async {
-    return super.test_generalizedVoid_useOfVoidAssignedToDynamicError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_throwVoidValueError() async {
-    return super.test_generalizedVoid_throwVoidValueError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidInListLiteralError() async {
-    return super.test_generalizedVoid_useOfVoidInListLiteralError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidInMapLiteralValueError() async {
-    return super.test_generalizedVoid_useOfVoidInMapLiteralValueError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidInMapLiteralKeyError() async {
-    return super.test_generalizedVoid_useOfVoidInMapLiteralKeyError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidInNullOperatorLhsError() async {
-    return super.test_generalizedVoid_useOfVoidInNullOperatorLhsError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidReturnInNonVoidFunctionError() async {
-    return super.test_generalizedVoid_useOfVoidReturnInNonVoidFunctionError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidInWhileConditionError() async {
-    return super.test_generalizedVoid_useOfVoidInWhileConditionError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidInDoWhileConditionError() async {
-    return super.test_generalizedVoid_useOfVoidInDoWhileConditionError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfInForeachIterableError() async {
-    return super.test_generalizedVoid_useOfInForeachIterableError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidInForeachVariableError() async {
-    return super.test_generalizedVoid_useOfVoidInForeachVariableError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidInSpecialAssignmentError() async {
-    return super.test_generalizedVoid_useOfVoidInSpecialAssignmentError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidCallMethodError() async {
-    return super.test_generalizedVoid_useOfVoidCallMethodError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidCallMethodWithNullError() async {
-    return super.test_generalizedVoid_useOfVoidCallMethodWithNullError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidCascadeError() async {
-    return super.test_generalizedVoid_useOfVoidCascadeError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_invocationOfVoidToplevelError() async {
-    return super.test_generalizedVoid_invocationOfVoidToplevelError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_invocationOfVoidLocalError() async {
-    return super.test_generalizedVoid_invocationOfVoidLocalError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_invocationOfVoidFieldError() async {
-    return super.test_generalizedVoid_invocationOfVoidFieldError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_invocationOfVoidResultError() async {
-    return super.test_generalizedVoid_invocationOfVoidResultError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidByIndexingError() async {
-    return super.test_generalizedVoid_useOfVoidByIndexingError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidAsIndexError() async {
-    return super.test_generalizedVoid_useOfVoidAsIndexError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidAsIndexAssignError() async {
-    return super.test_generalizedVoid_useOfVoidAsIndexAssignError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidInSwitchExpressionError() async {
-    return super.test_generalizedVoid_useOfVoidInSwitchExpressionError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidPropertyAccessError() async {
-    return super.test_generalizedVoid_useOfVoidPropertyAccessError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidCallSetterError() async {
-    return super.test_generalizedVoid_useOfVoidCallSetterError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidNullPropertyAccessError() async {
-    return super.test_generalizedVoid_useOfVoidNullPropertyAccessError();
-  }
-
   @failingTest
   @override
   test_useOfVoidResult_assignmentExpression_function() async {
@@ -2026,8 +1914,8 @@
 
   @failingTest
   @override
-  test_useOfVoidResult_variableDeclaration_method2() async {
-    return super.test_useOfVoidResult_variableDeclaration_method2();
+  test_useOfVoidResult_inForLoop_error() async {
+    return super.test_useOfVoidResult_inForLoop_error();
   }
 
   @override
@@ -2037,8 +1925,8 @@
 
   @failingTest
   @override
-  test_useOfVoidResult_inForLoop_error() async {
-    return super.test_useOfVoidResult_inForLoop_error();
+  test_useOfVoidResult_variableDeclaration_function_error() async {
+    return super.test_useOfVoidResult_variableDeclaration_function_error();
   }
 
   @override
@@ -2048,8 +1936,8 @@
 
   @failingTest
   @override
-  test_useOfVoidResult_variableDeclaration_function_error() async {
-    return super.test_useOfVoidResult_variableDeclaration_function_error();
+  test_useOfVoidResult_variableDeclaration_method2() async {
+    return super.test_useOfVoidResult_variableDeclaration_method2();
   }
 
   @failingTest
diff --git a/pkg/analyzer/test/generated/static_warning_code_test.dart b/pkg/analyzer/test/generated/static_warning_code_test.dart
index a78274e..7f66abf 100644
--- a/pkg/analyzer/test/generated/static_warning_code_test.dart
+++ b/pkg/analyzer/test/generated/static_warning_code_test.dart
@@ -3672,6 +3672,18 @@
     verify([source]);
   }
 
+  test_returnWithoutValue_async_future_object_with_return() async {
+    Source source = addSource('''
+import 'dart:async';
+Future<Object> f() async {
+  return;
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.RETURN_WITHOUT_VALUE]);
+    verify([source]);
+  }
+
   test_returnWithoutValue_factoryConstructor() async {
     Source source = addSource("class A { factory A() { return; } }");
     await computeAnalysisResult(source);
diff --git a/pkg/analyzer/test/generated/strong_mode_kernel_test.dart b/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
index 61abc60..9157b6d 100644
--- a/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
@@ -9,11 +9,9 @@
 
 main() {
   defineReflectiveSuite(() {
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(StrongModeLocalInferenceTest_Kernel);
-    // defineReflectiveTests(StrongModeStaticTypeAnalyzer2Test_Kernel);
-    // defineReflectiveTests(StrongModeTypePropagationTest_Kernel);
+    defineReflectiveTests(StrongModeLocalInferenceTest_Kernel);
+    defineReflectiveTests(StrongModeStaticTypeAnalyzer2Test_Kernel);
+    defineReflectiveTests(StrongModeTypePropagationTest_Kernel);
   });
 }
 
@@ -67,6 +65,13 @@
 
   @override
   @failingTest
+  test_constrainedByBounds4() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_constrainedByBounds4();
+  }
+
+  @override
+  @failingTest
   test_constrainedByBounds5() async {
     // Bad state: Expected a type for 4 at 119; got one for kernel offset 118
     await super.test_constrainedByBounds5();
@@ -102,6 +107,41 @@
 
   @override
   @failingTest
+  test_functionDeclaration_body_propagation() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_functionDeclaration_body_propagation();
+  }
+
+  @override
+  @failingTest
+  test_functionLiteral_assignment_typedArguments() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_functionLiteral_assignment_typedArguments();
+  }
+
+  @override
+  @failingTest
+  test_functionLiteral_assignment_unTypedArguments() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_functionLiteral_assignment_unTypedArguments();
+  }
+
+  @override
+  @failingTest
+  test_functionLiteral_body_propagation() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_functionLiteral_body_propagation();
+  }
+
+  @override
+  @failingTest
+  test_functionLiteral_unTypedArgument_propagation() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_functionLiteral_unTypedArgument_propagation();
+  }
+
+  @override
+  @failingTest
   test_futureOr_downwards8() async {
     // type 'BottomTypeImpl' is not a subtype of type 'InterfaceType' in type cast where
     await super.test_futureOr_downwards8();
@@ -222,13 +262,6 @@
 
   @override
   @failingTest
-  test_inferredFieldDeclaration_propagation() async {
-    // Expected: InterfaceTypeImpl:<int>
-    await super.test_inferredFieldDeclaration_propagation();
-  }
-
-  @override
-  @failingTest
   test_instanceCreation() async {
     // AnalysisException: Element mismatch in /test.dart at class A<S, T>
     await super.test_instanceCreation();
@@ -240,6 +273,13 @@
 
   @override
   @failingTest
+  test_partialTypes1() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_partialTypes1();
+  }
+
+  @override
+  @failingTest
   test_pinning_multipleConstraints1() async {
     // Expected 1 errors of type StrongModeCode.STRONG_MODE_INVALID_CAST_LITERAL, found 0
     await super.test_pinning_multipleConstraints1();
@@ -254,12 +294,96 @@
 
   @override
   @failingTest
+  test_pinning_multipleConstraints_contravariant1() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_pinning_multipleConstraints_contravariant1();
+  }
+
+  @override
+  @failingTest
+  test_pinning_multipleConstraints_contravariant2() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_pinning_multipleConstraints_contravariant2();
+  }
+
+  @override
+  @failingTest
+  test_pinning_multipleConstraints_contravariant3() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_pinning_multipleConstraints_contravariant3();
+  }
+
+  @override
+  @failingTest
+  test_pinning_multipleConstraints_contravariant4() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_pinning_multipleConstraints_contravariant4();
+  }
+
+  @override
+  @failingTest
+  test_redirectedConstructor_named() {
+    // Expected: 'A<T2, U2>'; Actual: 'A<T, U>'
+    return super.test_redirectedConstructor_named();
+  }
+
+  @override
+  @failingTest
+  test_redirectedConstructor_unnamed() {
+    // Expected: 'A<T2, U2>'; Actual: 'A<T, U>'
+    return super.test_redirectedConstructor_unnamed();
+  }
+
+  @override
+  @failingTest
   test_redirectingConstructor_propagation() async {
     // AnalysisException: Element mismatch in /test.dart at class A
     await super.test_redirectingConstructor_propagation();
     // TODO(brianwilkerson) Figure out why this test is flaky.
     fail('Flaky test');
   }
+
+  @override
+  @failingTest
+  test_returnType_variance1() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_returnType_variance1();
+  }
+
+  @override
+  @failingTest
+  test_returnType_variance2() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_returnType_variance2();
+  }
+
+  @override
+  @failingTest
+  test_returnType_variance3() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_returnType_variance3();
+  }
+
+  @override
+  @failingTest
+  test_returnType_variance4() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_returnType_variance4();
+  }
+
+  @override
+  @failingTest
+  test_returnType_variance5() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_returnType_variance5();
+  }
+
+  @override
+  @failingTest
+  test_returnType_variance6() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_returnType_variance6();
+  }
 }
 
 @reflectiveTest
@@ -289,6 +413,13 @@
 
   @override
   @failingTest
+  test_genericFunction_typedef() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_genericFunction_typedef();
+  }
+
+  @override
+  @failingTest
   test_genericMethod_explicitTypeParams() async {
     // Bad state: Found 2 argument types for 1 type arguments
     await super.test_genericMethod_explicitTypeParams();
@@ -303,6 +434,22 @@
 
   @override
   @failingTest
+  test_genericMethod_functionExpressionInvocation_functionTypedParameter_explicit() {
+    // Failed to resolve 2 nodes
+    return super
+        .test_genericMethod_functionExpressionInvocation_functionTypedParameter_explicit();
+  }
+
+  @override
+  @failingTest
+  test_genericMethod_functionExpressionInvocation_functionTypedParameter_inferred() {
+    // Failed to resolve 1 nodes
+    return super
+        .test_genericMethod_functionExpressionInvocation_functionTypedParameter_inferred();
+  }
+
+  @override
+  @failingTest
   test_genericMethod_functionExpressionInvocation_inferred() async {
     // Bad state: Expected element declaration for analyzer offset 230; got one for kernel offset 233
     await super.test_genericMethod_functionExpressionInvocation_inferred();
@@ -317,6 +464,22 @@
 
   @override
   @failingTest
+  test_genericMethod_functionInvocation_functionTypedParameter_explicit() {
+    // Failed to resolve 1 nodes
+    return super
+        .test_genericMethod_functionInvocation_functionTypedParameter_explicit();
+  }
+
+  @override
+  @failingTest
+  test_genericMethod_functionInvocation_functionTypedParameter_inferred() {
+    // Failed to resolve 1 nodes
+    return super
+        .test_genericMethod_functionInvocation_functionTypedParameter_inferred();
+  }
+
+  @override
+  @failingTest
   test_genericMethod_functionInvocation_inferred() async {
     // Failed to resolve 1 nodes:
     await super.test_genericMethod_functionInvocation_inferred();
@@ -324,6 +487,13 @@
 
   @override
   @failingTest
+  test_genericMethod_functionTypedParameter_tearoff() {
+    // Failed to resolve 1 nodes
+    return super.test_genericMethod_functionTypedParameter_tearoff();
+  }
+
+  @override
+  @failingTest
   test_genericMethod_implicitDynamic() async {
     // Expected: '<T>((dynamic) → T) → T'
     await super.test_genericMethod_implicitDynamic();
@@ -338,9 +508,24 @@
 
   @override
   @failingTest
-  test_genericMethod_override_invalidReturnType() async {
+  test_genericMethod_nestedFunctions() {
+    // Expected: '<S>(S) → <S>(S) → S'; Actual: '<Sâ‚€>(S) → <S>(S) → S'
+    return super.test_genericMethod_nestedFunctions();
+  }
+
+  @override
+  @failingTest
+  test_genericMethod_override_differentContextsSameBounds() {
+    // UnimplementedError: TODO(paulberry): TypeParameterType
+    return super.test_genericMethod_override_differentContextsSameBounds();
+  }
+
+  @override
+  @failingTest
+  test_genericMethod_override_invalidContravariantTypeParamBounds() async {
     // Expected 1 errors of type StrongModeCode.STRONG_MODE_INVALID_METHOD_OVERRIDE, found 0
-    await super.test_genericMethod_override_invalidReturnType();
+    await super
+        .test_genericMethod_override_invalidContravariantTypeParamBounds();
   }
 
   @override
@@ -353,10 +538,9 @@
 
   @override
   @failingTest
-  test_genericMethod_override_invalidContravariantTypeParamBounds() async {
+  test_genericMethod_override_invalidReturnType() async {
     // Expected 1 errors of type StrongModeCode.STRONG_MODE_INVALID_METHOD_OVERRIDE, found 0
-    await super
-        .test_genericMethod_override_invalidContravariantTypeParamBounds();
+    await super.test_genericMethod_override_invalidReturnType();
   }
 
   @override
@@ -382,9 +566,109 @@
 
   @override
   @failingTest
-  @potentialAnalyzerProblem
-  test_instantiateToBounds_class_error_recursion() async {
-    return super.test_instantiateToBounds_class_error_recursion();
+  test_genericMethod_toplevel_field_staticTearoff() {
+    // Failed to resolve 1 nodes
+    return super.test_genericMethod_toplevel_field_staticTearoff();
+  }
+
+  @override
+  @failingTest
+  test_instantiateToBounds_class_error_typedef() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_instantiateToBounds_class_error_typedef();
+  }
+
+  @override
+  @failingTest
+  test_notInstantiatedBound_class_error_recursion_typedef() {
+    // Expected 2 errors of type
+    // StrongModeCode.STRONG_MODE_NOT_INSTANTIATED_BOUND, found 0; 1 errors of
+    // type CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF, found 0
+    return super.test_notInstantiatedBound_class_error_recursion_typedef();
+  }
+
+  @override
+  @failingTest
+  test_notInstantiatedBound_error_class_argument() {
+    // Expected 1 errors of type
+    // StrongModeCode.STRONG_MODE_NOT_INSTANTIATED_BOUND, found 0
+    return super.test_notInstantiatedBound_error_class_argument();
+  }
+
+  @override
+  @failingTest
+  test_notInstantiatedBound_error_class_argument2() {
+    // Expected 1 errors of type
+    // StrongModeCode.STRONG_MODE_NOT_INSTANTIATED_BOUND, found 0
+    return super.test_notInstantiatedBound_error_class_argument2();
+  }
+
+  @override
+  @failingTest
+  test_notInstantiatedBound_error_class_direct() {
+    // Expected 1 errors of type
+    // StrongModeCode.STRONG_MODE_NOT_INSTANTIATED_BOUND, found 0
+    return super.test_notInstantiatedBound_error_class_direct();
+  }
+
+  @override
+  @failingTest
+  test_notInstantiatedBound_error_class_indirect() {
+    // Expected 1 errors of type
+    // StrongModeCode.STRONG_MODE_NOT_INSTANTIATED_BOUND, found 0
+    return super.test_notInstantiatedBound_error_class_indirect();
+  }
+
+  @override
+  @failingTest
+  test_notInstantiatedBound_error_functionType() {
+    // Expected 2 errors of type
+    // StrongModeCode.STRONG_MODE_NOT_INSTANTIATED_BOUND, found 0
+    return super.test_notInstantiatedBound_error_functionType();
+  }
+
+  @override
+  @failingTest
+  test_notInstantiatedBound_error_typedef_argument() {
+    // Expected 1 errors of type
+    // StrongModeCode.STRONG_MODE_NOT_INSTANTIATED_BOUND, found 0
+    return super.test_notInstantiatedBound_error_typedef_argument();
+  }
+
+  @override
+  @failingTest
+  test_notInstantiatedBound_error_typedef_argument2() {
+    // Expected 1 errors of type
+    // StrongModeCode.STRONG_MODE_NOT_INSTANTIATED_BOUND, found 0
+    return super.test_notInstantiatedBound_error_typedef_argument2();
+  }
+
+  @override
+  @failingTest
+  test_notInstantiatedBound_error_typedef_direct() {
+    // Expected 1 errors of type
+    // StrongModeCode.STRONG_MODE_NOT_INSTANTIATED_BOUND, found 0
+    return super.test_notInstantiatedBound_error_typedef_direct();
+  }
+
+  @override
+  @failingTest
+  test_notInstantiatedBound_ok_class_function() {
+    // Failed to resolve 1 nodes
+    return super.test_notInstantiatedBound_ok_class_function();
+  }
+
+  @override
+  @failingTest
+  test_objectMethodOnFunctions_Typedef() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super.test_objectMethodOnFunctions_Typedef();
+  }
+
+  @override
+  @failingTest
+  test_returnOfInvalidType_object_void() async {
+    await super.test_returnOfInvalidType_object_void();
   }
 
   @override
@@ -407,12 +691,6 @@
     // Expected 2 errors of type StaticWarningCode.NON_VOID_RETURN_FOR_SETTER, found 0
     await super.test_setterWithOtherTypeIsError();
   }
-
-  @override
-  @failingTest
-  test_returnOfInvalidType_object_void() async {
-    await super.test_returnOfInvalidType_object_void();
-  }
 }
 
 @reflectiveTest
@@ -426,4 +704,12 @@
 
   @override
   bool get useCFE => true;
+
+  @override
+  @failingTest
+  test_inconsistentMethodInheritance_inferFunctionTypeFromTypedef() {
+    // UnimplementedError: TODO(paulberry): resynthesize generic typedef
+    return super
+        .test_inconsistentMethodInheritance_inferFunctionTypeFromTypedef();
+  }
 }
diff --git a/pkg/analyzer/test/src/command_line/arguments_test.dart b/pkg/analyzer/test/src/command_line/arguments_test.dart
index 1d9afa9..8cbef81 100644
--- a/pkg/analyzer/test/src/command_line/arguments_test.dart
+++ b/pkg/analyzer/test/src/command_line/arguments_test.dart
@@ -154,7 +154,7 @@
   void test_defineAnalysisArguments() {
     ArgParser parser = new ArgParser();
     defineAnalysisArguments(parser);
-    expect(parser.options, hasLength(14));
+    expect(parser.options, hasLength(13));
   }
 
   void test_extractDefinedVariables() {
diff --git a/pkg/analyzer/test/src/context/builder_test.dart b/pkg/analyzer/test/src/context/builder_test.dart
index 558578c..94e546b 100644
--- a/pkg/analyzer/test/src/context/builder_test.dart
+++ b/pkg/analyzer/test/src/context/builder_test.dart
@@ -707,35 +707,6 @@
     _expectEqualOptions(options, expected);
   }
 
-  void test_getAnalysisOptions_default_flutter_disabled() {
-    _defineMockLintRules();
-    ArgParser argParser = new ArgParser();
-    defineAnalysisArguments(argParser);
-    ArgResults argResults =
-        argParser.parse(['--no-$packageDefaultAnalysisOptions']);
-
-    builderOptions = createContextBuilderOptions(argResults);
-    expect(builderOptions.packageDefaultAnalysisOptions, isFalse);
-    builder = new ContextBuilder(resourceProvider, sdkManager, contentCache,
-        options: builderOptions);
-
-    AnalysisOptionsImpl expected = new AnalysisOptionsImpl();
-
-    String packagesFilePath =
-        resourceProvider.convertPath('/some/directory/path/.packages');
-    createFile(packagesFilePath, 'flutter:/pkg/flutter/lib/');
-    String optionsFilePath = resourceProvider
-        .convertPath('/pkg/flutter/lib/analysis_options_user.yaml');
-    createFile(optionsFilePath, '''
-linter:
-  rules:
-    - mock_lint_rule
-''');
-    String projPath = resourceProvider.convertPath('/some/directory/path');
-    AnalysisOptions options = builder.getAnalysisOptions(projPath);
-    _expectEqualOptions(options, expected);
-  }
-
   void test_getAnalysisOptions_default_noOverrides() {
     AnalysisOptionsImpl defaultOptions = new AnalysisOptionsImpl();
     defaultOptions.enableLazyAssignmentOperators = true;
@@ -788,7 +759,6 @@
     defineAnalysisArguments(argParser);
     ArgResults argResults = argParser.parse([]);
     builderOptions = createContextBuilderOptions(argResults);
-    expect(builderOptions.packageDefaultAnalysisOptions, isTrue);
     builder = new ContextBuilder(resourceProvider, sdkManager, contentCache,
         options: builderOptions);
     AnalysisOptionsImpl expected = new AnalysisOptionsImpl();
diff --git a/pkg/analyzer/test/src/dart/analysis/analysis_context_collection_test.dart b/pkg/analyzer/test/src/dart/analysis/analysis_context_collection_test.dart
new file mode 100644
index 0000000..0afd0b0
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/analysis/analysis_context_collection_test.dart
@@ -0,0 +1,119 @@
+// Copyright (c) 2018, 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/dart/analysis/analysis_context_collection.dart';
+import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
+import 'package:meta/meta.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../context/mock_sdk.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(AnalysisContextCollectionTest);
+  });
+}
+
+@reflectiveTest
+class AnalysisContextCollectionTest extends Object with ResourceProviderMixin {
+  void setUp() {
+    new MockSdk(resourceProvider: resourceProvider);
+  }
+
+  test_contextFor_noContext() {
+    var collection = _newCollection(includedPaths: [convertPath('/root')]);
+    expect(
+      () => collection.contextFor(convertPath('/other/test.dart')),
+      throwsStateError,
+    );
+  }
+
+  test_contextFor_notAbsolute() {
+    var collection = _newCollection(includedPaths: [convertPath('/root')]);
+    expect(
+      () => collection.contextFor(convertPath('test.dart')),
+      throwsArgumentError,
+    );
+  }
+
+  test_contextFor_notNormalized() {
+    var collection = _newCollection(includedPaths: [convertPath('/root')]);
+    expect(
+      () => collection.contextFor(convertPath('/test/lib/../lib/test.dart')),
+      throwsArgumentError,
+    );
+  }
+
+  test_new_includedPaths_notAbsolute() {
+    expect(
+      () => new AnalysisContextCollectionImpl(includedPaths: ['root']),
+      throwsArgumentError,
+    );
+  }
+
+  test_new_includedPaths_notNormalized() {
+    expect(
+      () => new AnalysisContextCollectionImpl(
+          includedPaths: [convertPath('/root/lib/../lib')]),
+      throwsArgumentError,
+    );
+  }
+
+  test_new_outer_inner() {
+    var outerFolder = newFolder('/test/outer');
+    newFile('/test/outer/lib/outer.dart');
+
+    var innerFolder = newFolder('/test/outer/inner');
+    newOptionsFile('/test/outer/inner');
+    newFile('/test/outer/inner/inner.dart');
+
+    var collection = _newCollection(includedPaths: [outerFolder.path]);
+
+    expect(collection.contexts, hasLength(2));
+
+    var outerContext = collection.contexts
+        .singleWhere((c) => c.contextRoot.root == outerFolder);
+    var innerContext = collection.contexts
+        .singleWhere((c) => c.contextRoot.root == innerFolder);
+    expect(innerContext, isNot(same(outerContext)));
+
+    // Outer and inner contexts own corresponding files.
+    expect(collection.contextFor(convertPath('/test/outer/lib/outer.dart')),
+        same(outerContext));
+    expect(collection.contextFor(convertPath('/test/outer/inner/inner.dart')),
+        same(innerContext));
+
+    // The file does not have to exist, during creation, or at all.
+    expect(collection.contextFor(convertPath('/test/outer/lib/outer2.dart')),
+        same(outerContext));
+    expect(collection.contextFor(convertPath('/test/outer/inner/inner2.dart')),
+        same(innerContext));
+  }
+
+  test_new_sdkPath_notAbsolute() {
+    expect(
+      () => new AnalysisContextCollectionImpl(
+          includedPaths: ['/root'], sdkPath: 'sdk'),
+      throwsArgumentError,
+    );
+  }
+
+  test_new_sdkPath_notNormalized() {
+    expect(
+      () => new AnalysisContextCollectionImpl(
+          includedPaths: [convertPath('/root')], sdkPath: '/home/sdk/../sdk'),
+      throwsArgumentError,
+    );
+  }
+
+  AnalysisContextCollectionImpl _newCollection(
+      {@required List<String> includedPaths}) {
+    return new AnalysisContextCollectionImpl(
+      resourceProvider: resourceProvider,
+      includedPaths: includedPaths,
+      sdkPath: convertPath(sdkRoot),
+    );
+  }
+}
diff --git a/pkg/analyzer/test/src/dart/analysis/context_locator_test.dart b/pkg/analyzer/test/src/dart/analysis/context_locator_test.dart
index ea4762e..388be9b 100644
--- a/pkg/analyzer/test/src/dart/analysis/context_locator_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/context_locator_test.dart
@@ -37,16 +37,6 @@
     fail(buffer.toString());
   }
 
-  File newOptionsFile(String directoryPath) {
-    return newFile(resourceProvider.pathContext
-        .join(directoryPath, ContextLocatorImpl.ANALYSIS_OPTIONS_NAME));
-  }
-
-  File newPackagesFile(String directoryPath) {
-    return newFile(resourceProvider.pathContext
-        .join(directoryPath, ContextLocatorImpl.PACKAGES_FILE_NAME));
-  }
-
   void setUp() {
     contextLocator = new ContextLocatorImpl(resourceProvider: resourceProvider);
   }
diff --git a/pkg/analyzer/test/src/dart/analysis/context_root_test.dart b/pkg/analyzer/test/src/dart/analysis/context_root_test.dart
index 573d210..9b6324d 100644
--- a/pkg/analyzer/test/src/dart/analysis/context_root_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/context_root_test.dart
@@ -55,6 +55,17 @@
     expect(contextRoot.isAnalyzed(filePath), isFalse);
   }
 
+  test_isAnalyzed_explicitlyExcluded_same() {
+    String aPath = provider.convertPath('/test/root/lib/a.dart');
+    String bPath = provider.convertPath('/test/root/lib/b.dart');
+    File aFile = provider.getFile(aPath);
+
+    contextRoot.excluded.add(aFile);
+
+    expect(contextRoot.isAnalyzed(aPath), isFalse);
+    expect(contextRoot.isAnalyzed(bPath), isTrue);
+  }
+
   test_isAnalyzed_implicitlyExcluded_dot_analysisOptions() {
     String filePath = provider.convertPath('/test/root/lib/.analysis_options');
     expect(contextRoot.isAnalyzed(filePath), isFalse);
@@ -70,6 +81,18 @@
     expect(contextRoot.isAnalyzed(filePath), isTrue);
   }
 
+  test_isAnalyzed_included_same() {
+    String aPath = provider.convertPath('/test/root/lib/a.dart');
+    String bPath = provider.convertPath('/test/root/lib/b.dart');
+    File aFile = provider.getFile(aPath);
+
+    contextRoot = new ContextRootImpl(provider, rootFolder);
+    contextRoot.included.add(aFile);
+
+    expect(contextRoot.isAnalyzed(aPath), isTrue);
+    expect(contextRoot.isAnalyzed(bPath), isFalse);
+  }
+
   test_isAnalyzed_packagesDirectory_analyzed() {
     String folderPath = provider.convertPath('/test/root/lib/packages');
     provider.newFolder(folderPath);
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart
index 19ca54e..830cd0f 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart
@@ -9,9 +9,7 @@
 
 main() {
   defineReflectiveSuite(() {
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(AnalysisDriverTest_Kernel);
+    defineReflectiveTests(AnalysisDriverTest_Kernel);
   });
 }
 
@@ -59,13 +57,6 @@
   @failingTest
   @potentialAnalyzerProblem
   @override
-  test_const_annotation_notConstConstructor() async {
-    await super.test_const_annotation_notConstConstructor();
-  }
-
-  @failingTest
-  @potentialAnalyzerProblem
-  @override
   test_const_annotation_withArgs() async {
     await super.test_const_annotation_withArgs();
   }
@@ -77,6 +68,13 @@
     await super.test_const_externalConstFactory();
   }
 
+  @override
+  @failingTest
+  test_const_implicitCreation() {
+    // Bad state: No data for () at 69
+    return super.test_const_implicitCreation();
+  }
+
   @failingTest
   @FastaProblem('https://github.com/dart-lang/sdk/issues/31555')
   @override
@@ -192,6 +190,23 @@
     await super.test_getResult_nameConflict_local_typeInference();
   }
 
+  @override
+  @failingTest
+  test_missingDartLibrary_async() {
+    // Crash when compiling package:test/test.dart, at character offset null:
+    // Class 'FutureOr' not found in library 'dart:async'
+    return super.test_missingDartLibrary_async();
+  }
+
+  @override
+  @failingTest
+  test_missingDartLibrary_core() {
+    // Crash when compiling package:test/test.dart, at character offset null:
+    // file:///sdk/lib/core/core.dart:1: Internal problem: Couldn't find
+    // 'Object' in 'file:///sdk/lib/core/core.dart'.
+    return super.test_missingDartLibrary_core();
+  }
+
   @failingTest
   @FastaProblem('https://github.com/dart-lang/sdk/issues/30959')
   @override
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_kernel_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_kernel_test.dart
index 66a1bb0..2422f69 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_kernel_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_kernel_test.dart
@@ -8,9 +8,7 @@
 
 main() {
   defineReflectiveSuite(() {
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(AnalysisDriverResolutionTest_Kernel);
+    defineReflectiveTests(AnalysisDriverResolutionTest_Kernel);
   });
 }
 
@@ -25,10 +23,84 @@
 
   @override
   @failingTest
+  @potentialAnalyzerProblem
+  test_annotation_prefixed_classConstructor() {
+    // TODO(paulberry): broken because prefixes are not working properly
+    return super.test_annotation_prefixed_classConstructor();
+  }
+
+  @override
+  @failingTest
+  @potentialAnalyzerProblem
+  test_annotation_prefixed_classConstructorNamed() {
+    // TODO(paulberry): broken because prefixes are not working properly
+    return super.test_annotation_prefixed_classConstructorNamed();
+  }
+
+  @override
+  @failingTest
+  @potentialAnalyzerProblem
+  test_annotation_prefixed_classField() {
+    // TODO(paulberry): broken because prefixes are not working properly
+    return super.test_annotation_prefixed_classField();
+  }
+
+  @override
+  @failingTest
+  @potentialAnalyzerProblem
+  test_annotation_prefixed_topLevelVariable() {
+    // TODO(paulberry): broken because prefixes are not working properly
+    return super.test_annotation_prefixed_topLevelVariable();
+  }
+
+  @override
+  @failingTest
   @FastaProblem('https://github.com/dart-lang/sdk/issues/31605')
   test_constructor_redirected_generic() async {
     await super.test_constructor_redirected_generic();
   }
+
+  @override
+  @failingTest
+  @potentialAnalyzerProblem
+  test_functionExpressionInvocation() {
+    // TODO(paulberry): broken because of in-progress FunctionTypeImpl rework
+    return super.test_functionExpressionInvocation();
+  }
+
+  @override
+  @failingTest
+  @potentialAnalyzerProblem
+  test_instanceCreation_prefixed() {
+    // TODO(paulberry): broken because prefixes are not working properly
+    return super.test_instanceCreation_prefixed();
+  }
+
+  @override
+  @failingTest
+  @potentialAnalyzerProblem
+  test_isExpression_not() {
+    // TODO(paulberry): I suspect that the special case for is! has bit rotted
+    return super.test_isExpression_not();
+  }
+
+  @override
+  @failingTest
+  @potentialAnalyzerProblem
+  test_local_function_generic() {
+    // TODO(paulberry): I suspect this is broken due to the function type's
+    // generic parameters not being properly associated with the generic
+    // parameters from the kernel representation.
+    return super.test_local_function_generic();
+  }
+
+  @override
+  @failingTest
+  @potentialAnalyzerProblem
+  test_type_functionTypeAlias() {
+    // TODO(paulberry): broken because of in-progress FunctionTypeImpl rework
+    return super.test_type_functionTypeAlias();
+  }
 }
 
 /// Tests marked with this annotation fail because of a Fasta problem.
diff --git a/pkg/analyzer/test/src/dart/analysis/test_all.dart b/pkg/analyzer/test/src/dart/analysis/test_all.dart
index cd75df1..20acbf2 100644
--- a/pkg/analyzer/test/src/dart/analysis/test_all.dart
+++ b/pkg/analyzer/test/src/dart/analysis/test_all.dart
@@ -4,6 +4,7 @@
 
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import 'analysis_context_collection_test.dart' as analysis_context_collection;
 import 'context_builder_test.dart' as context_builder;
 import 'context_locator_test.dart' as context_locator;
 import 'context_root_test.dart' as context_root;
@@ -23,6 +24,7 @@
 
 main() {
   defineReflectiveSuite(() {
+    analysis_context_collection.main();
     context_builder.main();
     context_locator.main();
     context_root.main();
diff --git a/pkg/analyzer/test/src/dart/ast/ast_test.dart b/pkg/analyzer/test/src/dart/ast/ast_test.dart
index c860a24..dd7bbaa 100644
--- a/pkg/analyzer/test/src/dart/ast/ast_test.dart
+++ b/pkg/analyzer/test/src/dart/ast/ast_test.dart
@@ -2,6 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'dart:async';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/utilities.dart';
 import 'package:analyzer/src/generated/engine.dart';
@@ -496,7 +497,7 @@
     resetWith(options: new AnalysisOptionsImpl()..previewDart2 = true);
   }
 
-  void resolve(String source) async {
+  Future<void> resolve(String source) async {
     testSource = source;
     testUnit = await resolveSource2('/test.dart', source);
   }
diff --git a/pkg/analyzer/test/src/dart/constant/evaluation_test.dart b/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
index ab82e9a..1a930e5 100644
--- a/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
+++ b/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
@@ -18,6 +18,7 @@
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/constant.dart';
 import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/parser.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/source_io.dart';
@@ -449,12 +450,16 @@
 
   test_dependencyOnFactoryRedirect() async {
     // a depends on A.foo() depends on A.bar()
-    await _assertProperDependencies(r'''
+    await _assertProperDependencies(
+        r'''
 const A a = const A.foo();
 class A {
   factory const A.foo() = A.bar;
   const A.bar();
-}''');
+}''',
+        Parser.useFasta
+            ? const <ErrorCode>[ParserErrorCode.CONST_AFTER_FACTORY]
+            : const <ErrorCode>[]);
   }
 
   test_dependencyOnFactoryRedirectWithTypeParams() async {
diff --git a/pkg/analyzer/test/src/fasta/resolution_applier_test.dart b/pkg/analyzer/test/src/fasta/resolution_applier_test.dart
deleted file mode 100644
index 1b1a23b..0000000
--- a/pkg/analyzer/test/src/fasta/resolution_applier_test.dart
+++ /dev/null
@@ -1,355 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/dart/element/type.dart';
-import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/dart/element/type.dart';
-import 'package:analyzer/src/fasta/resolution_applier.dart';
-import 'package:analyzer/src/generated/testing/test_type_provider.dart';
-import 'package:analyzer/src/generated/utilities_dart.dart';
-import 'package:kernel/kernel.dart' as kernel;
-import 'package:test/test.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import '../../generated/parser_fasta_test.dart';
-import '../../generated/resolver_test_case.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(ResolutionApplierTest);
-  });
-}
-
-@reflectiveTest
-class ResolutionApplierTest extends FastaParserTestCase {
-  /// The type provider used to access the types passed to the resolution
-  /// applier.
-  TestTypeProvider typeProvider;
-
-  /// 1. Generate an AST structure from the given [content]. The AST is expected
-  ///    to have a top-level function declaration as the first element.
-  /// 2. Use a [ResolutionApplier] to apply the [declaredElements],
-  ///    [referencedElements], and [types] to the body of the function.
-  /// 3. Verify that everything in the function body that should be resolved
-  ///    _is_ resolved.
-  void applyTypes(String content, List<Element> declaredElements,
-      List<Element> referencedElements, List<DartType> types) {
-    CompilationUnit unit = parseCompilationUnit(content);
-    expect(unit, isNotNull);
-    expect(unit.declarations, hasLength(1));
-    FunctionDeclaration function = unit.declarations[0];
-    FunctionBody body = function.functionExpression.body;
-    ResolutionApplier applier = new ResolutionApplier(
-        null,
-        new _TestTypeContext(),
-        declaredElements,
-        referencedElements,
-        types.map((type) => new _KernelWrapperOfType(type)).toList());
-
-    body.accept(applier);
-    applier.checkDone();
-
-    ResolutionVerifier verifier = new ResolutionVerifier();
-    // TODO(brianwilkerson) Uncomment the line below when the tests no longer
-    // fail.
-//    body.accept(verifier);
-    verifier.assertResolved();
-  }
-
-  void setUp() {
-    typeProvider = new TestTypeProvider();
-  }
-
-  void test_binaryExpression() {
-    applyTypes(r'''
-f(String s, int i) {
-  return s + i;
-}
-''', [], [
-      _createFunctionParameter('s', 9),
-      new MethodElementImpl('+', -1),
-      _createFunctionParameter('i', 16),
-    ], <DartType>[
-      typeProvider.stringType,
-      new FunctionTypeImpl(new FunctionElementImpl('+', -1)),
-      new FunctionTypeImpl(new FunctionElementImpl('+', -1)),
-      new TypeArgumentsDartType([]),
-      typeProvider.intType,
-      typeProvider.stringType,
-    ]);
-  }
-
-  void test_functionExpressionInvocation() {
-    applyTypes(r'''
-f(Object a) {
-  return a.b().c();
-}
-''', [], [
-      _createFunctionParameter('a', 9),
-      new MethodElementImpl('b', -1),
-      new MethodElementImpl('c', -1)
-    ], <DartType>[
-      typeProvider.objectType,
-      typeProvider.objectType,
-      typeProvider.objectType,
-      new TypeArgumentsDartType([]),
-      typeProvider.objectType,
-      typeProvider.objectType,
-      typeProvider.objectType,
-      new TypeArgumentsDartType([]),
-      typeProvider.objectType
-    ]);
-  }
-
-  void test_genericFunctionType() {
-    GenericFunctionTypeElementImpl element =
-        new GenericFunctionTypeElementImpl.forOffset(8);
-    element.enclosingElement = new FunctionElementImpl('f', 0);
-    element.typeParameters = <TypeParameterElement>[];
-    element.returnType = typeProvider.intType;
-    element.parameters = [
-      _createFunctionParameter('', -1, type: typeProvider.stringType),
-      _createFunctionParameter('x', 34, type: typeProvider.boolType),
-    ];
-    FunctionTypeImpl functionType = new FunctionTypeImpl(element);
-    element.type = functionType;
-    applyTypes(r'''
-f() {
-  int Function(String, bool x) foo;
-}
-''', [new LocalVariableElementImpl('foo', 37)], [], <DartType>[functionType]);
-  }
-
-  void test_listLiteral_const_noAnnotation() {
-    applyTypes(r'''
-get f => const ['a', 'b', 'c'];
-''', [], [], <DartType>[
-      typeProvider.stringType,
-      typeProvider.stringType,
-      typeProvider.stringType,
-      typeProvider.listType.instantiate([typeProvider.stringType])
-    ]);
-  }
-
-  void test_listLiteral_const_typeAnnotation() {
-    applyTypes(r'''
-get f => const <String>['a', 'b', 'c'];
-''', [], [], <DartType>[
-      typeProvider.stringType,
-      typeProvider.stringType,
-      typeProvider.stringType,
-      typeProvider.listType.instantiate([typeProvider.stringType])
-    ]);
-  }
-
-  void test_listLiteral_noAnnotation() {
-    applyTypes(r'''
-get f => ['a', 'b', 'c'];
-''', [], [], <DartType>[
-      typeProvider.stringType,
-      typeProvider.stringType,
-      typeProvider.stringType,
-      typeProvider.listType.instantiate([typeProvider.stringType])
-    ]);
-  }
-
-  void test_listLiteral_typeAnnotation() {
-    applyTypes(r'''
-get f => <String>['a', 'b', 'c'];
-''', [], [], <DartType>[
-      typeProvider.stringType,
-      typeProvider.stringType,
-      typeProvider.stringType,
-      typeProvider.listType.instantiate([typeProvider.stringType])
-    ]);
-  }
-
-  void test_localVariable() {
-    InterfaceType mapType = typeProvider.mapType.instantiate([
-      typeProvider.stringType,
-      typeProvider.listType.instantiate([typeProvider.stringType])
-    ]);
-    applyTypes(r'''
-f() {
-  Map<String, List<String>> m = {};
-}
-''', [new LocalVariableElementImpl('m', 34)], [], <DartType>[mapType, mapType]);
-  }
-
-  void test_mapLiteral_const_noAnnotation() {
-    applyTypes(r'''
-get f => const {'a' : 1, 'b' : 2, 'c' : 3};
-''', [], [], <DartType>[
-      typeProvider.stringType,
-      typeProvider.intType,
-      typeProvider.stringType,
-      typeProvider.intType,
-      typeProvider.stringType,
-      typeProvider.intType,
-      typeProvider.mapType
-          .instantiate([typeProvider.stringType, typeProvider.intType])
-    ]);
-  }
-
-  void test_mapLiteral_const_typeAnnotation() {
-    applyTypes(r'''
-get f => const <String, int>{'a' : 1, 'b' : 2, 'c' : 3};
-''', [], [], <DartType>[
-      typeProvider.stringType,
-      typeProvider.intType,
-      typeProvider.stringType,
-      typeProvider.intType,
-      typeProvider.stringType,
-      typeProvider.intType,
-      typeProvider.mapType
-          .instantiate([typeProvider.stringType, typeProvider.intType])
-    ]);
-  }
-
-  void test_mapLiteral_noAnnotation() {
-    applyTypes(r'''
-get f => {'a' : 1, 'b' : 2, 'c' : 3};
-''', [], [], <DartType>[
-      typeProvider.stringType,
-      typeProvider.intType,
-      typeProvider.stringType,
-      typeProvider.intType,
-      typeProvider.stringType,
-      typeProvider.intType,
-      typeProvider.mapType
-          .instantiate([typeProvider.stringType, typeProvider.intType])
-    ]);
-  }
-
-  void test_mapLiteral_typeAnnotation() {
-    applyTypes(r'''
-get f => <String, int>{'a' : 1, 'b' : 2, 'c' : 3};
-''', [], [], <DartType>[
-      typeProvider.stringType,
-      typeProvider.intType,
-      typeProvider.stringType,
-      typeProvider.intType,
-      typeProvider.stringType,
-      typeProvider.intType,
-      typeProvider.mapType
-          .instantiate([typeProvider.stringType, typeProvider.intType])
-    ]);
-  }
-
-  void test_methodInvocation_getter() {
-    applyTypes(r'''
-f(String s) {
-  return s.length;
-}
-''', [], [
-      _createFunctionParameter('s', 9),
-      new MethodElementImpl('length', -1)
-    ], <DartType>[
-      typeProvider.stringType,
-      typeProvider.intType,
-    ]);
-  }
-
-  void test_methodInvocation_method() {
-    var substringType =
-        new FunctionTypeImpl(new FunctionElementImpl('substring', -1));
-    applyTypes(r'''
-f(String s) {
-  return s.substring(3, 7);
-}
-''', [], [
-      _createFunctionParameter('s', 9),
-      new MethodElementImpl('length', -1)
-    ], <DartType>[
-      typeProvider.stringType,
-      substringType,
-      substringType,
-      new TypeArgumentsDartType([]),
-      typeProvider.intType,
-      typeProvider.stringType,
-      typeProvider.stringType
-    ]);
-  }
-
-  @failingTest
-  void test_typeAlias() {
-    TypeParameterElement B = _createTypeParameter('B', 42);
-    TypeParameterElement C = _createTypeParameter('C', 45);
-    GenericTypeAliasElementImpl element =
-        new GenericTypeAliasElementImpl('A', 40);
-    element.typeParameters = <TypeParameterElement>[B, C];
-    GenericFunctionTypeElementImpl functionElement =
-        element.function = new GenericFunctionTypeElementImpl.forOffset(-1);
-    functionElement.typeParameters = <TypeParameterElement>[];
-    functionElement.returnType = B.type;
-    functionElement.parameters = [
-      _createFunctionParameter('x', 48, type: C.type),
-    ];
-    FunctionTypeImpl functionType = new FunctionTypeImpl.forTypedef(element);
-    applyTypes(r'''
-f() {
-  A<int, String> foo;
-}
-//typedef B A<B, C>(C x);
-''', [new LocalVariableElementImpl('foo', 23)], [], <DartType>[functionType]);
-  }
-
-  /// Return a newly created parameter element with the given [name] and
-  /// [offset].
-  ParameterElement _createFunctionParameter(String name, int offset,
-      {DartType type}) {
-    ParameterElementImpl parameter = new ParameterElementImpl(name, offset);
-    parameter.type = type;
-    parameter.parameterKind = ParameterKind.REQUIRED;
-    return parameter;
-  }
-
-  /// Return a newly created type parameter element with the given [name] and
-  /// [offset].
-  TypeParameterElement _createTypeParameter(String name, int offset) {
-    TypeParameterElementImpl typeParameter =
-        new TypeParameterElementImpl(name, offset);
-    TypeParameterTypeImpl typeParameterType =
-        new TypeParameterTypeImpl(typeParameter);
-    typeParameter.type = typeParameterType;
-    return typeParameter;
-  }
-}
-
-/// Kernel wrapper around the Analyzer [type].
-class _KernelWrapperOfType implements kernel.DartType {
-  final DartType type;
-
-  _KernelWrapperOfType(this.type);
-
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-/// Test implementation of [TypeContext].
-class _TestTypeContext implements TypeContext {
-  @override
-  ClassElement get enclosingClassElement => null;
-
-  @override
-  DartType get stringType => null;
-
-  @override
-  DartType get typeType => null;
-
-  @override
-  void encloseVariable(ElementImpl element) {}
-
-  @override
-  void enterLocalFunction(FunctionElementImpl element) {}
-
-  @override
-  void exitLocalFunction(FunctionElementImpl element) {}
-
-  @override
-  DartType translateType(kernel.DartType kernelType) {
-    return (kernelType as _KernelWrapperOfType).type;
-  }
-}
diff --git a/pkg/analyzer/test/src/fasta/test_all.dart b/pkg/analyzer/test/src/fasta/test_all.dart
index 675b470..37ccad1 100644
--- a/pkg/analyzer/test/src/fasta/test_all.dart
+++ b/pkg/analyzer/test/src/fasta/test_all.dart
@@ -7,7 +7,6 @@
 import 'ast_builder_test.dart' as ast_builder;
 import 'message_coverage_test.dart' as message_coverage;
 import 'recovery/test_all.dart' as recovery;
-import 'resolution_applier_test.dart' as resolution_applier;
 import 'resolution_test.dart' as resolution;
 
 main() {
@@ -15,7 +14,6 @@
     ast_builder.main();
     message_coverage.main();
     recovery.main();
-    resolution_applier.main();
     resolution.main();
   }, name: 'fasta');
 }
diff --git a/pkg/analyzer/test/src/pubspec/pubspec_validator_test.dart b/pkg/analyzer/test/src/pubspec/pubspec_validator_test.dart
index 9386a8d..f4eb228 100644
--- a/pkg/analyzer/test/src/pubspec/pubspec_validator_test.dart
+++ b/pkg/analyzer/test/src/pubspec/pubspec_validator_test.dart
@@ -159,6 +159,25 @@
 ''');
   }
 
+  test_assetDirectoryDoesNotExist_error() {
+    assertErrors('''
+name: sample
+flutter:
+  assets:
+    - assets/logos/
+''', [PubspecWarningCode.ASSET_DIRECTORY_DOES_NOT_EXIST]);
+  }
+
+  test_assetDirectoryDoesExists_noError() {
+    newFolder('/sample/assets/logos');
+    assertNoErrors('''
+name: sample
+flutter:
+  assets:
+    - assets/logos/
+''');
+  }
+
   test_dependenciesFieldNotMap_dev_error_bool() {
     assertErrors('''
 name: sample
diff --git a/pkg/analyzer/test/src/summary/summary_common.dart b/pkg/analyzer/test/src/summary/summary_common.dart
index 0f78b0f..952ede8 100644
--- a/pkg/analyzer/test/src/summary/summary_common.dart
+++ b/pkg/analyzer/test/src/summary/summary_common.dart
@@ -8760,10 +8760,15 @@
     serializeLibraryText('@a(-b=""c');
     expect(unlinkedUnits, hasLength(1));
     List<UnlinkedVariable> variables = unlinkedUnits[0].variables;
-    expect(variables, hasLength(1));
-    List<UnlinkedExpr> annotations = variables[0].annotations;
-    expect(annotations, hasLength(1));
-    expect(annotations[0].isValidConst, isFalse);
+    if (Parser.useFasta) {
+      // Fasta recovers by appending `)` after `c`
+      expect(variables, isEmpty);
+    } else {
+      expect(variables, hasLength(1));
+      List<UnlinkedExpr> annotations = variables[0].annotations;
+      expect(annotations, hasLength(1));
+      expect(annotations[0].isValidConst, isFalse);
+    }
   }
 
   test_metadata_invalid_instanceCreation_argument_super() {
diff --git a/pkg/analyzer/tool/task_dependency_graph/generate.dart b/pkg/analyzer/tool/task_dependency_graph/generate.dart
index 53477e1..b3da4d0 100644
--- a/pkg/analyzer/tool/task_dependency_graph/generate.dart
+++ b/pkg/analyzer/tool/task_dependency_graph/generate.dart
@@ -161,10 +161,7 @@
         FolderBasedDartSdk.defaultSdkDirectory(resourceProvider));
 
     ContextBuilderOptions builderOptions = new ContextBuilderOptions();
-    if (Platform.packageRoot != null) {
-      builderOptions.defaultPackagesDirectoryPath =
-          Uri.parse(Platform.packageRoot).toFilePath();
-    } else if (Platform.packageConfig != null) {
+    if (Platform.packageConfig != null) {
       builderOptions.defaultPackageFilePath =
           Uri.parse(Platform.packageConfig).toFilePath();
     } else {
diff --git a/pkg/analyzer_cli/lib/src/context_cache.dart b/pkg/analyzer_cli/lib/src/context_cache.dart
index 9f07d92..11ec5f0 100644
--- a/pkg/analyzer_cli/lib/src/context_cache.dart
+++ b/pkg/analyzer_cli/lib/src/context_cache.dart
@@ -96,6 +96,7 @@
     contextOptions.generateImplicitErrors = clOptions.showPackageWarnings;
     contextOptions.generateSdkErrors = clOptions.showSdkWarnings;
     contextOptions.previewDart2 = clOptions.previewDart2;
+    contextOptions.useFastaParser = clOptions.useFastaParser;
     contextOptions.strongMode = clOptions.strongMode;
     if (clOptions.useCFE) {
       contextOptions.useFastaParser = true;
diff --git a/pkg/analyzer_cli/lib/src/options.dart b/pkg/analyzer_cli/lib/src/options.dart
index d82228d..80450e8 100644
--- a/pkg/analyzer_cli/lib/src/options.dart
+++ b/pkg/analyzer_cli/lib/src/options.dart
@@ -114,6 +114,9 @@
   /// Whether to enable the Dart 2.0 Common Front End.
   final bool useCFE;
 
+  /// Whether to enable parsing via the Fasta parser.
+  final bool useFastaParser;
+
   /// Whether to enable the Dart 2.0 Preview.
   final bool previewDart2;
 
@@ -187,6 +190,7 @@
         machineFormat = args['format'] == 'machine',
         perfReport = args['x-perf-report'],
         useCFE = args['use-cfe'],
+        useFastaParser = args['use-fasta-parser'],
         previewDart2 = args['preview-dart-2'],
         batchMode = args['batch'],
         showPackageWarnings = args['show-package-warnings'] ||
@@ -509,7 +513,10 @@
           help:
               'Enable the Dart 2.0 Common Front End implementation (experimental).',
           defaultsTo: false,
-          negatable: false,
+          hide: hide)
+      ..addFlag('use-fasta-parser',
+          help: 'Whether to enable parsing via the Fasta parser.',
+          defaultsTo: false,
           hide: hide)
       ..addFlag('preview-dart-2',
           help: 'Enable the Dart 2.0 preview.',
diff --git a/pkg/analyzer_cli/test/driver_test.dart b/pkg/analyzer_cli/test/driver_test.dart
index d33adca..606e0c3 100644
--- a/pkg/analyzer_cli/test/driver_test.dart
+++ b/pkg/analyzer_cli/test/driver_test.dart
@@ -28,19 +28,14 @@
     defineReflectiveTests(BuildModeTest);
     defineReflectiveTests(ExitCodesTest);
     defineReflectiveTests(ExitCodesTest_PreviewDart2);
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(ExitCodesTest_UseCFE);
+    defineReflectiveTests(ExitCodesTest_UseCFE);
     defineReflectiveTests(LinterTest);
     defineReflectiveTests(LinterTest_PreviewDart2);
-    // Disabled until integration with the CFE has been restarted.
-//    defineReflectiveTests(LinterTest_UseCFE);
+    defineReflectiveTests(LinterTest_UseCFE);
     defineReflectiveTests(NonDartFilesTest);
     defineReflectiveTests(OptionsTest);
     defineReflectiveTests(OptionsTest_PreviewDart2);
-    // TODO(scheglov): Restore similar test coverage when the front-end API
-    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
-    // defineReflectiveTests(OptionsTest_UseCFE);
+    defineReflectiveTests(OptionsTest_UseCFE);
   }, name: 'Driver');
 }
 
@@ -680,6 +675,12 @@
 
   @override
   @failingTest
+  test_enableAssertInitializer() {
+    fail('Test times out');
+  }
+
+  @override
+  @failingTest
   test_fatalErrors() {
     // TODO(devoncarew): This test times out when used with @failingTest.
     return new Future.error('failing test');
@@ -687,11 +688,51 @@
 
   @override
   @failingTest
-  test_fatalWarnings() => super.test_fatalWarnings();
+  test_fatalHints() {
+    fail('Test times out');
+  }
 
   @override
   @failingTest
-  test_notFatalWarnings() => super.test_notFatalWarnings();
+  test_fatalWarnings() {
+    fail('Test times out');
+  }
+
+  @override
+  @failingTest
+  test_missingOptionsFile() {
+    fail('Test times out');
+  }
+
+  @override
+  @failingTest
+  test_notFatalHints() {
+    fail('Test times out');
+  }
+
+  @override
+  @failingTest
+  test_notFatalWarnings() {
+    fail('Test times out');
+  }
+
+  @override
+  @failingTest
+  test_partFile() {
+    fail('Test times out');
+  }
+
+  @override
+  @failingTest
+  test_partFile_extra() {
+    fail('Test times out');
+  }
+
+  @override
+  @failingTest
+  test_partFile_reversed() {
+    fail('Test crashes CFE');
+  }
 }
 
 @reflectiveTest
@@ -800,6 +841,48 @@
 class LinterTest_UseCFE extends LinterTest {
   @override
   bool get useCFE => true;
+
+  @override
+  @failingTest
+  test_defaultLints_generatedLints() {
+    fail('Test times out');
+  }
+
+  @override
+  @failingTest
+  test_defaultLints_getsDefaultLints() {
+    fail('Test times out');
+  }
+
+  @override
+  @failingTest
+  test_lintsInOptions_generatedLints() {
+    fail('Test times out');
+  }
+
+  @override
+  @failingTest
+  test_lintsInOptions_getAnalysisOptions() {
+    fail('Test times out');
+  }
+
+  @override
+  @failingTest
+  test_noLints_lintsDisabled() {
+    fail('Test times out');
+  }
+
+  @override
+  @failingTest
+  test_noLints_noGeneratedWarnings() {
+    fail('Test times out');
+  }
+
+  @override
+  @failingTest
+  test_noLints_noRegisteredLints() {
+    fail('Test times out');
+  }
 }
 
 @reflectiveTest
@@ -1016,42 +1099,75 @@
 
   @override
   @failingTest
-  test_analysisOptions_excludes() => super.test_analysisOptions_excludes();
+  test_analysisOptions_excludes() {
+    fail('Test times out');
+  }
 
   @override
   @failingTest
-  test_analysisOptions_excludesRelativeToAnalysisOptions_explicit() =>
-      super.test_analysisOptions_excludesRelativeToAnalysisOptions_explicit();
+  test_analysisOptions_excludesRelativeToAnalysisOptions_explicit() {
+    fail('Test times out');
+  }
 
   @override
   @failingTest
-  test_analysisOptions_excludesRelativeToAnalysisOptions_inferred() =>
-      super.test_analysisOptions_excludesRelativeToAnalysisOptions_inferred();
+  test_analysisOptions_excludesRelativeToAnalysisOptions_inferred() {
+    fail('Test times out');
+  }
 
   @override
   @failingTest
-  test_basic_filters() => super.test_basic_filters();
+  test_analyzeFilesInDifferentContexts() {
+    fail('Test times out');
+  }
 
   @override
   @failingTest
-  test_basic_language() => super.test_basic_language();
+  test_basic_filters() {
+    fail('Test times out');
+  }
 
   @override
   @failingTest
-  test_basic_strongMode() => super.test_basic_strongMode();
+  test_basic_language() {
+    fail('Test times out');
+  }
 
   @override
   @failingTest
-  test_includeDirective() => super.test_includeDirective();
+  test_basic_strongMode() {
+    fail('Test times out');
+  }
 
   @override
   @failingTest
-  test_previewDart2() => super.test_previewDart2();
+  test_includeDirective() {
+    fail('Test times out');
+  }
 
   @override
   @failingTest
-  test_withFlags_overrideFatalWarning() =>
-      super.test_withFlags_overrideFatalWarning();
+  test_previewDart2() {
+    fail('Test times out');
+  }
+
+  @override
+  @failingTest
+  test_strongSdk() {
+    fail('Test times out');
+  }
+
+  @override
+  @failingTest
+  test_todo() {
+    fail('Test times out');
+  }
+
+  @override
+  @failingTest
+  test_withFlags_overrideFatalWarning() {
+    fail('Test times out');
+  }
 }
 
 class TestSource implements Source {
diff --git a/pkg/analyzer_cli/test/options_test.dart b/pkg/analyzer_cli/test/options_test.dart
index 86ff443..4ffddfe 100644
--- a/pkg/analyzer_cli/test/options_test.dart
+++ b/pkg/analyzer_cli/test/options_test.dart
@@ -251,6 +251,17 @@
         expect(options.useCFE, isTrue);
       });
 
+      test('--use-fasta-parser', () {
+        CommandLineOptions options =
+            CommandLineOptions.parse(['--use-fasta-parser', 'foo.dart']);
+        expect(options.useFastaParser, isTrue);
+      });
+
+      test('--no-use-fasta-parser', () {
+        CommandLineOptions options = CommandLineOptions.parse(['', 'foo.dart']);
+        expect(options.useFastaParser, isFalse);
+      });
+
       test('--preview-dart-2', () {
         CommandLineOptions options =
             CommandLineOptions.parse(['--preview-dart-2', 'foo.dart']);
diff --git a/pkg/analyzer_plugin/test/integration/support/integration_tests.dart b/pkg/analyzer_plugin/test/integration/support/integration_tests.dart
index 0e58499..fbeae0c 100644
--- a/pkg/analyzer_plugin/test/integration/support/integration_tests.dart
+++ b/pkg/analyzer_plugin/test/integration/support/integration_tests.dart
@@ -653,9 +653,6 @@
     } else if (servicesPort != null) {
       arguments.add('--enable-vm-service=$servicesPort');
     }
-    if (Platform.packageRoot != null) {
-      arguments.add('--package-root=${Platform.packageRoot}');
-    }
     if (Platform.packageConfig != null) {
       arguments.add('--packages=${Platform.packageConfig}');
     }
diff --git a/pkg/compiler/lib/src/commandline_options.dart b/pkg/compiler/lib/src/commandline_options.dart
index c35ddbb..42d6b0c 100644
--- a/pkg/compiler/lib/src/commandline_options.dart
+++ b/pkg/compiler/lib/src/commandline_options.dart
@@ -41,7 +41,13 @@
 
   static const String strongMode = '--strong';
   static const String previewDart2 = '--preview-dart-2';
+  // Revert to Dart 1.0
+  //
+  // Temporary option to opt-out of Dart 2.0 while migrating.
+  static const String noPreviewDart2 = '--no-preview-dart-2';
+
   static const String omitImplicitChecks = '--omit-implicit-checks';
+  static const String laxRuntimeTypeToString = '--lax-runtime-type-to-string';
 
   static const String platformBinaries = '--platform-binaries=.+';
 
diff --git a/pkg/compiler/lib/src/common/resolution.dart b/pkg/compiler/lib/src/common/resolution.dart
index cf2ed2c..ad9214f 100644
--- a/pkg/compiler/lib/src/common/resolution.dart
+++ b/pkg/compiler/lib/src/common/resolution.dart
@@ -19,6 +19,7 @@
   Iterable<ConstantExpression> get constantLiterals =>
       const <ConstantExpression>[];
   Iterable<ClassEntity> get seenClasses => const <ClassEntity>[];
+  Iterable<RuntimeTypeUse> get runtimeTypeUses => const <RuntimeTypeUse>[];
 
   Iterable<dynamic> get nativeData => const <dynamic>[];
 
diff --git a/pkg/compiler/lib/src/common_elements.dart b/pkg/compiler/lib/src/common_elements.dart
index 738bd388..c54b666 100644
--- a/pkg/compiler/lib/src/common_elements.dart
+++ b/pkg/compiler/lib/src/common_elements.dart
@@ -1091,6 +1091,15 @@
   FunctionEntity get createInvocationMirror =>
       _findHelperFunction('createInvocationMirror');
 
+  bool isCreateInvocationMirrorHelper(MemberEntity member) {
+    return member.isTopLevel &&
+        member.name == '_createInvocationMirror' &&
+        member.library == coreLibrary;
+  }
+
+  FunctionEntity get createUnmangledInvocationMirror =>
+      _findHelperFunction('createUnmangledInvocationMirror');
+
   FunctionEntity get cyclicThrowHelper =>
       _findHelperFunction("throwCyclicInit");
 
diff --git a/pkg/compiler/lib/src/constants/expressions.dart b/pkg/compiler/lib/src/constants/expressions.dart
index 7916753..b03de0b 100644
--- a/pkg/compiler/lib/src/constants/expressions.dart
+++ b/pkg/compiler/lib/src/constants/expressions.dart
@@ -1144,6 +1144,15 @@
           });
           isValid = false;
         }
+        if (isValid &&
+            (operator.kind == BinaryOperatorKind.IDIV ||
+                operator.kind == BinaryOperatorKind.MOD)) {
+          if (rightValue.isZero) {
+            environment.reportError(right, MessageKind.INVALID_CONSTANT_DIV,
+                {'left': left, 'right': right, 'operator': operator});
+            isValid = false;
+          }
+        }
         break;
       case BinaryOperatorKind.SHL:
       case BinaryOperatorKind.SHR:
@@ -1168,6 +1177,16 @@
           });
           isValid = false;
         }
+        if (isValid &&
+            (operator.kind == BinaryOperatorKind.SHL ||
+                operator.kind == BinaryOperatorKind.SHR)) {
+          IntConstantValue shift = rightValue;
+          if (shift.intValue < BigInt.zero) {
+            environment.reportError(right, MessageKind.INVALID_CONSTANT_SHIFT,
+                {'left': left, 'right': right, 'operator': operator});
+            isValid = false;
+          }
+        }
         break;
       case BinaryOperatorKind.LOGICAL_AND:
         if (!leftValue.isBool) {
@@ -1229,6 +1248,8 @@
           if (value != null) {
             return value;
           }
+          environment
+              .reportError(this, MessageKind.NOT_A_COMPILE_TIME_CONSTANT, {});
       }
     }
     return new NonConstantValue();
diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index e1a8e61..a06b868 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -124,7 +124,8 @@
   bool analyzeOnly = false;
   bool trustTypeAnnotations = false;
   bool checkedMode = false;
-  bool strongMode = false;
+  bool strongMode = true;
+  bool forceStrongMode = true;
   List<String> hints = <String>[];
   bool verbose;
   bool throwOnError;
@@ -219,11 +220,16 @@
     passThrough(argument);
   }
 
-  void setStrongMode(_) {
-    strongMode = true;
+  void setForceStrongMode(_) {
+    strongMode = forceStrongMode = true;
     passThrough(Flags.strongMode);
   }
 
+  void setLegacyMode(_) {
+    if (!forceStrongMode) strongMode = false;
+    passThrough(Flags.noPreviewDart2);
+  }
+
   void addInEnvironment(String argument) {
     int eqIndex = argument.indexOf('=');
     String name = argument.substring(2, eqIndex);
@@ -357,9 +363,16 @@
     new OptionHandler(Flags.useContentSecurityPolicy, passThrough),
     new OptionHandler(Flags.enableExperimentalMirrors, passThrough),
     new OptionHandler(Flags.enableAssertMessage, passThrough),
-    new OptionHandler(Flags.strongMode, setStrongMode),
-    new OptionHandler(Flags.previewDart2, setStrongMode),
+    // TODO(sigmund): ignore this option after we update our test bot
+    // configurations or stop testing Dart1.
+    // At the time this was added, some bots invoked dart2js with
+    // --no-preview-dart-2, but some test files contain extra dart2js options,
+    // including --strong. We want to make sure --strong takes precedence.
+    new OptionHandler(Flags.strongMode, setForceStrongMode),
+    new OptionHandler(Flags.previewDart2, setForceStrongMode),
+    new OptionHandler(Flags.noPreviewDart2, setLegacyMode),
     new OptionHandler(Flags.omitImplicitChecks, passThrough),
+    new OptionHandler(Flags.laxRuntimeTypeToString, passThrough),
     new OptionHandler(Flags.benchmarkingProduction, passThrough),
 
     // TODO(floitsch): remove conditional directives flag.
@@ -422,6 +435,17 @@
   if (enableColors != null) {
     diagnosticHandler.enableColors = enableColors;
   }
+
+  if (checkedMode && strongMode) {
+    checkedMode = false;
+    hints.add("Option '${Flags.enableCheckedMode}' is not needed in Dart 2.0.");
+  }
+
+  if (trustTypeAnnotations && strongMode) {
+    hints.add("Option '${Flags.trustTypeAnnotations}' is not available "
+        "in Dart 2.0. Try using '${Flags.omitImplicitChecks}' instead.");
+  }
+
   for (String hint in hints) {
     diagnosticHandler.info(hint, api.Diagnostic.HINT);
   }
@@ -438,20 +462,9 @@
     helpAndFail('Extra arguments: ${extra.join(" ")}');
   }
 
-  if (checkedMode && strongMode) {
-    checkedMode = false;
-    hints.add("Option '${Flags.enableCheckedMode}' is not needed in strong "
-        "mode.");
-  }
-
-  if (trustTypeAnnotations) {
-    if (checkedMode) {
-      helpAndFail("Option '${Flags.trustTypeAnnotations}' may not be used in "
-          "checked mode.");
-    } else if (strongMode) {
-      hints.add("Option '${Flags.trustTypeAnnotations}' is not available "
-          "in strong mode. Try using '${Flags.omitImplicitChecks}' instead.");
-    }
+  if (trustTypeAnnotations && checkedMode) {
+    helpAndFail("Option '${Flags.trustTypeAnnotations}' may not be used in "
+        "checked mode.");
   }
 
   if (packageRoot != null && packageConfig != null) {
@@ -504,8 +517,6 @@
 
   Uri script = currentDirectory.resolve(arguments[0]);
   diagnosticHandler.autoReadFileUri = true;
-  // TODO(sigmund): reenable hints (Issue #32111)
-  diagnosticHandler.showHints = showHints = false;
   CompilerOptions compilerOptions = CompilerOptions.parse(options,
       libraryRoot: libraryRoot, platformBinaries: platformBinaries)
     ..entryPoint = script
@@ -587,7 +598,6 @@
 
 Common options:
   -o <file> Generate the output into <file>.
-  -c        Insert runtime type checks and enable assertions (checked mode).
   -m        Generate minified output.
   -h        Display this message (add -v for information about all options).''');
 }
@@ -620,25 +630,10 @@
   --version
     Display version information.
 
-  -p<path>, --package-root=<path>
-    Where to find packages, that is, "package:..." imports.  This option cannot
-    be used with --packages.
-
   --packages=<path>
     Path to the package resolution configuration file, which supplies a mapping
     of package names to paths.  This option cannot be used with --package-root.
 
-  --analyze-all
-    Analyze all code.  Without this option, the compiler only analyzes
-    code that is reachable from [main].  This option implies --analyze-only.
-
-  --analyze-only
-    Analyze but do not generate code.
-
-  --analyze-signatures-only
-    Skip analysis of method bodies and field initializers. This option implies
-    --analyze-only.
-
   --suppress-warnings
     Do not display any warnings.
 
@@ -668,14 +663,14 @@
   --fast-startup
     Produce JavaScript that can be parsed more quickly by VMs. This option
     usually results in larger JavaScript files with faster startup.
-    Note: the dart:mirrors library is not supported with this option.
 
-  --preview-dart-2
-    Preview of all Dart 2.0 semantics, this includes generic methods and strong
-    mode type checks.
+  --no-preview-dart-2
+    Temporarily revert to Dart 1.0 semantics.
 
-    This flag is mainly for early dogfooding and will be removed when all
-    features are shipped.
+    By default dart2js compiles programs in Dart 2.0 semantics, which includes
+    generic methods and strong mode type checks. Since apps may have additional
+    checks that fail at runtime, this temporary flag may help in the migration
+    process. See also '--omit-implicit-checks'.
 
 The following advanced options can help reduce the size of the generated code,
 but they may cause programs to behave unexpectedly if assumptions are not met.
@@ -684,7 +679,7 @@
 
   --omit-implicit-checks
     Omit implicit runtime checks, such as parameter checks and implicit
-    downcasts. These checks are included by default in strong mode. By
+    downcasts. These checks are included by default in Dart 2.0. By
     using this flag the checks are removed, however the compiler will assume
     that all such checks were valid and may use this information for
     optimizations. Use this option only if you have enough testing to ensure
diff --git a/pkg/compiler/lib/src/diagnostics/messages.dart b/pkg/compiler/lib/src/diagnostics/messages.dart
index 0bd3e70..496e9aa 100644
--- a/pkg/compiler/lib/src/diagnostics/messages.dart
+++ b/pkg/compiler/lib/src/diagnostics/messages.dart
@@ -215,6 +215,7 @@
   INVALID_CONSTANT_COMPLEMENT_TYPE,
   INVALID_CONSTANT_CONDITIONAL_TYPE,
   INVALID_CONSTANT_CONSTRUCTOR,
+  INVALID_CONSTANT_DIV,
   INVALID_CONSTANT_INDEX,
   INVALID_CONSTANT_INTERPOLATION_TYPE,
   INVALID_CONSTANT_NEGATE_TYPE,
@@ -222,6 +223,7 @@
   INVALID_CONSTANT_NUM_ADD_TYPE,
   INVALID_CONSTANT_STRING_ADD_TYPE,
   INVALID_CONSTANT_STRING_LENGTH_TYPE,
+  INVALID_CONSTANT_SHIFT,
   INVALID_CONSTRUCTOR_ARGUMENTS,
   INVALID_CONSTRUCTOR_NAME,
   INVALID_CONTINUE,
@@ -3501,6 +3503,15 @@
           "`#{constant}` of type '#{type}' is not a valid operand for a "
           ".length expression. Must be a value of type 'String'."),
 
+      MessageKind.INVALID_CONSTANT_SHIFT: const MessageTemplate(
+          MessageKind.INVALID_CONSTANT_SHIFT,
+          "Shift amount must be non-negative in "
+          "`#{left} #{operator} #{right}`."),
+
+      MessageKind.INVALID_CONSTANT_DIV: const MessageTemplate(
+          MessageKind.INVALID_CONSTANT_DIV,
+          "Divisor must be non-zero in `#{left} #{operator} #{right}`."),
+
       MessageKind.INVALID_CONSTANT_NUM_ADD_TYPE: const MessageTemplate(
           MessageKind.INVALID_CONSTANT_NUM_ADD_TYPE,
           "`#{constant}` of type '#{type}' is not a valid operand of a "
diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart
index bacfc5e..a8164c0 100644
--- a/pkg/compiler/lib/src/js_backend/backend.dart
+++ b/pkg/compiler/lib/src/js_backend/backend.dart
@@ -409,7 +409,8 @@
             compiler.backendStrategy.sourceInformationStrategy,
         constantCompilerTask = new JavaScriptConstantTask(compiler) {
     CommonElements commonElements = compiler.frontendStrategy.commonElements;
-    _backendUsageBuilder = new BackendUsageBuilderImpl(commonElements);
+    _backendUsageBuilder =
+        new BackendUsageBuilderImpl(compiler.frontendStrategy);
     _checkedModeHelpers = new CheckedModeHelpers();
     emitter =
         new CodeEmitterTask(compiler, generateSourceMap, useStartupEmitter);
@@ -799,6 +800,7 @@
         closedWorld.nativeData,
         closedWorld.elementEnvironment,
         closedWorld.commonElements,
+        closedWorld.rtiNeed,
         strongMode: compiler.options.strongMode);
     emitter.createEmitter(namer, closedWorld, codegenWorldBuilder, sorter);
     // TODO(johnniwinther): Share the impact object created in
diff --git a/pkg/compiler/lib/src/js_backend/backend_impact.dart b/pkg/compiler/lib/src/js_backend/backend_impact.dart
index 90bc21f..9adf701 100644
--- a/pkg/compiler/lib/src/js_backend/backend_impact.dart
+++ b/pkg/compiler/lib/src/js_backend/backend_impact.dart
@@ -720,9 +720,12 @@
   BackendImpact _noSuchMethodSupport;
 
   BackendImpact get noSuchMethodSupport {
-    return _noSuchMethodSupport ??= new BackendImpact(
-        staticUses: [_commonElements.createInvocationMirror],
-        dynamicUses: [Selectors.noSuchMethod_]);
+    return _noSuchMethodSupport ??= new BackendImpact(staticUses: [
+      _commonElements.createInvocationMirror,
+      _commonElements.createUnmangledInvocationMirror
+    ], dynamicUses: [
+      Selectors.noSuchMethod_
+    ]);
   }
 
   BackendImpact _loadLibrary;
diff --git a/pkg/compiler/lib/src/js_backend/backend_usage.dart b/pkg/compiler/lib/src/js_backend/backend_usage.dart
index 7e2065e..3b7503c 100644
--- a/pkg/compiler/lib/src/js_backend/backend_usage.dart
+++ b/pkg/compiler/lib/src/js_backend/backend_usage.dart
@@ -6,6 +6,8 @@
 import '../common_elements.dart';
 import '../elements/entities.dart';
 import '../elements/types.dart';
+import '../frontend_strategy.dart';
+import '../universe/feature.dart';
 import '../util/util.dart' show Setlet;
 import 'backend_impact.dart';
 
@@ -26,6 +28,8 @@
 
   Iterable<ClassEntity> get helperClassesUsed;
 
+  Iterable<RuntimeTypeUse> get runtimeTypeUses;
+
   /// `true` if a core-library function requires the preamble file to function.
   bool get requiresPreamble;
 
@@ -71,8 +75,8 @@
 
   void registerUsedMember(MemberEntity member);
 
-  /// `true` of `Object.runtimeType` is used.
-  bool isRuntimeTypeUsed;
+  /// Register use of `runtimeType`.
+  void registerRuntimeTypeUse(RuntimeTypeUse runtimeTypeUse);
 
   /// `true` if `Function.apply` is used.
   bool isFunctionApplyUsed;
@@ -84,7 +88,7 @@
 }
 
 class BackendUsageBuilderImpl implements BackendUsageBuilder {
-  final CommonElements _commonElements;
+  FrontendStrategy _frontendStrategy;
   // TODO(johnniwinther): Remove the need for these.
   Setlet<FunctionEntity> _globalFunctionDependencies;
   Setlet<ClassEntity> _globalClassDependencies;
@@ -95,6 +99,8 @@
   /// List of classes that the backend may use.
   final Set<ClassEntity> _helperClassesUsed = new Set<ClassEntity>();
 
+  final Set<RuntimeTypeUse> _runtimeTypeUses = new Set<RuntimeTypeUse>();
+
   bool _needToInitializeIsolateAffinityTag = false;
   bool _needToInitializeDispatchProperty = false;
 
@@ -104,9 +110,6 @@
   /// `true` if [CommonElements.invokeOnMethod] is used.
   bool isInvokeOnUsed = false;
 
-  /// `true` of `Object.runtimeType` is used.
-  bool isRuntimeTypeUsed = false;
-
   /// `true` if `Function.apply` is used.
   bool isFunctionApplyUsed = false;
 
@@ -116,43 +119,34 @@
   /// `true` if `noSuchMethod` is used.
   bool isNoSuchMethodUsed = false;
 
-  BackendUsageBuilderImpl(this._commonElements);
+  BackendUsageBuilderImpl(this._frontendStrategy);
+
+  CommonElements get _commonElements => _frontendStrategy.commonElements;
 
   @override
   void registerBackendFunctionUse(FunctionEntity element) {
-    assert(_isValidBackendUse(element),
+    assert(_isValidBackendUse(element, element.library),
         failedAt(element, "Backend use of $element is not allowed."));
     _helperFunctionsUsed.add(element);
   }
 
   @override
   void registerBackendClassUse(ClassEntity element) {
-    assert(_isValidBackendUse(element),
+    assert(_isValidBackendUse(element, element.library),
         failedAt(element, "Backend use of $element is not allowed."));
     _helperClassesUsed.add(element);
   }
 
-  bool _isValidBackendUse(Entity element) {
+  bool _isValidBackendUse(Entity element, LibraryEntity library) {
     if (_isValidEntity(element)) return true;
-    // TODO(redemption): Support these checks on kernel based elements:
-    /*if (element is Element) {
-      assert(element.isDeclaration,
-          failedAt(element, "Backend use $element must be the declaration."));
-      if (element.implementationLibrary.isPatch ||
-          // Needed to detect deserialized injected elements, that is
-          // element declared in patch files.
-          (element.library.isPlatformLibrary &&
-              element.sourcePosition.uri.path
-                  .contains('_internal/js_runtime/lib/')) ||
-          element.library == _commonElements.jsHelperLibrary ||
-          element.library == _commonElements.interceptorsLibrary) {
-        // TODO(johnniwinther): We should be more precise about these.
-        return true;
-      } else {
-        return false;
-      }
-    }*/
-    return true;
+    SourceSpan span = _frontendStrategy.spanFromSpannable(element, element);
+    if (library.canonicalUri.scheme == 'dart' &&
+        span.uri.path.contains('_internal/js_runtime/lib/')) {
+      // TODO(johnniwinther): We should be more precise about these.
+      return true;
+    } else {
+      return false;
+    }
   }
 
   bool _isValidEntity(Entity element) {
@@ -258,6 +252,11 @@
     _globalClassDependencies.add(element);
   }
 
+  @override
+  void registerRuntimeTypeUse(RuntimeTypeUse runtimeTypeUse) {
+    _runtimeTypeUses.add(runtimeTypeUse);
+  }
+
   BackendUsage close() {
     return new BackendUsageImpl(
         globalFunctionDependencies: _globalFunctionDependencies,
@@ -268,7 +267,7 @@
         needToInitializeDispatchProperty: _needToInitializeDispatchProperty,
         requiresPreamble: requiresPreamble,
         isInvokeOnUsed: isInvokeOnUsed,
-        isRuntimeTypeUsed: isRuntimeTypeUsed,
+        runtimeTypeUses: _runtimeTypeUses,
         isFunctionApplyUsed: isFunctionApplyUsed,
         isMirrorsUsed: isMirrorsUsed,
         isNoSuchMethodUsed: isNoSuchMethodUsed);
@@ -286,6 +285,8 @@
   /// Set of classes instantiated by the backend.
   final Set<ClassEntity> _helperClassesUsed;
 
+  final Set<RuntimeTypeUse> _runtimeTypeUses;
+
   bool needToInitializeIsolateAffinityTag;
   bool needToInitializeDispatchProperty;
 
@@ -295,9 +296,6 @@
   /// `true` if [CommonElements.invokeOnMethod] is used.
   final bool isInvokeOnUsed;
 
-  /// `true` of `Object.runtimeType` is used.
-  final bool isRuntimeTypeUsed;
-
   /// `true` if `Function.apply` is used.
   final bool isFunctionApplyUsed;
 
@@ -316,14 +314,15 @@
       this.needToInitializeDispatchProperty,
       this.requiresPreamble,
       this.isInvokeOnUsed,
-      this.isRuntimeTypeUsed,
+      Set<RuntimeTypeUse> runtimeTypeUses,
       this.isFunctionApplyUsed,
       this.isMirrorsUsed,
       this.isNoSuchMethodUsed})
       : this._globalFunctionDependencies = globalFunctionDependencies,
         this._globalClassDependencies = globalClassDependencies,
         this._helperFunctionsUsed = helperFunctionsUsed,
-        this._helperClassesUsed = helperClassesUsed;
+        this._helperClassesUsed = helperClassesUsed,
+        this._runtimeTypeUses = runtimeTypeUses;
 
   @override
   bool isFunctionUsedByBackend(FunctionEntity element) {
@@ -347,4 +346,10 @@
 
   @override
   Iterable<ClassEntity> get helperClassesUsed => _helperClassesUsed;
+
+  @override
+  bool get isRuntimeTypeUsed => _runtimeTypeUses.isNotEmpty;
+
+  @override
+  Iterable<RuntimeTypeUse> get runtimeTypeUses => _runtimeTypeUses;
 }
diff --git a/pkg/compiler/lib/src/js_backend/impact_transformer.dart b/pkg/compiler/lib/src/js_backend/impact_transformer.dart
index 8d6506d..a438262 100644
--- a/pkg/compiler/lib/src/js_backend/impact_transformer.dart
+++ b/pkg/compiler/lib/src/js_backend/impact_transformer.dart
@@ -233,6 +233,14 @@
           .registerTypeUse(new TypeUse.instantiation(listLiteralUse.type));
     }
 
+    for (RuntimeTypeUse runtimeTypeUse in worldImpact.runtimeTypeUses) {
+      // 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.
+      _backendUsageBuilder.registerRuntimeTypeUse(runtimeTypeUse);
+    }
+
     if (worldImpact.constSymbolNames.isNotEmpty) {
       registerImpact(_impacts.constSymbol);
     }
diff --git a/pkg/compiler/lib/src/js_backend/resolution_listener.dart b/pkg/compiler/lib/src/js_backend/resolution_listener.dart
index f46723a..c1b2cac 100644
--- a/pkg/compiler/lib/src/js_backend/resolution_listener.dart
+++ b/pkg/compiler/lib/src/js_backend/resolution_listener.dart
@@ -285,6 +285,10 @@
     }
     _backendUsage.registerUsedMember(member);
 
+    if (_commonElements.isCreateInvocationMirrorHelper(member)) {
+      _registerBackendImpact(worldImpact, _impacts.noSuchMethodSupport);
+    }
+
     if (_elementEnvironment.isDeferredLoadLibraryGetter(member)) {
       // TODO(sigurdm): Create a function registerLoadLibraryAccess.
       if (!_isLoadLibraryFunctionResolved) {
@@ -298,7 +302,6 @@
       // runtimeType. We have to enable runtime type before hitting the
       // codegen, so that constructors know whether they need to generate code
       // for runtime type.
-      _backendUsage.isRuntimeTypeUsed = true;
       // TODO(ahe): Record precise dependency here.
       worldImpact.addImpact(_registerRuntimeType());
     }
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types.dart b/pkg/compiler/lib/src/js_backend/runtime_types.dart
index 332926b..a449b52 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types.dart
@@ -16,7 +16,7 @@
 import '../universe/feature.dart';
 import '../universe/selector.dart';
 import '../universe/world_builder.dart';
-import '../world.dart' show JClosedWorld, KClosedWorld;
+import '../world.dart' show ClassQuery, JClosedWorld, KClosedWorld;
 import 'backend_usage.dart';
 import 'namer.dart';
 import 'native_data.dart';
@@ -86,17 +86,12 @@
   ///
   bool methodNeedsSignature(FunctionEntity method);
 
-  /// Returns `true` if a signature is needed for the call-method created for
-  /// [localFunction].
-  ///
-  /// See [methodNeedsSignature] for more information on what a signature is
-  /// and when it is needed.
-  bool localFunctionNeedsSignature(Local localFunction);
-
   /// Returns `true` if a dynamic call of [selector] needs to pass type
   /// arguments.
   bool selectorNeedsTypeArguments(Selector selector);
 
+  bool get runtimeTypeUsedOnClosures;
+
   /// Returns `true` if a generic instantiation on an expression of type
   /// [functionType] with the given [typeArgumentCount] needs to pass type
   /// arguments.
@@ -112,9 +107,6 @@
   bool classNeedsTypeArguments(ClassEntity cls) => true;
 
   @override
-  bool localFunctionNeedsSignature(Local localFunction) => true;
-
-  @override
   bool methodNeedsSignature(FunctionEntity method) => true;
 
   @override
@@ -127,6 +119,9 @@
   bool selectorNeedsTypeArguments(Selector selector) => true;
 
   @override
+  bool get runtimeTypeUsedOnClosures => true;
+
+  @override
   bool instantiationNeedsTypeArguments(
       DartType functionType, int typeArgumentCount) {
     return true;
@@ -719,7 +714,6 @@
 
 class RuntimeTypesNeedImpl implements RuntimeTypesNeed {
   final ElementEnvironment _elementEnvironment;
-  final BackendUsage _backendUsage;
   final Set<ClassEntity> classesNeedingTypeArguments;
   final Set<FunctionEntity> methodsNeedingSignature;
   final Set<FunctionEntity> methodsNeedingTypeArguments;
@@ -727,54 +721,45 @@
   final Set<Local> localFunctionsNeedingTypeArguments;
   final Set<Selector> selectorsNeedingTypeArguments;
   final Set<int> instantiationsNeedingTypeArguments;
+  // TODO(johnniwinther): Remove these fields together with Dart 1.
+  final bool allNeedsTypeArguments;
+  final bool runtimeTypeUsedOnClosures;
 
   RuntimeTypesNeedImpl(
       this._elementEnvironment,
-      this._backendUsage,
       this.classesNeedingTypeArguments,
       this.methodsNeedingSignature,
       this.methodsNeedingTypeArguments,
       this.localFunctionsNeedingSignature,
       this.localFunctionsNeedingTypeArguments,
       this.selectorsNeedingTypeArguments,
-      this.instantiationsNeedingTypeArguments);
+      this.instantiationsNeedingTypeArguments,
+      {this.allNeedsTypeArguments,
+      this.runtimeTypeUsedOnClosures});
 
   bool checkClass(covariant ClassEntity cls) => true;
 
   bool classNeedsTypeArguments(ClassEntity cls) {
     assert(checkClass(cls));
     if (!_elementEnvironment.isGenericClass(cls)) return false;
-    if (_backendUsage.isRuntimeTypeUsed) return true;
+    if (allNeedsTypeArguments) return true;
     return classesNeedingTypeArguments.contains(cls);
   }
 
   bool methodNeedsSignature(FunctionEntity function) {
-    return _backendUsage.isRuntimeTypeUsed ||
-        methodsNeedingSignature.contains(function);
+    return allNeedsTypeArguments || methodsNeedingSignature.contains(function);
   }
 
   bool methodNeedsTypeArguments(FunctionEntity function) {
     if (function.parameterStructure.typeParameters == 0) return false;
-    if (_backendUsage.isRuntimeTypeUsed) return true;
+    if (allNeedsTypeArguments) return true;
     return methodsNeedingTypeArguments.contains(function);
   }
 
-  bool localFunctionNeedsSignature(Local function) {
-    // This function should not be called when the compiler is using the new FE
-    // (--use-kernel). As an invariant, localFunctionsNeedingSignature is always
-    // null when --use-kernel is true.
-    if (localFunctionsNeedingSignature == null) {
-      throw new UnsupportedError(
-          'RuntimeTypesNeed.localFunctionNeedingSignature with --use-kernel');
-    }
-    return _backendUsage.isRuntimeTypeUsed ||
-        localFunctionsNeedingSignature.contains(function);
-  }
-
   @override
   bool selectorNeedsTypeArguments(Selector selector) {
     if (selector.callStructure.typeArgumentCount == 0) return false;
-    if (_backendUsage.isRuntimeTypeUsed) return true;
+    if (allNeedsTypeArguments) return true;
     return selectorsNeedingTypeArguments.contains(selector);
   }
 
@@ -1642,6 +1627,135 @@
       }
     }
 
+    bool allNeedsTypeArguments;
+    bool runtimeTypeUsedOnClosures;
+    BackendUsage backendUsage = closedWorld.backendUsage;
+    CommonElements commonElements = closedWorld.commonElements;
+    if (!options.strongMode) {
+      allNeedsTypeArguments =
+          runtimeTypeUsedOnClosures = backendUsage.isRuntimeTypeUsed;
+    } else {
+      allNeedsTypeArguments = runtimeTypeUsedOnClosures = false;
+
+      /// Set to `true` if subclasses of `Object` need runtimeType. This is
+      /// only used to stop the computation early.
+      bool neededOnAll = false;
+
+      /// Set to `true` if subclasses of `Function` need runtimeType.
+      bool neededOnFunctions = false;
+
+      Set<ClassEntity> classesDirectlyNeedingRuntimeType =
+          new Set<ClassEntity>();
+
+      ClassEntity impliedClass(DartType type) {
+        if (type is InterfaceType) {
+          return type.element;
+        } else if (type is DynamicType) {
+          return commonElements.objectClass;
+        } else if (type is FunctionType) {
+          // TODO(johnniwinther): Include only potential function type subtypes.
+          return commonElements.functionClass;
+        } else if (type is VoidType) {
+          // No classes implied.
+        } else if (type is FunctionTypeVariable) {
+          return impliedClass(type.bound);
+        } else if (type is TypeVariableType) {
+          // TODO(johnniwinther): Can we do better?
+          return impliedClass(
+              _elementEnvironment.getTypeVariableBound(type.element));
+        }
+        throw new UnsupportedError('Unexpected type $type');
+      }
+
+      void addClass(ClassEntity cls) {
+        if (cls != null) {
+          classesDirectlyNeedingRuntimeType.add(cls);
+        }
+        if (cls == commonElements.objectClass) {
+          neededOnAll = true;
+        }
+        if (cls == commonElements.functionClass) {
+          neededOnFunctions = true;
+        }
+      }
+
+      for (RuntimeTypeUse runtimeTypeUse in backendUsage.runtimeTypeUses) {
+        switch (runtimeTypeUse.kind) {
+          case RuntimeTypeUseKind.string:
+            if (!options.laxRuntimeTypeToString) {
+              addClass(impliedClass(runtimeTypeUse.receiverType));
+            }
+
+            break;
+          case RuntimeTypeUseKind.equals:
+            ClassEntity receiverClass =
+                impliedClass(runtimeTypeUse.receiverType);
+            ClassEntity argumentClass =
+                impliedClass(runtimeTypeUse.argumentType);
+
+            // TODO(johnniwinther): Special case use of `this.runtimeType`.
+            if (closedWorld.isSubtypeOf(receiverClass, argumentClass)) {
+              addClass(receiverClass);
+            } else if (closedWorld.isSubtypeOf(argumentClass, receiverClass)) {
+              addClass(argumentClass);
+            }
+            if (neededOnAll) break;
+            // TODO(johnniwinther): Special case use of `this.runtimeType`.
+            // TODO(johnniwinther): Rename [commonSubclasses] to something like
+            // [strictCommonClasses] and support the non-strict case directly.
+            // Since we do a subclassesOf
+            classesDirectlyNeedingRuntimeType.addAll(
+                closedWorld.commonSubclasses(receiverClass, ClassQuery.SUBTYPE,
+                    argumentClass, ClassQuery.SUBTYPE));
+            break;
+          case RuntimeTypeUseKind.unknown:
+            addClass(impliedClass(runtimeTypeUse.receiverType));
+            break;
+        }
+        if (neededOnAll) break;
+      }
+      Set<ClassEntity> allClassesNeedingRuntimeType;
+      if (neededOnAll) {
+        neededOnFunctions = true;
+        allClassesNeedingRuntimeType =
+            closedWorld.subclassesOf(commonElements.objectClass).toSet();
+      } else {
+        allClassesNeedingRuntimeType = new Set<ClassEntity>();
+        // TODO(johnniwinther): Support this operation directly in
+        // [ClosedWorld] using the [ClassSet]s.
+        for (ClassEntity cls in classesDirectlyNeedingRuntimeType) {
+          if (!allClassesNeedingRuntimeType.contains(cls)) {
+            allClassesNeedingRuntimeType.addAll(closedWorld.subtypesOf(cls));
+          }
+        }
+      }
+      allClassesNeedingRuntimeType.forEach(potentiallyNeedTypeArguments);
+      if (neededOnFunctions) {
+        for (Local function in resolutionWorldBuilder.genericLocalFunctions) {
+          potentiallyNeedTypeArguments(function);
+        }
+        for (Local function in localFunctions) {
+          FunctionType functionType =
+              _elementEnvironment.getLocalFunctionType(function);
+          functionType.forEachTypeVariable((TypeVariableType typeVariable) {
+            Entity typeDeclaration = typeVariable.element.typeDeclaration;
+            if (!processedEntities.contains(typeDeclaration)) {
+              potentiallyNeedTypeArguments(typeDeclaration);
+            }
+          });
+          localFunctionsNeedingSignature.addAll(localFunctions);
+        }
+        for (FunctionEntity function in resolutionWorldBuilder.genericMethods) {
+          potentiallyNeedTypeArguments(function);
+        }
+        for (FunctionEntity function
+            in resolutionWorldBuilder.closurizedMembersWithFreeTypeVariables) {
+          methodsNeedingSignature.add(function);
+          potentiallyNeedTypeArguments(function.enclosingClass);
+        }
+      }
+    }
+
     Set<Selector> selectorsNeedingTypeArguments = new Set<Selector>();
     typeVariableTests
         .forEachAppliedSelector((Selector selector, Set<Entity> targets) {
@@ -1708,18 +1822,21 @@
     print('selectorsNeedingTypeArguments:');
     selectorsNeedingTypeArguments.forEach((e) => print('  $e'));
     print('instantiationsNeedingTypeArguments: '
-        '$instantiationsNeedingTypeArguments');*/
+        '$instantiationsNeedingTypeArguments');
+    print('allNeedsTypeArguments=$allNeedsTypeArguments');
+    print('runtimeTypeUsedOnClosures=$runtimeTypeUsedOnClosures');*/
 
     return new RuntimeTypesNeedImpl(
         _elementEnvironment,
-        closedWorld.backendUsage,
         classesNeedingTypeArguments,
         methodsNeedingSignature,
         methodsNeedingTypeArguments,
         localFunctionsNeedingSignature,
         localFunctionsNeedingTypeArguments,
         selectorsNeedingTypeArguments,
-        instantiationsNeedingTypeArguments);
+        instantiationsNeedingTypeArguments,
+        allNeedsTypeArguments: allNeedsTypeArguments,
+        runtimeTypeUsedOnClosures: runtimeTypeUsedOnClosures);
   }
 }
 
@@ -1873,8 +1990,14 @@
     //
     // In Dart 2, a closure class implements the function type of its `call`
     // method and needs a signature function for testing its function type
-    // against typedefs and function types that are used in is-checks.
-    if (isFunctionChecked || checkedFunctionTypes.isNotEmpty) {
+    // against typedefs and function types that are used in is-checks. Since
+    // closures have a signature method iff they need it and should have a
+    // function type iff they have a signature, we process all classes. We know
+    // that the function type is not inherited, so we don't need to process
+    // their super classes.
+    if (isFunctionChecked ||
+        checkedFunctionTypes.isNotEmpty ||
+        options.strongMode) {
       Set<ClassEntity> processedClasses = new Set<ClassEntity>();
 
       void processClass(ClassEntity cls) {
@@ -1903,7 +2026,11 @@
           liveClasses.add(cls);
         }
       });
-      liveClasses.forEach(processSuperClasses);
+      if (options.strongMode) {
+        liveClasses.forEach(processClass);
+      } else {
+        liveClasses.forEach(processSuperClasses);
+      }
     }
 
     if (options.parameterCheckPolicy.isEmitted) {
@@ -1931,13 +2058,13 @@
 /// In Dart 1, any class with a `call` method has a function type, in Dart 2
 /// only closure classes have a function type.
 ClassFunctionType _computeFunctionType(
-    ElementEnvironment _elementEnvironment, ClassEntity cls,
+    ElementEnvironment elementEnvironment, ClassEntity cls,
     {bool strongMode}) {
   FunctionEntity signatureFunction;
   if (cls.isClosure) {
     // Use signature function if available.
     signatureFunction =
-        _elementEnvironment.lookupLocalClassMember(cls, Identifiers.signature);
+        elementEnvironment.lookupLocalClassMember(cls, Identifiers.signature);
     if (signatureFunction == null && strongMode) {
       // In Dart 2, a closure only needs its function type if it has a
       // signature function.
@@ -1948,10 +2075,10 @@
     return null;
   }
   MemberEntity call =
-      _elementEnvironment.lookupLocalClassMember(cls, Identifiers.call);
+      elementEnvironment.lookupLocalClassMember(cls, Identifiers.call);
   if (call != null && call.isFunction) {
     FunctionEntity callFunction = call;
-    FunctionType callType = _elementEnvironment.getFunctionType(callFunction);
+    FunctionType callType = elementEnvironment.getFunctionType(callFunction);
     return new ClassFunctionType(callFunction, callType, signatureFunction);
   }
   return null;
@@ -1962,9 +2089,11 @@
   final ElementEnvironment _elementEnvironment;
   final CommonElements commonElements;
   final TypeRepresentationGenerator _representationGenerator;
+  final RuntimeTypesNeed _rtiNeed;
 
   RuntimeTypesEncoderImpl(this.namer, NativeBasicData nativeData,
-      this._elementEnvironment, this.commonElements, {bool strongMode})
+      this._elementEnvironment, this.commonElements, this._rtiNeed,
+      {bool strongMode})
       : _representationGenerator = new TypeRepresentationGenerator(
             namer, nativeData,
             strongMode: strongMode);
@@ -2068,7 +2197,16 @@
     ClassEntity contextClass = DartTypes.getClassContext(type);
     jsAst.Expression encoding =
         getTypeEncoding(emitter, type, alwaysGenerateFunction: true);
-    if (contextClass != null) {
+    if (contextClass != null &&
+        // We only generate folding using 'computeSignature' if [contextClass]
+        // has reified type arguments. The 'computeSignature' function might not
+        // be emitted (if it's not needed elsewhere) and the generated signature
+        // will have `undefined` as its type variables in any case.
+        //
+        // This is needed specifically for --lax-runtime-type-to-string which
+        // may require a signature on a method that uses class type variables
+        // while at the same time not needing type arguments on the class.
+        _rtiNeed.classNeedsTypeArguments(contextClass)) {
       jsAst.Name contextName = namer.className(contextClass);
       return js('function () { return #(#, #, #); }', [
         emitter.staticFunctionAccess(commonElements.computeSignature),
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 34a538d..407b49e 100644
--- a/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
@@ -1695,6 +1695,9 @@
     if (compiler.options.trustPrimitives) flavor.write(', trust primitives');
     if (compiler.options.trustTypeAnnotations) flavor.write(', trust types');
     if (compiler.options.omitImplicitChecks) flavor.write(', omit checks');
+    if (compiler.options.laxRuntimeTypeToString) {
+      flavor.write(', lax runtime type');
+    }
     if (compiler.options.useContentSecurityPolicy) flavor.write(', CSP');
     if (_closedWorld.backendUsage.isMirrorsUsed) flavor.write(', mirrors');
     return new jsAst.Comment(generatedBy(compiler, flavor: '$flavor'));
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
index f57321e..edda727 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
@@ -226,6 +226,9 @@
     if (compiler.options.trustPrimitives) flavor.write(', trust primitives');
     if (compiler.options.trustTypeAnnotations) flavor.write(', trust types');
     if (compiler.options.omitImplicitChecks) flavor.write(', omit checks');
+    if (compiler.options.laxRuntimeTypeToString) {
+      flavor.write(', lax runtime type');
+    }
     if (compiler.options.useContentSecurityPolicy) flavor.write(', CSP');
     return new js.Comment(generatedBy(compiler, flavor: '$flavor'));
   }
diff --git a/pkg/compiler/lib/src/js_model/elements.dart b/pkg/compiler/lib/src/js_model/elements.dart
index 2641d69..5f2a4a1 100644
--- a/pkg/compiler/lib/src/js_model/elements.dart
+++ b/pkg/compiler/lib/src/js_model/elements.dart
@@ -92,7 +92,7 @@
 
 abstract class JsToFrontendMapBase extends JsToFrontendMap {
   DartType toBackendType(DartType type) =>
-      const TypeConverter().visit(type, _toBackendEntity);
+      type == null ? null : const TypeConverter().visit(type, _toBackendEntity);
 
   Entity _toBackendEntity(Entity entity) {
     if (entity is ClassEntity) return toBackendClass(entity);
diff --git a/pkg/compiler/lib/src/js_model/js_strategy.dart b/pkg/compiler/lib/src/js_model/js_strategy.dart
index e1779e6..6b68731 100644
--- a/pkg/compiler/lib/src/js_model/js_strategy.dart
+++ b/pkg/compiler/lib/src/js_model/js_strategy.dart
@@ -44,6 +44,7 @@
 import '../types/abstract_value_domain.dart';
 import '../types/types.dart';
 import '../universe/class_set.dart';
+import '../universe/feature.dart';
 import '../universe/selector.dart';
 import '../universe/world_builder.dart';
 import '../world.dart';
@@ -202,7 +203,7 @@
       NativeBasicData nativeBasicData,
       JClosedWorld closedWorld,
       SelectorConstraintsStrategy selectorConstraintsStrategy) {
-    return new KernelCodegenWorldBuilder(
+    return new CodegenWorldBuilderImpl(
         elementMap,
         _globalLocalsMap,
         closedWorld.elementEnvironment,
@@ -348,11 +349,12 @@
           this,
           map.toBackendMemberMap(closureModels, identity),
           new JsClosureRtiNeed(
-            backendUsage,
-            jRtiNeed,
-            localFunctionsNodesNeedingTypeArguments,
-            localFunctionsNodesNeedingSignature,
-          ));
+              jRtiNeed,
+              localFunctionsNodesNeedingTypeArguments,
+              localFunctionsNodesNeedingSignature,
+              runtimeTypeUsedOnClosures:
+                  kernelRtiNeed.runtimeTypeUsedOnClosures,
+              allNeedsTypeArguments: kernelRtiNeed.allNeedsTypeArguments));
 
       List<FunctionEntity> callMethodsNeedingSignature = <FunctionEntity>[];
       for (ir.Node node in localFunctionsNodesNeedingSignature) {
@@ -416,6 +418,14 @@
         map.toBackendFunctionSet(backendUsage.helperFunctionsUsed);
     Set<ClassEntity> helperClassesUsed =
         map.toBackendClassSet(backendUsage.helperClassesUsed);
+    Set<RuntimeTypeUse> runtimeTypeUses =
+        backendUsage.runtimeTypeUses.map((RuntimeTypeUse runtimeTypeUse) {
+      return new RuntimeTypeUse(
+          runtimeTypeUse.kind,
+          map.toBackendType(runtimeTypeUse.receiverType),
+          map.toBackendType(runtimeTypeUse.argumentType));
+    }).toSet();
+
     return new BackendUsageImpl(
         globalFunctionDependencies: globalFunctionDependencies,
         globalClassDependencies: globalClassDependencies,
@@ -427,7 +437,7 @@
             backendUsage.needToInitializeDispatchProperty,
         requiresPreamble: backendUsage.requiresPreamble,
         isInvokeOnUsed: backendUsage.isInvokeOnUsed,
-        isRuntimeTypeUsed: backendUsage.isRuntimeTypeUsed,
+        runtimeTypeUses: runtimeTypeUses,
         isFunctionApplyUsed: backendUsage.isFunctionApplyUsed,
         isMirrorsUsed: backendUsage.isMirrorsUsed,
         isNoSuchMethodUsed: backendUsage.isNoSuchMethodUsed);
@@ -565,14 +575,15 @@
     }).toSet();
     return new RuntimeTypesNeedImpl(
         _elementEnvironment,
-        backendUsage,
         classesNeedingTypeArguments,
         methodsNeedingSignature,
         methodsNeedingTypeArguments,
         null,
         null,
         selectorsNeedingTypeArguments,
-        rtiNeed.instantiationsNeedingTypeArguments);
+        rtiNeed.instantiationsNeedingTypeArguments,
+        allNeedsTypeArguments: rtiNeed.allNeedsTypeArguments,
+        runtimeTypeUsedOnClosures: rtiNeed.runtimeTypeUsedOnClosures);
   }
 
   /// Construct a closure class and set up the necessary class inference
@@ -854,23 +865,21 @@
 }
 
 class JsClosureRtiNeed implements ClosureRtiNeed {
-  final BackendUsage backendUsage;
   final RuntimeTypesNeed rtiNeed;
   final Set<ir.Node> localFunctionsNodesNeedingTypeArguments;
   final Set<ir.Node> localFunctionsNodesNeedingSignature;
+  final bool runtimeTypeUsedOnClosures;
+  final bool allNeedsTypeArguments;
 
-  JsClosureRtiNeed(
-      this.backendUsage,
-      this.rtiNeed,
-      this.localFunctionsNodesNeedingTypeArguments,
-      this.localFunctionsNodesNeedingSignature);
+  JsClosureRtiNeed(this.rtiNeed, this.localFunctionsNodesNeedingTypeArguments,
+      this.localFunctionsNodesNeedingSignature,
+      {this.runtimeTypeUsedOnClosures, this.allNeedsTypeArguments});
 
   @override
   bool localFunctionNeedsSignature(ir.Node node) {
     assert(node is ir.FunctionDeclaration || node is ir.FunctionExpression);
-    return backendUsage.isRuntimeTypeUsed
-        ? true
-        : localFunctionsNodesNeedingSignature.contains(node);
+    return runtimeTypeUsedOnClosures ||
+        localFunctionsNodesNeedingSignature.contains(node);
   }
 
   @override
@@ -884,9 +893,8 @@
   @override
   bool localFunctionNeedsTypeArguments(ir.Node node) {
     assert(node is ir.FunctionDeclaration || node is ir.FunctionExpression);
-    return backendUsage.isRuntimeTypeUsed
-        ? true
-        : localFunctionsNodesNeedingTypeArguments.contains(node);
+    return allNeedsTypeArguments ||
+        localFunctionsNodesNeedingTypeArguments.contains(node);
   }
 
   @override
diff --git a/pkg/compiler/lib/src/kernel/dart2js_target.dart b/pkg/compiler/lib/src/kernel/dart2js_target.dart
index 462ba79..71a8c15 100644
--- a/pkg/compiler/lib/src/kernel/dart2js_target.dart
+++ b/pkg/compiler/lib/src/kernel/dart2js_target.dart
@@ -4,12 +4,13 @@
 
 library compiler.src.kernel.dart2js_target;
 
-import 'package:kernel/kernel.dart';
+import 'package:kernel/ast.dart' as ir;
 import 'package:kernel/core_types.dart';
 import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/target/targets.dart';
 
 import '../native/native.dart' show maybeEnableNative;
+import '../universe/selector.dart';
 
 /// A kernel [Target] to configure the Dart Front End for dart2js.
 class Dart2jsTarget extends Target {
@@ -20,6 +21,8 @@
 
   bool get strongMode => flags.strongMode;
 
+  bool get enableNoSuchMethodForwarders => flags.strongMode;
+
   List<String> get extraRequiredLibraries => _requiredLibraries[name];
 
   @override
@@ -40,23 +43,56 @@
 
   @override
   void performModularTransformationsOnLibraries(
-      CoreTypes coreTypes, ClassHierarchy hierarchy, List<Library> libraries,
+      CoreTypes coreTypes, ClassHierarchy hierarchy, List<ir.Library> libraries,
       {void logger(String msg)}) {}
 
   @override
-  void performGlobalTransformations(CoreTypes coreTypes, Component component,
+  void performGlobalTransformations(CoreTypes coreTypes, ir.Component component,
       {void logger(String msg)}) {}
 
   @override
-  Expression instantiateInvocation(CoreTypes coreTypes, Expression receiver,
-      String name, Arguments arguments, int offset, bool isSuper) {
-    // TODO(sigmund): implement;
-    return new InvalidExpression(null);
+  ir.Expression instantiateInvocation(
+      CoreTypes coreTypes,
+      ir.Expression receiver,
+      String name,
+      ir.Arguments arguments,
+      int offset,
+      bool isSuper) {
+    int kind;
+    if (name.startsWith('get:')) {
+      kind = Selector.invocationMirrorGetterKind;
+      name = name.substring(4);
+    } else if (name.startsWith('set:')) {
+      kind = Selector.invocationMirrorSetterKind;
+      name = name.substring(4);
+    } else {
+      kind = Selector.invocationMirrorMethodKind;
+    }
+    return new ir.StaticInvocation(
+        coreTypes.index
+            .getTopLevelMember('dart:core', '_createInvocationMirror'),
+        new ir.Arguments(<ir.Expression>[
+          new ir.StringLiteral(name)..fileOffset = offset,
+          new ir.ListLiteral(
+              arguments.types.map((t) => new ir.TypeLiteral(t)).toList()),
+          new ir.ListLiteral(arguments.positional)..fileOffset = offset,
+          new ir.MapLiteral(new List<ir.MapEntry>.from(
+              arguments.named.map((ir.NamedExpression arg) {
+            return new ir.MapEntry(
+                new ir.StringLiteral(arg.name)..fileOffset = arg.fileOffset,
+                arg.value)
+              ..fileOffset = arg.fileOffset;
+          })), keyType: coreTypes.stringClass.rawType)
+            ..isConst = (arguments.named.length == 0)
+            ..fileOffset = arguments.fileOffset,
+          new ir.IntLiteral(kind)..fileOffset = offset,
+        ]))
+      ..fileOffset = offset;
   }
 
   @override
-  Expression instantiateNoSuchMethodError(CoreTypes coreTypes,
-      Expression receiver, String name, Arguments arguments, int offset,
+  ir.Expression instantiateNoSuchMethodError(CoreTypes coreTypes,
+      ir.Expression receiver, String name, ir.Arguments arguments, int offset,
       {bool isMethod: false,
       bool isGetter: false,
       bool isSetter: false,
@@ -68,7 +104,7 @@
       bool isConstructor: false,
       bool isTopLevel: false}) {
     // TODO(sigmund): implement;
-    return new InvalidExpression(null);
+    return new ir.InvalidExpression(null);
   }
 }
 
diff --git a/pkg/compiler/lib/src/kernel/element_map.dart b/pkg/compiler/lib/src/kernel/element_map.dart
index 128db95..7be52d1 100644
--- a/pkg/compiler/lib/src/kernel/element_map.dart
+++ b/pkg/compiler/lib/src/kernel/element_map.dart
@@ -93,8 +93,11 @@
   /// Returns the [Name] corresponding to [name].
   Name getName(ir.Name name);
 
-  /// Return `true` if [node] is the `dart:_foreign_helper` library.
-  bool isForeignLibrary(ir.Library node);
+  /// Return `true` if [member] is a "foreign helper", that is, a member whose
+  /// semantics is defined synthetically and not through Dart code.
+  ///
+  /// Most foreign helpers are located in the `dart:_foreign_helper` library.
+  bool isForeignHelper(MemberEntity member);
 
   /// Computes the [native.NativeBehavior] for a call to the [JS] function.
   native.NativeBehavior getNativeBehaviorForJsCall(ir.StaticInvocation node);
@@ -563,3 +566,52 @@
           "Async marker ${node.asyncMarker} is not supported.");
   }
 }
+
+/// Kernel encodes a null-aware expression `a?.b` as
+///
+///     let final #1 = a in #1 == null ? null : #1.b
+///
+/// [getNullAwareExpression] recognizes such expressions storing the result in
+/// a [NullAwareExpression] object.
+///
+/// [syntheticVariable] holds the synthesized `#1` variable. [expression] holds
+/// the `#1.b` expression. [receiver] returns `a` expression. [parent] returns
+/// the parent of the let node, i.e. the parent node of the original null-aware
+/// expression. [let] returns the let node created for the encoding.
+class NullAwareExpression {
+  final ir.VariableDeclaration syntheticVariable;
+  final ir.Expression expression;
+
+  NullAwareExpression(this.syntheticVariable, this.expression);
+
+  ir.Expression get receiver => syntheticVariable.initializer;
+
+  ir.TreeNode get parent => syntheticVariable.parent.parent;
+
+  ir.Let get let => syntheticVariable.parent;
+
+  String toString() => let.toString();
+}
+
+NullAwareExpression getNullAwareExpression(ir.TreeNode node) {
+  if (node is ir.Let) {
+    ir.Expression body = node.body;
+    if (node.variable.name == null &&
+        node.variable.isFinal &&
+        body is ir.ConditionalExpression &&
+        body.condition is ir.MethodInvocation &&
+        body.then is ir.NullLiteral) {
+      ir.MethodInvocation invocation = body.condition;
+      ir.Expression receiver = invocation.receiver;
+      if (invocation.name.name == '==' &&
+          receiver is ir.VariableGet &&
+          receiver.variable == node.variable &&
+          invocation.arguments.positional.single is ir.NullLiteral) {
+        // We have
+        //   let #t1 = e0 in #t1 == null ? null : e1
+        return new NullAwareExpression(node.variable, body.otherwise);
+      }
+    }
+  }
+  return null;
+}
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index e66871d..b2584d4 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -37,7 +37,6 @@
 import '../js_model/closure.dart';
 import '../js_model/elements.dart';
 import '../js_model/locals.dart';
-import '../native/enqueue.dart';
 import '../native/native.dart' as native;
 import '../native/resolver.dart';
 import '../options.dart';
@@ -1975,48 +1974,6 @@
   bool get enableAssertions => _elementMap.options.enableUserAssertions;
 }
 
-class KernelResolutionWorldBuilder extends KernelResolutionWorldBuilderBase {
-  final KernelToElementMapForImpactImpl elementMap;
-
-  KernelResolutionWorldBuilder(
-      CompilerOptions options,
-      this.elementMap,
-      NativeBasicData nativeBasicData,
-      NativeDataBuilder nativeDataBuilder,
-      InterceptorDataBuilder interceptorDataBuilder,
-      BackendUsageBuilder backendUsageBuilder,
-      RuntimeTypesNeedBuilder rtiNeedBuilder,
-      KAllocatorAnalysis allocatorAnalysis,
-      NativeResolutionEnqueuer nativeResolutionEnqueuer,
-      NoSuchMethodRegistry noSuchMethodRegistry,
-      SelectorConstraintsStrategy selectorConstraintsStrategy,
-      ClassHierarchyBuilder classHierarchyBuilder,
-      ClassQueries classQueries)
-      : super(
-            options,
-            elementMap.elementEnvironment,
-            elementMap.types,
-            elementMap.commonElements,
-            nativeBasicData,
-            nativeDataBuilder,
-            interceptorDataBuilder,
-            backendUsageBuilder,
-            rtiNeedBuilder,
-            allocatorAnalysis,
-            nativeResolutionEnqueuer,
-            noSuchMethodRegistry,
-            selectorConstraintsStrategy,
-            classHierarchyBuilder,
-            classQueries);
-
-  @override
-  void forEachLocalFunction(void f(MemberEntity member, Local localFunction)) {
-    for (KLocalFunction local in localFunctions) {
-      f(local.memberContext, local);
-    }
-  }
-}
-
 abstract class KernelClosedWorldMixin implements ClosedWorldBase {
   KernelToElementMapBase get elementMap;
 
@@ -2173,6 +2130,124 @@
     return _classSets[cls];
   }
 
+  // TODO(johnniwinther): Share the methods based on [ClassSet] and
+  // [ClassHierarchyNode] between KClosedWorld and JClosedWorld.
+  /// Returns `true` if [x] is a subtype of [y], that is, if [x] implements an
+  /// instance of [y].
+  bool isSubtypeOf(ClassEntity x, ClassEntity y) {
+    ClassSet classSet = _classSets[y];
+    assert(classSet != null,
+        failedAt(y, "No ClassSet for $y (${y.runtimeType}): ${_classSets}"));
+    ClassHierarchyNode classHierarchyNode = _classHierarchyNodes[x];
+    assert(classHierarchyNode != null,
+        failedAt(x, "No ClassHierarchyNode for $x"));
+    return classSet.hasSubtype(classHierarchyNode);
+  }
+
+  /// Returns an iterable over the directly instantiated that implement [cls]
+  /// possibly including [cls] itself, if it is live.
+  Iterable<ClassEntity> subtypesOf(ClassEntity cls) {
+    ClassSet classSet = _classSets[cls];
+    if (classSet == null) {
+      return const <ClassEntity>[];
+    } else {
+      return classSet
+          .subtypesByMask(ClassHierarchyNode.EXPLICITLY_INSTANTIATED);
+    }
+  }
+
+  /// Returns an iterable over the directly instantiated classes that extend
+  /// [cls] possibly including [cls] itself, if it is live.
+  Iterable<ClassEntity> subclassesOf(ClassEntity cls) {
+    ClassHierarchyNode hierarchy = _classHierarchyNodes[cls];
+    if (hierarchy == null) return const <ClassEntity>[];
+    return hierarchy
+        .subclassesByMask(ClassHierarchyNode.EXPLICITLY_INSTANTIATED);
+  }
+
+  /// Returns an iterable over the directly instantiated that implement [cls]
+  /// _not_ including [cls].
+  Iterable<ClassEntity> strictSubtypesOf(ClassEntity cls) {
+    ClassSet classSet = _classSets[cls];
+    if (classSet == null) {
+      return const <ClassEntity>[];
+    } else {
+      return classSet.subtypesByMask(ClassHierarchyNode.EXPLICITLY_INSTANTIATED,
+          strict: true);
+    }
+  }
+
+  Iterable<ClassEntity> getInterfaces(ClassEntity cls) {
+    return elementMap._getInterfaces(cls).map((t) => t.element);
+  }
+
+  ClassEntity getSuperClass(ClassEntity cls) {
+    return elementMap._getSuperType(cls)?.element;
+  }
+
+  /// Returns an iterable over the directly instantiated classes that extend
+  /// [cls] _not_ including [cls] itself.
+  Iterable<ClassEntity> strictSubclassesOf(ClassEntity cls) {
+    ClassHierarchyNode subclasses = _classHierarchyNodes[cls];
+    if (subclasses == null) return const <ClassEntity>[];
+    return subclasses.subclassesByMask(
+        ClassHierarchyNode.EXPLICITLY_INSTANTIATED,
+        strict: true);
+  }
+
+  Set<ClassEntity> _commonContainedClasses(ClassEntity cls1, ClassQuery query1,
+      ClassEntity cls2, ClassQuery query2) {
+    Iterable<ClassEntity> xSubset = _containedSubset(cls1, query1);
+    if (xSubset == null) return null;
+    Iterable<ClassEntity> ySubset = _containedSubset(cls2, query2);
+    if (ySubset == null) return null;
+    return xSubset.toSet().intersection(ySubset.toSet());
+  }
+
+  Iterable<ClassEntity> _containedSubset(ClassEntity cls, ClassQuery query) {
+    switch (query) {
+      case ClassQuery.EXACT:
+        return null;
+      case ClassQuery.SUBCLASS:
+        return strictSubclassesOf(cls);
+      case ClassQuery.SUBTYPE:
+        return strictSubtypesOf(cls);
+    }
+    throw new ArgumentError('Unexpected query: $query.');
+  }
+
+  Iterable<ClassEntity> commonSubclasses(ClassEntity cls1, ClassQuery query1,
+      ClassEntity cls2, ClassQuery query2) {
+    // TODO(johnniwinther): Use [ClassSet] to compute this.
+    // Compute the set of classes that are contained in both class subsets.
+    Set<ClassEntity> common =
+        _commonContainedClasses(cls1, query1, cls2, query2);
+    if (common == null || common.isEmpty) return const <ClassEntity>[];
+    // Narrow down the candidates by only looking at common classes
+    // that do not have a superclass or supertype that will be a
+    // better candidate.
+    return common.where((ClassEntity each) {
+      bool containsSuperclass = common.contains(getSuperClass(each));
+      // If the superclass is also a candidate, then we don't want to
+      // deal with this class. If we're only looking for a subclass we
+      // know we don't have to look at the list of interfaces because
+      // they can never be in the common set.
+      if (containsSuperclass ||
+          query1 == ClassQuery.SUBCLASS ||
+          query2 == ClassQuery.SUBCLASS) {
+        return !containsSuperclass;
+      }
+      // Run through the direct supertypes of the class. If the common
+      // set contains the direct supertype of the class, we ignore the
+      // the class because the supertype is a better candidate.
+
+      for (ClassEntity interface in getInterfaces(each)) {
+        if (common.contains(interface)) return false;
+      }
+      return true;
+    });
+  }
+
   /// Applies [f] to each live class that implements [cls] _not_ including [cls]
   /// itself.
   void forEachStrictSubtypeOf(
diff --git a/pkg/compiler/lib/src/kernel/element_map_mixins.dart b/pkg/compiler/lib/src/kernel/element_map_mixins.dart
index d8c74cc..88c8a8c 100644
--- a/pkg/compiler/lib/src/kernel/element_map_mixins.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_mixins.dart
@@ -104,9 +104,13 @@
     return new Selector.setter(name);
   }
 
-  /// Return `true` if [node] is the `dart:_foreign_helper` library.
-  bool isForeignLibrary(ir.Library node) {
-    return node.importUri == Uris.dart__foreign_helper;
+  /// Return `true` if [member] is a "foreign helper", that is, a member whose
+  /// semantics is defined synthetically and not through Dart code.
+  ///
+  /// Most foreign helpers are located in the `dart:_foreign_helper` library.
+  bool isForeignHelper(MemberEntity member) {
+    return member.library == commonElements.foreignLibrary ||
+        commonElements.isCreateInvocationMirrorHelper(member);
   }
 
   /// Looks up [typeName] for use in the spec-string of a `JS` call.
@@ -387,7 +391,7 @@
 
   /// Compute the kind of foreign helper function called by [node], if any.
   ForeignKind getForeignKind(ir.StaticInvocation node) {
-    if (isForeignLibrary(node.target.enclosingLibrary)) {
+    if (isForeignHelper(getMember(node.target))) {
       switch (node.target.name.name) {
         case JavaScriptBackend.JS:
           return ForeignKind.JS;
diff --git a/pkg/compiler/lib/src/kernel/env.dart b/pkg/compiler/lib/src/kernel/env.dart
index dcef78f..ec0511b 100644
--- a/pkg/compiler/lib/src/kernel/env.dart
+++ b/pkg/compiler/lib/src/kernel/env.dart
@@ -373,7 +373,8 @@
       }
     }
 
-    void addProcedures(ir.Class c, {bool includeStatic}) {
+    void addProcedures(ir.Class c,
+        {bool includeStatic, bool includeNoSuchMethodForwarders}) {
       for (ir.Procedure member in c.procedures) {
         if (member.isForwardingStub && member.isAbstract) {
           // Skip abstract forwarding stubs. These are never emitted but they
@@ -391,6 +392,9 @@
           continue;
         }
         if (!includeStatic && member.isStatic) continue;
+        if (!includeNoSuchMethodForwarders && member.isNoSuchMethodForwarder) {
+          continue;
+        }
         var name = member.name.name;
         assert(!name.contains('#'));
         if (member.kind == ir.ProcedureKind.Factory) {
@@ -424,13 +428,15 @@
     if (cls.mixedInClass != null) {
       elementMap.ensureClassMembers(cls.mixedInClass);
       addFields(cls.mixedInClass.mixin, includeStatic: false);
-      addProcedures(cls.mixedInClass.mixin, includeStatic: false);
+      addProcedures(cls.mixedInClass.mixin,
+          includeStatic: false, includeNoSuchMethodForwarders: false);
       mergeSort(members, compare: orderByFileOffset);
       mixinMemberCount = members.length;
     }
     addFields(cls, includeStatic: true);
     addConstructors(cls);
-    addProcedures(cls, includeStatic: true);
+    addProcedures(cls,
+        includeStatic: true, includeNoSuchMethodForwarders: true);
 
     if (isUnnamedMixinApplication && _constructorMap.isEmpty) {
       // Ensure that constructors are created for the superclass in case it
diff --git a/pkg/compiler/lib/src/kernel/kernel_strategy.dart b/pkg/compiler/lib/src/kernel/kernel_strategy.dart
index b595d81..19e2aa3 100644
--- a/pkg/compiler/lib/src/kernel/kernel_strategy.dart
+++ b/pkg/compiler/lib/src/kernel/kernel_strategy.dart
@@ -136,9 +136,12 @@
       SelectorConstraintsStrategy selectorConstraintsStrategy,
       ClassHierarchyBuilder classHierarchyBuilder,
       ClassQueries classQueries) {
-    return new KernelResolutionWorldBuilder(
+    return new ResolutionWorldBuilderImpl(
         _options,
         elementMap,
+        elementMap.elementEnvironment,
+        elementMap.types,
+        elementMap.commonElements,
         nativeBasicData,
         nativeDataBuilder,
         interceptorDataBuilder,
diff --git a/pkg/compiler/lib/src/kernel/runtime_type_analysis.dart b/pkg/compiler/lib/src/kernel/runtime_type_analysis.dart
new file mode 100644
index 0000000..096c9b2
--- /dev/null
+++ b/pkg/compiler/lib/src/kernel/runtime_type_analysis.dart
@@ -0,0 +1,310 @@
+// 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:kernel/ast.dart' as ir;
+
+import '../common/names.dart';
+import '../elements/types.dart';
+import '../kernel/element_map.dart';
+import '../universe/feature.dart';
+
+/// Computes the [RuntimeTypeUse] corresponding to the `e.runtimeType` [node].
+RuntimeTypeUse computeRuntimeTypeUse(
+    KernelToElementMapForImpact elementMap, ir.PropertyGet node) {
+  /// Returns `true` if [node] is of the form `e.runtimeType`.
+  bool isGetRuntimeType(ir.TreeNode node) {
+    return node is ir.PropertyGet && node.name.name == Identifiers.runtimeType_;
+  }
+
+  /// Returns [node] if [node] is of the form `e.runtimeType` and `null`
+  /// otherwise.
+  ir.PropertyGet asGetRuntimeType(ir.TreeNode node) {
+    return isGetRuntimeType(node) ? node : null;
+  }
+
+  /// Returns `true` if [node] is of the form `e.toString()`.
+  bool isInvokeToString(ir.TreeNode node) {
+    return node is ir.MethodInvocation && node.name.name == 'toString';
+  }
+
+  assert(isGetRuntimeType(node));
+
+  // TODO(johnniwinther): Special-case `this.runtimeType`.
+  ir.Expression receiver;
+  ir.Expression argument;
+  RuntimeTypeUseKind kind;
+
+  if (node.receiver is ir.VariableGet &&
+      node.parent is ir.ConditionalExpression &&
+      node.parent.parent is ir.Let) {
+    NullAwareExpression nullAware = getNullAwareExpression(node.parent.parent);
+    if (nullAware != null) {
+      // The node is of the form:
+      //
+      //     let #t1 = e in #t1 == null ? null : #t1.runtimeType
+      //                                             ^
+
+      if (nullAware.parent is ir.VariableDeclaration &&
+          nullAware.parent.parent is ir.Let) {
+        NullAwareExpression outer =
+            getNullAwareExpression(nullAware.parent.parent);
+        if (outer != null &&
+            outer.receiver == nullAware.let &&
+            isInvokeToString(outer.expression)) {
+          // Detected
+          //
+          //     e?.runtimeType?.toString()
+          //        ^
+          // encoded as
+          //
+          //     let #t2 = (let #t1 = e in #t1 == null ? null : #t1.runtimeType)
+          //                                                        ^
+          //        in #t2 == null ? null : #t2.toString()
+          //
+          kind = RuntimeTypeUseKind.string;
+          receiver = nullAware.receiver;
+        }
+      } else if (nullAware.parent is ir.MethodInvocation) {
+        ir.MethodInvocation methodInvocation = nullAware.parent;
+        if (methodInvocation.receiver == nullAware.let &&
+            methodInvocation.name.name == '==') {
+          // Detected
+          //
+          //  e0?.runtimeType == other
+          ir.PropertyGet otherGetRuntimeType =
+              asGetRuntimeType(methodInvocation.arguments.positional.first);
+          if (otherGetRuntimeType != null) {
+            // Detected
+            //
+            //     e0?.runtimeType == e1.runtimeType
+            //         ^
+            // encoded as
+            //
+            //     (let #t1 = e0 in #t1 == null ? null : #t1.runtimeType)
+            //                                               ^
+            //        .==(e1.runtimeType)
+            kind = RuntimeTypeUseKind.equals;
+            receiver = nullAware.receiver;
+            argument = otherGetRuntimeType.receiver;
+          }
+
+          NullAwareExpression otherNullAware = getNullAwareExpression(
+              methodInvocation.arguments.positional.first);
+          if (otherNullAware != null &&
+              isGetRuntimeType(otherNullAware.expression)) {
+            // Detected
+            //
+            //     e0?.runtimeType == e1?.runtimeType
+            //         ^
+            // encoded as
+            //
+            //     (let #t1 = e0 in #t1 == null ? null : #t1.runtimeType)
+            //                                               ^
+            //         .==(let #t2 = e1 in #t2 == null ? null : #t2.runtimeType)
+            //
+            kind = RuntimeTypeUseKind.equals;
+            receiver = nullAware.receiver;
+            argument = otherNullAware.receiver;
+          }
+        } else if (isInvokeToString(nullAware.parent)) {
+          // Detected
+          //
+          //     e?.runtimeType.toString()
+          //        ^
+          // encoded as
+          //
+          //     (let #t1 = e in #t1 == null ? null : #t1.runtimeType)
+          //                                          ^
+          //         .toString()
+          //
+          kind = RuntimeTypeUseKind.string;
+          receiver = nullAware.receiver;
+        }
+      } else if (nullAware.parent is ir.Arguments &&
+          nullAware.parent.parent is ir.MethodInvocation) {
+        ir.MethodInvocation methodInvocation = nullAware.parent.parent;
+        if (methodInvocation.name.name == '==' &&
+            methodInvocation.arguments.positional.first == nullAware.let) {
+          // [nullAware] is the right hand side of ==.
+
+          ir.PropertyGet otherGetRuntimeType =
+              asGetRuntimeType(methodInvocation.receiver);
+          NullAwareExpression otherNullAware =
+              getNullAwareExpression(methodInvocation.receiver);
+
+          if (otherGetRuntimeType != null) {
+            // Detected
+            //
+            //     e0.runtimeType == e1?.runtimeType
+            //                           ^
+            // encoded as
+            //
+            //     e0.runtimeType.==(
+            //         let #t1 = e1 in #t1 == null ? null : #t1.runtimeType)
+            //                                                  ^
+            kind = RuntimeTypeUseKind.equals;
+            receiver = otherGetRuntimeType.receiver;
+            argument = nullAware.receiver;
+          }
+
+          if (otherNullAware != null &&
+              isGetRuntimeType(otherNullAware.expression)) {
+            // Detected
+            //
+            //     e0?.runtimeType == e1?.runtimeType
+            //                            ^
+            // encoded as
+            //
+            //     (let #t1 = e0 in #t1 == null ? null : #t1.runtimeType)
+            //         .==(let #t2 = e1 in #t2 == null ? null : #t2.runtimeType)
+            //                                                      ^
+            kind = RuntimeTypeUseKind.equals;
+            receiver = otherNullAware.receiver;
+            argument = nullAware.receiver;
+          }
+        }
+      } else if (nullAware.parent is ir.StringConcatenation) {
+        // Detected
+        //
+        //     '${e?.runtimeType}'
+        //           ^
+        // encoded as
+        //
+        //     '${let #t1 = e in #t1 == null ? null : #t1.runtimeType}'
+        //                                                ^
+        kind = RuntimeTypeUseKind.string;
+        receiver = nullAware.receiver;
+      } else {
+        // Default to unknown
+        //
+        //     e?.runtimeType
+        //        ^
+        // encoded as
+        //
+        //     let #t1 = e in #t1 == null ? null : #t1.runtimeType
+        //                                         ^
+        kind = RuntimeTypeUseKind.unknown;
+        receiver = nullAware.receiver;
+      }
+    }
+  } else if (node.parent is ir.VariableDeclaration &&
+      node.parent.parent is ir.Let) {
+    NullAwareExpression nullAware = getNullAwareExpression(node.parent.parent);
+    if (nullAware != null && isInvokeToString(nullAware.expression)) {
+      // Detected
+      //
+      //     e.runtimeType?.toString()
+      //       ^
+      // encoded as
+      //
+      //     let #t1 = e.runtimeType in #t1 == null ? null : #t1.toString()
+      //                 ^
+      kind = RuntimeTypeUseKind.string;
+      receiver = node.receiver;
+    }
+  } else if (node.parent is ir.MethodInvocation) {
+    ir.MethodInvocation methodInvocation = node.parent;
+    if (methodInvocation.name.name == '==' &&
+        methodInvocation.receiver == node) {
+      // [node] is the left hand side of ==.
+
+      ir.PropertyGet otherGetRuntimeType =
+          asGetRuntimeType(methodInvocation.arguments.positional.first);
+      NullAwareExpression nullAware =
+          getNullAwareExpression(methodInvocation.arguments.positional.first);
+      if (otherGetRuntimeType != null) {
+        // Detected
+        //
+        //     e0.runtimeType == e1.runtimeType
+        //        ^
+        // encoded as
+        //
+        //     e0.runtimeType.==(e1.runtimeType)
+        //        ^
+        kind = RuntimeTypeUseKind.equals;
+        receiver = node.receiver;
+        argument = otherGetRuntimeType.receiver;
+      } else if (nullAware != null && isGetRuntimeType(nullAware.expression)) {
+        // Detected
+        //
+        //     e0.runtimeType == e1?.runtimeType
+        //        ^
+        // encoded as
+        //
+        //     e0.runtimeType.==(
+        //        ^
+        //         let #t1 = e1 in #t1 == null ? null : #t1.runtimeType)
+        kind = RuntimeTypeUseKind.equals;
+        receiver = node.receiver;
+        argument = nullAware.receiver;
+      }
+    } else if (isInvokeToString(node.parent)) {
+      // Detected
+      //
+      //     e.runtimeType.toString()
+      //       ^
+      kind = RuntimeTypeUseKind.string;
+      receiver = node.receiver;
+    }
+  } else if (node.parent is ir.Arguments &&
+      node.parent.parent is ir.MethodInvocation) {
+    ir.MethodInvocation methodInvocation = node.parent.parent;
+    if (methodInvocation.name.name == '==' &&
+        methodInvocation.arguments.positional.first == node) {
+      // [node] is the right hand side of ==.
+      ir.PropertyGet otherGetRuntimeType =
+          asGetRuntimeType(methodInvocation.receiver);
+      NullAwareExpression nullAware =
+          getNullAwareExpression(methodInvocation.receiver);
+
+      if (otherGetRuntimeType != null) {
+        // Detected
+        //
+        //     e0.runtimeType == e1.runtimeType
+        //                          ^
+        // encoded as
+        //
+        //     e0.runtimeType.==(e1.runtimeType)
+        //                          ^
+        kind = RuntimeTypeUseKind.equals;
+        receiver = otherGetRuntimeType.receiver;
+        argument = node.receiver;
+      } else if (nullAware != null && isGetRuntimeType(nullAware.expression)) {
+        // Detected
+        //
+        //     e0?.runtimeType == e1.runtimeType
+        //                           ^
+        // encoded as
+        //
+        //     (let #t1 = e0 in #t1 == null ? null : #t1.runtimeType)
+        //         .==(e1.runtimeType)
+        //                ^
+        kind = RuntimeTypeUseKind.equals;
+        receiver = nullAware.receiver;
+        argument = node.receiver;
+      }
+    }
+  } else if (node.parent is ir.StringConcatenation) {
+    // Detected
+    //
+    //     '${e.runtimeType}'
+    //          ^
+    kind = RuntimeTypeUseKind.string;
+    receiver = node.receiver;
+  }
+
+  if (kind == null) {
+    // Default to unknown
+    //
+    //     e.runtimeType
+    //       ^
+    kind = RuntimeTypeUseKind.unknown;
+    receiver = node.receiver;
+  }
+
+  DartType receiverType = elementMap.getStaticType(receiver);
+  DartType argumentType =
+      argument == null ? argument : elementMap.getStaticType(argument);
+  return new RuntimeTypeUse(kind, receiverType, argumentType);
+}
diff --git a/pkg/compiler/lib/src/options.dart b/pkg/compiler/lib/src/options.dart
index cea1634..866d70c 100644
--- a/pkg/compiler/lib/src/options.dart
+++ b/pkg/compiler/lib/src/options.dart
@@ -208,6 +208,10 @@
   /// Whether to omit implicit strong mode checks.
   bool omitImplicitChecks = false;
 
+  /// Whether to omit class type arguments only needed for `toString` on
+  /// `RuntimeType`.
+  bool laxRuntimeTypeToString = false;
+
   /// What should the compiler do with type assertions of assignments.
   ///
   /// This is an internal configuration option derived from other flags.
@@ -227,7 +231,7 @@
   bool useContentSecurityPolicy = false;
 
   /// Enables strong mode in dart2js.
-  bool strongMode = false;
+  bool strongMode = true;
 
   /// When obfuscating for minification, whether to use the frequency of a name
   /// as an heuristic to pick shorter names.
@@ -321,8 +325,11 @@
       ..platformBinaries =
           platformBinaries ?? _extractUriOption(options, '--platform-binaries=')
       ..sourceMapUri = _extractUriOption(options, '--source-map=')
-      ..strongMode = _hasOption(options, Flags.strongMode)
+      ..strongMode = _hasOption(options, Flags.strongMode) ||
+          !_hasOption(options, Flags.noPreviewDart2)
       ..omitImplicitChecks = _hasOption(options, Flags.omitImplicitChecks)
+      ..laxRuntimeTypeToString =
+          _hasOption(options, Flags.laxRuntimeTypeToString)
       ..testMode = _hasOption(options, Flags.testMode)
       ..trustJSInteropTypeAnnotations =
           _hasOption(options, Flags.trustJSInteropTypeAnnotations)
diff --git a/pkg/compiler/lib/src/resolution/registry.dart b/pkg/compiler/lib/src/resolution/registry.dart
index ecdf526..b8f4879 100644
--- a/pkg/compiler/lib/src/resolution/registry.dart
+++ b/pkg/compiler/lib/src/resolution/registry.dart
@@ -22,6 +22,7 @@
   Setlet<ConstantExpression> _constantLiterals;
   Setlet<dynamic> _nativeData;
   Setlet<ClassEntity> _seenClasses;
+  Set<RuntimeTypeUse> _runtimeTypeUses;
   Set<GenericInstantiation> _genericInstantiations;
 
   ResolutionWorldImpactBuilder(this.name);
@@ -51,6 +52,19 @@
     return _listLiterals != null ? _listLiterals : const <ListLiteralUse>[];
   }
 
+  void registerRuntimeTypeUse(RuntimeTypeUse runtimeTypeUse) {
+    assert(runtimeTypeUse != null);
+    _runtimeTypeUses ??= new Setlet<RuntimeTypeUse>();
+    _runtimeTypeUses.add(runtimeTypeUse);
+  }
+
+  @override
+  Iterable<RuntimeTypeUse> get runtimeTypeUses {
+    return _runtimeTypeUses != null
+        ? _runtimeTypeUses
+        : const <RuntimeTypeUse>[];
+  }
+
   void registerConstSymbolName(String name) {
     _constSymbolNames ??= new Setlet<String>();
     _constSymbolNames.add(name);
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index 2ad67c8..fb04063 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -19,6 +19,7 @@
 import '../dump_info.dart';
 import '../elements/entities.dart';
 import '../elements/jumps.dart';
+import '../elements/names.dart';
 import '../elements/types.dart';
 import '../io/source_information.dart';
 import '../js/js.dart' as js;
@@ -3280,11 +3281,11 @@
     ir.Procedure target = node.target;
     SourceInformation sourceInformation =
         _sourceInformationBuilder.buildCall(node, node);
-    if (_elementMap.isForeignLibrary(target.enclosingLibrary)) {
-      handleInvokeStaticForeign(node, target);
+    FunctionEntity function = _elementMap.getMember(target);
+    if (_elementMap.isForeignHelper(function)) {
+      handleInvokeStaticForeign(node, function);
       return;
     }
-    FunctionEntity function = _elementMap.getMember(target);
 
     if (options.strongMode &&
         function == _commonElements.extractTypeArguments &&
@@ -3558,8 +3559,8 @@
   }
 
   void handleInvokeStaticForeign(
-      ir.StaticInvocation invocation, ir.Procedure target) {
-    String name = target.name.name;
+      ir.StaticInvocation invocation, MemberEntity member) {
+    String name = member.name;
     if (name == 'JS') {
       handleForeignJs(invocation);
     } else if (name == 'DART_CLOSURE_TO_JS') {
@@ -3584,6 +3585,8 @@
       handleJsInterceptorConstant(invocation);
     } else if (name == 'JS_STRING_CONCAT') {
       handleJsStringConcat(invocation);
+    } else if (name == '_createInvocationMirror') {
+      _handleCreateInvocationMirror(invocation);
     } else {
       reporter.internalError(
           _elementMap.getSpannable(targetElement, invocation),
@@ -3591,6 +3594,114 @@
     }
   }
 
+  void _handleCreateInvocationMirror(ir.StaticInvocation invocation) {
+    ir.StringLiteral nameLiteral = invocation.arguments.positional[0];
+    String name = nameLiteral.value;
+
+    ir.ListLiteral typeArgumentsLiteral = invocation.arguments.positional[1];
+    List<DartType> typeArguments =
+        typeArgumentsLiteral.expressions.map((ir.Expression expression) {
+      ir.TypeLiteral typeLiteral = expression;
+      return _elementMap.getDartType(typeLiteral.type);
+    }).toList();
+
+    ir.ListLiteral positionalArgumentsLiteral =
+        invocation.arguments.positional[2];
+    ir.MapLiteral namedArgumentsLiteral = invocation.arguments.positional[3];
+    ir.IntLiteral kindLiteral = invocation.arguments.positional[4];
+
+    Name memberName = new Name(name, _currentFrame.member.library);
+    Selector selector;
+    switch (kindLiteral.value) {
+      case Selector.invocationMirrorGetterKind:
+        selector = new Selector.getter(memberName);
+        break;
+      case Selector.invocationMirrorSetterKind:
+        selector = new Selector.setter(memberName);
+        break;
+      case Selector.invocationMirrorMethodKind:
+        if (memberName == Names.INDEX_NAME) {
+          selector = new Selector.index();
+        } else if (memberName == Names.INDEX_SET_NAME) {
+          selector = new Selector.indexSet();
+        } else {
+          CallStructure callStructure = new CallStructure(
+              positionalArgumentsLiteral.expressions.length,
+              namedArgumentsLiteral.entries.map<String>((ir.MapEntry entry) {
+                ir.StringLiteral key = entry.key;
+                return key.value;
+              }).toList(),
+              typeArguments.length);
+          if (Selector.isOperatorName(name)) {
+            selector =
+                new Selector(SelectorKind.OPERATOR, memberName, callStructure);
+          } else {
+            selector = new Selector.call(memberName, callStructure);
+          }
+        }
+        break;
+    }
+
+    HConstant nameConstant = graph.addConstant(
+        closedWorld.constantSystem
+            .createSymbol(closedWorld.commonElements, name),
+        closedWorld);
+
+    List<HInstruction> arguments = <HInstruction>[];
+    for (ir.Expression argument in positionalArgumentsLiteral.expressions) {
+      argument.accept(this);
+      arguments.add(pop());
+    }
+    if (namedArgumentsLiteral.entries.isNotEmpty) {
+      Map<String, HInstruction> namedValues = <String, HInstruction>{};
+      for (ir.MapEntry entry in namedArgumentsLiteral.entries) {
+        ir.StringLiteral key = entry.key;
+        String name = key.value;
+        entry.value.accept(this);
+        namedValues[name] = pop();
+      }
+      for (String name in selector.callStructure.getOrderedNamedArguments()) {
+        arguments.add(namedValues[name]);
+      }
+    }
+
+    _addTypeArguments(arguments, typeArguments,
+        _sourceInformationBuilder.buildCall(invocation, invocation));
+
+    HInstruction argumentsInstruction = buildLiteralList(arguments);
+    add(argumentsInstruction);
+
+    List<HInstruction> argumentNames = <HInstruction>[];
+    for (String argumentName in selector.namedArguments) {
+      ConstantValue argumentNameConstant =
+          constantSystem.createString(argumentName);
+      argumentNames.add(graph.addConstant(argumentNameConstant, closedWorld));
+    }
+    HInstruction argumentNamesInstruction = buildLiteralList(argumentNames);
+    add(argumentNamesInstruction);
+
+    HInstruction typeArgumentCount =
+        graph.addConstantInt(typeArguments.length, closedWorld);
+
+    js.Name internalName = namer.invocationName(selector);
+
+    ConstantValue kindConstant =
+        constantSystem.createIntFromInt(selector.invocationMirrorKind);
+
+    _pushStaticInvocation(
+        _commonElements.createUnmangledInvocationMirror,
+        [
+          nameConstant,
+          graph.addConstantStringFromName(internalName, closedWorld),
+          graph.addConstant(kindConstant, closedWorld),
+          argumentsInstruction,
+          argumentNamesInstruction,
+          typeArgumentCount,
+        ],
+        abstractValueDomain.dynamicType,
+        const <DartType>[]);
+  }
+
   bool _unexpectedForeignArguments(ir.StaticInvocation invocation,
       {int minPositional, int maxPositional, int typeArgumentCount = 0}) {
     String pluralizeArguments(int count, [String adjective = '']) {
diff --git a/pkg/compiler/lib/src/ssa/kernel_impact.dart b/pkg/compiler/lib/src/ssa/kernel_impact.dart
index 0c3846e..b5cd0b2 100644
--- a/pkg/compiler/lib/src/ssa/kernel_impact.dart
+++ b/pkg/compiler/lib/src/ssa/kernel_impact.dart
@@ -13,6 +13,7 @@
 import '../elements/entities.dart';
 import '../elements/types.dart';
 import '../kernel/element_map.dart';
+import '../kernel/runtime_type_analysis.dart';
 import '../options.dart';
 import '../resolution/registry.dart' show ResolutionWorldImpactBuilder;
 import '../universe/call_structure.dart';
@@ -141,9 +142,8 @@
     handleSignature(constructor.function, checkReturnType: false);
     visitNodes(constructor.initializers);
     visitNode(constructor.function.body);
-    if (constructor.isExternal &&
-        !elementMap.isForeignLibrary(constructor.enclosingLibrary)) {
-      MemberEntity member = elementMap.getMember(constructor);
+    MemberEntity member = elementMap.getMember(constructor);
+    if (constructor.isExternal && !elementMap.isForeignHelper(member)) {
       bool isJsInterop = elementMap.nativeBasicData.isJsInteropMember(member);
       impactBuilder.registerNativeData(elementMap
           .getNativeBehaviorForMethod(constructor, isJsInterop: isJsInterop));
@@ -197,9 +197,8 @@
     handleSignature(procedure.function);
     visitNode(procedure.function.body);
     handleAsyncMarker(procedure.function);
-    if (procedure.isExternal &&
-        !elementMap.isForeignLibrary(procedure.enclosingLibrary)) {
-      MemberEntity member = elementMap.getMember(procedure);
+    MemberEntity member = elementMap.getMember(procedure);
+    if (procedure.isExternal && !elementMap.isForeignHelper(member)) {
       bool isJsInterop = elementMap.nativeBasicData.isJsInteropMember(member);
       impactBuilder.registerNativeData(elementMap
           .getNativeBehaviorForMethod(procedure, isJsInterop: isJsInterop));
@@ -651,6 +650,16 @@
     impactBuilder.registerDynamicUse(new ConstrainedDynamicUse(
         new Selector.getter(elementMap.getName(node.name)),
         constraint, const <DartType>[]));
+
+    if (node.name.name == Identifiers.runtimeType_) {
+      if (_options.strongMode) {
+        RuntimeTypeUse runtimeTypeUse = computeRuntimeTypeUse(elementMap, node);
+        impactBuilder.registerRuntimeTypeUse(runtimeTypeUse);
+      } else {
+        impactBuilder.registerRuntimeTypeUse(new RuntimeTypeUse(
+            RuntimeTypeUseKind.unknown, const DynamicType(), null));
+      }
+    }
   }
 
   @override
diff --git a/pkg/compiler/lib/src/ssa/nodes.dart b/pkg/compiler/lib/src/ssa/nodes.dart
index 2258231..4451c74 100644
--- a/pkg/compiler/lib/src/ssa/nodes.dart
+++ b/pkg/compiler/lib/src/ssa/nodes.dart
@@ -978,7 +978,7 @@
   HInstruction(this.inputs, this.instructionType)
       : id = idCounter++,
         usedBy = <HInstruction>[] {
-    assert(inputs.every((e) => e != null));
+    assert(inputs.every((e) => e != null), "inputs: $inputs");
   }
 
   int get hashCode => id;
diff --git a/pkg/compiler/lib/src/ssa/optimize.dart b/pkg/compiler/lib/src/ssa/optimize.dart
index bc0ea62..cd71861 100644
--- a/pkg/compiler/lib/src/ssa/optimize.dart
+++ b/pkg/compiler/lib/src/ssa/optimize.dart
@@ -424,7 +424,8 @@
         } else if (applies(commonElements.jsArrayAdd)) {
           // The codegen special cases array calls, but does not
           // inline argument type checks.
-          if (!_options.enableTypeAssertions) {
+          if (!_options.parameterCheckPolicy.isEmitted ||
+              input is HLiteralList) {
             target = commonElements.jsArrayAdd;
           }
         }
diff --git a/pkg/compiler/lib/src/universe/codegen_world_builder.dart b/pkg/compiler/lib/src/universe/codegen_world_builder.dart
index bd9dca0..b0f526e 100644
--- a/pkg/compiler/lib/src/universe/codegen_world_builder.dart
+++ b/pkg/compiler/lib/src/universe/codegen_world_builder.dart
@@ -79,7 +79,7 @@
       [Comparator<ConstantValue> preSortCompare]);
 }
 
-abstract class CodegenWorldBuilderImpl extends WorldBuilderBase
+class CodegenWorldBuilderImpl extends WorldBuilderBase
     implements CodegenWorldBuilder {
   final ElementEnvironment _elementEnvironment;
   final NativeBasicData _nativeBasicData;
@@ -159,8 +159,16 @@
 
   final Set<ConstantValue> _constantValues = new Set<ConstantValue>();
 
-  CodegenWorldBuilderImpl(this._elementEnvironment, this._nativeBasicData,
-      this._world, this.selectorConstraintsStrategy);
+  final KernelToWorldBuilder _elementMap;
+  final GlobalLocalsMap _globalLocalsMap;
+
+  CodegenWorldBuilderImpl(
+      this._elementMap,
+      this._globalLocalsMap,
+      this._elementEnvironment,
+      this._nativeBasicData,
+      this._world,
+      this.selectorConstraintsStrategy);
 
   Iterable<ClassEntity> get processedClasses => _processedClasses.keys
       .where((cls) => _processedClasses[cls].isInstantiated);
@@ -636,21 +644,6 @@
     _staticMemberUsage.forEach(processMemberUse);
     return functions;
   }
-}
-
-class KernelCodegenWorldBuilder extends CodegenWorldBuilderImpl {
-  final KernelToWorldBuilder _elementMap;
-  final GlobalLocalsMap _globalLocalsMap;
-
-  KernelCodegenWorldBuilder(
-      this._elementMap,
-      this._globalLocalsMap,
-      ElementEnvironment elementEnvironment,
-      NativeBasicData nativeBasicData,
-      JClosedWorld world,
-      SelectorConstraintsStrategy selectorConstraintsStrategy)
-      : super(elementEnvironment, nativeBasicData, world,
-            selectorConstraintsStrategy);
 
   @override
   bool hasConstantFieldInitializer(FieldEntity field) {
diff --git a/pkg/compiler/lib/src/universe/feature.dart b/pkg/compiler/lib/src/universe/feature.dart
index 3d4f018..f854843 100644
--- a/pkg/compiler/lib/src/universe/feature.dart
+++ b/pkg/compiler/lib/src/universe/feature.dart
@@ -8,7 +8,7 @@
 /// compilation pipeline, for example during resolution.
 library compiler.universe.feature;
 
-import '../elements/types.dart' show DartType, InterfaceType;
+import '../elements/types.dart';
 import '../util/util.dart';
 
 /// A language feature that may be seen in the program.
@@ -148,6 +148,73 @@
   }
 }
 
+/// Enum for recognized use kinds of `Object.runtimeType`.
+enum RuntimeTypeUseKind {
+  /// Unknown use of `Object.runtimeType`. This is the fallback value if the
+  /// usage didn't match any of the recogized patterns.
+  unknown,
+
+  /// `Object.runtimeType` used in a pattern like
+  /// `a.runtimeType == b.runtimeType`.
+  equals,
+
+  /// `Object.runtimeType` used in a pattern like `'${e.runtimeType}'` or
+  /// `e.runtimeType.toString()`.
+  string,
+}
+
+/// A use of `Object.runtimeType`.
+class RuntimeTypeUse {
+  /// The use kind of `Object.runtimeType`.
+  final RuntimeTypeUseKind kind;
+
+  /// The static type of the receiver.
+  final DartType receiverType;
+
+  /// The static type of the argument if [kind] is `RuntimeTypeUseKind.equals`.
+  final DartType argumentType;
+
+  RuntimeTypeUse(this.kind, this.receiverType, this.argumentType);
+
+  int get hashCode =>
+      kind.hashCode * 13 +
+      receiverType.hashCode * 17 +
+      argumentType.hashCode * 19;
+
+  bool operator ==(other) {
+    if (identical(this, other)) return true;
+    if (other is! RuntimeTypeUse) return false;
+    return kind == other.kind &&
+        receiverType == other.receiverType &&
+        argumentType == other.argumentType;
+  }
+
+  /// Short textual representation use for testing.
+  String get shortText {
+    StringBuffer sb = new StringBuffer();
+    switch (kind) {
+      case RuntimeTypeUseKind.string:
+        sb.write('string:');
+        sb.write(receiverType);
+        break;
+      case RuntimeTypeUseKind.equals:
+        sb.write('equals:');
+        sb.write(receiverType);
+        sb.write('/');
+        sb.write(argumentType);
+        break;
+      case RuntimeTypeUseKind.unknown:
+        sb.write('unknown:');
+        sb.write(receiverType);
+        break;
+    }
+    return sb.toString();
+  }
+
+  String toString() => 'RuntimeTypeUse(kind=$kind,receiver=$receiverType'
+      ',argument=$argumentType)';
+}
+
 /// A generic instantiation of an expression of type [functionType] with the
 /// given [typeArguments].
 class GenericInstantiation {
diff --git a/pkg/compiler/lib/src/universe/resolution_world_builder.dart b/pkg/compiler/lib/src/universe/resolution_world_builder.dart
index 726dc05..b472c00 100644
--- a/pkg/compiler/lib/src/universe/resolution_world_builder.dart
+++ b/pkg/compiler/lib/src/universe/resolution_world_builder.dart
@@ -267,8 +267,8 @@
   }
 }
 
-/// Base implementation of [ResolutionEnqueuerWorldBuilder].
-abstract class ResolutionWorldBuilderBase extends WorldBuilderBase
+/// Implementation of [ResolutionEnqueuerWorldBuilder].
+class ResolutionWorldBuilderImpl extends WorldBuilderBase
     implements ResolutionEnqueuerWorldBuilder {
   /// Instantiation information for all classes with instantiated types.
   ///
@@ -373,9 +373,9 @@
   final NativeResolutionEnqueuer _nativeResolutionEnqueuer;
   final NoSuchMethodRegistry _noSuchMethodRegistry;
 
-  final SelectorConstraintsStrategy selectorConstraintsStrategy;
-  final ClassHierarchyBuilder classHierarchyBuilder;
-  final ClassQueries classQueries;
+  final SelectorConstraintsStrategy _selectorConstraintsStrategy;
+  final ClassHierarchyBuilder _classHierarchyBuilder;
+  final ClassQueries _classQueries;
 
   bool hasRuntimeTypeSupport = false;
   bool hasFunctionApplySupport = false;
@@ -392,8 +392,11 @@
 
   bool get isClosed => _closed;
 
-  ResolutionWorldBuilderBase(
+  final KernelToElementMapForImpactImpl _elementMap;
+
+  ResolutionWorldBuilderImpl(
       this._options,
+      this._elementMap,
       this._elementEnvironment,
       this._dartTypes,
       this._commonElements,
@@ -405,9 +408,9 @@
       this._allocatorAnalysis,
       this._nativeResolutionEnqueuer,
       this._noSuchMethodRegistry,
-      this.selectorConstraintsStrategy,
-      this.classHierarchyBuilder,
-      this.classQueries);
+      this._selectorConstraintsStrategy,
+      this._classHierarchyBuilder,
+      this._classQueries);
 
   Iterable<ClassEntity> get processedClasses => _processedClasses.keys
       .where((cls) => _processedClasses[cls].isInstantiated);
@@ -535,7 +538,7 @@
         isRedirection: isRedirection);
     if (kind != Instantiation.UNINSTANTIATED) {
       if (_options.strongMode) {
-        classHierarchyBuilder.updateClassHierarchyNodeForClass(cls,
+        _classHierarchyBuilder.updateClassHierarchyNodeForClass(cls,
             directlyInstantiated: info.isDirectlyInstantiated,
             abstractlyInstantiated: info.isAbstractlyInstantiated);
       }
@@ -600,7 +603,7 @@
     void _process(Map<String, Set<_MemberUsage>> memberMap,
         EnumSet<MemberUse> action(_MemberUsage usage)) {
       _processSet(memberMap, methodName, (_MemberUsage usage) {
-        if (selectorConstraintsStrategy.appliedUnnamed(
+        if (_selectorConstraintsStrategy.appliedUnnamed(
             dynamicUse, usage.entity, this)) {
           memberUsed(usage.entity, action(usage));
           return true;
@@ -640,7 +643,7 @@
         name, () => new Maplet<Selector, SelectorConstraints>());
     UniverseSelectorConstraints constraints =
         selectors.putIfAbsent(selector, () {
-      return selectorConstraintsStrategy.createSelectorConstraints(selector);
+      return _selectorConstraintsStrategy.createSelectorConstraints(selector);
     });
     return constraints.addReceiverConstraint(constraint);
   }
@@ -883,7 +886,7 @@
 
   /// Returns an iterable over all mixin applications that mixin [cls].
   Iterable<ClassEntity> allMixinUsesOf(ClassEntity cls) {
-    Iterable<ClassEntity> uses = classHierarchyBuilder.mixinUses[cls];
+    Iterable<ClassEntity> uses = _classHierarchyBuilder.mixinUses[cls];
     return uses != null ? uses : const <ClassEntity>[];
   }
 
@@ -909,26 +912,26 @@
       if (!info.hasInstantiation) {
         return;
       }
-      assert(classQueries.checkClass(cls));
-      if (!classQueries.validateClass(cls)) {
+      assert(_classQueries.checkClass(cls));
+      if (!_classQueries.validateClass(cls)) {
         failedAt(cls, 'Class "${cls.name}" is not resolved.');
       }
 
-      classHierarchyBuilder.updateClassHierarchyNodeForClass(cls,
+      _classHierarchyBuilder.updateClassHierarchyNodeForClass(cls,
           directlyInstantiated: info.isDirectlyInstantiated,
           abstractlyInstantiated: info.isAbstractlyInstantiated);
 
       // Walk through the superclasses, and record the types
       // implemented by that type on the superclasses.
-      ClassEntity superclass = classQueries.getSuperClass(cls);
+      ClassEntity superclass = _classQueries.getSuperClass(cls);
       while (superclass != null) {
         Set<ClassEntity> typesImplementedBySubclassesOfCls =
             typesImplementedBySubclasses.putIfAbsent(
                 superclass, () => new Set<ClassEntity>());
-        for (InterfaceType current in classQueries.getSupertypes(cls)) {
+        for (InterfaceType current in _classQueries.getSupertypes(cls)) {
           typesImplementedBySubclassesOfCls.add(current.element);
         }
-        superclass = classQueries.getSuperClass(superclass);
+        superclass = _classQueries.getSuperClass(superclass);
       }
     }
 
@@ -953,15 +956,15 @@
   }
 
   void registerClass(ClassEntity cls) {
-    classHierarchyBuilder.registerClass(cls);
+    _classHierarchyBuilder.registerClass(cls);
   }
 
   bool isInheritedInSubtypeOf(MemberEntity member, ClassEntity type) {
     // TODO(johnniwinther): Use the [member] itself to avoid enqueueing members
     // that are overridden.
-    classHierarchyBuilder.registerClass(member.enclosingClass);
-    classHierarchyBuilder.registerClass(type);
-    return classHierarchyBuilder.isInheritedInSubtypeOf(
+    _classHierarchyBuilder.registerClass(member.enclosingClass);
+    _classHierarchyBuilder.registerClass(type);
+    return _classHierarchyBuilder.isInheritedInSubtypeOf(
         member.enclosingClass, type);
   }
 
@@ -980,44 +983,6 @@
     _memberUsage.forEach(processMemberUse);
     return functions;
   }
-}
-
-abstract class KernelResolutionWorldBuilderBase
-    extends ResolutionWorldBuilderBase {
-  KernelToElementMapForImpactImpl get elementMap;
-
-  KernelResolutionWorldBuilderBase(
-      CompilerOptions options,
-      ElementEnvironment elementEnvironment,
-      DartTypes dartTypes,
-      CommonElements commonElements,
-      NativeBasicData nativeBasicData,
-      NativeDataBuilder nativeDataBuilder,
-      InterceptorDataBuilder interceptorDataBuilder,
-      BackendUsageBuilder backendUsageBuilder,
-      RuntimeTypesNeedBuilder rtiNeedBuilder,
-      KAllocatorAnalysis allocatorAnalysis,
-      NativeResolutionEnqueuer nativeResolutionEnqueuer,
-      NoSuchMethodRegistry noSuchMethodRegistry,
-      SelectorConstraintsStrategy selectorConstraintsStrategy,
-      ClassHierarchyBuilder classHierarchyBuilder,
-      ClassQueries classQueries)
-      : super(
-            options,
-            elementEnvironment,
-            dartTypes,
-            commonElements,
-            nativeBasicData,
-            nativeDataBuilder,
-            interceptorDataBuilder,
-            backendUsageBuilder,
-            rtiNeedBuilder,
-            allocatorAnalysis,
-            nativeResolutionEnqueuer,
-            noSuchMethodRegistry,
-            selectorConstraintsStrategy,
-            classHierarchyBuilder,
-            classQueries);
 
   @override
   KClosedWorld closeWorld() {
@@ -1025,18 +990,19 @@
         populateHierarchyNodes();
 
     var backendUsage = _backendUsageBuilder.close();
-    backendUsage.helperClassesUsed.forEach(classHierarchyBuilder.registerClass);
+    backendUsage.helperClassesUsed
+        .forEach(_classHierarchyBuilder.registerClass);
     _nativeResolutionEnqueuer.liveNativeClasses
-        .forEach(classHierarchyBuilder.registerClass);
+        .forEach(_classHierarchyBuilder.registerClass);
 
     _closed = true;
     assert(
-        classHierarchyBuilder.classHierarchyNodes.length ==
-            classHierarchyBuilder.classSets.length,
+        _classHierarchyBuilder.classHierarchyNodes.length ==
+            _classHierarchyBuilder.classSets.length,
         "ClassHierarchyNode/ClassSet mismatch: "
-        "${classHierarchyBuilder.classHierarchyNodes} vs "
-        "${classHierarchyBuilder.classSets}");
-    return _closedWorldCache = new KClosedWorldImpl(elementMap,
+        "${_classHierarchyBuilder.classHierarchyNodes} vs "
+        "${_classHierarchyBuilder.classSets}");
+    return _closedWorldCache = new KClosedWorldImpl(_elementMap,
         options: _options,
         elementEnvironment: _elementEnvironment,
         dartTypes: _dartTypes,
@@ -1053,9 +1019,16 @@
         liveInstanceMembers: _liveInstanceMembers,
         assignedInstanceMembers: computeAssignedInstanceMembers(),
         processedMembers: _processedMembers,
-        mixinUses: classHierarchyBuilder.mixinUses,
+        mixinUses: _classHierarchyBuilder.mixinUses,
         typesImplementedBySubclasses: typesImplementedBySubclasses,
-        classHierarchyNodes: classHierarchyBuilder.classHierarchyNodes,
-        classSets: classHierarchyBuilder.classSets);
+        classHierarchyNodes: _classHierarchyBuilder.classHierarchyNodes,
+        classSets: _classHierarchyBuilder.classSets);
+  }
+
+  @override
+  void forEachLocalFunction(void f(MemberEntity member, Local localFunction)) {
+    for (KLocalFunction local in localFunctions) {
+      f(local.memberContext, local);
+    }
   }
 }
diff --git a/pkg/compiler/lib/src/universe/selector.dart b/pkg/compiler/lib/src/universe/selector.dart
index d4af193..34aaf06 100644
--- a/pkg/compiler/lib/src/universe/selector.dart
+++ b/pkg/compiler/lib/src/universe/selector.dart
@@ -208,15 +208,16 @@
    */
   String get invocationMirrorMemberName => isSetter ? '$name=' : name;
 
+  static const int invocationMirrorMethodKind = 0;
+  static const int invocationMirrorGetterKind = 1;
+  static const int invocationMirrorSetterKind = 2;
+
   int get invocationMirrorKind {
-    const int METHOD = 0;
-    const int GETTER = 1;
-    const int SETTER = 2;
-    int kind = METHOD;
+    int kind = invocationMirrorMethodKind;
     if (isGetter) {
-      kind = GETTER;
+      kind = invocationMirrorGetterKind;
     } else if (isSetter) {
-      kind = SETTER;
+      kind = invocationMirrorSetterKind;
     }
     return kind;
   }
diff --git a/pkg/compiler/lib/src/universe/world_builder.dart b/pkg/compiler/lib/src/universe/world_builder.dart
index d43fb15..c1bf88d 100644
--- a/pkg/compiler/lib/src/universe/world_builder.dart
+++ b/pkg/compiler/lib/src/universe/world_builder.dart
@@ -21,6 +21,7 @@
 import '../js_model/locals.dart';
 import '../js_model/elements.dart' show JSignatureMethod;
 import '../kernel/element_map_impl.dart';
+import '../kernel/kelements.dart';
 import '../native/enqueue.dart' show NativeResolutionEnqueuer;
 import '../options.dart';
 import '../universe/class_set.dart';
diff --git a/pkg/compiler/lib/src/world.dart b/pkg/compiler/lib/src/world.dart
index 3cc5ee8..2a33f49 100644
--- a/pkg/compiler/lib/src/world.dart
+++ b/pkg/compiler/lib/src/world.dart
@@ -1066,6 +1066,39 @@
   RuntimeTypesNeed get rtiNeed;
   NoSuchMethodData get noSuchMethodData;
 
+  /// Returns `true` if [x] is a subtype of [y], that is, if [x] implements an
+  /// instance of [y].
+  bool isSubtypeOf(ClassEntity x, ClassEntity y);
+
+  /// Returns an iterable of the classes that are contained in the
+  /// strict subclass/subtype sets of both [cls1] and [cls2].
+  ///
+  /// Classes that are implied by included superclasses/supertypes are not
+  /// returned.
+  ///
+  /// For instance for this hierarchy
+  ///
+  ///     class A {}
+  ///     class B {}
+  ///     class C implements A, B {}
+  ///     class D extends C {}
+  ///
+  /// the query
+  ///
+  ///     commonSubclasses(A, ClassQuery.SUBTYPE, B, ClassQuery.SUBTYPE)
+  ///
+  /// return the set {C} because [D] is implied by [C].
+  Iterable<ClassEntity> commonSubclasses(
+      ClassEntity cls1, ClassQuery query1, ClassEntity cls2, ClassQuery query2);
+
+  /// Returns an iterable over the directly instantiated that implement [cls]
+  /// possibly including [cls] itself, if it is live.
+  Iterable<ClassEntity> subtypesOf(ClassEntity cls);
+
+  /// Returns an iterable over the live classes that extend [cls] including
+  /// [cls] itself.
+  Iterable<ClassEntity> subclassesOf(ClassEntity cls);
+
   /// Applies [f] to each live class that implements [cls] _not_ including [cls]
   /// itself.
   void forEachStrictSubtypeOf(
diff --git a/pkg/compiler/tool/status_files/log_parser.dart b/pkg/compiler/tool/status_files/log_parser.dart
index d373a2b..43df6f4 100644
--- a/pkg/compiler/tool/status_files/log_parser.dart
+++ b/pkg/compiler/tool/status_files/log_parser.dart
@@ -12,7 +12,7 @@
 
 /// Extracts test records from a test.py [log].
 List<Record> parse(String log) {
-  var records = [];
+  var records = <Record>[];
   var suite;
   var test;
   var config;
@@ -20,7 +20,7 @@
   var actual;
   var reason;
   var fullReason; // lines before stack, usually multiline reason.
-  var stack = [];
+  var stack = <String>[];
   var paragraph = []; // collector of lines for fullReason.
   bool reproIsNext = false;
   for (var line in log.split('\n')) {
diff --git a/pkg/dev_compiler/bin/dartdevc.dart b/pkg/dev_compiler/bin/dartdevc.dart
index 854700c..4dd9996 100755
--- a/pkg/dev_compiler/bin/dartdevc.dart
+++ b/pkg/dev_compiler/bin/dartdevc.dart
@@ -20,7 +20,7 @@
   args = preprocessArgs(PhysicalResourceProvider.INSTANCE, args);
 
   if (args.contains('--persistent_worker')) {
-    await new _CompilerWorker(args..remove('--persistent_worker')).run();
+    await _CompilerWorker(args..remove('--persistent_worker')).run();
   } else if (args.isNotEmpty && args.last == "--batch") {
     await runBatch(args.sublist(0, args.length - 1));
   } else {
@@ -39,10 +39,10 @@
   Future<WorkResponse> performRequest(WorkRequest request) async {
     var args = _startupArgs.toList()..addAll(request.arguments);
 
-    var output = new StringBuffer();
+    var output = StringBuffer();
     var exitCode = compile(args, printFn: output.writeln);
     AnalysisEngine.instance.clearCaches();
-    return new WorkResponse()
+    return WorkResponse()
       ..exitCode = exitCode
       ..output = output.toString();
   }
@@ -51,12 +51,12 @@
 runBatch(List<String> batchArgs) async {
   int totalTests = 0;
   int testsFailed = 0;
-  var watch = new Stopwatch()..start();
+  var watch = Stopwatch()..start();
   print('>>> BATCH START');
   String line;
   while ((line = stdin.readLineSync(encoding: utf8)).isNotEmpty) {
     totalTests++;
-    var args = batchArgs.toList()..addAll(line.split(new RegExp(r'\s+')));
+    var args = batchArgs.toList()..addAll(line.split(RegExp(r'\s+')));
 
     // We don't try/catch here, since `compile` should handle that.
     var compileExitCode = compile(args);
diff --git a/pkg/dev_compiler/bin/dartdevk.dart b/pkg/dev_compiler/bin/dartdevk.dart
index 98f3907..027cfe4 100755
--- a/pkg/dev_compiler/bin/dartdevk.dart
+++ b/pkg/dev_compiler/bin/dartdevk.dart
@@ -18,7 +18,7 @@
   if (parsedArgs.isBatch) {
     await runBatch(parsedArgs.args);
   } else if (parsedArgs.isWorker) {
-    await new _CompilerWorker(parsedArgs.args).run();
+    await _CompilerWorker(parsedArgs.args).run();
   } else {
     var result = await compile(parsedArgs.args);
     exitCode = result.success ? 0 : 1;
@@ -29,7 +29,7 @@
 Future runBatch(List<String> batchArgs) async {
   var tests = 0;
   var failed = 0;
-  var watch = new Stopwatch()..start();
+  var watch = Stopwatch()..start();
 
   print('>>> BATCH START');
 
@@ -38,7 +38,7 @@
 
   while ((line = stdin.readLineSync(encoding: utf8))?.isNotEmpty == true) {
     tests++;
-    var args = batchArgs.toList()..addAll(line.split(new RegExp(r'\s+')));
+    var args = batchArgs.toList()..addAll(line.split(RegExp(r'\s+')));
 
     String outcome;
     try {
@@ -74,12 +74,12 @@
   Future<WorkResponse> performRequest(WorkRequest request) async {
     var args = _startupArgs.toList()..addAll(request.arguments);
 
-    var output = new StringBuffer();
+    var output = StringBuffer();
     var result = await runZoned(() => compile(args), zoneSpecification:
-        new ZoneSpecification(print: (self, parent, zone, message) {
+        ZoneSpecification(print: (self, parent, zone, message) {
       output.writeln(message.toString());
     }));
-    return new WorkResponse()
+    return WorkResponse()
       ..exitCode = result.success ? 0 : 1
       ..output = output.toString();
   }
@@ -95,11 +95,11 @@
 /// latter needs to be replaced by reading all the contents of the
 /// file and expanding them into the resulting argument list.
 _ParsedArgs _preprocessArgs(List<String> args) {
-  if (args.isEmpty) return new _ParsedArgs(false, false, args);
+  if (args.isEmpty) return _ParsedArgs(false, false, args);
 
   String lastArg = args.last;
   if (lastArg == '--batch') {
-    return new _ParsedArgs(true, false, args.sublist(0, args.length - 1));
+    return _ParsedArgs(true, false, args.sublist(0, args.length - 1));
   }
 
   var newArgs = <String>[];
@@ -115,20 +115,20 @@
       newArgs.add(arg);
     }
   }
-  return new _ParsedArgs(false, isWorker, newArgs);
+  return _ParsedArgs(false, isWorker, newArgs);
 }
 
 /// Return all lines in a file found at [path].
 Iterable<String> _readLines(String path) {
   try {
-    return new File(path)
+    return File(path)
         .readAsStringSync()
         .replaceAll('\r\n', '\n')
         .replaceAll('\r', '\n')
         .split('\n')
         .where((String line) => line.isNotEmpty);
   } on FileSystemException catch (e) {
-    throw new Exception('Failed to read $path: $e');
+    throw Exception('Failed to read $path: $e');
   }
 }
 
diff --git a/pkg/dev_compiler/lib/src/analyzer/ast_builder.dart b/pkg/dev_compiler/lib/src/analyzer/ast_builder.dart
index f4b4539..672a2a3 100644
--- a/pkg/dev_compiler/lib/src/analyzer/ast_builder.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/ast_builder.dart
@@ -10,10 +10,10 @@
 
 export 'package:analyzer/dart/ast/standard_ast_factory.dart';
 
-final ast = new AstBuilder();
+final ast = AstBuilder();
 
 class AstBuilder {
-  KeywordToken get constKeyword => new KeywordToken(Keyword.CONST, 0);
+  KeywordToken get constKeyword => KeywordToken(Keyword.CONST, 0);
 
   TypeName typeName(Identifier id, List<TypeAnnotation> args) {
     TypeArgumentList argList = null;
@@ -26,8 +26,8 @@
     TypeParameterList tps =
         (tParams.length == 0) ? null : typeParameterList(tParams);
     FormalParameterList fps = formalParameterList(params);
-    Token semi = new Token(TokenType.SEMICOLON, 0);
-    Token td = new KeywordToken(Keyword.TYPEDEF, 0);
+    Token semi = Token(TokenType.SEMICOLON, 0);
+    Token td = KeywordToken(Keyword.TYPEDEF, 0);
     return astFactory.functionTypeAlias(
         null, null, td, ret, name, tps, fps, semi);
   }
@@ -41,13 +41,13 @@
   }
 
   PropertyAccess propertyAccess(Expression target, SimpleIdentifier name) {
-    var p = new Token(TokenType.PERIOD, 0);
+    var p = Token(TokenType.PERIOD, 0);
     return astFactory.propertyAccess(target, p, name);
   }
 
   MethodInvocation methodInvoke(Expression target, SimpleIdentifier name,
       TypeArgumentList typeArguments, NodeList<Expression> args) {
-    var p = new Token(TokenType.PERIOD, 0);
+    var p = Token(TokenType.PERIOD, 0);
     return astFactory.methodInvocation(
         target, p, name, typeArguments, argumentList(args));
   }
@@ -180,7 +180,7 @@
   Token _binaryOperation(String oper) {
     var type = getTokenType(oper);
     assert(type != null);
-    return new Token(type, 0);
+    return Token(type, 0);
   }
 
   BinaryExpression binaryExpression(Expression l, String oper, Expression r) {
@@ -190,8 +190,8 @@
 
   ConditionalExpression conditionalExpression(
       Expression cond, Expression tExp, Expression fExp) {
-    var q = new Token(TokenType.QUESTION, 0);
-    var c = new Token(TokenType.COLON, 0);
+    var q = Token(TokenType.QUESTION, 0);
+    var c = Token(TokenType.COLON, 0);
     return astFactory.conditionalExpression(cond, q, tExp, c, fExp);
   }
 
@@ -201,14 +201,14 @@
   }
 
   Block block(List<Statement> statements) {
-    Token ld = new BeginToken(TokenType.OPEN_CURLY_BRACKET, 0);
-    Token rd = new Token(TokenType.CLOSE_CURLY_BRACKET, 0);
+    Token ld = BeginToken(TokenType.OPEN_CURLY_BRACKET, 0);
+    Token rd = Token(TokenType.CLOSE_CURLY_BRACKET, 0);
     return astFactory.block(ld, statements, rd);
   }
 
   MethodDeclaration blockMethodDeclaration(TypeName rt, SimpleIdentifier m,
       List<FormalParameter> params, List<Statement> statements,
-      {bool isStatic: false}) {
+      {bool isStatic = false}) {
     FormalParameterList fl = formalParameterList(params);
     Block b = block(statements);
     BlockFunctionBody body = blockFunctionBody(b);
@@ -266,8 +266,8 @@
   }
 
   NamedExpression namedExpression(String s, Expression e) {
-    Label l = astFactory.label(
-        identifierFromString(s), new Token(TokenType.COLON, 0));
+    Label l =
+        astFactory.label(identifierFromString(s), Token(TokenType.COLON, 0));
     return astFactory.namedExpression(l, e);
   }
 
@@ -275,8 +275,8 @@
   /// specified by the VariableElement. See also [variableStatement].
   VariableDeclarationList declareVariable(SimpleIdentifier name,
       [Expression init]) {
-    var eqToken = init != null ? new Token(TokenType.EQ, 0) : null;
-    var varToken = new KeywordToken(Keyword.VAR, 0);
+    var eqToken = init != null ? Token(TokenType.EQ, 0) : null;
+    var varToken = KeywordToken(Keyword.VAR, 0);
     return astFactory.variableDeclarationList(null, null, varToken, null,
         [astFactory.variableDeclaration(name, eqToken, init)]);
   }
@@ -288,89 +288,88 @@
 
   InstanceCreationExpression instanceCreation(
       ConstructorName ctor, List<Expression> args) {
-    var newToken = new KeywordToken(Keyword.NEW, 0);
+    var newToken = KeywordToken(Keyword.NEW, 0);
     return astFactory.instanceCreationExpression(
         newToken, ctor, argumentList(args));
   }
 
   ConstructorName constructorName(TypeName type, [SimpleIdentifier name]) {
-    Token period = name != null ? new Token(TokenType.PERIOD, 0) : null;
+    Token period = name != null ? Token(TokenType.PERIOD, 0) : null;
     return astFactory.constructorName(type, period, name);
   }
 
   SimpleIdentifier identifierFromString(String name) {
-    StringToken token = new SyntheticStringToken(TokenType.IDENTIFIER, name, 0);
+    StringToken token = SyntheticStringToken(TokenType.IDENTIFIER, name, 0);
     return astFactory.simpleIdentifier(token);
   }
 
   PrefixedIdentifier prefixedIdentifier(
       SimpleIdentifier pre, SimpleIdentifier id) {
-    Token period = new Token(TokenType.PERIOD, 0);
+    Token period = Token(TokenType.PERIOD, 0);
     return astFactory.prefixedIdentifier(pre, period, id);
   }
 
   TypeParameter typeParameter(SimpleIdentifier name, [TypeName bound = null]) {
-    Token keyword =
-        (bound == null) ? null : new KeywordToken(Keyword.EXTENDS, 0);
+    Token keyword = (bound == null) ? null : KeywordToken(Keyword.EXTENDS, 0);
     return astFactory.typeParameter(null, null, name, keyword, bound);
   }
 
   TypeParameterList typeParameterList(List<TypeParameter> params) {
-    Token lb = new Token(TokenType.LT, 0);
-    Token rb = new Token(TokenType.GT, 0);
+    Token lb = Token(TokenType.LT, 0);
+    Token rb = Token(TokenType.GT, 0);
     return astFactory.typeParameterList(lb, params, rb);
   }
 
   TypeArgumentList typeArgumentList(List<TypeAnnotation> args) {
-    Token lb = new Token(TokenType.LT, 0);
-    Token rb = new Token(TokenType.GT, 0);
+    Token lb = Token(TokenType.LT, 0);
+    Token rb = Token(TokenType.GT, 0);
     return astFactory.typeArgumentList(lb, args, rb);
   }
 
   ArgumentList argumentList(List<Expression> args) {
-    Token lp = new BeginToken(TokenType.OPEN_PAREN, 0);
-    Token rp = new Token(TokenType.CLOSE_PAREN, 0);
+    Token lp = BeginToken(TokenType.OPEN_PAREN, 0);
+    Token rp = Token(TokenType.CLOSE_PAREN, 0);
     return astFactory.argumentList(lp, args, rp);
   }
 
   BooleanLiteral booleanLiteral(bool b) {
-    var k = new KeywordToken(b ? Keyword.TRUE : Keyword.FALSE, 0);
+    var k = KeywordToken(b ? Keyword.TRUE : Keyword.FALSE, 0);
     return astFactory.booleanLiteral(k, b);
   }
 
   NullLiteral nullLiteral() {
-    var n = new KeywordToken(Keyword.NULL, 0);
+    var n = KeywordToken(Keyword.NULL, 0);
     return astFactory.nullLiteral(n);
   }
 
   IntegerLiteral integerLiteral(int i) {
-    StringToken token = new StringToken(TokenType.INT, '$i', 0);
+    StringToken token = StringToken(TokenType.INT, '$i', 0);
     return astFactory.integerLiteral(token, i);
   }
 
   SimpleStringLiteral simpleStringLiteral(String s) {
-    StringToken token = new StringToken(TokenType.STRING, "\"" + s + "\"", 0);
+    StringToken token = StringToken(TokenType.STRING, "\"" + s + "\"", 0);
     return astFactory.simpleStringLiteral(token, s);
   }
 
   SimpleStringLiteral tripleQuotedStringLiteral(String s) {
-    StringToken token = new StringToken(TokenType.STRING, '"""' + s + '"""', 0);
+    StringToken token = StringToken(TokenType.STRING, '"""' + s + '"""', 0);
     return astFactory.simpleStringLiteral(token, s);
   }
 
   AsExpression asExpression(Expression exp, TypeName type) {
-    Token token = new KeywordToken(Keyword.AS, 0);
+    Token token = KeywordToken(Keyword.AS, 0);
     return astFactory.asExpression(exp, token, type);
   }
 
   IsExpression isExpression(Expression exp, TypeName type) {
-    Token token = new KeywordToken(Keyword.IS, 0);
+    Token token = KeywordToken(Keyword.IS, 0);
     return astFactory.isExpression(exp, token, null, type);
   }
 
   ParenthesizedExpression parenthesizedExpression(Expression exp) {
-    Token lp = new BeginToken(TokenType.OPEN_PAREN, exp.offset);
-    Token rp = new Token(TokenType.CLOSE_PAREN, exp.end);
+    Token lp = BeginToken(TokenType.OPEN_PAREN, exp.offset);
+    Token rp = Token(TokenType.CLOSE_PAREN, exp.end);
     return astFactory.parenthesizedExpression(lp, exp, rp);
   }
 
@@ -380,20 +379,20 @@
   }
 
   FormalParameterList formalParameterList(List<FormalParameter> params) {
-    Token lp = new BeginToken(TokenType.OPEN_PAREN, 0);
-    Token rp = new Token(TokenType.CLOSE_PAREN, 0);
+    Token lp = BeginToken(TokenType.OPEN_PAREN, 0);
+    Token rp = Token(TokenType.CLOSE_PAREN, 0);
     bool hasOptional = params.any((p) => p.isPositional);
     bool hasNamed = params.any((p) => p.isNamed);
     assert(!(hasOptional && hasNamed));
     Token ld = null;
     Token rd = null;
     if (hasOptional) {
-      ld = new BeginToken(TokenType.OPEN_SQUARE_BRACKET, 0);
-      rd = new Token(TokenType.CLOSE_SQUARE_BRACKET, 0);
+      ld = BeginToken(TokenType.OPEN_SQUARE_BRACKET, 0);
+      rd = Token(TokenType.CLOSE_SQUARE_BRACKET, 0);
     }
     if (hasNamed) {
-      ld = new BeginToken(TokenType.OPEN_CURLY_BRACKET, 0);
-      rd = new Token(TokenType.CLOSE_CURLY_BRACKET, 0);
+      ld = BeginToken(TokenType.OPEN_CURLY_BRACKET, 0);
+      rd = Token(TokenType.CLOSE_CURLY_BRACKET, 0);
     }
     return astFactory.formalParameterList(lp, params, ld, rd, rp);
   }
@@ -404,12 +403,12 @@
 
   ExpressionFunctionBody expressionFunctionBody(Expression body,
       [bool decl = false]) {
-    Token semi = (decl) ? new Token(TokenType.SEMICOLON, 0) : null;
+    Token semi = (decl) ? Token(TokenType.SEMICOLON, 0) : null;
     return astFactory.expressionFunctionBody(null, null, body, semi);
   }
 
   ExpressionStatement expressionStatement(Expression expression) {
-    Token semi = new Token(TokenType.SEMICOLON, 0);
+    Token semi = Token(TokenType.SEMICOLON, 0);
     return astFactory.expressionStatement(expression, semi);
   }
 
@@ -420,8 +419,8 @@
 
   MethodDeclaration methodDeclaration(TypeName rt, SimpleIdentifier m,
       FormalParameterList fl, FunctionBody body,
-      {bool isStatic: false}) {
-    Token st = isStatic ? new KeywordToken(Keyword.STATIC, 0) : null;
+      {bool isStatic = false}) {
+    Token st = isStatic ? KeywordToken(Keyword.STATIC, 0) : null;
     return astFactory.methodDeclaration(
         null, null, null, st, rt, null, null, m, null, fl, body);
   }
@@ -432,8 +431,8 @@
   }
 
   Statement returnExpression([Expression e]) {
-    Token ret = new KeywordToken(Keyword.RETURN, 0);
-    Token semi = new Token(TokenType.SEMICOLON, 0);
+    Token ret = KeywordToken(Keyword.RETURN, 0);
+    Token semi = Token(TokenType.SEMICOLON, 0);
     return astFactory.returnStatement(ret, e, semi);
   }
 
@@ -453,7 +452,7 @@
 
   VariableDeclarationStatement variableDeclarationStatement(
       VariableDeclarationList varDecl) {
-    var semi = new Token(TokenType.SEMICOLON, 0);
+    var semi = Token(TokenType.SEMICOLON, 0);
     return astFactory.variableDeclarationStatement(varDecl, semi);
   }
 }
diff --git a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
index a4f0d88..fdda18f 100644
--- a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
@@ -91,10 +91,10 @@
   ///
   /// We sometimes special case codegen for a single library, as it simplifies
   /// name scoping requirements.
-  final _libraries = new Map<LibraryElement, JS.Identifier>();
+  final _libraries = Map<LibraryElement, JS.Identifier>();
 
   /// Imported libraries, and the temporaries used to refer to them.
-  final _imports = new Map<LibraryElement, JS.TemporaryId>();
+  final _imports = Map<LibraryElement, JS.TemporaryId>();
 
   /// The list of dart:_runtime SDK functions; these are assumed by other code
   /// in the SDK to be generated before anything else.
@@ -118,11 +118,10 @@
   /// In an async* function, this represents the stream controller parameter.
   JS.TemporaryId _asyncStarController;
 
-  final _initializingFormalTemps =
-      new HashMap<ParameterElement, JS.TemporaryId>();
+  final _initializingFormalTemps = HashMap<ParameterElement, JS.TemporaryId>();
 
   JS.Identifier _extensionSymbolsModule;
-  final _extensionSymbols = new Map<String, JS.TemporaryId>();
+  final _extensionSymbols = Map<String, JS.TemporaryId>();
 
   /// The  type provider from the current Analysis [context].
   final TypeProvider types;
@@ -153,6 +152,7 @@
   final InterfaceType linkedHashSetImplType;
   final InterfaceType identityHashSetImplType;
   final InterfaceType syncIterableType;
+  final InterfaceType asyncStarImplType;
 
   ConstFieldVisitor _constants;
 
@@ -179,7 +179,7 @@
   /// mappings.
   Element _currentElement;
 
-  final _deferredProperties = new HashMap<PropertyAccessorElement, JS.Method>();
+  final _deferredProperties = HashMap<PropertyAccessorElement, JS.Method>();
 
   BuildUnit _buildUnit;
 
@@ -187,7 +187,7 @@
 
   bool _superAllowed = true;
 
-  final _superHelpers = new Map<String, JS.Method>();
+  final _superHelpers = Map<String, JS.Method>();
 
   List<TypeParameterType> _typeParamInConst;
 
@@ -200,14 +200,14 @@
 
   /// Information about virtual fields for all libraries in the current build
   /// unit.
-  final virtualFields = new VirtualFieldModel();
+  final virtualFields = VirtualFieldModel();
 
-  final _usedCovariantPrivateMembers = new HashSet<ExecutableElement>();
+  final _usedCovariantPrivateMembers = HashSet<ExecutableElement>();
 
   CodeGenerator(
       AnalysisContext c, this.summaryData, this.options, this._extensionTypes)
       : context = c,
-        rules = new StrongTypeSystemImpl(c.typeProvider),
+        rules = StrongTypeSystemImpl(c.typeProvider),
         types = c.typeProvider,
         _asyncStreamIterator = getClass(c, 'dart:async', 'StreamIterator').type,
         _coreIdentical = _getLibrary(c, 'dart:core')
@@ -233,8 +233,9 @@
         identityHashSetImplType =
             getClass(c, 'dart:collection', '_IdentityHashSet').type,
         syncIterableType = getClass(c, 'dart:_js_helper', 'SyncIterable').type,
+        asyncStarImplType = getClass(c, 'dart:async', '_AsyncStarImpl').type,
         dartJSLibrary = _getLibrary(c, 'dart:js') {
-    jsTypeRep = new JSTypeRep(rules, c);
+    jsTypeRep = JSTypeRep(rules, c);
   }
 
   LibraryElement get currentLibrary => _currentElement.library;
@@ -262,7 +263,7 @@
     var module = _emitModule(compilationUnits, unit.name);
     var dartApiSummary = _summarizeModule(compilationUnits);
 
-    return new JSModuleFile(unit.name, errors, options, module, dartApiSummary);
+    return JSModuleFile(unit.name, errors, options, module, dartApiSummary);
   }
 
   List<int> _summarizeModule(List<CompilationUnit> units) {
@@ -277,9 +278,9 @@
               : (sdk as FolderBasedDartSdk).getSummarySdkBundle(true));
     }
 
-    var assembler = new PackageBundleAssembler();
+    var assembler = PackageBundleAssembler();
 
-    var uriToUnit = new Map<String, UnlinkedUnit>.fromIterables(
+    var uriToUnit = Map<String, UnlinkedUnit>.fromIterables(
         units.map((u) => u.element.source.uri.toString()), units.map((unit) {
       var unlinked = serializeAstUnlinked(unit);
       assembler.addUnlinkedUnit(unit.element.source, unlinked);
@@ -303,7 +304,7 @@
 
   JS.Program _emitModule(List<CompilationUnit> compilationUnits, String name) {
     if (moduleItems.isNotEmpty) {
-      throw new StateError('Can only call emitModule once.');
+      throw StateError('Can only call emitModule once.');
     }
 
     for (var unit in compilationUnits) {
@@ -313,7 +314,7 @@
     // Transform the AST to make coercions explicit.
     compilationUnits = CoercionReifier.reify(compilationUnits);
     var items = <JS.ModuleItem>[];
-    var root = new JS.Identifier('_root');
+    var root = JS.Identifier('_root');
     items.add(js.statement('const # = Object.create(null)', [root]));
 
     var isBuildingSdk =
@@ -321,20 +322,20 @@
     if (isBuildingSdk) {
       // 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');
-      _extensionSymbolsModule = new JS.Identifier('dartx');
+      runtimeModule = JS.Identifier('dart');
+      _extensionSymbolsModule = JS.Identifier('dartx');
     } else {
       // Otherwise allow these to be renamed so users can write them.
-      runtimeModule = new JS.TemporaryId('dart');
-      _extensionSymbolsModule = new JS.TemporaryId('dartx');
+      runtimeModule = JS.TemporaryId('dart');
+      _extensionSymbolsModule = JS.TemporaryId('dartx');
     }
-    _typeTable = new TypeTable(runtimeModule);
+    _typeTable = TypeTable(runtimeModule);
 
     // Initialize our library variables.
     var exports = <JS.NameSpecifier>[];
     void emitLibrary(JS.Identifier id) {
       items.add(js.statement('const # = Object.create(#)', [id, root]));
-      exports.add(new JS.NameSpecifier(id));
+      exports.add(JS.NameSpecifier(id));
     }
 
     for (var unit in compilationUnits) {
@@ -343,7 +344,7 @@
 
       var libraryTemp = isSdkInternalRuntime(library)
           ? runtimeModule
-          : new JS.TemporaryId(jsLibraryName(_libraryRoot, library));
+          : JS.TemporaryId(jsLibraryName(_libraryRoot, library));
       _libraries[library] = libraryTemp;
       emitLibrary(libraryTemp);
     }
@@ -352,11 +353,11 @@
     // TODO(jmesserly): find a cleaner design for this.
     if (isBuildingSdk) emitLibrary(_extensionSymbolsModule);
 
-    items.add(new JS.ExportDeclaration(new JS.ExportClause(exports)));
+    items.add(JS.ExportDeclaration(JS.ExportClause(exports)));
 
     // Collect all class/type Element -> Node mappings
     // in case we need to forward declare any classes.
-    _declarationNodes = new HashMap<TypeDefiningElement, AstNode>.identity();
+    _declarationNodes = HashMap<TypeDefiningElement, AstNode>.identity();
     for (var unit in compilationUnits) {
       for (var declaration in unit.declarations) {
         var element = declaration.element;
@@ -366,7 +367,7 @@
       }
     }
     if (compilationUnits.isNotEmpty) {
-      _constants = new ConstFieldVisitor(context,
+      _constants = ConstFieldVisitor(context,
           dummySource: resolutionMap
               .elementDeclaredByCompilationUnit(compilationUnits.first)
               .source);
@@ -391,7 +392,7 @@
     // Initialize extension symbols
     _extensionSymbols.forEach((name, id) {
       JS.Expression value =
-          new JS.PropertyAccess(_extensionSymbolsModule, _propertyName(name));
+          JS.PropertyAccess(_extensionSymbolsModule, _propertyName(name));
       if (isBuildingSdk) {
         value = js.call('# = Symbol(#)', [value, js.string("dartx.$name")]);
       }
@@ -409,7 +410,7 @@
     _copyAndFlattenBlocks(items, moduleItems);
 
     // Build the module.
-    return new JS.Program(items, name: _buildUnit.name);
+    return JS.Program(items, name: _buildUnit.name);
   }
 
   void _emitDebuggerExtensionInfo(String name) {
@@ -417,7 +418,7 @@
     _libraries.forEach((library, value) {
       // TODO(jacobr): we could specify a short library name instead of the
       // full library uri if we wanted to save space.
-      properties.add(new JS.Property(
+      properties.add(JS.Property(
           js.escapedString(jsLibraryDebuggerName(_libraryRoot, library)),
           value));
     });
@@ -428,7 +429,7 @@
         .statement('#.trackLibraries(#, #, ${JSModuleFile.sourceMapHoleID});', [
       runtimeModule,
       js.string(name),
-      new JS.ObjectInitializer(properties, multiline: true)
+      JS.ObjectInitializer(properties, multiline: true)
     ]));
   }
 
@@ -482,7 +483,7 @@
     if (parts.isEmpty) parts = [''];
     JS.PropertyAccess access;
     for (var part in parts) {
-      access = new JS.PropertyAccess(
+      access = JS.PropertyAccess(
           access ?? runtimeCall('global'), js.escapedString(part, "'"));
     }
     return access;
@@ -493,7 +494,7 @@
     var name = getAnnotationName(e, isPublicJSAnnotation);
     if (name != null) {
       if (name.contains('.')) {
-        throw new UnsupportedError(
+        throw UnsupportedError(
             'static members do not support "." in their names. '
             'See https://github.com/dart-lang/sdk/issues/27926');
       }
@@ -526,13 +527,13 @@
     }
     var moduleName = _buildUnit.libraryToModule(source);
     if (moduleName == null) {
-      throw new StateError('Could not find module containing "$library".');
+      throw StateError('Could not find module containing "$library".');
     }
     return moduleName;
   }
 
   void _finishImports(List<JS.ModuleItem> items) {
-    var modules = new Map<String, List<LibraryElement>>();
+    var modules = Map<String, List<LibraryElement>>();
 
     for (var import in _imports.keys) {
       modules.putIfAbsent(_libraryToModule(import), () => []).add(import);
@@ -553,13 +554,13 @@
       //     import {foo as foo$} from 'foo'; // if rename was needed
       //
       var imports =
-          libraries.map((l) => new JS.NameSpecifier(_imports[l])).toList();
+          libraries.map((l) => JS.NameSpecifier(_imports[l])).toList();
       if (module == coreModuleName) {
-        imports.add(new JS.NameSpecifier(runtimeModule));
-        imports.add(new JS.NameSpecifier(_extensionSymbolsModule));
+        imports.add(JS.NameSpecifier(runtimeModule));
+        imports.add(JS.NameSpecifier(_extensionSymbolsModule));
       }
 
-      items.add(new JS.ImportDeclaration(
+      items.add(JS.ImportDeclaration(
           namedImports: imports, from: js.string(module, "'")));
     });
   }
@@ -696,7 +697,7 @@
 
     var currentNames = currentLibrary.publicNamespace.definedNames;
     var exportedNames =
-        new NamespaceBuilder().createExportNamespaceForDirective(element);
+        NamespaceBuilder().createExportNamespaceForDirective(element);
 
     // We only need to export main as it is the only method part of the
     // publicly exposed JS API for a library.
@@ -886,19 +887,19 @@
     // https://github.com/dart-lang/sdk/issues/31003
     var className = classElem.typeParameters.isNotEmpty
         ? (classElem == _jsArray
-            ? new JS.Identifier(classElem.name)
-            : new JS.TemporaryId(classElem.name))
+            ? JS.Identifier(classElem.name)
+            : JS.TemporaryId(classElem.name))
         : _emitTopLevelName(classElem);
 
     var savedClassProperties = _classProperties;
-    _classProperties = new ClassPropertyModel.build(
+    _classProperties = ClassPropertyModel.build(
         _extensionTypes,
         virtualFields,
         classElem,
         getClassCovariantParameters(classNode),
         _usedCovariantPrivateMembers);
 
-    var memberMap = new Map<Element, Declaration>();
+    var memberMap = Map<Element, Declaration>();
     for (var m in members) {
       if (m is FieldDeclaration) {
         for (var f in m.fields.variables) {
@@ -1146,7 +1147,7 @@
     if (isClassSymbol == null) {
       // TODO(jmesserly): we could export these symbols, if we want to mark
       // implemented interfaces for user-defined classes.
-      var id = new JS.TemporaryId("_is_${classElem.name}_default");
+      var id = JS.TemporaryId("_is_${classElem.name}_default");
       moduleItems.add(
           js.statement('const # = Symbol(#);', [id, js.string(id.name, "'")]));
       isClassSymbol = id;
@@ -1186,16 +1187,16 @@
 
   List<JS.Identifier> _emitTypeFormals(List<TypeParameterElement> typeFormals) {
     return typeFormals
-        .map((t) => new JS.Identifier(t.name))
+        .map((t) => JS.Identifier(t.name))
         .toList(growable: false);
   }
 
   /// Emits a field declaration for TypeScript & Closure's ES6_TYPED
   /// (e.g. `class Foo { i: string; }`)
   JS.VariableDeclarationList _emitTypeScriptField(FieldElement field) {
-    return new JS.VariableDeclarationList(field.isStatic ? 'static' : null, [
-      new JS.VariableInitialization(
-          new JS.Identifier(
+    return JS.VariableDeclarationList(field.isStatic ? 'static' : null, [
+      JS.VariableInitialization(
+          JS.Identifier(
               // TODO(ochafik): use a refactored _emitMemberName instead.
               field.name,
               type: emitTypeRef(field.type)),
@@ -1218,7 +1219,7 @@
       jsFormals,
       _typeTable.discharge(formals),
       body,
-      className ?? new JS.Identifier(element.name)
+      className ?? JS.Identifier(element.name)
     ]);
 
     var genericArgs = [typeConstructor];
@@ -1244,13 +1245,12 @@
         ? classElem.fields.map(_emitTypeScriptField).toList()
         : null;
     if (classElem.typeParameters.isNotEmpty) {
-      return new JS.ClassExpression(
-              className as JS.Identifier, heritage, methods,
+      return JS.ClassExpression(className as JS.Identifier, heritage, methods,
               typeParams: typeParams, fields: jsFields)
           .toStatement();
     }
-    var classExpr = new JS.ClassExpression(
-        new JS.TemporaryId(classElem.name), heritage, methods,
+    var classExpr = JS.ClassExpression(
+        JS.TemporaryId(classElem.name), heritage, methods,
         typeParams: typeParams, fields: jsFields);
     return js.statement('# = #;', [className, classExpr]);
   }
@@ -1276,7 +1276,7 @@
     }
 
     bool shouldDefer(DartType t) {
-      var visited = new Set<DartType>();
+      var visited = Set<DartType>();
       bool defer(DartType t) {
         if (classElem == t.element) return true;
         if (t.isObject) return false;
@@ -1331,8 +1331,8 @@
           ctorBody
               .add(_emitSuperConstructorCall(className, ctor.name, jsParams));
         }
-        body.add(_addConstructorToClass(className, ctor.name,
-            new JS.Fun(jsParams, new JS.Block(ctorBody))));
+        body.add(_addConstructorToClass(
+            className, ctor.name, JS.Fun(jsParams, JS.Block(ctorBody))));
       }
     }
 
@@ -1378,8 +1378,8 @@
         //     mixinMembers(C, class C$ extends M { <methods>  });
         mixinBody.add(runtimeStatement('mixinMembers(#, #)', [
           classExpr,
-          new JS.ClassExpression(
-              new JS.TemporaryId(classElem.name), mixinClass, methods)
+          JS.ClassExpression(
+              JS.TemporaryId(classElem.name), mixinClass, methods)
         ]));
       }
 
@@ -1391,10 +1391,10 @@
       var m = classElem.mixins[i];
 
       var mixinString = classElem.supertype.name + '_' + m.name;
-      var mixinClassName = new JS.TemporaryId(mixinString);
-      var mixinId = new JS.TemporaryId(mixinString + '\$');
+      var mixinClassName = JS.TemporaryId(mixinString);
+      var mixinId = JS.TemporaryId(mixinString + '\$');
       var mixinClassExpression =
-          new JS.ClassExpression(mixinClassName, baseClass, []);
+          JS.ClassExpression(mixinClassName, baseClass, []);
       // Bind the mixin class to a name to workaround a V8 bug with es6 classes
       // and anonymous function names.
       // TODO(leafp:) Eliminate this once the bug is fixed:
@@ -1440,17 +1440,17 @@
         var field = decl.element as FieldElement;
         var name = getAnnotationName(field, isJSName) ?? field.name;
         // Generate getter
-        var fn = new JS.Fun([], js.block('{ return this.#; }', [name]));
+        var fn = JS.Fun([], js.block('{ return this.#; }', [name]));
         var method =
-            new JS.Method(_declareMemberName(field.getter), fn, isGetter: true);
+            JS.Method(_declareMemberName(field.getter), fn, isGetter: true);
         jsMethods.add(method);
 
         // Generate setter
         if (!decl.isFinal) {
-          var value = new JS.TemporaryId('value');
-          fn = new JS.Fun([value], js.block('{ this.# = #; }', [name, value]));
-          method = new JS.Method(_declareMemberName(field.setter), fn,
-              isSetter: true);
+          var value = JS.TemporaryId('value');
+          fn = JS.Fun([value], js.block('{ this.# = #; }', [name, value]));
+          method =
+              JS.Method(_declareMemberName(field.setter), fn, isSetter: true);
           jsMethods.add(method);
         }
       }
@@ -1470,23 +1470,23 @@
     if (type.isObject) {
       // Dart does not use ES6 constructors.
       // Add an error to catch any invalid usage.
-      jsMethods.add(
-          new JS.Method(_propertyName('constructor'), js.fun(r'''function() {
+      jsMethods
+          .add(JS.Method(_propertyName('constructor'), js.fun(r'''function() {
                   throw Error("use `new " + #.typeName(#.getReifiedType(this)) +
                       ".new(...)` to create a Dart object");
               }''', [runtimeModule, runtimeModule])));
     } else if (classElem.isEnum) {
       // Generate Enum.toString()
       var fields = classElem.fields.where((f) => f.type == type).toList();
-      var mapMap = new List<JS.Property>(fields.length);
+      var mapMap = List<JS.Property>(fields.length);
       for (var i = 0; i < fields.length; ++i) {
-        mapMap[i] = new JS.Property(
+        mapMap[i] = JS.Property(
             js.number(i), js.string('${type.name}.${fields[i].name}'));
       }
-      jsMethods.add(new JS.Method(
+      jsMethods.add(JS.Method(
           _declareMemberName(types.objectType.getMethod('toString')),
           js.fun('function() { return #[this.index]; }',
-              new JS.ObjectInitializer(mapMap, multiline: true))));
+              JS.ObjectInitializer(mapMap, multiline: true))));
     }
 
     for (var m in memberNodes) {
@@ -1554,12 +1554,12 @@
       if (member is PropertyAccessorElement) {
         var param =
             covariantParams.lookup(member.parameters[0]) as ParameterElement;
-        methods.add(new JS.Method(
+        methods.add(JS.Method(
             name,
             js.fun('function(x) { return super.# = #._check(x); }',
                 [name, _emitType(param.type)]),
             isSetter: true));
-        methods.add(new JS.Method(
+        methods.add(JS.Method(
             name, js.fun('function() { return super.#; }', [name]),
             isGetter: true));
       } else if (member is MethodElement) {
@@ -1569,7 +1569,7 @@
         _emitCovarianceBoundsCheck(type.typeFormals, covariantParams, body);
 
         var typeFormals = _emitTypeFormals(type.typeFormals);
-        var jsParams = new List<JS.Parameter>.from(typeFormals);
+        var jsParams = List<JS.Parameter>.from(typeFormals);
         bool foundNamedParams = false;
         for (var param in member.parameters) {
           param = covariantParams.lookup(param) as ParameterElement;
@@ -1608,11 +1608,11 @@
           body.add(js.statement(
               'return super.#(#)(#);', [name, typeFormals, jsParams]));
         }
-        var fn = new JS.Fun(jsParams, new JS.Block(body),
+        var fn = JS.Fun(jsParams, JS.Block(body),
             typeParams: typeFormals, returnType: emitTypeRef(type.returnType));
-        methods.add(new JS.Method(name, fn));
+        methods.add(JS.Method(name, fn));
       } else {
-        throw new StateError(
+        throw StateError(
             'unable to generate a covariant check for element: `$member` '
             '(${member.runtimeType})');
       }
@@ -1641,9 +1641,9 @@
       // rest/spread support, but this should work for now.
       var params = _emitParameters(node.parameters?.parameters);
 
-      fun = new JS.Fun(
+      fun = JS.Fun(
           params,
-          new JS.Block([
+          JS.Block([
             js.statement('return $newKeyword #(#)',
                 [visitConstructorName(redirect), params])
               ..sourceInformation = _nodeStart(redirect)
@@ -1657,13 +1657,13 @@
       body.add(_visitStatement(node.body));
 
       var params = _emitParameters(node.parameters?.parameters);
-      fun = new JS.Fun(params, new JS.Block(body), returnType: returnType);
+      fun = JS.Fun(params, JS.Block(body), returnType: returnType);
     }
 
     _currentFunction = savedFunction;
 
     return closureAnnotate(
-        new JS.Method(name, fun, isStatic: true)
+        JS.Method(name, fun, isStatic: true)
           ..sourceInformation = _functionEnd(node),
         element,
         node);
@@ -1691,11 +1691,11 @@
   JS.Method _implementMockMember(ExecutableElement method, InterfaceType type) {
     var invocationProps = <JS.Property>[];
     addProperty(String name, JS.Expression value) {
-      invocationProps.add(new JS.Property(js.string(name), value));
+      invocationProps.add(JS.Property(js.string(name), value));
     }
 
     var typeParams = _emitTypeFormals(method.type.typeFormals);
-    var fnArgs = new List<JS.Parameter>.from(typeParams);
+    var fnArgs = List<JS.Parameter>.from(typeParams);
     var args = _emitParametersForElement(method);
     fnArgs.addAll(args);
     var argInit = _emitArgumentInitializers(method);
@@ -1717,12 +1717,12 @@
       // Sort the names to match dart2js order.
       var sortedNames = (namedParameterTypes.keys.toList())..sort();
       var named = sortedNames
-          .map((n) => new JS.Property(_propertyName(n), new JS.Identifier(n)));
-      addProperty('namedArguments', new JS.ObjectInitializer(named.toList()));
+          .map((n) => JS.Property(_propertyName(n), JS.Identifier(n)));
+      addProperty('namedArguments', JS.ObjectInitializer(named.toList()));
       positionalArgs.removeLast();
     }
     if (typeParams.isNotEmpty) {
-      addProperty('typeArguments', new JS.ArrayInitializer(typeParams));
+      addProperty('typeArguments', JS.ArrayInitializer(typeParams));
     }
 
     var fnBody =
@@ -1730,7 +1730,7 @@
       runtimeModule,
       _declareMemberName(method),
       args,
-      new JS.ObjectInitializer(invocationProps)
+      JS.ObjectInitializer(invocationProps)
     ]);
 
     if (!method.returnType.isDynamic) {
@@ -1738,13 +1738,13 @@
     }
 
     var fnBlock = argInit != null
-        ? new JS.Block([argInit, fnBody.toReturn()])
+        ? JS.Block([argInit, fnBody.toReturn()])
         : fnBody.toReturn().toBlock();
 
-    return new JS.Method(
+    return JS.Method(
         _declareMemberName(method,
             useExtension: _extensionTypes.isNativeClass(type.element)),
-        new JS.Fun(fnArgs, fnBlock, typeParams: typeParams),
+        JS.Fun(fnArgs, fnBlock, typeParams: typeParams),
         isGetter: method is PropertyAccessorElement && method.isGetter,
         isSetter: method is PropertyAccessorElement && method.isSetter,
         isStatic: false);
@@ -1766,14 +1766,12 @@
     var mocks = _classProperties.mockMembers;
     if (!mocks.containsKey(element.name)) {
       var getter = js.fun('function() { return this[#]; }', [virtualField]);
-      result.add(new JS.Method(name, getter, isGetter: true)
+      result.add(JS.Method(name, getter, isGetter: true)
         ..sourceInformation = _functionSpan(field.name));
     }
 
     if (!mocks.containsKey(element.name + '=')) {
-      var args = field.isFinal
-          ? [new JS.Super(), name]
-          : [new JS.This(), virtualField];
+      var args = field.isFinal ? [JS.Super(), name] : [JS.This(), virtualField];
 
       String jsCode;
       var setter = element.setter;
@@ -1787,7 +1785,7 @@
         jsCode = 'function(value) { #[#] = value; }';
       }
 
-      result.add(new JS.Method(name, js.fun(jsCode, args), isSetter: true)
+      result.add(JS.Method(name, js.fun(jsCode, args), isSetter: true)
         ..sourceInformation = _functionSpan(field.name));
     }
 
@@ -1812,7 +1810,7 @@
           _classProperties.inheritedSetters.contains(field.name)) {
         // Generate a setter that forwards to super.
         var fn = js.fun('function(value) { super[#] = value; }', [name]);
-        return new JS.Method(name, fn, isSetter: true);
+        return JS.Method(name, fn, isSetter: true);
       }
     } else {
       var getter = field.getter;
@@ -1820,7 +1818,7 @@
           _classProperties.inheritedGetters.contains(field.name)) {
         // Generate a getter that forwards to super.
         var fn = js.fun('function() { return super[#]; }', [name]);
-        return new JS.Method(name, fn, isGetter: true);
+        return JS.Method(name, fn, isGetter: true);
       }
     }
     return null;
@@ -1853,7 +1851,7 @@
 
     // Otherwise, emit the adapter method, which wraps the Dart iterator in
     // an ES6 iterator.
-    return new JS.Method(
+    return JS.Method(
         js.call('Symbol.iterator'),
         js.call('function() { return new #.JsIterator(this.#); }',
             [runtimeModule, _emitMemberName('iterator', type: t)]) as JS.Fun);
@@ -1904,9 +1902,8 @@
       return body;
     }
 
-    var fields = new List<VariableDeclaration>.from(memberMap.values.where(
-        (m) =>
-            m is VariableDeclaration && !(m.element as FieldElement).isStatic));
+    var fields = List<VariableDeclaration>.from(memberMap.values.where((m) =>
+        m is VariableDeclaration && !(m.element as FieldElement).isStatic));
 
     // Iff no constructor is specified for a class C, it implicitly has a
     // default constructor `C() : super() {}`, unless C is class Object.
@@ -1920,7 +1917,7 @@
 
       addConstructor(
           '',
-          new JS.Fun([], new JS.Block(ctorBody))
+          JS.Fun([], JS.Block(ctorBody))
             ..sourceInformation = _functionEnd(classNode));
       return body;
     }
@@ -1998,7 +1995,7 @@
       for (var f in classElem.fields) {
         if (f.type != type) continue;
         // static const E id_i = const E(i);
-        values.add(new JS.PropertyAccess(
+        values.add(JS.PropertyAccess(
             _emitStaticClassName(classElem), _declareMemberName(f.getter)));
         var enumValue = runtimeCall('const(new (#.#)(#))', [
           _emitConstructorAccess(type),
@@ -2059,7 +2056,7 @@
         runtimeModule,
         helperName,
         className,
-        new JS.ArrayInitializer(names, multiline: names.length > 4)
+        JS.ArrayInitializer(names, multiline: names.length > 4)
       ]));
     }
 
@@ -2083,11 +2080,11 @@
         var proto = classElem.type.isObject
             ? js.call('Object.create(null)')
             : runtimeCall('get${name}s(#.__proto__)', [className]);
-        elements.insert(0, new JS.Property(_propertyName('__proto__'), proto));
+        elements.insert(0, JS.Property(_propertyName('__proto__'), proto));
       }
       body.add(runtimeStatement('set${name}Signature(#, () => #)', [
         className,
-        new JS.ObjectInitializer(elements, multiline: elements.length > 1)
+        JS.ObjectInitializer(elements, multiline: elements.length > 1)
       ]));
     }
 
@@ -2125,13 +2122,13 @@
           var type = _emitAnnotatedFunctionType(
               reifiedType, annotationNode?.metadata,
               parameters: annotationNode?.parameters?.parameters);
-          var property = new JS.Property(_declareMemberName(method), type);
+          var property = JS.Property(_declareMemberName(method), type);
           if (isStatic) {
             staticMethods.add(property);
           } else {
             instanceMethods.add(property);
             if (extMembers.contains(name)) {
-              instanceMethods.add(new JS.Property(
+              instanceMethods.add(JS.Property(
                   _declareMemberName(method, useExtension: true), type));
             }
           }
@@ -2188,14 +2185,14 @@
                   nameType: false),
               annotationNode?.metadata);
 
-          var property = new JS.Property(_declareMemberName(accessor), type);
+          var property = JS.Property(_declareMemberName(accessor), type);
           if (isStatic) {
             (isGetter ? staticGetters : staticSetters).add(property);
           } else {
             var accessors = isGetter ? instanceGetters : instanceSetters;
             accessors.add(property);
             if (extMembers.contains(accessor.variable.name)) {
-              accessors.add(new JS.Property(
+              accessors.add(JS.Property(
                   _declareMemberName(accessor, useExtension: true), type));
             }
           }
@@ -2226,7 +2223,7 @@
         var fieldSig = _emitFieldSignature(field.type,
             metadata: metadata, isFinal: field.isFinal);
         (isStatic ? staticFields : instanceFields)
-            .add(new JS.Property(memberName, fieldSig));
+            .add(JS.Property(memberName, fieldSig));
       }
       emitSignature('Field', instanceFields);
       emitSignature('StaticField', staticFields);
@@ -2240,7 +2237,7 @@
         var type = _emitAnnotatedFunctionType(
             ctor.type, annotationNode?.metadata,
             parameters: annotationNode?.parameters?.parameters);
-        constructors.add(new JS.Property(memberName, type));
+        constructors.add(JS.Property(memberName, type));
       }
 
       emitSignature('Constructor', constructors);
@@ -2268,7 +2265,7 @@
     _superAllowed = savedSuperAllowed;
     _currentFunction = savedFunction;
 
-    return new JS.Fun(params, body)..sourceInformation = _functionEnd(node);
+    return JS.Fun(params, body)..sourceInformation = _functionEnd(node);
   }
 
   FunctionType _getMemberRuntimeType(ExecutableElement element) {
@@ -2277,18 +2274,18 @@
     if (!element.parameters.any(_isCovariant)) return element.type;
 
     var parameters = element.parameters
-        .map((p) => new ParameterElementImpl.synthetic(p.name,
+        .map((p) => ParameterElementImpl.synthetic(p.name,
             _isCovariant(p) ? objectClass.type : p.type, p.parameterKind))
         .toList();
 
-    var function = new FunctionElementImpl("", -1)
+    var function = FunctionElementImpl("", -1)
       ..isSynthetic = true
       ..returnType = element.returnType
       // TODO(jmesserly): do covariant type parameter bounds also need to be
       // reified as `Object`?
       ..shareTypeParameters(element.typeParameters)
       ..parameters = parameters;
-    return function.type = new FunctionTypeImpl(function);
+    return function.type = FunctionTypeImpl(function);
   }
 
   JS.Expression _constructorName(String name) {
@@ -2317,7 +2314,7 @@
     for (var init in node.initializers) {
       if (init is RedirectingConstructorInvocation) {
         body.add(_emitRedirectingConstructor(init, className));
-        return new JS.Block(body);
+        return JS.Block(body);
       }
     }
 
@@ -2344,7 +2341,7 @@
     }
 
     body.add(_emitFunctionScopedBody(node.body, node.element));
-    return new JS.Block(body);
+    return JS.Block(body);
   }
 
   JS.Statement _emitRedirectingConstructor(
@@ -2425,7 +2422,7 @@
 
     var body = <JS.Statement>[];
     if (ctor != null) {
-      ctorFields = new HashSet<FieldElement>();
+      ctorFields = HashSet<FieldElement>();
 
       // Run constructor parameter initializers such as `this.foo`
       for (var p in ctor.parameters.parameters) {
@@ -2491,7 +2488,7 @@
         if (paramNode != null) {
           var paramDefault = (paramNode as DefaultFormalParameter).defaultValue;
           if (paramDefault == null) {
-            defaultValue = new JS.LiteralNull();
+            defaultValue = JS.LiteralNull();
           } else if (_isJSUndefined(paramDefault)) {
             defaultValue = null;
           } else {
@@ -2567,11 +2564,10 @@
     String name =
         getAnnotationName(node.element, isJSAnnotation) ?? node.name.name;
     if (node.isGetter) {
-      return new JS.Fun([], js.block('{ return this.#; }', [name]));
+      return JS.Fun([], js.block('{ return this.#; }', [name]));
     } else if (node.isSetter) {
       var params = _emitParameters(node.parameters?.parameters);
-      return new JS.Fun(
-          params, js.block('{ this.# = #; }', [name, params.last]));
+      return JS.Fun(params, js.block('{ this.# = #; }', [name, params.last]));
     } else {
       return js.fun(
           'function (...args) { return this.#.apply(this, args); }', name);
@@ -2595,7 +2591,7 @@
     }
 
     return closureAnnotate(
-        new JS.Method(_declareMemberName(node.element), fn,
+        JS.Method(_declareMemberName(node.element), fn,
             isGetter: node.isGetter,
             isSetter: node.isSetter,
             isStatic: node.isStatic)
@@ -2683,7 +2679,7 @@
   JS.Method _emitTopLevelProperty(FunctionDeclaration node) {
     var name = node.name.name;
     return closureAnnotate(
-        new JS.Method(_propertyName(name),
+        JS.Method(_propertyName(name),
             _emitFunctionExpression(node.functionExpression),
             isGetter: node.isGetter, isSetter: node.isSetter)
           ..sourceInformation = _functionEnd(node),
@@ -2714,7 +2710,7 @@
   }
 
   JS.Expression _emitFunctionTagged(JS.Expression fn, FunctionType type,
-      {bool topLevel: false}) {
+      {bool topLevel = false}) {
     var lazy = topLevel && !_typeIsLoaded(type);
     var typeRep = _emitFunctionType(type, lazy: lazy);
     return runtimeCall(lazy ? 'lazyFn(#, #)' : 'fn(#, #)', [fn, typeRep]);
@@ -2752,7 +2748,7 @@
 
     // Convert `function(...) { ... }` to `(...) => ...`
     // This is for readability, but it also ensures correct `this` binding.
-    return new JS.ArrowFun(f.params, body,
+    return JS.ArrowFun(f.params, body,
         typeParams: f.typeParams, returnType: f.returnType);
   }
 
@@ -2782,13 +2778,13 @@
 
     JS.Block code = isSync
         ? _emitFunctionBody(element, parameters, body)
-        : new JS.Block([
+        : JS.Block([
             _emitGeneratorFunction(element, parameters, body).toReturn()
               ..sourceInformation = _nodeStart(body)
           ]);
 
     code = super.exitFunction(element.name, formals, code);
-    return new JS.Fun(formals, code,
+    return JS.Fun(formals, code,
         typeParams: typeFormals, returnType: emitTypeRef(type.returnType));
   }
 
@@ -2800,7 +2796,7 @@
     var initArgs = _emitArgumentInitializers(element, parameters);
     var block = _emitFunctionScopedBody(body, element);
 
-    if (initArgs != null) block = new JS.Block([initArgs, block]);
+    if (initArgs != null) block = JS.Block([initArgs, block]);
 
     _currentFunction = savedFunction;
 
@@ -2808,7 +2804,7 @@
       // TODO(jmesserly: JS AST printer does not understand the need to emit a
       // nested scoped block in a JS function. So we need to add a non-scoped
       // wrapper to ensure it gets printed.
-      block = new JS.Block([block]);
+      block = JS.Block([block]);
     }
     return block;
   }
@@ -2825,7 +2821,7 @@
       // named argument initialization, and sync* functions also emit locally
       // modified parameters into the function's scope.
       var parameterNames =
-          new HashSet<String>.from(element.parameters.map((e) => e.name));
+          HashSet<String>.from(element.parameters.map((e) => e.name));
       return block.toScopedBlock(parameterNames);
     }
     return block;
@@ -2861,15 +2857,15 @@
       // TODO(jmesserly): this will emit argument initializers (for default
       // values) inside the generator function body. Is that the best place?
       var jsBody = _emitFunctionBody(element, parameters, body);
-      var genFn = new JS.Fun(jsParams, jsBody,
+      var genFn = JS.Fun(jsParams, jsBody,
           isGenerator: true, returnType: emitTypeRef(returnType));
 
       // Name the function if possible, to get better stack traces.
       var name = element.name;
       JS.Expression gen = genFn;
       if (name.isNotEmpty) {
-        gen = new JS.NamedFunction(
-            new JS.TemporaryId(JS.friendlyNameForDartOperator[name] ?? name),
+        gen = JS.NamedFunction(
+            JS.TemporaryId(JS.friendlyNameForDartOperator[name] ?? name),
             genFn);
       }
       gen.sourceInformation = _functionEnd(body);
@@ -2913,17 +2909,18 @@
     }
 
     if (element.isGenerator) {
-      // `async*` uses the `dart.asyncStar` helper, and also has an extra
-      // `stream` parameter to the generator, which is used for passing values
-      // to the `_AsyncStarStreamController` implementation type.
+      // `async*` uses the `_AsyncStarImpl<T>` helper class. The generator
+      // callback takes an instance of this class.
       //
       // `yield` is specially generated inside `async*` by visitYieldStatement.
       // `await` is generated as `yield`.
       //
-      // dart:_runtime/generators.dart has an example of the generated code.
-      var asyncStarParam = new JS.TemporaryId('stream');
+      // _AsyncStarImpl has an example of the generated code.
+      var asyncStarParam = JS.TemporaryId('stream');
       var gen = emitGeneratorFn([asyncStarParam], asyncStarParam);
-      return runtimeCall('asyncStar(#, #)', [_emitType(returnType), gen]);
+
+      var asyncStarImpl = asyncStarImplType.instantiate([returnType]);
+      return js.call('new #.new(#).stream', [_emitType(asyncStarImpl), gen]);
     }
 
     // `async` works similar to `sync*`:
@@ -2956,11 +2953,11 @@
     if (JS.This.foundIn(fn)) {
       declareFn = js.statement('const # = #.bind(this);', [name, fn]);
     } else {
-      declareFn = new JS.FunctionDeclaration(name, fn);
+      declareFn = JS.FunctionDeclaration(name, fn);
     }
     var element = func.element;
     if (_reifyFunctionType(element)) {
-      declareFn = new JS.Block(
+      declareFn = JS.Block(
           [declareFn, _emitFunctionTagged(name, element.type).toStatement()]);
     }
     return declareFn;
@@ -3041,7 +3038,7 @@
       return _emitParameter(element);
     }
 
-    return new JS.Identifier(element.name);
+    return JS.Identifier(element.name);
   }
 
   JS.Expression _emitLibraryMemberElement(Element element, Expression node) {
@@ -3081,22 +3078,22 @@
 
     // For instance members, we add implicit-this.
     // For method tear-offs, we ensure it's a bound method.
-    var target = isStatic ? _emitStaticClassName(classElem) : new JS.This();
+    var target = isStatic ? _emitStaticClassName(classElem) : JS.This();
     if (element is MethodElement && _reifyTearoff(element, node)) {
       if (isStatic) {
         // TODO(jmesserly): we could tag static/top-level function types once
         // in the module initialization, rather than at the point where they
         // escape.
         return _emitFunctionTagged(
-            new JS.PropertyAccess(target, member), element.type);
+            JS.PropertyAccess(target, member), element.type);
       }
       return runtimeCall('bind(#, #)', [target, member]);
     }
-    return new JS.PropertyAccess(target, member);
+    return JS.PropertyAccess(target, member);
   }
 
   JS.Identifier _emitVariableDef(SimpleIdentifier id, {JS.TypeRef type}) {
-    return new JS.Identifier(id.name, type: type)
+    return JS.Identifier(id.name, type: type)
       ..sourceInformation = _nodeStart(id);
   }
 
@@ -3127,7 +3124,7 @@
   }
 
   JS.Identifier _emitParameter(ParameterElement element,
-      {bool declaration: false}) {
+      {bool declaration = false}) {
     // initializing formal parameter, e.g. `Point(this._x)`
     // TODO(jmesserly): type ref is not attached in this case.
     if (element.isInitializingFormal && element.isPrivate) {
@@ -3135,11 +3132,11 @@
       /// The renamer would handle this, but it would prefer to rename the
       /// temporary used for the private symbol. Instead rename the parameter.
       return _initializingFormalTemps.putIfAbsent(
-          element, () => new JS.TemporaryId(element.name.substring(1)));
+          element, () => JS.TemporaryId(element.name.substring(1)));
     }
 
     var type = declaration ? emitTypeRef(element.type) : null;
-    return new JS.Identifier(element.name, type: type);
+    return JS.Identifier(element.name, type: type);
   }
 
   List<Annotation> _parameterMetadata(FormalParameter p) =>
@@ -3152,25 +3149,25 @@
   JS.Expression _emitAnnotatedResult(
       JS.Expression result, List<Annotation> metadata) {
     if (options.emitMetadata && metadata != null && metadata.isNotEmpty) {
-      result = new JS.ArrayInitializer(
+      result = JS.ArrayInitializer(
           [result]..addAll(metadata.map(_instantiateAnnotation)));
     }
     return result;
   }
 
   JS.Expression _emitFieldSignature(DartType type,
-      {List<Annotation> metadata, bool isFinal: true}) {
+      {List<Annotation> metadata, bool isFinal = true}) {
     var args = [_emitType(type)];
     if (options.emitMetadata && metadata != null && metadata.isNotEmpty) {
-      args.add(new JS.ArrayInitializer(
-          metadata.map(_instantiateAnnotation).toList()));
+      args.add(
+          JS.ArrayInitializer(metadata.map(_instantiateAnnotation).toList()));
     }
     return runtimeCall(isFinal ? 'finalFieldType(#)' : 'fieldType(#)', [args]);
   }
 
   JS.ArrayInitializer _emitTypeNames(
       List<DartType> types, List<FormalParameter> parameters,
-      {bool nameType: true}) {
+      {bool nameType = true}) {
     var result = <JS.Expression>[];
     for (int i = 0; i < types.length; ++i) {
       var metadata =
@@ -3178,7 +3175,7 @@
       var typeName = _emitType(types[i], nameType: nameType);
       result.add(_emitAnnotatedResult(typeName, metadata));
     }
-    return new JS.ArrayInitializer(result);
+    return JS.ArrayInitializer(result);
   }
 
   JS.ObjectInitializer _emitTypeProperties(Map<String, DartType> types) {
@@ -3186,9 +3183,9 @@
     types.forEach((name, type) {
       var key = _propertyName(name);
       var value = _emitType(type);
-      properties.add(new JS.Property(key, value));
+      properties.add(JS.Property(key, value));
     });
-    return new JS.ObjectInitializer(properties);
+    return JS.ObjectInitializer(properties);
   }
 
   /// Emit the pieces of a function type, as an array of return type,
@@ -3274,7 +3271,7 @@
   /// Emits a Dart [type] into code.
   ///
   /// If [nameType] is true, then the type will be named.
-  JS.Expression _emitType(DartType type, {bool nameType: true}) {
+  JS.Expression _emitType(DartType type, {bool nameType = true}) {
     // The void and dynamic types are not defined in core.
     if (type.isVoid) {
       return runtimeCall('void');
@@ -3321,7 +3318,7 @@
 
     if (type is TypeParameterType) {
       _typeParamInConst?.add(type);
-      return new JS.Identifier(name);
+      return JS.Identifier(name);
     }
 
     if (type is ParameterizedType) {
@@ -3345,12 +3342,13 @@
     return js.call('#(#)', [genericName, typeArgs]);
   }
 
-  JS.PropertyAccess _emitTopLevelName(Element e, {String suffix: ''}) {
+  JS.PropertyAccess _emitTopLevelName(Element e, {String suffix = ''}) {
     return _emitJSInterop(e) ?? _emitTopLevelNameNoInterop(e, suffix: suffix);
   }
 
-  JS.PropertyAccess _emitTopLevelNameNoInterop(Element e, {String suffix: ''}) {
-    return new JS.PropertyAccess(
+  JS.PropertyAccess _emitTopLevelNameNoInterop(Element e,
+      {String suffix = ''}) {
+    return JS.PropertyAccess(
         emitLibraryName(e.library), _emitTopLevelMemberName(e, suffix: suffix));
   }
 
@@ -3358,7 +3356,7 @@
   ///
   /// NOTE: usually you should use [_emitTopLevelName] instead of this. This
   /// function does not handle JS interop.
-  JS.Expression _emitTopLevelMemberName(Element e, {String suffix: ''}) {
+  JS.Expression _emitTopLevelMemberName(Element e, {String suffix = ''}) {
     var name = getJSExportName(e) ?? _getElementName(e);
     return _propertyName(name + suffix);
   }
@@ -3389,7 +3387,7 @@
       var x = _bindLeftHandSide(vars, left, context: left);
       // Capture the result of evaluating the left hand side in a temp.
       var t = _bindValue(vars, 't', x, context: x);
-      return new JS.MetaLet(vars, [
+      return JS.MetaLet(vars, [
         js.call('# == null ? # : #',
             [_visitExpression(t), _emitSet(x, right), _visitExpression(t)])
       ]);
@@ -3408,7 +3406,7 @@
 
     var castTo = getImplicitOperationCast(left);
     if (castTo != null) inc = CoercionReifier.castExpression(inc, castTo);
-    return new JS.MetaLet(vars, [_emitSet(lhs, inc)]);
+    return JS.MetaLet(vars, [_emitSet(lhs, inc)]);
   }
 
   JS.Expression _emitSet(Expression left, Expression right) {
@@ -3513,7 +3511,7 @@
     // Unqualified class member. This could mean implicit `this`, or implicit
     // static from the same class.
     if (element is FieldElement) {
-      return _emitSetField(right, element, new JS.This(), node);
+      return _emitSetField(right, element, JS.This(), node);
     }
 
     // We should not get here.
@@ -3529,7 +3527,7 @@
     } else if (element is ParameterElement) {
       target = _emitParameter(element);
     } else {
-      target = new JS.Identifier(element.name);
+      target = JS.Identifier(element.name);
     }
     target.sourceInformation = _nodeSpan(left);
     return _visitExpression(rhs).toAssignExpression(target);
@@ -3549,7 +3547,7 @@
     var member = _emitMemberName(field.name,
         isStatic: isStatic, type: classElem.type, element: field.setter);
     jsTarget = isStatic
-        ? (new JS.PropertyAccess(_emitStaticClassName(classElem), member)
+        ? (JS.PropertyAccess(_emitStaticClassName(classElem), member)
           ..sourceInformation = _nodeSpan(id))
         : _emitTargetAccess(jsTarget, member, field.setter, id);
     return _visitExpression(right).toAssignExpression(jsTarget);
@@ -3570,25 +3568,25 @@
       _visitExpression(left),
       _emitSet(_stripNullAwareOp(node, left), right)
     ]);
-    return new JS.MetaLet(vars, [body]);
+    return JS.MetaLet(vars, [body]);
   }
 
   @override
   JS.Block visitExpressionFunctionBody(ExpressionFunctionBody node) {
-    return new JS.Block([_visitExpression(node.expression).toReturn()]);
+    return JS.Block([_visitExpression(node.expression).toReturn()]);
   }
 
   @override
-  JS.Block visitEmptyFunctionBody(EmptyFunctionBody node) => new JS.Block([]);
+  JS.Block visitEmptyFunctionBody(EmptyFunctionBody node) => JS.Block([]);
 
   @override
   JS.Block visitBlockFunctionBody(BlockFunctionBody node) {
-    return new JS.Block(_visitStatementList(node.block.statements));
+    return JS.Block(_visitStatementList(node.block.statements));
   }
 
   @override
   JS.Block visitBlock(Block node) =>
-      new JS.Block(_visitStatementList(node.statements), isScope: true);
+      JS.Block(_visitStatementList(node.statements), isScope: true);
 
   @override
   visitMethodInvocation(MethodInvocation node) {
@@ -3677,7 +3675,7 @@
     if (!_superAllowed && jsTarget is JS.Super && member != null) {
       result = _getSuperHelper(member, jsName);
     } else {
-      result = new JS.PropertyAccess(jsTarget, jsName);
+      result = JS.PropertyAccess(jsTarget, jsName);
     }
     if (node != null) {
       // Use the full span for a cascade property so we can hover over `bar` in
@@ -3701,28 +3699,28 @@
                 ? 'function(x) { super[#] = x; }'
                 : 'function() { return super[#]; }',
             [jsName]);
-        return new JS.Method(new JS.TemporaryId(member.variable.name), fn,
+        return JS.Method(JS.TemporaryId(member.variable.name), fn,
             isGetter: !isSetter, isSetter: isSetter);
       } else {
         var method = member as MethodElement;
-        var params = new List<JS.Identifier>.from(
-            _emitTypeFormals(method.typeParameters));
+        var params =
+            List<JS.Identifier>.from(_emitTypeFormals(method.typeParameters));
         for (var param in method.parameters) {
           if (param.isNamed) {
             params.add(namedArgumentTemp);
             break;
           }
-          params.add(new JS.Identifier(param.name));
+          params.add(JS.Identifier(param.name));
         }
 
         var fn = js.fun(
             'function(#) { return super[#](#); }', [params, jsName, params]);
         var name = method.name;
         name = JS.friendlyNameForDartOperator[name] ?? name;
-        return new JS.Method(new JS.TemporaryId(name), fn);
+        return JS.Method(JS.TemporaryId(name), fn);
       }
     });
-    return new JS.PropertyAccess(new JS.This(), jsMethod.name);
+    return JS.PropertyAccess(JS.This(), jsMethod.name);
   }
 
   JS.Expression _emitMethodCall(Expression target, MethodInvocation node) {
@@ -3760,7 +3758,7 @@
       if (fromType is InterfaceType) {
         var callName = _getImplicitCallTarget(fromType);
         if (callName != null) {
-          jsTarget = new JS.PropertyAccess(jsTarget, callName);
+          jsTarget = JS.PropertyAccess(jsTarget, callName);
         }
       }
     }
@@ -3769,7 +3767,7 @@
       jsTarget = js.call('#._check(#)', [_emitType(castTo), jsTarget]);
     }
     if (typeArgs != null) args.insertAll(0, typeArgs);
-    return new JS.Call(jsTarget, args);
+    return JS.Call(jsTarget, args);
   }
 
   JS.Expression _emitDynamicInvoke(
@@ -3851,7 +3849,7 @@
       return _emitJSDoubleEq(args, negated: negated);
     }
     var code = negated ? '!#' : '#';
-    return js.call(code, new JS.Call(_emitTopLevelName(_coreIdentical), args));
+    return js.call(code, JS.Call(_emitTopLevelName(_coreIdentical), args));
   }
 
   /// Emits a function call, to a top-level function, local function, or
@@ -3891,7 +3889,7 @@
       }
     }
 
-    return new JS.Call(fn, args);
+    return JS.Call(fn, args);
   }
 
   JS.Node _emitDebuggerCall(InvocationExpression node) {
@@ -3926,10 +3924,10 @@
         //
         // For a single `message` argument, use `{message: ...}`, which
         // coerces to true (the default value of `when`).
-        ? (foundWhen ? jsArgs[0].value : new JS.ObjectInitializer(jsArgs))
+        ? (foundWhen ? jsArgs[0].value : JS.ObjectInitializer(jsArgs))
         // If we have both `message` and `when` arguments, evaluate them in
         // order, then extract the `when` argument.
-        : js.call('#.when', new JS.ObjectInitializer(jsArgs));
+        : js.call('#.when', JS.ObjectInitializer(jsArgs));
     return isStatement
         ? js.statement('if (#) debugger;', when)
         : js.call('# && (() => { debugger; return true })()', when);
@@ -3999,7 +3997,7 @@
     String source;
     if (code is StringInterpolation) {
       if (args.length > 2) {
-        throw new ArgumentError(
+        throw ArgumentError(
             "Can't mix template args and string interpolation in JS calls.");
       }
       templateArgs = <Expression>[];
@@ -4045,14 +4043,13 @@
       if (arg is NamedExpression) {
         named.add(visitNamedExpression(arg));
       } else if (arg is MethodInvocation && isJsSpreadInvocation(arg)) {
-        args.add(
-            new JS.Spread(_visitExpression(arg.argumentList.arguments[0])));
+        args.add(JS.Spread(_visitExpression(arg.argumentList.arguments[0])));
       } else {
         args.add(_visitExpression(arg));
       }
     }
     if (named.isNotEmpty) {
-      args.add(new JS.ObjectInitializer(named));
+      args.add(JS.ObjectInitializer(named));
     }
     return args;
   }
@@ -4060,7 +4057,7 @@
   @override
   JS.Property visitNamedExpression(NamedExpression node) {
     assert(node.parent is ArgumentList);
-    return new JS.Property(
+    return JS.Property(
         _propertyName(node.name.label.name), _visitExpression(node.expression));
   }
 
@@ -4068,7 +4065,7 @@
     var jsParams = <JS.Identifier>[];
     for (var p in member.parameters) {
       if (p.isPositional) {
-        jsParams.add(new JS.Identifier(p.name));
+        jsParams.add(JS.Identifier(p.name));
       } else {
         jsParams.add(namedArgumentTemp);
         break;
@@ -4098,14 +4095,14 @@
 
   @override
   JS.EmptyStatement visitEmptyStatement(EmptyStatement node) =>
-      new JS.EmptyStatement();
+      JS.EmptyStatement();
 
   @override
   JS.Statement visitAssertStatement(AssertStatement node) =>
       _emitAssert(node.condition, node.message);
 
   JS.Statement _emitAssert(Expression condition, Expression message) {
-    if (!options.enableAsserts) return new JS.EmptyStatement();
+    if (!options.enableAsserts) return JS.EmptyStatement();
     // TODO(jmesserly): only emit in checked mode.
     var conditionType = condition.staticType;
     var jsCondition = _visitExpression(condition);
@@ -4151,7 +4148,7 @@
         _asyncStarController,
         helperName,
         jsExpr,
-        new JS.Yield(null)..sourceInformation = _nodeStart(node)
+        JS.Yield(null)..sourceInformation = _nodeStart(node)
       ]);
     }
     // A normal yield in a sync*
@@ -4160,7 +4157,7 @@
 
   @override
   JS.Expression visitAwaitExpression(AwaitExpression node) {
-    return new JS.Yield(_visitExpression(node.expression));
+    return JS.Yield(_visitExpression(node.expression));
   }
 
   /// This is not used--we emit top-level fields as we are emitting the
@@ -4203,7 +4200,7 @@
           //     dart.fn(f, typeOfF);
           //
           value = _emitArrowFunction(initializer);
-          return new JS.Block([
+          return JS.Block([
             value.toVariableDeclaration(name),
             _emitFunctionTagged(
                     name, getStaticType(initializer) as FunctionType,
@@ -4223,7 +4220,7 @@
   JS.VariableDeclarationList visitVariableDeclarationList(
       VariableDeclarationList node) {
     if (node == null) return null;
-    return new JS.VariableDeclarationList(
+    return JS.VariableDeclarationList(
         'let', node.variables?.map(visitVariableDeclaration)?.toList());
   }
 
@@ -4237,7 +4234,7 @@
 
     var name =
         _emitVariableDef(node.name, type: emitTypeRef(node.element.type));
-    return new JS.VariableInitialization(
+    return JS.VariableInitialization(
         name, _visitInitializer(node.initializer, node.element));
   }
 
@@ -4280,7 +4277,7 @@
   JS.Expression _visitInitializer(Expression init, Element variable) {
     // explicitly initialize to null, to avoid getting `undefined`.
     // TODO(jmesserly): do this only for vars that aren't definitely assigned.
-    if (init == null) return new JS.LiteralNull();
+    if (init == null) return JS.LiteralNull();
     return _annotatedNullCheck(variable)
         ? notNull(init)
         : _visitExpression(init);
@@ -4296,20 +4293,20 @@
       var element = node.element;
       var access = emitFieldName(element);
       accessors.add(closureAnnotate(
-          new JS.Method(
+          JS.Method(
               access,
               js.call('function() { return #; }',
                   _visitInitializer(node.initializer, element)) as JS.Fun,
               isGetter: true)
-            ..sourceInformation = _hoverComment(
-                new JS.PropertyAccess(objExpr, access), node.name),
+            ..sourceInformation =
+                _hoverComment(JS.PropertyAccess(objExpr, access), node.name),
           _findAccessor(element, getter: true),
           node));
 
       // TODO(jmesserly): currently uses a dummy setter to indicate writable.
       if (!node.isFinal && !node.isConst) {
         accessors.add(closureAnnotate(
-            new JS.Method(access, js.call('function(_) {}') as JS.Fun,
+            JS.Method(access, js.call('function(_) {}') as JS.Fun,
                 isSetter: true),
             _findAccessor(element, getter: false),
             node));
@@ -4332,8 +4329,7 @@
 
   JS.Expression _emitConstructorName(DartType type, String name) {
     return _emitJSInterop(type.element) ??
-        new JS.PropertyAccess(
-            _emitConstructorAccess(type), _constructorName(name));
+        JS.PropertyAccess(_emitConstructorAccess(type), _constructorName(name));
   }
 
   @override
@@ -4392,8 +4388,8 @@
       var ctor = _emitConstructorName(type, name);
       if (ctorNode != null) ctor.sourceInformation = _nodeSpan(ctorNode);
       return element.isFactory && !_hasJSInteropAnnotation(classElem)
-          ? new JS.Call(ctor, args)
-          : new JS.New(ctor, args);
+          ? JS.Call(ctor, args)
+          : JS.New(ctor, args);
     }
 
     return isConst ? _emitConst(emitNew) : emitNew();
@@ -4420,9 +4416,10 @@
 
   /// If the constant [value] is primitive, directly emit the
   /// corresponding JavaScript.  Otherwise, return null.
-  JS.Expression _emitDartObject(DartObject value, {bool handleUnknown: false}) {
+  JS.Expression _emitDartObject(DartObject value,
+      {bool handleUnknown = false}) {
     if (value == null || value.isNull) {
-      return new JS.LiteralNull();
+      return JS.LiteralNull();
     }
     var type = value.type;
     // Handle unknown value: when the declared variable wasn't found, and no
@@ -4433,7 +4430,7 @@
     // https://api.dartlang.org/stable/1.20.1/dart-core/bool/bool.fromEnvironment.html
     if (!value.hasKnownValue) {
       if (!handleUnknown) return null;
-      return type == types.boolType ? js.boolean(false) : new JS.LiteralNull();
+      return type == types.boolType ? js.boolean(false) : JS.LiteralNull();
     }
     if (type == types.boolType) {
       return js.boolean(value.toBoolValue());
@@ -4487,10 +4484,9 @@
           var args = ctor.positionalArguments.map(_emitDartObject).toList();
           var named = <JS.Property>[];
           ctor.namedArguments.forEach((name, value) {
-            named.add(
-                new JS.Property(_propertyName(name), _emitDartObject(value)));
+            named.add(JS.Property(_propertyName(name), _emitDartObject(value)));
           });
-          if (named.isNotEmpty) args.add(new JS.ObjectInitializer(named));
+          if (named.isNotEmpty) args.add(JS.ObjectInitializer(named));
           return args;
         }, isConst: true);
       }
@@ -4520,7 +4516,7 @@
       if (result != null) {
         return result;
       }
-      throw new StateError('failed to evaluate $node');
+      throw StateError('failed to evaluate $node');
     }
 
     // TODO(jmesserly): this is a workaround for Analyzer's type not
@@ -4636,7 +4632,7 @@
       var vars = <JS.MetaLetVariable, JS.Expression>{};
       // Desugar `l ?? r` as `l != null ? l : r`
       var l = _visitExpression(_bindValue(vars, 'l', left, context: left));
-      return new JS.MetaLet(vars, [
+      return JS.MetaLet(vars, [
         js.call('# != null ? # : #', [l, l, _visitExpression(right)])
       ]);
     }
@@ -4893,7 +4889,7 @@
       expr is NullLiteral || getStaticType(expr).isDartCoreNull;
 
   SimpleIdentifier _createTemporary(String name, DartType type,
-      {bool nullable: true, JS.Expression variable, bool dynamicInvoke}) {
+      {bool nullable = true, JS.Expression variable, bool dynamicInvoke}) {
     // We use an invalid source location to signal that this is a temporary.
     // See [_isTemporary].
     // TODO(jmesserly): alternatives are
@@ -4902,11 +4898,11 @@
     // * add a new property to LocalVariableElementImpl.
     // * create a new subtype of LocalVariableElementImpl to mark a temp.
     var id = astFactory
-        .simpleIdentifier(new StringToken(TokenType.IDENTIFIER, name, -1));
+        .simpleIdentifier(StringToken(TokenType.IDENTIFIER, name, -1));
 
-    variable ??= new JS.TemporaryId(name);
+    variable ??= JS.TemporaryId(name);
 
-    var idElement = new TemporaryVariableElement.forNode(id, variable)
+    var idElement = TemporaryVariableElement.forNode(id, variable)
       ..enclosingElement = _currentElement;
     id.staticElement = idElement;
     id.staticType = type;
@@ -4929,7 +4925,7 @@
     // params are available.
     if (_currentFunction == null || usesTypeParams) return jsExpr;
 
-    var temp = new JS.TemporaryId('const');
+    var temp = JS.TemporaryId('const');
     moduleItems.add(js.statement('let #;', [temp]));
     return js.call('# || (# = #)', [temp, temp, jsExpr]);
   }
@@ -5004,7 +5000,7 @@
     // No need to do anything for stateless expressions.
     if (isStateless(_currentFunction, expr, context)) return expr;
 
-    var variable = new JS.MetaLetVariable(name);
+    var variable = JS.MetaLetVariable(name);
     var t = _createTemporary(name, getStaticType(expr),
         variable: variable,
         dynamicInvoke: isDynamicInvoke(expr),
@@ -5060,7 +5056,7 @@
       ..staticType = getStaticType(expr);
 
     var body = <JS.Expression>[_emitSet(left, increment), _visitExpression(x)];
-    return new JS.MetaLet(vars, body, statelessResult: true);
+    return JS.MetaLet(vars, body, statelessResult: true);
   }
 
   @override
@@ -5095,7 +5091,7 @@
           ..staticElement = node.staticElement
           ..staticType = getStaticType(expr);
 
-        return new JS.MetaLet(vars, [_emitSet(x, increment)]);
+        return JS.MetaLet(vars, [_emitSet(x, increment)]);
       }
       return js.call('$op#', notNull(expr));
     }
@@ -5126,7 +5122,7 @@
     _cascadeTarget = _bindValue(vars, '_', node.target, context: node);
     var sections = _visitExpressionList(node.cascadeSections);
     sections.add(_visitExpression(_cascadeTarget));
-    var result = new JS.MetaLet(vars, sections, statelessResult: true);
+    var result = JS.MetaLet(vars, sections, statelessResult: true);
     _cascadeTarget = savedCascadeTemp;
     return result;
   }
@@ -5141,14 +5137,14 @@
       ..sourceInformation = _nodeSpan(node);
     var isRestArg = node is! DefaultFormalParameter &&
         findAnnotation(node.element, isJsRestAnnotation) != null;
-    return isRestArg ? new JS.RestParameter(id) : id;
+    return isRestArg ? JS.RestParameter(id) : id;
   }
 
   @override
-  JS.This visitThisExpression(ThisExpression node) => new JS.This();
+  JS.This visitThisExpression(ThisExpression node) => JS.This();
 
   @override
-  JS.Expression visitSuperExpression(SuperExpression node) => new JS.Super();
+  JS.Expression visitSuperExpression(SuperExpression node) => JS.Super();
 
   @override
   visitPrefixedIdentifier(PrefixedIdentifier node) {
@@ -5179,7 +5175,7 @@
     var t = _bindValue(vars, 't', target, context: target);
 
     var desugared = _stripNullAwareOp(node, t);
-    return new JS.MetaLet(vars, [
+    return JS.MetaLet(vars, [
       js.call('# == null ? null : #',
           [_visitExpression(t), _visitExpression(desugared)])
     ]);
@@ -5250,7 +5246,7 @@
         !virtualFields.isVirtual(field)) {
       // If super.x is a sealed field, then x is an instance property since
       // subclasses cannot override x.
-      jsTarget = new JS.This()..sourceInformation = jsTarget.sourceInformation;
+      jsTarget = JS.This()..sourceInformation = jsTarget.sourceInformation;
     }
 
     JS.Expression result;
@@ -5333,7 +5329,7 @@
   visitIndexExpression(IndexExpression node) {
     var target = _getTarget(node);
     if (_useNativeJsIndexer(target.staticType)) {
-      return new JS.PropertyAccess(
+      return JS.PropertyAccess(
           _visitExpression(target), _visitExpression(node.index));
     }
     return _emitOperatorCall(target, '[]', [node.index], node.staticElement);
@@ -5387,15 +5383,15 @@
     var result = _visitStatement(stmt);
     if (result is JS.ExpressionStatement &&
         result.expression is JS.VariableDeclarationList) {
-      return new JS.Block([result]);
+      return JS.Block([result]);
     }
     return result;
   }
 
   @override
   JS.If visitIfStatement(IfStatement node) {
-    return new JS.If(_visitTest(node.condition),
-        _visitScope(node.thenStatement), _visitScope(node.elseStatement));
+    return JS.If(_visitTest(node.condition), _visitScope(node.thenStatement),
+        _visitScope(node.elseStatement));
   }
 
   @override
@@ -5406,21 +5402,21 @@
     JS.Expression update;
     if (updaters != null && updaters.isNotEmpty) {
       update =
-          new JS.Expression.binary(updaters.map(_visitExpression).toList(), ',')
+          JS.Expression.binary(updaters.map(_visitExpression).toList(), ',')
               .toVoidExpression();
     }
     var condition = _visitTest(node.condition);
-    return new JS.For(init, condition, update, _visitScope(node.body));
+    return JS.For(init, condition, update, _visitScope(node.body));
   }
 
   @override
   JS.While visitWhileStatement(WhileStatement node) {
-    return new JS.While(_visitTest(node.condition), _visitScope(node.body));
+    return JS.While(_visitTest(node.condition), _visitScope(node.body));
   }
 
   @override
   JS.Do visitDoStatement(DoStatement node) {
-    return new JS.Do(_visitScope(node.body), _visitTest(node.condition));
+    return JS.Do(_visitScope(node.body), _visitTest(node.condition));
   }
 
   @override
@@ -5436,11 +5432,10 @@
       var id = node.loopVariable.identifier;
       init = js.call('let #', _emitVariableDef(id));
       if (_annotatedNullCheck(node.loopVariable.element)) {
-        body = new JS.Block(
-            [_nullParameterCheck(new JS.Identifier(id.name)), body]);
+        body = JS.Block([_nullParameterCheck(JS.Identifier(id.name)), body]);
       }
     }
-    return new JS.ForOf(init, iterable, body);
+    return JS.ForOf(init, iterable, body);
   }
 
   JS.Statement _emitAwaitFor(ForEachStatement node) {
@@ -5467,7 +5462,7 @@
         streamIterator.element.unnamedConstructor,
         streamIterator,
         () => [_visitExpression(node.iterable)]);
-    var iter = new JS.TemporaryId('iter');
+    var iter = JS.TemporaryId('iter');
     var variable = node.identifier ?? node.loopVariable.identifier;
     var init = _visitExpression(node.identifier);
     if (init == null) {
@@ -5485,11 +5480,11 @@
         [
           iter,
           createStreamIter,
-          new JS.Yield(js.call('#.moveNext()', iter))
+          JS.Yield(js.call('#.moveNext()', iter))
             ..sourceInformation = _nodeStart(variable),
           init,
           _visitStatement(node.body),
-          new JS.Yield(js.call('#.cancel()', iter))
+          JS.Yield(js.call('#.cancel()', iter))
             ..sourceInformation = _nodeStart(variable)
         ]);
   }
@@ -5497,13 +5492,13 @@
   @override
   visitBreakStatement(BreakStatement node) {
     var label = node.label;
-    return new JS.Break(label?.name);
+    return JS.Break(label?.name);
   }
 
   @override
   visitContinueStatement(ContinueStatement node) {
     var label = node.label;
-    return new JS.Continue(label?.name);
+    return JS.Continue(label?.name);
   }
 
   @override
@@ -5512,7 +5507,7 @@
     _superAllowed = false;
     var finallyBlock = _visitStatement(node.finallyBlock)?.toBlock();
     _superAllowed = savedSuperAllowed;
-    return new JS.Try(_visitStatement(node.body).toBlock(),
+    return JS.Try(_visitStatement(node.body).toBlock(),
         _visitCatch(node.catchClauses), finallyBlock);
   }
 
@@ -5543,7 +5538,7 @@
       catchVarDecl..sourceInformation = _nodeStart(_catchParameter);
     }
     _catchParameter = savedCatch;
-    return new JS.Catch(catchVarDecl, new JS.Block([catchBody]));
+    return JS.Catch(catchVarDecl, JS.Block([catchBody]));
   }
 
   JS.Statement _catchClauseGuard(CatchClause clause, JS.Statement otherwise) {
@@ -5556,7 +5551,7 @@
     // has special case for typeof.
     var castType = _emitType(clause.exceptionType.type);
 
-    return new JS.If(
+    return JS.If(
         js.call('#.is(#)', [castType, _emitSimpleIdentifier(_catchParameter)]),
         then,
         otherwise)
@@ -5570,7 +5565,7 @@
     var body = <JS.Statement>[];
 
     var savedCatch = _catchParameter;
-    var vars = new HashSet<String>();
+    var vars = HashSet<String>();
     if (node.catchKeyword != null) {
       var name = node.exceptionParameter;
       if (name == _catchParameter) {
@@ -5605,7 +5600,7 @@
       body.insert(0, js.comment('Unimplemented case labels: ${node.labels}'));
     }
     // TODO(jmesserly): make sure we are statically checking fall through
-    return new JS.SwitchCase(expr, new JS.Block(body));
+    return JS.SwitchCase(expr, JS.Block(body));
   }
 
   @override
@@ -5615,7 +5610,7 @@
       body.insert(0, js.comment('Unimplemented case labels: ${node.labels}'));
     }
     // TODO(jmesserly): make sure we are statically checking fall through
-    return new JS.SwitchCase.defaultCase(new JS.Block(body));
+    return JS.SwitchCase.defaultCase(JS.Block(body));
   }
 
   JS.SwitchCase _emitSwitchMember(SwitchMember node) {
@@ -5627,7 +5622,7 @@
   }
 
   @override
-  JS.Switch visitSwitchStatement(SwitchStatement node) => new JS.Switch(
+  JS.Switch visitSwitchStatement(SwitchStatement node) => JS.Switch(
       _visitExpression(node.expression),
       node.members?.map(_emitSwitchMember)?.toList());
 
@@ -5635,7 +5630,7 @@
   JS.Statement visitLabeledStatement(LabeledStatement node) {
     var result = _visitStatement(node.statement);
     for (var label in node.labels.reversed) {
-      result = new JS.LabeledStatement(label.label.name, result);
+      result = JS.LabeledStatement(label.label.name, result);
     }
     return result;
   }
@@ -5651,14 +5646,14 @@
     if (node.value != null) {
       return js.number(node.value);
     }
-    return new JS.LiteralNumber('${node.literal}');
+    return JS.LiteralNumber('${node.literal}');
   }
 
   @override
   visitDoubleLiteral(DoubleLiteral node) => js.number(node.value);
 
   @override
-  visitNullLiteral(NullLiteral node) => new JS.LiteralNull();
+  visitNullLiteral(NullLiteral node) => JS.LiteralNull();
 
   @override
   visitSymbolLiteral(SymbolLiteral node) {
@@ -5700,7 +5695,7 @@
   }
 
   JS.Expression _emitList(DartType itemType, List<JS.Expression> items) {
-    var list = new JS.ArrayInitializer(items);
+    var list = JS.ArrayInitializer(items);
 
     // TODO(jmesserly): analyzer will usually infer `List<Object>` because
     // that is the least upper bound of the element types. So we rarely
@@ -5764,7 +5759,7 @@
   JS.Expression visitAdjacentStrings(AdjacentStrings node) {
     var nodes = node.strings;
     if (nodes == null || nodes.isEmpty) return null;
-    return new JS.Expression.binary(_visitExpressionList(nodes), '+');
+    return JS.Expression.binary(_visitExpressionList(nodes), '+');
   }
 
   @override
@@ -5783,7 +5778,7 @@
       }
     }
     if (parts.isEmpty) return js.string('');
-    return new JS.Expression.binary(parts, '+');
+    return JS.Expression.binary(parts, '+');
   }
 
   @override
@@ -5835,7 +5830,7 @@
   /// of `.bar` to ensure `foo.bar` has a hover tooltip.
   NodeEnd _nodeEnd(AstNode node) {
     var loc = _getLocation(node.end);
-    return loc != null ? new NodeEnd(loc) : null;
+    return loc != null ? NodeEnd(loc) : null;
   }
 
   /// Gets the end of a function for source mapping.
@@ -5848,7 +5843,7 @@
   /// Alternatively this can be supplied with [_functionSpan].
   NodeEnd _functionEnd(AstNode node) {
     var loc = _getLocation(node.endToken.offset);
-    return loc != null ? new NodeEnd(loc) : null;
+    return loc != null ? NodeEnd(loc) : null;
   }
 
   /// Similar to [_functionEnd] but also marks the start of the function.
@@ -5857,7 +5852,7 @@
   NodeSpan _functionSpan(AstNode node) {
     var start = _getLocation(node.offset);
     var end = _getLocation(node.endToken.offset);
-    return start != null && end != null ? new NodeSpan(start, end) : null;
+    return start != null && end != null ? NodeSpan(start, end) : null;
   }
 
   /// Combines [_nodeStart] and [_nodeEnd], used when we want to support
@@ -5865,7 +5860,7 @@
   NodeSpan _nodeSpan(AstNode node) {
     var start = _getLocation(node.offset);
     var end = _getLocation(node.end);
-    return start != null && end != null ? new NodeSpan(start, end) : null;
+    return start != null && end != null ? NodeSpan(start, end) : null;
   }
 
   /// Adds a hover comment for Dart [node] using JS expression [expr], where
@@ -5877,9 +5872,7 @@
   HoverComment _hoverComment(JS.Expression expr, AstNode node) {
     var start = _getLocation(node.offset);
     var end = _getLocation(node.end);
-    return start != null && end != null
-        ? new HoverComment(expr, start, end)
-        : null;
+    return start != null && end != null ? HoverComment(expr, start, end) : null;
   }
 
   SourceLocation _getLocation(int offset) {
@@ -5897,10 +5890,10 @@
       fileUri = sourcePath.startsWith('package:')
           ? Uri.parse(sourcePath)
           // TODO(jmesserly): shouldn't this be path.toUri?
-          : new Uri.file(sourcePath);
+          : Uri.file(sourcePath);
     }
     var loc = unit.lineInfo.getLocation(offset);
-    return new SourceLocation(offset,
+    return SourceLocation(offset,
         sourceUrl: fileUri,
         line: loc.lineNumber - 1,
         column: loc.columnNumber - 1);
@@ -5995,7 +5988,7 @@
   ///
   JS.Expression _emitMemberName(String name,
       {DartType type,
-      bool isStatic: false,
+      bool isStatic = false,
       bool useExtension,
       Element element}) {
     // Static members skip the rename steps and may require JS interop renames.
@@ -6012,9 +6005,9 @@
         var parts = runtimeName.split('.');
         if (parts.length < 2) return _propertyName(runtimeName);
 
-        JS.Expression result = new JS.Identifier(parts[0]);
+        JS.Expression result = JS.Identifier(parts[0]);
         for (int i = 1; i < parts.length; i++) {
-          result = new JS.PropertyAccess(result, _propertyName(parts[i]));
+          result = JS.PropertyAccess(result, _propertyName(parts[i]));
         }
         return result;
       }
@@ -6075,11 +6068,11 @@
   JS.TemporaryId _getExtensionSymbolInternal(String name) {
     return _extensionSymbols.putIfAbsent(
         name,
-        () => new JS.TemporaryId(
+        () => JS.TemporaryId(
             '\$${JS.friendlyNameForDartOperator[name] ?? name}'));
   }
 
-  var _forwardingCache = new HashMap<Element, Map<String, Element>>();
+  var _forwardingCache = HashMap<Element, Map<String, Element>>();
 
   Element _lookupForwardedMember(ClassElement element, String name) {
     // We only care about public methods.
@@ -6148,7 +6141,7 @@
     // It's either one of the libraries in this module, or it's an import.
     return _libraries[library] ??
         _imports.putIfAbsent(library,
-            () => new JS.TemporaryId(jsLibraryName(_libraryRoot, library)));
+            () => JS.TemporaryId(jsLibraryName(_libraryRoot, library)));
   }
 
   T closureAnnotate<T extends JS.Node>(
@@ -6225,8 +6218,7 @@
       'throw(Error(#))', js.escapedString("compile error: $message"));
 
   JS.Node _unreachable(Object node) {
-    throw new UnsupportedError(
-        'tried to generate an unreachable node: `$node`');
+    throw UnsupportedError('tried to generate an unreachable node: `$node`');
   }
 
   /// Unused, see methods for emitting declarations.
diff --git a/pkg/dev_compiler/lib/src/analyzer/command.dart b/pkg/dev_compiler/lib/src/analyzer/command.dart
index 2aad791..c7aac45 100644
--- a/pkg/dev_compiler/lib/src/analyzer/command.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/command.dart
@@ -36,7 +36,7 @@
       args = filterUnknownArguments(args, parser);
     }
     argResults = parser.parse(args);
-    analyzerOptions = new AnalyzerOptions.fromArguments(argResults);
+    analyzerOptions = AnalyzerOptions.fromArguments(argResults);
   } on FormatException catch (error) {
     printFn('$error\n\n$_usageMessage');
     return 64;
@@ -91,8 +91,8 @@
   }
 }
 
-ArgParser ddcArgParser({bool hide: true}) {
-  var argParser = new ArgParser(allowTrailingOptions: true)
+ArgParser ddcArgParser({bool hide = true}) {
+  var argParser = ArgParser(allowTrailingOptions: true)
     ..addFlag('help',
         abbr: 'h',
         help: 'Display this message. Add -v to show hidden options.',
@@ -128,8 +128,8 @@
 
 void _compile(ArgResults argResults, AnalyzerOptions analyzerOptions,
     void printFn(Object obj)) {
-  var compiler = new ModuleCompiler(analyzerOptions);
-  var compilerOpts = new CompilerOptions.fromArguments(argResults);
+  var compiler = ModuleCompiler(analyzerOptions);
+  var compilerOpts = CompilerOptions.fromArguments(argResults);
   var outPaths = argResults['out'] as List<String>;
   var moduleFormats = parseModuleFormatOption(argResults);
   bool singleOutFile = argResults['single-out-file'];
@@ -175,7 +175,7 @@
     modulePath = path.basenameWithoutExtension(firstOutPath);
   }
 
-  var unit = new BuildUnit(
+  var unit = BuildUnit(
       modulePath,
       libraryRoot,
       argResults.rest,
@@ -187,8 +187,8 @@
 
   if (!module.isValid) {
     throw compilerOpts.unsafeForceCompile
-        ? new ForceCompileErrorException()
-        : new CompileErrorException();
+        ? ForceCompileErrorException()
+        : CompileErrorException();
   }
 
   // Write JS file, as well as source map and summary (if requested).
@@ -206,7 +206,7 @@
     for (var summaryPath in summaryPaths) {
       // Only overwrite if summary changed.  This plays better with timestamp
       // based build systems.
-      var file = new File(summaryPath);
+      var file = File(summaryPath);
       if (!file.existsSync() ||
           _changed(file.readAsBytesSync(), module.summaryBytes)) {
         if (!file.parent.existsSync()) file.parent.createSync(recursive: true);
@@ -254,7 +254,7 @@
   try {
     // This is relative to bin/snapshot, so ../..
     String versionPath = Platform.script.resolve('../../version').toFilePath();
-    File versionFile = new File(versionPath);
+    File versionFile = File(versionPath);
     return versionFile.readAsStringSync().trim();
   } catch (_) {
     // This happens when the script is not running in the context of an SDK.
@@ -263,7 +263,7 @@
 }
 
 void _usageException(String message) {
-  throw new UsageException(message, _usageMessage);
+  throw UsageException(message, _usageMessage);
 }
 
 /// Thrown when the input source code has errors.
@@ -279,8 +279,8 @@
 
 // TODO(jmesserly): fix this function in analyzer
 List<String> filterUnknownArguments(List<String> args, ArgParser parser) {
-  Set<String> knownOptions = new Set<String>();
-  Set<String> knownAbbreviations = new Set<String>();
+  Set<String> knownOptions = Set<String>();
+  Set<String> knownAbbreviations = Set<String>();
   parser.options.forEach((String name, option) {
     knownOptions.add(name);
     String abbreviation = option.abbr;
diff --git a/pkg/dev_compiler/lib/src/analyzer/context.dart b/pkg/dev_compiler/lib/src/analyzer/context.dart
index 5ce463c..b2d7198 100644
--- a/pkg/dev_compiler/lib/src/analyzer/context.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/context.dart
@@ -51,7 +51,7 @@
       {this.contextBuilderOptions,
       List<String> summaryPaths,
       String dartSdkPath,
-      this.customUrlMappings: const {}})
+      this.customUrlMappings = const {}})
       : dartSdkPath = dartSdkPath ?? getSdkDir().path,
         summaryPaths = summaryPaths ?? const [] {
     contextBuilderOptions.declaredVariables ??= const {};
@@ -62,13 +62,13 @@
       {String dartSdkPath,
       String dartSdkSummaryPath,
       List<String> summaryPaths}) {
-    var contextBuilderOptions = new ContextBuilderOptions()
-      ..defaultOptions = (new AnalysisOptionsImpl()
+    var contextBuilderOptions = ContextBuilderOptions()
+      ..defaultOptions = (AnalysisOptionsImpl()
         ..strongMode = true
         ..previewDart2 = true)
       ..dartSdkSummaryPath = dartSdkSummaryPath;
 
-    return new AnalyzerOptions._(
+    return AnalyzerOptions._(
         contextBuilderOptions: contextBuilderOptions,
         dartSdkPath: dartSdkPath,
         summaryPaths: summaryPaths);
@@ -90,7 +90,7 @@
     if (dartSdkSummaryPath == 'build') dartSdkSummaryPath = null;
     contextBuilderOptions.dartSdkSummaryPath = dartSdkSummaryPath;
 
-    return new AnalyzerOptions._(
+    return AnalyzerOptions._(
         contextBuilderOptions: contextBuilderOptions,
         summaryPaths: summaryPaths ?? args['summary'] as List<String>,
         dartSdkPath: dartSdkPath,
@@ -98,7 +98,7 @@
             _parseUrlMappings(args['url-mapping'] as List<String>));
   }
 
-  static void addArguments(ArgParser parser, {bool hide: true}) {
+  static void addArguments(ArgParser parser, {bool hide = true}) {
     parser
       ..addOption('summary',
           abbr: 's', help: 'summary file(s) to include', allowMultiple: true)
@@ -151,35 +151,35 @@
   resourceProvider ??= PhysicalResourceProvider.INSTANCE;
   var resolvers = <UriResolver>[];
   if (options.customUrlMappings.isNotEmpty) {
-    resolvers.add(
-        new CustomUriResolver(resourceProvider, options.customUrlMappings));
+    resolvers
+        .add(CustomUriResolver(resourceProvider, options.customUrlMappings));
   }
   resolvers.add(sdkResolver);
   if (summaryData != null) {
-    resolvers.add(new InSummaryUriResolver(resourceProvider, summaryData));
+    resolvers.add(InSummaryUriResolver(resourceProvider, summaryData));
   }
 
   if (fileResolvers == null)
     fileResolvers =
         createFileResolvers(options, resourceProvider: resourceProvider);
   resolvers.addAll(fileResolvers);
-  return new SourceFactory(resolvers, null, resourceProvider);
+  return SourceFactory(resolvers, null, resourceProvider);
 }
 
 List<UriResolver> createFileResolvers(AnalyzerOptions options,
     {ResourceProvider resourceProvider}) {
   resourceProvider ??= PhysicalResourceProvider.INSTANCE;
   UriResolver packageResolver() {
-    var builderOptions = new ContextBuilderOptions();
+    var builderOptions = ContextBuilderOptions();
     if (options.packageRoot != null) {
       builderOptions.defaultPackagesDirectoryPath = options.packageRoot;
     }
-    var builder = new ContextBuilder(resourceProvider, null, null,
-        options: builderOptions);
+    var builder =
+        ContextBuilder(resourceProvider, null, null, options: builderOptions);
 
-    return new PackageMapUriResolver(resourceProvider,
+    return PackageMapUriResolver(resourceProvider,
         builder.convertPackagesToMap(builder.createPackageMap('')));
   }
 
-  return [new ResourceUriResolver(resourceProvider), packageResolver()];
+  return [ResourceUriResolver(resourceProvider), packageResolver()];
 }
diff --git a/pkg/dev_compiler/lib/src/analyzer/element_helpers.dart b/pkg/dev_compiler/lib/src/analyzer/element_helpers.dart
index 8ecdd13..145177d 100644
--- a/pkg/dev_compiler/lib/src/analyzer/element_helpers.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/element_helpers.dart
@@ -25,8 +25,7 @@
 T fillDynamicTypeArgs<T extends DartType>(T t) {
   if (t is ParameterizedType && t.typeArguments.isNotEmpty) {
     var rawT = (t.element as TypeParameterizedElement).type;
-    var dyn =
-        new List.filled(rawT.typeArguments.length, DynamicTypeImpl.instance);
+    var dyn = List.filled(rawT.typeArguments.length, DynamicTypeImpl.instance);
     return rawT.substitute2(dyn, rawT.typeArguments) as T;
   }
   return t;
@@ -133,7 +132,7 @@
 
 List<ClassElement> getSuperclasses(ClassElement cls) {
   var result = <ClassElement>[];
-  var visited = new HashSet<ClassElement>();
+  var visited = HashSet<ClassElement>();
   while (cls != null && visited.add(cls)) {
     for (var mixinType in cls.mixins.reversed) {
       var mixin = mixinType.element;
@@ -302,7 +301,7 @@
   return sourcePath.startsWith('package:')
       ? Uri.parse(sourcePath)
       // TODO(jmesserly): shouldn't this be path.toUri?
-      : new Uri.file(sourcePath);
+      : Uri.file(sourcePath);
 }
 
 /// Returns true iff this factory constructor just throws [UnsupportedError]/
diff --git a/pkg/dev_compiler/lib/src/analyzer/error_helpers.dart b/pkg/dev_compiler/lib/src/analyzer/error_helpers.dart
index ec730d3..95a1a26 100644
--- a/pkg/dev_compiler/lib/src/analyzer/error_helpers.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/error_helpers.dart
@@ -43,7 +43,7 @@
   var location = lineInfo.getLocation(error.offset);
 
   // [warning] 'foo' is not a... (/Users/.../tmp/foo.dart, line 1, col 2)
-  return (new StringBuffer()
+  return (StringBuffer()
         ..write('[${severity.displayName}] ')
         ..write(error.message)
         ..write(' (${path.prettyUri(error.source.uri)}')
@@ -60,8 +60,7 @@
   // * it can return null
   // * using AnalysisError directly is now suspect, it's a correctness trap
   // * it requires an AnalysisContext
-  return ErrorProcessor
-          .getProcessor(context.analysisOptions, error)
+  return ErrorProcessor.getProcessor(context.analysisOptions, error)
           ?.severity ??
       error.errorCode.errorSeverity;
 }
diff --git a/pkg/dev_compiler/lib/src/analyzer/extension_types.dart b/pkg/dev_compiler/lib/src/analyzer/extension_types.dart
index b816065..c3d65cb 100644
--- a/pkg/dev_compiler/lib/src/analyzer/extension_types.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/extension_types.dart
@@ -31,11 +31,11 @@
 
   // Abstract types that may be implemented by both native and non-native
   // classes.
-  final _extensibleTypes = new HashSet<ClassElement>();
+  final _extensibleTypes = HashSet<ClassElement>();
 
   // Concrete native types.
-  final _nativeTypes = new HashSet<ClassElement>();
-  final _pendingLibraries = new HashSet<String>();
+  final _nativeTypes = HashSet<ClassElement>();
+  final _pendingLibraries = HashSet<String>();
 
   ExtensionTypeSet(this._context) {
     // TODO(vsm): Eventually, we want to make this extensible - i.e., find
diff --git a/pkg/dev_compiler/lib/src/analyzer/js_typeref_codegen.dart b/pkg/dev_compiler/lib/src/analyzer/js_typeref_codegen.dart
index 18c13ee..fd61c5a 100644
--- a/pkg/dev_compiler/lib/src/analyzer/js_typeref_codegen.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/js_typeref_codegen.dart
@@ -24,9 +24,9 @@
   /// Finds the qualified path to the type.
   JS.TypeRef _emitTopLevelTypeRef(DartType type) {
     var e = type.element;
-    return new JS.TypeRef.qualified([
+    return JS.TypeRef.qualified([
       emitLibraryName(e.library),
-      new JS.Identifier(getJSExportName(e) ?? e.name)
+      JS.Identifier(getJSExportName(e) ?? e.name)
     ]);
   }
 
@@ -34,18 +34,18 @@
     if (!options.closure) return null;
 
     return _resolved.putIfAbsent(type, () {
-      if (type == null) new JS.TypeRef.unknown();
+      if (type == null) JS.TypeRef.unknown();
       // TODO(ochafik): Consider calling _loader.declareBeforeUse(type.element).
-      if (type.isBottom || type.isDynamic) new JS.TypeRef.any();
-      if (type.isVoid) return new JS.TypeRef.void_();
+      if (type.isBottom || type.isDynamic) JS.TypeRef.any();
+      if (type.isVoid) return JS.TypeRef.void_();
 
-      if (type == types.intType) return new JS.TypeRef.number().orNull();
-      if (type == types.numType) return new JS.TypeRef.number().orNull();
-      if (type == types.doubleType) return new JS.TypeRef.number().orNull();
-      if (type == types.boolType) return new JS.TypeRef.boolean().orNull();
-      if (type == types.stringType) return new JS.TypeRef.string();
+      if (type == types.intType) return JS.TypeRef.number().orNull();
+      if (type == types.numType) return JS.TypeRef.number().orNull();
+      if (type == types.doubleType) return JS.TypeRef.number().orNull();
+      if (type == types.boolType) return JS.TypeRef.boolean().orNull();
+      if (type == types.stringType) return JS.TypeRef.string();
 
-      if (type is TypeParameterType) return new JS.TypeRef.named(type.name);
+      if (type is TypeParameterType) return JS.TypeRef.named(type.name);
       if (type is ParameterizedType) {
         JS.TypeRef rawType;
         if (type is FunctionType && type.name == null) {
@@ -53,7 +53,7 @@
           for (var param in type.parameters) {
             if (param.isNamed) break;
             var type = emitTypeRef(param.type);
-            args[new JS.Identifier(param.name)] =
+            args[JS.Identifier(param.name)] =
                 param.isPositional ? type.toOptional() : type;
           }
           var namedParamType = emitNamedParamsArgType(type.parameters);
@@ -61,7 +61,7 @@
             args[namedArgumentTemp] = namedParamType.toOptional();
           }
 
-          rawType = new JS.TypeRef.function(emitTypeRef(type.returnType), args);
+          rawType = JS.TypeRef.function(emitTypeRef(type.returnType), args);
         } else {
           var jsTypeRef = _getDartJsTypeRef(type);
           if (jsTypeRef != null) return jsTypeRef;
@@ -71,9 +71,9 @@
         var typeArgs = _getOwnTypeArguments(type).map(emitTypeRef);
         return typeArgs.isEmpty
             ? rawType
-            : new JS.TypeRef.generic(rawType, typeArgs);
+            : JS.TypeRef.generic(rawType, typeArgs);
       }
-      return new JS.TypeRef.unknown();
+      return JS.TypeRef.unknown();
     });
   }
 
@@ -83,11 +83,11 @@
     var namedArgs = <JS.Identifier, JS.TypeRef>{};
     for (ParameterElement param in params) {
       if (param.isPositional) continue;
-      namedArgs[new JS.Identifier(param.name)] =
+      namedArgs[JS.Identifier(param.name)] =
           emitTypeRef(param.type).toOptional();
     }
     if (namedArgs.isEmpty) return null;
-    return new JS.TypeRef.record(namedArgs);
+    return JS.TypeRef.record(namedArgs);
   }
 
   /// Gets the "own" type arguments of [type].
@@ -112,14 +112,14 @@
     if (type.element.library == dartJSLibrary) {
       switch (type.name) {
         case 'JsArray':
-          return new JS.TypeRef.array(
+          return JS.TypeRef.array(
               type is InterfaceType && type.typeArguments.length == 1
                   ? emitTypeRef(type.typeArguments.single)
                   : null);
         case 'JsObject':
-          return new JS.TypeRef.object();
+          return JS.TypeRef.object();
         case 'JsFunction':
-          return new JS.TypeRef.function();
+          return JS.TypeRef.function();
       }
     }
     return null;
diff --git a/pkg/dev_compiler/lib/src/analyzer/module_compiler.dart b/pkg/dev_compiler/lib/src/analyzer/module_compiler.dart
index 22d64ab..f5a7a53 100644
--- a/pkg/dev_compiler/lib/src/analyzer/module_compiler.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/module_compiler.dart
@@ -69,7 +69,7 @@
 
   ModuleCompiler._(AnalysisContext context, this.summaryData)
       : context = context,
-        _extensionTypes = new ExtensionTypeSet(context);
+        _extensionTypes = ExtensionTypeSet(context);
 
   factory ModuleCompiler(AnalyzerOptions options,
       {ResourceProvider resourceProvider,
@@ -82,17 +82,17 @@
     resourceProvider ??= PhysicalResourceProvider.INSTANCE;
     analysisRoot ??= path.current;
 
-    var contextBuilder = new ContextBuilder(resourceProvider,
-        new DartSdkManager(options.dartSdkPath, true), new ContentCache(),
+    var contextBuilder = ContextBuilder(resourceProvider,
+        DartSdkManager(options.dartSdkPath, true), ContentCache(),
         options: options.contextBuilderOptions);
 
     var analysisOptions = contextBuilder.getAnalysisOptions(analysisRoot);
     var sdk = contextBuilder.findSdk(null, analysisOptions);
 
-    var sdkResolver = new DartUriResolver(sdk);
+    var sdkResolver = DartUriResolver(sdk);
 
     // Read the summaries.
-    summaryData ??= new SummaryDataStore(options.summaryPaths,
+    summaryData ??= SummaryDataStore(options.summaryPaths,
         resourceProvider: resourceProvider,
         // TODO(vsm): Reset this to true once we cleanup internal build rules.
         disallowOverlappingSummaries: false);
@@ -114,20 +114,20 @@
     context.sourceFactory = srcFactory;
     if (sdkSummaryBundle != null) {
       context.resultProvider =
-          new InputPackagesResultProvider(context, summaryData);
+          InputPackagesResultProvider(context, summaryData);
     }
-    var variables = new Map<String, String>.from(options.declaredVariables)
+    var variables = Map<String, String>.from(options.declaredVariables)
       ..addAll(sdkLibraryVariables);
 
-    context.declaredVariables = new DeclaredVariables.fromMap(variables);
+    context.declaredVariables = DeclaredVariables.fromMap(variables);
     if (!context.analysisOptions.strongMode) {
-      throw new ArgumentError('AnalysisContext must be strong mode');
+      throw ArgumentError('AnalysisContext must be strong mode');
     }
     if (!context.sourceFactory.dartSdk.context.analysisOptions.strongMode) {
-      throw new ArgumentError('AnalysisContext must have strong mode SDK');
+      throw ArgumentError('AnalysisContext must have strong mode SDK');
     }
 
-    return new ModuleCompiler._(context, summaryData);
+    return ModuleCompiler._(context, summaryData);
   }
 
   bool _isFatalError(AnalysisError e, CompilerOptions options) {
@@ -154,7 +154,7 @@
     var trees = <CompilationUnit>[];
     var errors = <AnalysisError>[];
 
-    var librariesToCompile = new Queue<LibraryElement>();
+    var librariesToCompile = Queue<LibraryElement>();
 
     var compilingSdk = false;
     for (var sourcePath in unit.sources) {
@@ -167,12 +167,12 @@
       var fileUsage = 'You need to pass at least one existing .dart file as an'
           ' argument.';
       if (source == null) {
-        throw new UsageException(
+        throw UsageException(
             'Could not create a source for "$sourcePath". The file name is in'
             ' the wrong format or was not found.',
             fileUsage);
       } else if (!source.exists()) {
-        throw new UsageException(
+        throw UsageException(
             'Given file "$sourcePath" does not exist.', fileUsage);
       }
 
@@ -184,7 +184,7 @@
       librariesToCompile.add(context.computeLibraryElement(source));
     }
 
-    var libraries = new HashSet<LibraryElement>();
+    var libraries = HashSet<LibraryElement>();
     while (librariesToCompile.isNotEmpty) {
       var library = librariesToCompile.removeFirst();
       if (library.source is InSummarySource) continue;
@@ -199,8 +199,8 @@
       if (!compilingSdk && !options.emitMetadata) {
         var node = _getDartMirrorsImport(library);
         if (node != null) {
-          errors.add(new AnalysisError(library.source, node.uriOffset,
-              node.uriEnd, invalidImportDartMirrors));
+          errors.add(AnalysisError(library.source, node.uriOffset, node.uriEnd,
+              invalidImportDartMirrors));
         }
       }
 
@@ -224,19 +224,19 @@
 
     if (!options.unsafeForceCompile &&
         errors.any((e) => _isFatalError(e, options))) {
-      return new JSModuleFile.invalid(unit.name, messages, options);
+      return JSModuleFile.invalid(unit.name, messages, options);
     }
 
     try {
       var codeGenerator =
-          new CodeGenerator(context, summaryData, options, _extensionTypes);
+          CodeGenerator(context, summaryData, options, _extensionTypes);
       return codeGenerator.compile(unit, trees, messages);
     } catch (e) {
       if (errors.any((e) => _isFatalError(e, options))) {
         // Force compilation failed.  Suppress the exception and report
         // the static errors instead.
         assert(options.unsafeForceCompile);
-        return new JSModuleFile.invalid(unit.name, messages, options);
+        return JSModuleFile.invalid(unit.name, messages, options);
       }
       rethrow;
     }
@@ -299,17 +299,17 @@
   final String summaryOutPath;
 
   const CompilerOptions(
-      {this.sourceMap: true,
-      this.sourceMapComment: true,
-      this.inlineSourceMap: false,
-      this.summarizeApi: true,
-      this.summaryExtension: 'sum',
-      this.unsafeForceCompile: false,
-      this.replCompile: false,
-      this.emitMetadata: false,
-      this.enableAsserts: true,
-      this.closure: false,
-      this.bazelMapping: const {},
+      {this.sourceMap = true,
+      this.sourceMapComment = true,
+      this.inlineSourceMap = false,
+      this.summarizeApi = true,
+      this.summaryExtension = 'sum',
+      this.unsafeForceCompile = false,
+      this.replCompile = false,
+      this.emitMetadata = false,
+      this.enableAsserts = true,
+      this.closure = false,
+      this.bazelMapping = const {},
       this.summaryOutPath});
 
   CompilerOptions.fromArguments(ArgResults args)
@@ -327,7 +327,7 @@
             _parseBazelMappings(args['bazel-mapping'] as List<String>),
         summaryOutPath = args['summary-out'] as String;
 
-  static void addArguments(ArgParser parser, {bool hide: true}) {
+  static void addArguments(ArgParser parser, {bool hide = true}) {
     parser
       ..addFlag('summarize',
           help: 'emit an API summary file', defaultsTo: true, hide: hide)
@@ -454,25 +454,24 @@
   // TODO(jmesserly): this should match our old logic, but I'm not sure we are
   // correctly handling the pointer from the .js file to the .map file.
   JSModuleCode getCode(ModuleFormat format, String jsUrl, String mapUrl,
-      {bool singleOutFile: false}) {
-    var opts = new JS.JavaScriptPrintingOptions(
+      {bool singleOutFile = false}) {
+    var opts = JS.JavaScriptPrintingOptions(
         emitTypes: options.closure,
         allowKeywordsInProperties: true,
         allowSingleLineIfStatements: true);
     JS.SimpleJavaScriptPrintingContext printer;
     SourceMapBuilder sourceMap;
     if (options.sourceMap) {
-      var sourceMapContext = new SourceMapPrintingContext();
+      var sourceMapContext = SourceMapPrintingContext();
       sourceMap = sourceMapContext.sourceMap;
       printer = sourceMapContext;
     } else {
-      printer = new JS.SimpleJavaScriptPrintingContext();
+      printer = JS.SimpleJavaScriptPrintingContext();
     }
 
     var tree =
         transformModuleFormat(format, moduleTree, singleOutFile: singleOutFile);
-    tree.accept(
-        new JS.Printer(opts, printer, localNamer: new JS.TemporaryNamer(tree)));
+    tree.accept(JS.Printer(opts, printer, localNamer: JS.TemporaryNamer(tree)));
 
     Map builtMap;
     if (options.sourceMap && sourceMap != null) {
@@ -495,7 +494,7 @@
         : 'null';
     text = text.replaceFirst(sourceMapHoleID, rawSourceMap);
 
-    return new JSModuleCode(text, builtMap);
+    return JSModuleCode(text, builtMap);
   }
 
   /// Similar to [getCode] but immediately writes the resulting files.
@@ -503,7 +502,7 @@
   /// If [mapPath] is not supplied but [options.sourceMap] is set, mapPath
   /// will default to [jsPath].map.
   void writeCodeSync(ModuleFormat format, String jsPath,
-      {bool singleOutFile: false}) {
+      {bool singleOutFile = false}) {
     String mapPath = jsPath + '.map';
     var code = getCode(
         format, path.toUri(jsPath).toString(), path.toUri(mapPath).toString(),
@@ -521,7 +520,7 @@
       c = 'eval(${json.encode(c)});\n';
     }
 
-    var file = new File(jsPath);
+    var file = File(jsPath);
     if (!file.parent.existsSync()) file.parent.createSync(recursive: true);
     file.writeAsStringSync(c);
 
@@ -530,7 +529,7 @@
     // should also write a copy of the source file without a sourcemap even when
     // inlineSourceMap is true.
     if (code.sourceMap != null) {
-      file = new File(mapPath);
+      file = File(mapPath);
       if (!file.parent.existsSync()) file.parent.createSync(recursive: true);
       file.writeAsStringSync(json.encode(code.sourceMap));
     }
@@ -560,7 +559,7 @@
 // TODO(jmesserly): find a new home for this.
 Map placeSourceMap(
     Map sourceMap, String sourceMapPath, Map<String, String> bazelMappings) {
-  var map = new Map.from(sourceMap);
+  var map = Map.from(sourceMap);
   // Convert to a local file path if it's not.
   sourceMapPath = path.fromUri(_sourceToUri(sourceMapPath));
   var sourceMapDir = path.dirname(path.absolute(sourceMapPath));
@@ -606,11 +605,11 @@
     default:
       // Assume a file path.
       // TODO(jmesserly): shouldn't this be `path.toUri(path.absolute)`?
-      return new Uri.file(path.absolute(source));
+      return Uri.file(path.absolute(source));
   }
 }
 
-const invalidImportDartMirrors = const StrongModeCode(
+const invalidImportDartMirrors = StrongModeCode(
     ErrorType.COMPILE_TIME_ERROR,
     'IMPORT_DART_MIRRORS',
     'Cannot import "dart:mirrors" in web applications (https://goo.gl/R1anEs).');
diff --git a/pkg/dev_compiler/lib/src/analyzer/nullable_type_inference.dart b/pkg/dev_compiler/lib/src/analyzer/nullable_type_inference.dart
index 6ef6e1f..0aed0f8 100644
--- a/pkg/dev_compiler/lib/src/analyzer/nullable_type_inference.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/nullable_type_inference.dart
@@ -35,14 +35,15 @@
   HashSet<LocalVariableElement> _notNullLocals;
 
   void inferNullableTypes(AstNode node) {
-    var visitor = new _NullableLocalInference(this);
+    var visitor = _NullableLocalInference(this);
     node.accept(visitor);
     _notNullLocals = visitor.computeNotNullLocals();
   }
 
   /// Adds a new variable, typically a compiler generated temporary, and record
   /// whether its type is nullable.
-  void addTemporaryVariable(LocalVariableElement local, {bool nullable: true}) {
+  void addTemporaryVariable(LocalVariableElement local,
+      {bool nullable = true}) {
     if (!nullable) _notNullLocals.add(local);
   }
 
@@ -301,14 +302,14 @@
   final NullableTypeInference _nullInference;
 
   /// Known local variables.
-  final _locals = new HashSet<LocalVariableElement>.identity();
+  final _locals = HashSet<LocalVariableElement>.identity();
 
   /// Variables that are known to be nullable.
-  final _nullableLocals = new HashSet<LocalVariableElement>.identity();
+  final _nullableLocals = HashSet<LocalVariableElement>.identity();
 
   /// Given a variable, tracks all other variables that it is assigned to.
   final _assignments =
-      new HashMap<LocalVariableElement, Set<LocalVariableElement>>.identity();
+      HashMap<LocalVariableElement, Set<LocalVariableElement>>.identity();
 
   _NullableLocalInference(this._nullInference);
 
@@ -418,7 +419,7 @@
         bool visitLocal(LocalVariableElement otherLocal) {
           // Record the assignment.
           _assignments
-              .putIfAbsent(otherLocal, () => new HashSet.identity())
+              .putIfAbsent(otherLocal, () => HashSet.identity())
               .add(element);
           // Optimistically assume this local is not null.
           // We will validate this assumption later.
diff --git a/pkg/dev_compiler/lib/src/analyzer/property_model.dart b/pkg/dev_compiler/lib/src/analyzer/property_model.dart
index 617c9d8..b625554 100644
--- a/pkg/dev_compiler/lib/src/analyzer/property_model.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/property_model.dart
@@ -22,12 +22,11 @@
 /// which members are private and thus, could not be overridden outside of the
 /// current library.
 class VirtualFieldModel {
-  final _modelForLibrary =
-      new HashMap<LibraryElement, _LibraryVirtualFieldModel>();
+  final _modelForLibrary = HashMap<LibraryElement, _LibraryVirtualFieldModel>();
 
   _LibraryVirtualFieldModel _getModel(LibraryElement library) =>
       _modelForLibrary.putIfAbsent(
-          library, () => new _LibraryVirtualFieldModel.build(library));
+          library, () => _LibraryVirtualFieldModel.build(library));
 
   /// Returns true if a field is virtual.
   bool isVirtual(FieldElement field) =>
@@ -42,7 +41,7 @@
   ///
   /// This means we must generate them as virtual fields using a property pair
   /// in JavaScript.
-  final _overriddenPrivateFields = new HashSet<FieldElement>();
+  final _overriddenPrivateFields = HashSet<FieldElement>();
 
   /// Private classes that can be extended outside of this library.
   ///
@@ -56,7 +55,7 @@
   ///     class C extends _A {}
   ///
   /// The class _A must treat is "x" as virtual, however _B does not.
-  final _extensiblePrivateClasses = new HashSet<ClassElement>();
+  final _extensiblePrivateClasses = HashSet<ClassElement>();
 
   _LibraryVirtualFieldModel.build(LibraryElement library) {
     var allTypes = library.units.expand((u) => u.types).toList();
@@ -65,7 +64,7 @@
     // From there, visit all immediate private types in this library, and so on
     // from those private types, marking them as extensible.
     var typesToVisit =
-        new Queue<ClassElement>.from(allTypes.where((t) => t.isPublic));
+        Queue<ClassElement>.from(allTypes.where((t) => t.isPublic));
     while (typesToVisit.isNotEmpty) {
       var extensibleType = typesToVisit.removeFirst();
 
@@ -84,12 +83,12 @@
     // time.
     Map<String, FieldElement> getInstanceFieldMap(ClassElement c) {
       var instanceFields = c.fields.where((f) => !f.isStatic);
-      return new HashMap.fromIterables(
+      return HashMap.fromIterables(
           instanceFields.map((f) => f.name), instanceFields);
     }
 
     var allFields =
-        new HashMap.fromIterables(allTypes, allTypes.map(getInstanceFieldMap));
+        HashMap.fromIterables(allTypes, allTypes.map(getInstanceFieldMap));
 
     for (var type in allTypes) {
       Set<ClassElement> supertypes = null;
@@ -108,7 +107,7 @@
         }
 
         if (supertypes == null) {
-          supertypes = new Set();
+          supertypes = Set();
           void collectSupertypes(ClassElement cls) {
             if (!supertypes.add(cls)) return;
             var s = cls.supertype?.element;
@@ -177,18 +176,18 @@
   /// The set of inherited getters, used because JS getters/setters are paired,
   /// so if we're generating a setter we may need to emit a getter that calls
   /// super.
-  final inheritedGetters = new HashSet<String>();
+  final inheritedGetters = HashSet<String>();
 
   /// The set of inherited setters, used because JS getters/setters are paired,
   /// so if we're generating a getter we may need to emit a setter that calls
   /// super.
-  final inheritedSetters = new HashSet<String>();
+  final inheritedSetters = HashSet<String>();
 
   final mockMembers = <String, ExecutableElement>{};
 
-  final extensionMethods = new Set<String>();
+  final extensionMethods = Set<String>();
 
-  final extensionAccessors = new Set<String>();
+  final extensionAccessors = Set<String>();
 
   /// Parameters that are covariant due to covariant generics.
   final Set<Element> covariantParameters;
@@ -220,7 +219,7 @@
     _collectMockMembers(classElem.type);
     _collectExtensionMembers(classElem);
 
-    var virtualAccessorNames = new HashSet<String>()
+    var virtualAccessorNames = HashSet<String>()
       ..addAll(inheritedGetters)
       ..addAll(inheritedSetters)
       ..addAll(extensionAccessors)
@@ -246,7 +245,7 @@
                 covariantParameters != null &&
                 covariantParameters.contains(setter.parameters[0]) &&
                 covariantPrivateMembers.contains(setter)) {
-          virtualFields[field] = new JS.TemporaryId(name);
+          virtualFields[field] = JS.TemporaryId(name);
         }
       }
     }
@@ -274,7 +273,7 @@
     // members are allowed to "override" concrete ones in Dart.
     // (In that case, it will still be treated as a concrete member and can be
     // called at runtime.)
-    var concreteMembers = new HashSet<String>();
+    var concreteMembers = HashSet<String>();
 
     void visit(InterfaceType type, bool isAbstract) {
       if (type == null) return;
@@ -303,12 +302,12 @@
     // Find all generic interfaces that could be used to call into members of
     // this class. This will help us identify which parameters need checks
     // for soundness.
-    var allNatives = new HashSet<String>();
+    var allNatives = HashSet<String>();
     _collectNativeMembers(element.type, allNatives);
     if (allNatives.isEmpty) return;
 
     // For members on this class, check them against all generic interfaces.
-    var seenConcreteMembers = new HashSet<String>();
+    var seenConcreteMembers = HashSet<String>();
     _findExtensionMembers(element.type, seenConcreteMembers, allNatives);
     // Add mock members. These are compiler-generated concrete members that
     // forward to `noSuchMethod`.
@@ -325,13 +324,13 @@
     // For members of the superclass, we may need to add checks because this
     // class adds a new unsafe interface. Collect those checks.
 
-    var visited = new HashSet<ClassElement>()..add(element);
-    var existingMembers = new HashSet<String>();
+    var visited = HashSet<ClassElement>()..add(element);
+    var existingMembers = HashSet<String>();
 
     void visitImmediateSuper(InterfaceType type) {
       // For members of mixins/supertypes, check them against new interfaces,
       // and also record any existing checks they already had.
-      var oldCovariant = new HashSet<String>();
+      var oldCovariant = HashSet<String>();
       _collectNativeMembers(type, oldCovariant);
       var newCovariant = allNatives.difference(oldCovariant);
       if (newCovariant.isEmpty) return;
diff --git a/pkg/dev_compiler/lib/src/analyzer/reify_coercions.dart b/pkg/dev_compiler/lib/src/analyzer/reify_coercions.dart
index 8c774bb..e0deb58 100644
--- a/pkg/dev_compiler/lib/src/analyzer/reify_coercions.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/reify_coercions.dart
@@ -18,14 +18,14 @@
 // This class implements a pass which modifies (in place) the ast replacing
 // abstract coercion nodes with their dart implementations.
 class CoercionReifier extends analyzer.GeneralizingAstVisitor<Object> {
-  final cloner = new _TreeCloner();
+  final cloner = _TreeCloner();
 
   CoercionReifier._();
 
   /// Transforms the given compilation units, and returns a new AST with
   /// explicit coercion nodes in appropriate places.
   static List<CompilationUnit> reify(List<CompilationUnit> units) {
-    var cr = new CoercionReifier._();
+    var cr = CoercionReifier._();
     return units.map(cr.visitCompilationUnit).toList(growable: false);
   }
 
@@ -109,7 +109,7 @@
 
   void _replaceNode(AstNode parent, AstNode oldNode, AstNode newNode) {
     if (!identical(oldNode, newNode)) {
-      var replaced = parent.accept(new NodeReplacer(oldNode, newNode));
+      var replaced = parent.accept(NodeReplacer(oldNode, newNode));
       // It looks like NodeReplacer will always return true.
       // It does throw IllegalArgumentException though, if child is not found.
       assert(replaced);
diff --git a/pkg/dev_compiler/lib/src/analyzer/side_effect_analysis.dart b/pkg/dev_compiler/lib/src/analyzer/side_effect_analysis.dart
index 9d278b6..011988b 100644
--- a/pkg/dev_compiler/lib/src/analyzer/side_effect_analysis.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/side_effect_analysis.dart
@@ -60,7 +60,7 @@
   if (function.isPotentiallyMutatedInScope(e)) {
     // Need to visit the context looking for assignment to this local.
     if (context != null) {
-      var visitor = new _AssignmentFinder(e);
+      var visitor = _AssignmentFinder(e);
       context.accept(visitor);
       return visitor._potentiallyMutated;
     }
@@ -103,11 +103,10 @@
   final ConstantVisitor constantVisitor;
 
   ConstFieldVisitor(AnalysisContext context, {Source dummySource})
-      : constantVisitor = new ConstantVisitor(
-            new ConstantEvaluationEngine(
+      : constantVisitor = ConstantVisitor(
+            ConstantEvaluationEngine(
                 context.typeProvider, context.declaredVariables),
-            new ErrorReporter(
-                AnalysisErrorListener.NULL_LISTENER, dummySource));
+            ErrorReporter(AnalysisErrorListener.NULL_LISTENER, dummySource));
 
   // TODO(jmesserly): this is used to determine if the field initialization is
   // side effect free. We should make the check more general, as things like
diff --git a/pkg/dev_compiler/lib/src/analyzer/type_utilities.dart b/pkg/dev_compiler/lib/src/analyzer/type_utilities.dart
index 075903f..f1bef3c 100644
--- a/pkg/dev_compiler/lib/src/analyzer/type_utilities.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/type_utilities.dart
@@ -13,7 +13,7 @@
 import '../js_ast/js_ast.dart' show js;
 
 Set<TypeParameterElement> freeTypeParameters(DartType t) {
-  var result = new Set<TypeParameterElement>();
+  var result = Set<TypeParameterElement>();
   void find(DartType t) {
     if (t is TypeParameterType) {
       result.add(t.element);
@@ -43,7 +43,7 @@
   // Use a LinkedHashMap to maintain key insertion order so the generated code
   // is stable under slight perturbation.  (If this is not good enough we could
   // sort by name to canonicalize order.)
-  final _names = new LinkedHashMap<DartType, JS.TemporaryId>(
+  final _names = LinkedHashMap<DartType, JS.TemporaryId>(
       equals: typesAreEqual, hashCode: typeHashCode);
   Iterable<DartType> get keys => _names.keys.toList();
 
@@ -75,7 +75,7 @@
     return name;
   }
 
-  String _typeString(DartType type, {bool flat: false}) {
+  String _typeString(DartType type, {bool flat = false}) {
     if (type is ParameterizedType && type.name != null) {
       var clazz = type.name;
       var params = type.typeArguments;
@@ -109,14 +109,14 @@
   /// Heuristically choose a good name for the cache and generator
   /// variables.
   JS.TemporaryId chooseTypeName(DartType type) {
-    return new JS.TemporaryId(_typeString(type));
+    return JS.TemporaryId(_typeString(type));
   }
 }
 
 /// _GeneratorTable tracks types which have been
 /// named and hoisted.
 class _GeneratorTable extends _CacheTable {
-  final _defs = new LinkedHashMap<DartType, JS.Expression>(
+  final _defs = LinkedHashMap<DartType, JS.Expression>(
       equals: typesAreEqual, hashCode: typeHashCode);
 
   final JS.Identifier _runtimeModule;
@@ -157,7 +157,7 @@
   /// parameter.
   final _scopeDependencies = <TypeParameterElement, List<DartType>>{};
 
-  TypeTable(JS.Identifier runtime) : _generators = new _GeneratorTable(runtime);
+  TypeTable(JS.Identifier runtime) : _generators = _GeneratorTable(runtime);
 
   /// Emit a list of statements declaring the cache variables and generator
   /// definitions tracked by the table.  If [formals] is present, only
@@ -212,9 +212,9 @@
   /// type itself. This allows better integration with `lazyFn`, avoiding an
   /// extra level of indirection.
   JS.Expression nameFunctionType(FunctionType type, JS.Expression typeRep,
-      {bool lazy: false}) {
+      {bool lazy = false}) {
     if (!_generators.isNamed(type) && recordScopeDependencies(type)) {
-      return lazy ? new JS.ArrowFun([], typeRep) : typeRep;
+      return lazy ? JS.ArrowFun([], typeRep) : typeRep;
     }
 
     var name = _generators._nameType(type, typeRep);
diff --git a/pkg/dev_compiler/lib/src/closure/closure_annotation.dart b/pkg/dev_compiler/lib/src/closure/closure_annotation.dart
index f23c745..7274d65 100644
--- a/pkg/dev_compiler/lib/src/closure/closure_annotation.dart
+++ b/pkg/dev_compiler/lib/src/closure/closure_annotation.dart
@@ -32,22 +32,22 @@
 
   ClosureAnnotation(
       {this.comment,
-      this.interfaces: const [],
-      this.isConst: false,
-      this.isConstructor: false,
-      this.isFinal: false,
-      this.isNoCollapse: false,
-      this.isNoSideEffects: false,
-      this.isOverride: false,
-      this.isPrivate: false,
-      this.isProtected: false,
-      this.isStruct: false,
-      this.isTypedef: false,
+      this.interfaces = const [],
+      this.isConst = false,
+      this.isConstructor = false,
+      this.isFinal = false,
+      this.isNoCollapse = false,
+      this.isNoSideEffects = false,
+      this.isOverride = false,
+      this.isPrivate = false,
+      this.isProtected = false,
+      this.isStruct = false,
+      this.isTypedef = false,
       this.lendsToType,
-      this.paramTypes: const {},
+      this.paramTypes = const {},
       this.returnType,
       this.superType,
-      this.templates: const [],
+      this.templates = const [],
       this.thisType,
       this.throwsType,
       this.type});
@@ -63,8 +63,7 @@
   String toString([String indent = '']) =>
       _cachedString.replaceAll('\n', '\n$indent');
 
-  String _print(JS.TypeRef t) =>
-      (new JS.ClosureTypePrinter()..visit(t)).toString();
+  String _print(JS.TypeRef t) => (JS.ClosureTypePrinter()..visit(t)).toString();
 
   String __cachedString;
   String get _cachedString {
diff --git a/pkg/dev_compiler/lib/src/closure/closure_annotator.dart b/pkg/dev_compiler/lib/src/closure/closure_annotator.dart
index d950e2a..133aae2 100644
--- a/pkg/dev_compiler/lib/src/closure/closure_annotator.dart
+++ b/pkg/dev_compiler/lib/src/closure/closure_annotator.dart
@@ -21,7 +21,7 @@
   ClosureAnnotation closureAnnotationFor(JS.Node node, AnnotatedNode original,
       Element e, String namedArgsMapName) {
     // Note: Dart and Closure privacy are not compatible: don't set `isPrivate: e.isPrivate`.
-    return new ClosureAnnotation(
+    return ClosureAnnotation(
         comment: original?.documentationComment?.toSource(),
         // Note: we don't set isConst here because Closure's constness and
         // Dart's are not really compatible.
diff --git a/pkg/dev_compiler/lib/src/closure/closure_type.dart b/pkg/dev_compiler/lib/src/closure/closure_type.dart
index 3b7aa2b..bc29be0 100644
--- a/pkg/dev_compiler/lib/src/closure/closure_type.dart
+++ b/pkg/dev_compiler/lib/src/closure/closure_type.dart
@@ -11,13 +11,13 @@
 /// TODO(ochafik): Consider convergence with TypeScript, which has no nullability-awareness
 /// (see http://www.typescriptlang.org/Handbook).
 class ClosureType {
-  static const ClosureType _ALL = const ClosureType._("*");
-  static const ClosureType _UNKNOWN = const ClosureType._("?");
+  static const ClosureType _ALL = ClosureType._("*");
+  static const ClosureType _UNKNOWN = ClosureType._("?");
 
   final String _representation;
   final bool isNullable;
 
-  const ClosureType._(this._representation, {this.isNullable: true});
+  const ClosureType._(this._representation, {this.isNullable = true});
 
   bool get isAll => _representation == "*";
   bool get isUnknown => _representation == "?";
@@ -31,40 +31,38 @@
   factory ClosureType.record(Map<String, ClosureType> fieldTypes) {
     var entries = <String>[];
     fieldTypes.forEach((n, t) => entries.add('$n: $t'));
-    return new ClosureType._('{${entries.join(', ')}}');
+    return ClosureType._('{${entries.join(', ')}}');
   }
   factory ClosureType.function(
       [List<ClosureType> paramTypes, ClosureType returnType]) {
     if (paramTypes == null && returnType == null) {
-      return new ClosureType.type("Function");
+      return ClosureType.type("Function");
     }
     var suffix = returnType == null ? '' : ':$returnType';
-    return new ClosureType._(
+    return ClosureType._(
         'function(${paramTypes == null ? '...*' : paramTypes.join(', ')})$suffix');
   }
 
   factory ClosureType.map([ClosureType keyType, ClosureType valueType]) =>
-      new ClosureType._("Object<${keyType ?? _ALL}, ${valueType ?? _ALL}>");
+      ClosureType._("Object<${keyType ?? _ALL}, ${valueType ?? _ALL}>");
 
   factory ClosureType.type([String className = "Object"]) =>
-      new ClosureType._(className);
+      ClosureType._(className);
 
   factory ClosureType.array([ClosureType componentType]) =>
-      new ClosureType._("Array<${componentType ?? _ALL}>");
+      ClosureType._("Array<${componentType ?? _ALL}>");
 
   factory ClosureType.undefined() =>
-      new ClosureType._("undefined", isNullable: false);
-  factory ClosureType.number() =>
-      new ClosureType._("number", isNullable: false);
-  factory ClosureType.boolean() =>
-      new ClosureType._("boolean", isNullable: false);
-  factory ClosureType.string() => new ClosureType._("string");
+      ClosureType._("undefined", isNullable: false);
+  factory ClosureType.number() => ClosureType._("number", isNullable: false);
+  factory ClosureType.boolean() => ClosureType._("boolean", isNullable: false);
+  factory ClosureType.string() => ClosureType._("string");
 
-  ClosureType toOptional() => new ClosureType._("$this=");
+  ClosureType toOptional() => ClosureType._("$this=");
 
   ClosureType toNullable() => isNullable
       ? this
-      : new ClosureType._(
+      : ClosureType._(
           _representation.startsWith('!')
               ? _representation.substring(1)
               : "?$this",
@@ -72,7 +70,7 @@
 
   ClosureType toNonNullable() => !isNullable
       ? this
-      : new ClosureType._(
+      : ClosureType._(
           _representation.startsWith('?')
               ? _representation.substring(1)
               : "!$this",
@@ -80,8 +78,8 @@
 
   /// TODO(ochafik): See which optimizations make sense here (it could be that `(*|undefined)`
   /// cannot be optimized to `*` when used to model optional record fields).
-  ClosureType or(ClosureType other) => new ClosureType._("($this|$other)",
+  ClosureType or(ClosureType other) => ClosureType._("($this|$other)",
       isNullable: isNullable || other.isNullable);
 
-  ClosureType orUndefined() => or(new ClosureType.undefined());
+  ClosureType orUndefined() => or(ClosureType.undefined());
 }
diff --git a/pkg/dev_compiler/lib/src/compiler/js_metalet.dart b/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
index 8675657..65cfe52 100644
--- a/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
+++ b/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
@@ -49,7 +49,7 @@
   /// This happens multiple times, so ensure the expression form is cached.
   Expression _expression;
 
-  MetaLet(this.variables, this.body, {this.statelessResult: false});
+  MetaLet(this.variables, this.body, {this.statelessResult = false});
 
   /// Returns an expression that ignores the result. This is a cross between
   /// [toExpression] and [toStatement]. Used for C-style for-loop updaters,
@@ -79,7 +79,7 @@
   Expression _toAssign(Expression left, [String op]) {
     var exprs = body.toList();
     exprs.add(exprs.removeLast().toAssignExpression(left, op));
-    return new MetaLet(variables, exprs);
+    return MetaLet(variables, exprs);
   }
 
   Statement toVariableDeclaration(VariableBinding name) {
@@ -132,7 +132,7 @@
     return _finishStatement(statements);
   }
 
-  Block toYieldStatement({bool star: false}) {
+  Block toYieldStatement({bool star = false}) {
     var statements = body
         .map((e) =>
             e == body.last ? e.toYieldStatement(star: star) : e.toStatement())
@@ -173,30 +173,30 @@
     var valueInstantiators = variables.values.map(visitor.visit);
     var bodyInstantiators = body.map(visitor.visit);
 
-    return (args) => new MetaLet(
-        new Map.fromIterables(variables.keys,
+    return (args) => MetaLet(
+        Map.fromIterables(variables.keys,
             valueInstantiators.map((i) => i(args) as Expression)),
         bodyInstantiators.map((i) => i(args) as Expression).toList(),
         statelessResult: statelessResult);
   }
 
   Expression _toInvokedFunction(Block block) {
-    var finder = new _YieldFinder();
+    var finder = _YieldFinder();
     block.accept(finder);
     if (!finder.hasYield) {
-      return new Call(new ArrowFun([], block), []);
+      return Call(ArrowFun([], block), []);
     }
     // If we have a yield, it's more tricky. We'll create a `function*`, which
     // we `yield*` to immediately invoke. We also may need to bind this:
-    Expression fn = new Fun([], block, isGenerator: true);
+    Expression fn = Fun([], block, isGenerator: true);
     if (finder.hasThis) fn = js.call('#.bind(this)', fn);
-    return new Yield(new Call(fn, []), star: true);
+    return Yield(Call(fn, []), star: true);
   }
 
   Block _finishStatement(List<Statement> statements) {
     // Visit the tree and count how many times each temp was used.
-    var counter = new _VariableUseCounter();
-    var node = new Block(statements);
+    var counter = _VariableUseCounter();
+    var node = Block(statements);
     node.accept(counter);
     // Also count the init expressions.
     for (var init in variables.values) init.accept(counter);
@@ -213,9 +213,9 @@
         substitutions[variable] = init;
       } else {
         // Otherwise replace it with a temp, which will be assigned once.
-        var temp = new TemporaryId(variable.displayName);
+        var temp = TemporaryId(variable.displayName);
         substitutions[variable] = temp;
-        initializers.add(new VariableInitialization(temp, init));
+        initializers.add(VariableInitialization(temp, init));
       }
     });
 
@@ -223,10 +223,10 @@
     node = _substitute(node, substitutions);
     if (initializers.isNotEmpty) {
       var first = initializers[0];
-      node = new Block([
+      node = Block([
         initializers.length == 1
             ? first.value.toVariableDeclaration(first.declaration)
-            : new VariableDeclarationList('let', initializers).toStatement(),
+            : VariableDeclarationList('let', initializers).toStatement(),
         node
       ]);
     }
@@ -247,7 +247,7 @@
   ///     result = ((_) => _.addAll(result), _.add(2), _)([])
   ///
   MetaLet _simplifyAssignment(Identifier left,
-      {String op, bool isDeclaration: false}) {
+      {String op, bool isDeclaration = false}) {
     // See if the result value is a let* temporary variable.
     var result = body.last;
     if (result is MetaLetVariable && variables.containsKey(result)) {
@@ -255,23 +255,23 @@
       // would change the assignment order and be an invalid optimization.
       if (!isDeclaration && _IdentFinder.foundIn(left.name, body)) return null;
 
-      var vars = new Map<MetaLetVariable, Expression>.from(variables);
+      var vars = Map<MetaLetVariable, Expression>.from(variables);
       var value = vars.remove(result);
       Expression assign;
       if (isDeclaration) {
         // Technically, putting one of these in a comma expression is not
         // legal. However when isDeclaration is true, toStatement will be
         // called immediately on the MetaLet, which results in legal JS.
-        assign = new VariableDeclarationList(
-            'let', [new VariableInitialization(left, value)]);
+        assign = VariableDeclarationList(
+            'let', [VariableInitialization(left, value)]);
       } else {
         assign = value.toAssignExpression(left, op);
       }
 
       assert(body.isNotEmpty);
-      Binary newBody = new Expression.binary([assign]..addAll(body), ',');
+      Binary newBody = Expression.binary([assign]..addAll(body), ',');
       newBody = _substitute(newBody, {result: left});
-      return new MetaLet(vars, newBody.commaToExpressionList(),
+      return MetaLet(vars, newBody.commaToExpressionList(),
           statelessResult: statelessResult);
     }
     return null;
@@ -281,14 +281,14 @@
 /// Similar to [Template.instantiate] but works with free variables.
 T _substitute<T extends Node>(
     T tree, Map<MetaLetVariable, Expression> substitutions) {
-  var generator = new InstantiatorGeneratorVisitor(/*forceCopy:*/ false);
+  var generator = InstantiatorGeneratorVisitor(/*forceCopy:*/ false);
   var instantiator = generator.compile(tree);
-  var nodes = new List<MetaLetVariable>.from(generator
+  var nodes = List<MetaLetVariable>.from(generator
       .analysis.containsInterpolatedNode
       .where((n) => n is MetaLetVariable));
   if (nodes.isEmpty) return tree;
 
-  return instantiator(new Map.fromIterable(nodes,
+  return instantiator(Map.fromIterable(nodes,
       key: (v) => (v as MetaLetVariable).nameOrPosition,
       value: (v) => substitutions[v] ?? v)) as T;
 }
@@ -335,7 +335,7 @@
   _IdentFinder(this.name);
 
   static bool foundIn(String name, List<Node> body) {
-    var finder = new _IdentFinder(name);
+    var finder = _IdentFinder(name);
     for (var expr in body) {
       expr.accept(finder);
       if (finder.found) return true;
diff --git a/pkg/dev_compiler/lib/src/compiler/js_names.dart b/pkg/dev_compiler/lib/src/compiler/js_names.dart
index 5c212f1..7de9cf9 100644
--- a/pkg/dev_compiler/lib/src/compiler/js_names.dart
+++ b/pkg/dev_compiler/lib/src/compiler/js_names.dart
@@ -29,12 +29,12 @@
   final Expression name;
 
   MaybeQualifiedId(this.qualifier, this.name) {
-    _expr = new PropertyAccess(qualifier, name);
+    _expr = PropertyAccess(qualifier, name);
   }
 
   /// Helper to create an [Identifier] from something that starts as a property.
   static Identifier identifier(LiteralString propertyName) =>
-      new Identifier(propertyName.valueWithoutQuotes);
+      Identifier(propertyName.valueWithoutQuotes);
 
   void setQualified(bool qualified) {
     var name = this.name;
@@ -64,7 +64,7 @@
 class TemporaryNamer extends LocalNamer {
   _FunctionScope scope;
 
-  TemporaryNamer(Node node) : scope = new _RenameVisitor.build(node).rootScope;
+  TemporaryNamer(Node node) : scope = _RenameVisitor.build(node).rootScope;
 
   String getName(Identifier node) {
     var rename = scope.renames[identifierKey(node)];
@@ -89,29 +89,29 @@
   final _FunctionScope parent;
 
   /// All names declared in this scope.
-  final declared = new HashSet<Object>();
+  final declared = HashSet<Object>();
 
   /// All names [declared] in this scope or its [parent]s, that is used in this
   /// scope and/or children. This is exactly the set of variable names we must
   /// not collide with inside this scope.
-  final used = new HashSet<String>();
+  final used = HashSet<String>();
 
   /// Nested scopes, these are visited after everything else so the names
   /// they might need are in scope.
-  final childScopes = new Map<Node, _FunctionScope>();
+  final childScopes = Map<Node, _FunctionScope>();
 
   /// New names assigned for temps and identifiers.
-  final renames = new HashMap<Object, String>();
+  final renames = HashMap<Object, String>();
 
   _FunctionScope(this.parent);
 }
 
 /// Collects all names used in the visited tree.
 class _RenameVisitor extends VariableDeclarationVisitor {
-  final pendingRenames = new Map<Object, Set<_FunctionScope>>();
+  final pendingRenames = Map<Object, Set<_FunctionScope>>();
 
-  final _FunctionScope globalScope = new _FunctionScope(null);
-  final _FunctionScope rootScope = new _FunctionScope(null);
+  final _FunctionScope globalScope = _FunctionScope(null);
+  final _FunctionScope rootScope = _FunctionScope(null);
   _FunctionScope scope;
 
   _RenameVisitor.build(Node root) {
@@ -152,7 +152,7 @@
     Set<_FunctionScope> usedIn = null;
     var rename = declScope != globalScope && needsRename(node);
     if (rename) {
-      usedIn = pendingRenames.putIfAbsent(id, () => new HashSet());
+      usedIn = pendingRenames.putIfAbsent(id, () => HashSet());
     }
     for (var s = scope, end = declScope.parent; s != end; s = s.parent) {
       if (usedIn != null) {
@@ -165,11 +165,11 @@
 
   visitFunctionExpression(FunctionExpression node) {
     // Visit nested functions after all identifiers are declared.
-    scope.childScopes[node] = new _FunctionScope(scope);
+    scope.childScopes[node] = _FunctionScope(scope);
   }
 
   visitClassExpression(ClassExpression node) {
-    scope.childScopes[node] = new _FunctionScope(scope);
+    scope.childScopes[node] = _FunctionScope(scope);
   }
 
   void _finishScopes() {
@@ -234,7 +234,7 @@
 
 /// Returns true for invalid JS variable names, such as keywords.
 /// Also handles invalid variable names in strict mode, like "arguments".
-bool invalidVariableName(String keyword, {bool strictMode: true}) {
+bool invalidVariableName(String keyword, {bool strictMode = true}) {
   switch (keyword) {
     // http://www.ecma-international.org/ecma-262/6.0/#sec-future-reserved-words
     case "await":
diff --git a/pkg/dev_compiler/lib/src/compiler/js_typerep.dart b/pkg/dev_compiler/lib/src/compiler/js_typerep.dart
index 56a0545..dda2d29 100644
--- a/pkg/dev_compiler/lib/src/compiler/js_typerep.dart
+++ b/pkg/dev_compiler/lib/src/compiler/js_typerep.dart
@@ -19,12 +19,12 @@
   /// The JS `typeof` value, if unambiguous.
   String get primitiveTypeOf => null;
 
-  static const jsBoolean = const JSBoolean();
-  static const jsNumber = const JSNumber();
-  static const jsNull = const JSNull();
-  static const jsObject = const JSObject();
-  static const jsString = const JSString();
-  static const jsUnknown = const JSUnknown();
+  static const jsBoolean = JSBoolean();
+  static const jsNumber = JSNumber();
+  static const jsNull = JSNull();
+  static const jsObject = JSObject();
+  static const jsString = JSString();
+  static const jsUnknown = JSUnknown();
   // TODO(jmesserly): add JSFunction that maps to Dart's `Function` type.
 }
 
diff --git a/pkg/dev_compiler/lib/src/compiler/js_utils.dart b/pkg/dev_compiler/lib/src/compiler/js_utils.dart
index ff3296b..76686c0 100644
--- a/pkg/dev_compiler/lib/src/compiler/js_utils.dart
+++ b/pkg/dev_compiler/lib/src/compiler/js_utils.dart
@@ -17,7 +17,7 @@
           innerFun.params.isEmpty) {
         var body = innerFun.body;
         if (body is Block) {
-          return new Fun(fn.params, body,
+          return Fun(fn.params, body,
               typeParams: fn.typeParams, returnType: fn.returnType);
         }
       }
@@ -27,13 +27,13 @@
 }
 
 Set<Identifier> findMutatedVariables(Node scope) {
-  var v = new MutationVisitor();
+  var v = MutationVisitor();
   scope.accept(v);
   return v.mutated;
 }
 
 class MutationVisitor extends BaseVisitor {
-  final mutated = new Set<Identifier>();
+  final mutated = Set<Identifier>();
   @override
   visitAssignment(node) {
     var id = node.leftHandSide;
diff --git a/pkg/dev_compiler/lib/src/compiler/module_builder.dart b/pkg/dev_compiler/lib/src/compiler/module_builder.dart
index 17703195e..a3f41e0 100644
--- a/pkg/dev_compiler/lib/src/compiler/module_builder.dart
+++ b/pkg/dev_compiler/lib/src/compiler/module_builder.dart
@@ -46,7 +46,7 @@
 /// [allowMultiple] formats to be specified, with each emitted into a separate
 /// file.
 void addModuleFormatOptions(ArgParser argParser,
-    {bool allowMultiple: false, bool hide: true, bool singleOutFile: true}) {
+    {bool allowMultiple = false, bool hide = true, bool singleOutFile = true}) {
   argParser.addMultiOption('modules', help: 'module pattern to emit', allowed: [
     'es6',
     'common',
@@ -80,18 +80,18 @@
 /// that affects the top-level module items, especially [ImportDeclaration]s and
 /// [ExportDeclaration]s.
 Program transformModuleFormat(ModuleFormat format, Program module,
-    {bool singleOutFile: false}) {
+    {bool singleOutFile = false}) {
   switch (format) {
     case ModuleFormat.legacy:
       // Legacy format always generates output compatible with single file mode.
-      return new LegacyModuleBuilder().build(module);
+      return LegacyModuleBuilder().build(module);
     case ModuleFormat.common:
       assert(!singleOutFile);
-      return new CommonJSModuleBuilder().build(module);
+      return CommonJSModuleBuilder().build(module);
     case ModuleFormat.amd:
       // TODO(jmesserly): encode singleOutFile as a module format?
       // Since it's irrelevant except for AMD.
-      return new AmdModuleBuilder(singleOutFile: singleOutFile).build(module);
+      return AmdModuleBuilder(singleOutFile: singleOutFile).build(module);
     case ModuleFormat.es6:
       assert(!singleOutFile);
       return module;
@@ -150,7 +150,7 @@
     visitProgram(module);
 
     // Build import parameters.
-    var exportsVar = new TemporaryId('exports');
+    var exportsVar = TemporaryId('exports');
     var parameters = <TemporaryId>[exportsVar];
     var importNames = <Expression>[];
     var importStatements = <Statement>[];
@@ -158,7 +158,7 @@
       importNames.add(import.from);
       // TODO(jmesserly): we could use destructuring here.
       var moduleVar =
-          new TemporaryId(pathToJSIdentifier(import.from.valueWithoutQuotes));
+          TemporaryId(pathToJSIdentifier(import.from.valueWithoutQuotes));
       parameters.add(moduleVar);
       for (var importName in import.namedImports) {
         assert(!importName.isStar); // import * not supported in legacy modules.
@@ -195,19 +195,19 @@
 
     var functionName =
         'load__' + pathToJSIdentifier(module.name.replaceAll('.', '_'));
-    var resultModule = new NamedFunction(
-        new Identifier(functionName),
+    var resultModule = NamedFunction(
+        Identifier(functionName),
         js.fun("function(#) { 'use strict'; #; }", [parameters, statements]),
         true);
 
     var moduleDef = js.statement("dart_library.library(#, #, #, #)", [
       js.string(module.name, "'"),
-      new LiteralNull(),
+      LiteralNull(),
       js.commentExpression(
-          "Imports", new ArrayInitializer(importNames, multiline: true)),
+          "Imports", ArrayInitializer(importNames, multiline: true)),
       resultModule
     ]);
-    return new Program(<ModuleItem>[moduleDef]);
+    return Program(<ModuleItem>[moduleDef]);
   }
 }
 
@@ -224,7 +224,7 @@
     for (var import in imports) {
       // TODO(jmesserly): we could use destructuring here.
       var moduleVar =
-          new TemporaryId(pathToJSIdentifier(import.from.valueWithoutQuotes));
+          TemporaryId(pathToJSIdentifier(import.from.valueWithoutQuotes));
       importStatements
           .add(js.statement('const # = require(#);', [moduleVar, import.from]));
 
@@ -240,7 +240,7 @@
     statements.insertAll(0, importStatements);
 
     if (exports.isNotEmpty) {
-      var exportsVar = new Identifier('exports');
+      var exportsVar = Identifier('exports');
       statements.add(js.comment('Exports:'));
       for (var export in exports) {
         var names = export.exportedNames;
@@ -253,7 +253,7 @@
       }
     }
 
-    return new Program(statements);
+    return Program(statements);
   }
 }
 
@@ -261,7 +261,7 @@
 class AmdModuleBuilder extends _ModuleBuilder {
   final bool singleOutFile;
 
-  AmdModuleBuilder({this.singleOutFile: false});
+  AmdModuleBuilder({this.singleOutFile = false});
 
   Program build(Program module) {
     var importStatements = <Statement>[];
@@ -274,7 +274,7 @@
     for (var import in imports) {
       // TODO(jmesserly): we could use destructuring once Atom supports it.
       var moduleVar =
-          new TemporaryId(pathToJSIdentifier(import.from.valueWithoutQuotes));
+          TemporaryId(pathToJSIdentifier(import.from.valueWithoutQuotes));
       fnParams.add(moduleVar);
       dependencies.add(import.from);
 
@@ -296,12 +296,11 @@
         // export * is not emitted by the compiler, so we don't handle it here.
         assert(names != null);
         for (var name in names) {
-          exportedProps.add(new Property(js.string(name.name), name));
+          exportedProps.add(Property(js.string(name.name), name));
         }
       }
       statements.add(js.comment('Exports:'));
-      statements.add(
-          new Return(new ObjectInitializer(exportedProps, multiline: true)));
+      statements.add(Return(ObjectInitializer(exportedProps, multiline: true)));
     }
 
     // TODO(vsm): Consider using an immediately invoked named function pattern
@@ -309,14 +308,14 @@
     var block = singleOutFile
         ? js.statement("define(#, #, function(#) { 'use strict'; #; });", [
             js.string(module.name, "'"),
-            new ArrayInitializer(dependencies),
+            ArrayInitializer(dependencies),
             fnParams,
             statements
           ])
         : js.statement("define(#, function(#) { 'use strict'; #; });",
-            [new ArrayInitializer(dependencies), fnParams, statements]);
+            [ArrayInitializer(dependencies), fnParams, statements]);
 
-    return new Program([block]);
+    return Program([block]);
   }
 }
 
@@ -335,7 +334,7 @@
     var ch = name[i];
     var needsEscape = ch == r'$' || _invalidCharInIdentifier.hasMatch(ch);
     if (needsEscape && buffer == null) {
-      buffer = new StringBuffer(name.substring(0, i));
+      buffer = StringBuffer(name.substring(0, i));
     }
     if (buffer != null) {
       buffer.write(needsEscape ? '\$${ch.codeUnits.join("")}' : ch);
@@ -345,11 +344,11 @@
   var result = buffer != null ? '$buffer' : name;
   // Ensure the identifier first character is not numeric and that the whole
   // identifier is not a keyword.
-  if (result.startsWith(new RegExp('[0-9]')) || invalidVariableName(result)) {
+  if (result.startsWith(RegExp('[0-9]')) || invalidVariableName(result)) {
     return '\$$result';
   }
   return result;
 }
 
 // Invalid characters for identifiers, which would need to be escaped.
-final _invalidCharInIdentifier = new RegExp(r'[^A-Za-z_$0-9]');
+final _invalidCharInIdentifier = RegExp(r'[^A-Za-z_$0-9]');
diff --git a/pkg/dev_compiler/lib/src/compiler/shared_compiler.dart b/pkg/dev_compiler/lib/src/compiler/shared_compiler.dart
index d2fa9c5..f716813 100644
--- a/pkg/dev_compiler/lib/src/compiler/shared_compiler.dart
+++ b/pkg/dev_compiler/lib/src/compiler/shared_compiler.dart
@@ -21,9 +21,9 @@
   final List<JS.Identifier> _operatorSetResultStack = [];
 
   JS.Identifier runtimeModule;
-  final namedArgumentTemp = new JS.TemporaryId('opts');
+  final namedArgumentTemp = JS.TemporaryId('opts');
 
-  final _privateNames = new HashMap<Library, HashMap<String, JS.TemporaryId>>();
+  final _privateNames = HashMap<Library, HashMap<String, JS.TemporaryId>>();
 
   /// The list of output module items, in the order they need to be emitted in.
   final moduleItems = <JS.ModuleItem>[];
@@ -43,7 +43,7 @@
       bool Function() isLastParamMutated) {
     if (name == '[]=') {
       _operatorSetResultStack.add(isLastParamMutated()
-          ? new JS.TemporaryId((formals.last as JS.Identifier).name)
+          ? JS.TemporaryId((formals.last as JS.Identifier).name)
           : formals.last);
     } else {
       _operatorSetResultStack.add(null);
@@ -72,7 +72,7 @@
       var valueParam = formals.last;
       var statements = code.statements;
       if (statements.isEmpty || !statements.last.alwaysReturns) {
-        statements.add(new JS.Return(setOperatorResult));
+        statements.add(JS.Return(setOperatorResult));
       }
       if (!identical(setOperatorResult, valueParam)) {
         // If the value parameter was mutated, then we use a temporary
@@ -89,12 +89,10 @@
   /// the `operator []=` method.
   JS.Statement emitReturnStatement(JS.Expression value) {
     if (_operatorSetResult != null) {
-      var result = new JS.Return(_operatorSetResult);
-      return value != null
-          ? new JS.Block([value.toStatement(), result])
-          : result;
+      var result = JS.Return(_operatorSetResult);
+      return value != null ? JS.Block([value.toStatement(), result]) : result;
     }
-    return value != null ? value.toReturn() : new JS.Return();
+    return value != null ? value.toReturn() : JS.Return();
   }
 
   /// Prepends the `dart.` and then uses [js.call] to parse the specified JS
@@ -130,14 +128,13 @@
   }
 
   JS.TemporaryId emitPrivateNameSymbol(Library library, String name) {
-    return _privateNames
-        .putIfAbsent(library, () => new HashMap())
-        .putIfAbsent(name, () {
+    return _privateNames.putIfAbsent(library, () => HashMap()).putIfAbsent(name,
+        () {
       var idName = name;
       if (idName.endsWith('=')) {
         idName = idName.replaceAll('=', '_');
       }
-      var id = new JS.TemporaryId(idName);
+      var id = JS.TemporaryId(idName);
       moduleItems.add(
           js.statement('const # = Symbol(#);', [id, js.string(name, "'")]));
       return id;
diff --git a/pkg/dev_compiler/lib/src/js_ast/builder.dart b/pkg/dev_compiler/lib/src/js_ast/builder.dart
index a918ee6..117f447 100644
--- a/pkg/dev_compiler/lib/src/js_ast/builder.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/builder.dart
@@ -15,7 +15,7 @@
  * TODO(sra): Find the remaining places where js('xxx') used to parse an
  * unbounded number of expression, or institute a cache policy.
  */
-TemplateManager templateManager = new TemplateManager();
+TemplateManager templateManager = TemplateManager();
 
 /**
 
@@ -188,7 +188,7 @@
         var # = 1;
 
 */
-const JsBuilder js = const JsBuilder();
+const JsBuilder js = JsBuilder();
 
 class JsBuilder {
   const JsBuilder();
@@ -245,7 +245,7 @@
   Template _findExpressionTemplate(String source) {
     Template template = templateManager.lookupExpressionTemplate(source);
     if (template == null) {
-      MiniJsParser parser = new MiniJsParser(source);
+      MiniJsParser parser = MiniJsParser(source);
       Expression expression = parser.expression();
       template = templateManager.defineExpressionTemplate(source, expression);
     }
@@ -255,7 +255,7 @@
   Template _findStatementTemplate(String source) {
     Template template = templateManager.lookupStatementTemplate(source);
     if (template == null) {
-      MiniJsParser parser = new MiniJsParser(source);
+      MiniJsParser parser = MiniJsParser(source);
       Statement statement = parser.statement();
       template = templateManager.defineStatementTemplate(source, statement);
     }
@@ -266,20 +266,18 @@
    * Creates an Expression template without caching the result.
    */
   Template uncachedExpressionTemplate(String source) {
-    MiniJsParser parser = new MiniJsParser(source);
+    MiniJsParser parser = MiniJsParser(source);
     Expression expression = parser.expression();
-    return new Template(source, expression,
-        isExpression: true, forceCopy: false);
+    return Template(source, expression, isExpression: true, forceCopy: false);
   }
 
   /**
    * Creates a Statement template without caching the result.
    */
   Template uncachedStatementTemplate(String source) {
-    MiniJsParser parser = new MiniJsParser(source);
+    MiniJsParser parser = MiniJsParser(source);
     Statement statement = parser.statement();
-    return new Template(source, statement,
-        isExpression: false, forceCopy: false);
+    return Template(source, statement, isExpression: false, forceCopy: false);
   }
 
   /**
@@ -288,11 +286,11 @@
    * context that expects a template.
    */
   Template expressionTemplateYielding(Node ast) {
-    return new Template.withExpressionResult(ast);
+    return Template.withExpressionResult(ast);
   }
 
   Template statementTemplateYielding(Node ast) {
-    return new Template.withStatementResult(ast);
+    return Template.withStatementResult(ast);
   }
 
   /// Creates a literal js string from [value].
@@ -309,7 +307,7 @@
     // > closing quote code points, U+005C (REVERSE SOLIDUS),
     // > U+000D (CARRIAGE RETURN), U+2028 (LINE SEPARATOR),
     // > U+2029 (PARAGRAPH SEPARATOR), and U+000A (LINE FEED).
-    var re = new RegExp('[\n\r$quoteReplace\b\f\t\v\u2028\u2029]');
+    var re = RegExp('[\n\r$quoteReplace\b\f\t\v\u2028\u2029]');
     escaped = escaped.replaceAllMapped(re, (m) {
       switch (m.group(0)) {
         case "\n":
@@ -342,7 +340,7 @@
           return r"\v";
       }
     });
-    LiteralString result = new LiteralString('$quote$escaped$quote');
+    LiteralString result = LiteralString('$quote$escaped$quote');
     // We don't escape quotes of a different style under the assumption that the
     // string is wrapped into quotes. Verify that assumption.
     assert(result.value.codeUnitAt(0) == quote.codeUnitAt(0));
@@ -356,25 +354,30 @@
   /// contain newlines or backslashes. For escaping the string use
   /// [escapedString].
   LiteralString string(String value, [String quote = '"']) =>
-      new LiteralString('$quote$value$quote');
+      LiteralString('$quote$value$quote');
 
-  LiteralNumber number(num value) => new LiteralNumber('$value');
+  LiteralNumber number(num value) => LiteralNumber('$value');
 
-  LiteralBool boolean(bool value) => new LiteralBool(value);
+  LiteralNumber uint64(int value) {
+    BigInt uint64Value = new BigInt.from(value).toUnsigned(64);
+    return LiteralNumber('$uint64Value');
+  }
+
+  LiteralBool boolean(bool value) => LiteralBool(value);
 
   ArrayInitializer numArray(Iterable<int> list) =>
-      new ArrayInitializer(list.map(number).toList());
+      ArrayInitializer(list.map(number).toList());
 
   ArrayInitializer stringArray(Iterable<String> list) =>
-      new ArrayInitializer(list.map(string).toList());
+      ArrayInitializer(list.map(string).toList());
 
-  Comment comment(String text) => new Comment(text);
+  Comment comment(String text) => Comment(text);
   CommentExpression commentExpression(String text, Expression expression) =>
-      new CommentExpression(text, expression);
+      CommentExpression(text, expression);
 
   Call propertyCall(
       Expression receiver, String fieldName, List<Expression> arguments) {
-    return new Call(new PropertyAccess.field(receiver, fieldName), arguments);
+    return Call(PropertyAccess.field(receiver, fieldName), arguments);
   }
 }
 
@@ -409,7 +412,7 @@
 
     // Replace non-tabs with spaces, giving a print indent that matches the text
     // for tabbing.
-    String spaces = prefix.replaceAll(new RegExp(r'[^\t]'), ' ');
+    String spaces = prefix.replaceAll(RegExp(r'[^\t]'), ' ');
     return 'Error in MiniJsParser:\n${src}\n$spaces^\n$spaces$message\n';
   }
 }
@@ -538,7 +541,7 @@
     return "Unknown: $cat";
   }
 
-  static const CATEGORIES = const <int>[
+  static const CATEGORIES = <int>[
     OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, // 0-7
     OTHER, WHITESPACE, WHITESPACE, OTHER, OTHER, WHITESPACE, // 8-13
     OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, // 14-21
@@ -794,7 +797,7 @@
   }
 
   void error(String message) {
-    throw new MiniJsParserError(this, message);
+    throw MiniJsParserError(this, message);
   }
 
   /// Returns either the name for the hole, or its integer position.
@@ -819,28 +822,28 @@
     String last = lastToken;
     if (acceptCategory(ALPHA)) {
       if (last == "true") {
-        return new LiteralBool(true);
+        return LiteralBool(true);
       } else if (last == "false") {
-        return new LiteralBool(false);
+        return LiteralBool(false);
       } else if (last == "null") {
-        return new LiteralNull();
+        return LiteralNull();
       } else if (last == "function") {
         return parseFunctionExpression();
       } else if (last == "this") {
-        return new This();
+        return This();
       } else if (last == "super") {
-        return new Super();
+        return Super();
       } else if (last == "class") {
         return parseClass();
       } else {
-        return new Identifier(last);
+        return Identifier(last);
       }
     } else if (acceptCategory(LPAREN)) {
       return parseExpressionOrArrowFunction();
     } else if (acceptCategory(STRING)) {
-      return new LiteralString(last);
+      return LiteralString(last);
     } else if (acceptCategory(NUMERIC)) {
-      return new LiteralNumber(last);
+      return LiteralNumber(last);
     } else if (acceptCategory(LBRACE)) {
       return parseObjectInitializer();
     } else if (acceptCategory(LSQUARE)) {
@@ -848,7 +851,7 @@
 
       while (true) {
         if (acceptCategory(COMMA)) {
-          values.add(new ArrayHole());
+          values.add(ArrayHole());
           continue;
         }
         if (acceptCategory(RSQUARE)) break;
@@ -856,13 +859,13 @@
         if (acceptCategory(RSQUARE)) break;
         expectCategory(COMMA);
       }
-      return new ArrayInitializer(values);
+      return ArrayInitializer(values);
     } else if (last != null && last.startsWith("/")) {
       String regexp = getDelimited(lastPosition);
       getToken();
       String flags = lastToken;
       if (!acceptCategory(ALPHA)) flags = "";
-      Expression expression = new RegExpLiteral(regexp + flags);
+      Expression expression = RegExpLiteral(regexp + flags);
       return expression;
     } else if (acceptCategory(HASH)) {
       return parseInterpolatedExpression();
@@ -873,13 +876,13 @@
   }
 
   InterpolatedExpression parseInterpolatedExpression() {
-    var expression = new InterpolatedExpression(parseHash());
+    var expression = InterpolatedExpression(parseHash());
     interpolatedValues.add(expression);
     return expression;
   }
 
   InterpolatedIdentifier parseInterpolatedIdentifier() {
-    var id = new InterpolatedIdentifier(parseHash());
+    var id = InterpolatedIdentifier(parseHash());
     interpolatedValues.add(id);
     return id;
   }
@@ -888,7 +891,7 @@
     if (acceptCategory(HASH)) {
       return parseInterpolatedIdentifier();
     } else {
-      var id = new Identifier(lastToken);
+      var id = Identifier(lastToken);
       expectCategory(ALPHA);
       return id;
     }
@@ -907,7 +910,7 @@
       return parseArrowFunctionBody(<Parameter>[]);
     }
     if (acceptCategory(ELLIPSIS)) {
-      var params = <Parameter>[new RestParameter(parseParameter())];
+      var params = <Parameter>[RestParameter(parseParameter())];
       expectCategory(RPAREN);
       expectCategory(ARROW);
       return parseArrowFunctionBody(params);
@@ -917,13 +920,13 @@
       if (acceptCategory(ELLIPSIS)) {
         var params = <Parameter>[];
         _expressionToParameterList(expression, params);
-        params.add(new RestParameter(parseParameter()));
+        params.add(RestParameter(parseParameter()));
         expectCategory(RPAREN);
         expectCategory(ARROW);
         return parseArrowFunctionBody(params);
       }
       Expression right = parseAssignment();
-      expression = new Binary(',', expression, right);
+      expression = Binary(',', expression, right);
     }
     expectCategory(RPAREN);
     if (acceptCategory(ARROW)) {
@@ -949,7 +952,7 @@
       _expressionToParameterList(node.left, params);
       _expressionToParameterList(node.right, params);
     } else if (node is InterpolatedExpression) {
-      params.add(new InterpolatedParameter(node.nameOrPosition));
+      params.add(InterpolatedParameter(node.nameOrPosition));
     } else {
       error("Expected arrow function parameter list");
     }
@@ -962,14 +965,14 @@
     } else {
       body = parseAssignment();
     }
-    return new ArrowFun(params, body);
+    return ArrowFun(params, body);
   }
 
   Expression parseFunctionExpression() {
     String last = lastToken;
     if (acceptCategory(ALPHA)) {
       String functionName = last;
-      return new NamedFunction(new Identifier(functionName), parseFun());
+      return NamedFunction(Identifier(functionName), parseFun());
     }
     return parseFun();
   }
@@ -981,7 +984,7 @@
     if (!acceptCategory(RPAREN)) {
       for (;;) {
         if (acceptCategory(ELLIPSIS)) {
-          params.add(new RestParameter(parseParameter()));
+          params.add(RestParameter(parseParameter()));
           expectCategory(RPAREN);
           break;
         }
@@ -1008,21 +1011,21 @@
     }
     expectCategory(LBRACE);
     Block block = parseBlock();
-    return new Fun(params, block, asyncModifier: asyncModifier);
+    return Fun(params, block, asyncModifier: asyncModifier);
   }
 
   /** Parse parameter name or interpolated parameter. */
   Identifier parseParameter() {
     if (acceptCategory(HASH)) {
       var nameOrPosition = parseHash();
-      var parameter = new InterpolatedParameter(nameOrPosition);
+      var parameter = InterpolatedParameter(nameOrPosition);
       interpolatedValues.add(parameter);
       return parameter;
     } else {
       // TODO(jmesserly): validate this is not a keyword
       String argumentName = lastToken;
       expectCategory(ALPHA);
-      return new Identifier(argumentName);
+      return Identifier(argumentName);
     }
   }
 
@@ -1040,7 +1043,7 @@
       if (acceptCategory(RBRACE)) break;
       expectCategory(COMMA);
     }
-    return new ObjectInitializer(properties);
+    return ObjectInitializer(properties);
   }
 
   Expression parseMember() {
@@ -1051,7 +1054,7 @@
       } else if (acceptCategory(LSQUARE)) {
         Expression inBraces = parseExpression();
         expectCategory(RSQUARE);
-        receiver = new PropertyAccess(receiver, inBraces);
+        receiver = PropertyAccess(receiver, inBraces);
       } else {
         break;
       }
@@ -1068,7 +1071,7 @@
         if (!acceptCategory(RPAREN)) {
           while (true) {
             if (acceptCategory(ELLIPSIS)) {
-              arguments.add(new Spread(parseAssignment()));
+              arguments.add(Spread(parseAssignment()));
               expectCategory(RPAREN);
               break;
             }
@@ -1077,14 +1080,13 @@
             expectCategory(COMMA);
           }
         }
-        receiver = constructor
-            ? new New(receiver, arguments)
-            : new Call(receiver, arguments);
+        receiver =
+            constructor ? New(receiver, arguments) : Call(receiver, arguments);
         constructor = false;
       } else if (!constructor && acceptCategory(LSQUARE)) {
         Expression inBraces = parseExpression();
         expectCategory(RSQUARE);
-        receiver = new PropertyAccess(receiver, inBraces);
+        receiver = PropertyAccess(receiver, inBraces);
       } else if (!constructor && acceptCategory(DOT)) {
         receiver = getDotRhs(receiver);
       } else {
@@ -1099,9 +1101,9 @@
   Expression getDotRhs(Expression receiver) {
     if (acceptCategory(HASH)) {
       var nameOrPosition = parseHash();
-      InterpolatedSelector property = new InterpolatedSelector(nameOrPosition);
+      InterpolatedSelector property = InterpolatedSelector(nameOrPosition);
       interpolatedValues.add(property);
-      return new PropertyAccess(receiver, property);
+      return PropertyAccess(receiver, property);
     }
     String identifier = lastToken;
     // In ES5 keywords like delete and continue are allowed as property
@@ -1113,7 +1115,7 @@
     } else {
       expectCategory(ALPHA);
     }
-    return new PropertyAccess.field(receiver, identifier);
+    return PropertyAccess.field(receiver, identifier);
   }
 
   Expression parsePostfix() {
@@ -1124,7 +1126,7 @@
     if (lastCategory == SYMBOL &&
         !skippedNewline &&
         (acceptString("++") || acceptString("--"))) {
-      return new Postfix(operator, expression);
+      return Postfix(operator, expression);
     }
     // If we don't accept '++' or '--' due to skippedNewline a newline, no other
     // part of the parser will accept the token and we will get an error at the
@@ -1137,8 +1139,8 @@
     if (lastCategory == SYMBOL &&
         UNARY_OPERATORS.contains(operator) &&
         (acceptString("++") || acceptString("--") || acceptString('await'))) {
-      if (operator == "await") return new Await(parsePostfix());
-      return new Prefix(operator, parsePostfix());
+      if (operator == "await") return Await(parsePostfix());
+      return Prefix(operator, parsePostfix());
     }
     return parsePostfix();
   }
@@ -1150,8 +1152,8 @@
         operator != "++" &&
         operator != "--") {
       expectCategory(SYMBOL);
-      if (operator == "await") return new Await(parsePostfix());
-      return new Prefix(operator, parseUnaryLow());
+      if (operator == "await") return Await(parsePostfix());
+      return Prefix(operator, parseUnaryLow());
     }
     return parseUnaryHigh();
   }
@@ -1170,17 +1172,17 @@
       }
       expectCategory(SYMBOL);
       if (rhs == null || BINARY_PRECEDENCE[symbol] >= minPrecedence) {
-        if (rhs != null) lhs = new Binary(lastSymbol, lhs, rhs);
+        if (rhs != null) lhs = Binary(lastSymbol, lhs, rhs);
         minPrecedence = BINARY_PRECEDENCE[symbol];
         rhs = parseUnaryLow();
         lastSymbol = symbol;
       } else {
         Expression higher = parseBinary(BINARY_PRECEDENCE[symbol]);
-        rhs = new Binary(symbol, rhs, higher);
+        rhs = Binary(symbol, rhs, higher);
       }
     }
     if (rhs == null) return lhs;
-    return new Binary(lastSymbol, lhs, rhs);
+    return Binary(lastSymbol, lhs, rhs);
   }
 
   Expression parseConditional() {
@@ -1189,7 +1191,7 @@
     Expression ifTrue = parseAssignment();
     expectCategory(COLON);
     Expression ifFalse = parseAssignment();
-    return new Conditional(lhs, ifTrue, ifFalse);
+    return Conditional(lhs, ifTrue, ifFalse);
   }
 
   Expression parseLeftHandSide() => parseConditional();
@@ -1200,12 +1202,12 @@
     if (acceptCategory(ASSIGNMENT)) {
       Expression rhs = parseAssignment();
       if (assignmentOperator == "=") {
-        return new Assignment(lhs, rhs);
+        return Assignment(lhs, rhs);
       } else {
         // Handle +=, -=, etc.
         String operator =
             assignmentOperator.substring(0, assignmentOperator.length - 1);
-        return new Assignment.compound(lhs, operator, rhs);
+        return Assignment.compound(lhs, operator, rhs);
       }
     }
     return lhs;
@@ -1215,7 +1217,7 @@
     Expression expression = parseAssignment();
     while (acceptCategory(COMMA)) {
       Expression right = parseAssignment();
-      expression = new Binary(',', expression, right);
+      expression = Binary(',', expression, right);
     }
     return expression;
   }
@@ -1228,17 +1230,17 @@
     do {
       VariableBinding declarator;
       if (firstIdentifier != null) {
-        declarator = new Identifier(firstIdentifier);
+        declarator = Identifier(firstIdentifier);
         firstIdentifier = null;
       } else {
         declarator = parseVariableBinding();
       }
 
       var initializer = acceptString("=") ? parseAssignment() : null;
-      initialization.add(new VariableInitialization(declarator, initializer));
+      initialization.add(VariableInitialization(declarator, initializer));
     } while (acceptCategory(COMMA));
 
-    return new VariableDeclarationList(keyword, initialization);
+    return VariableDeclarationList(keyword, initialization);
   }
 
   VariableBinding parseVariableBinding() {
@@ -1289,12 +1291,12 @@
       if (acceptString("=")) {
         defaultValue = parseExpression();
       }
-      variables.add(new DestructuredVariable(
+      variables.add(DestructuredVariable(
           name: name, structure: structure, defaultValue: defaultValue));
     } while (acceptCategory(COMMA));
 
     expectCategory(RSQUARE);
-    return new ArrayBindingPattern(variables);
+    return ArrayBindingPattern(variables);
   }
 
   ObjectBindingPattern parseObjectBindingPattern() {
@@ -1309,12 +1311,12 @@
       } else if (acceptString("=")) {
         defaultValue = parseExpression();
       }
-      variables.add(new DestructuredVariable(
+      variables.add(DestructuredVariable(
           name: name, structure: structure, defaultValue: defaultValue));
     } while (acceptCategory(COMMA));
 
     expectCategory(RBRACE);
-    return new ObjectBindingPattern(variables);
+    return ObjectBindingPattern(variables);
   }
 
   Expression parseVarDeclarationOrExpression() {
@@ -1358,13 +1360,13 @@
       Statement statement = parseStatement();
       statements.add(statement);
     }
-    return new Block(statements);
+    return Block(statements);
   }
 
   Statement parseStatement() {
     if (acceptCategory(LBRACE)) return parseBlock();
 
-    if (acceptCategory(SEMICOLON)) return new EmptyStatement();
+    if (acceptCategory(SEMICOLON)) return EmptyStatement();
 
     if (lastCategory == ALPHA) {
       if (acceptString('return')) return parseReturn();
@@ -1372,16 +1374,16 @@
       if (acceptString('throw')) return parseThrow();
 
       if (acceptString('break')) {
-        return parseBreakOrContinue((label) => new Break(label));
+        return parseBreakOrContinue((label) => Break(label));
       }
 
       if (acceptString('continue')) {
-        return parseBreakOrContinue((label) => new Continue(label));
+        return parseBreakOrContinue((label) => Continue(label));
       }
 
       if (acceptString('debugger')) {
         expectSemicolon();
-        return new DebuggerStatement();
+        return DebuggerStatement();
       }
 
       if (acceptString('if')) return parseIfThenElse();
@@ -1390,7 +1392,7 @@
 
       if (acceptString('function')) return parseFunctionDeclaration();
 
-      if (acceptString('class')) return new ClassDeclaration(parseClass());
+      if (acceptString('class')) return ClassDeclaration(parseClass());
 
       if (acceptString('try')) return parseTry();
 
@@ -1398,7 +1400,7 @@
       if (keyword != null) {
         Expression declarations = parseVariableDeclarationList(keyword);
         expectSemicolon();
-        return new ExpressionStatement(declarations);
+        return ExpressionStatement(declarations);
       }
 
       if (acceptString('while')) return parseWhile();
@@ -1423,7 +1425,7 @@
     Expression expression = parseExpression();
 
     if (expression is Identifier && acceptCategory(COLON)) {
-      return new LabeledStatement(expression.name, parseStatement());
+      return LabeledStatement(expression.name, parseStatement());
     }
 
     expectSemicolon();
@@ -1434,34 +1436,34 @@
       if (expression is InterpolatedExpression) {
         assert(identical(interpolatedValues.last, expression));
         InterpolatedStatement statement =
-            new InterpolatedStatement(expression.nameOrPosition);
+            InterpolatedStatement(expression.nameOrPosition);
         interpolatedValues[interpolatedValues.length - 1] = statement;
         return statement;
       }
     }
 
-    return new ExpressionStatement(expression);
+    return ExpressionStatement(expression);
   }
 
   Statement parseReturn() {
-    if (acceptSemicolon()) return new Return();
+    if (acceptSemicolon()) return Return();
     Expression expression = parseExpression();
     expectSemicolon();
-    return new Return(expression);
+    return Return(expression);
   }
 
   Statement parseYield() {
     bool hasStar = acceptString('*');
     Expression expression = parseExpression();
     expectSemicolon();
-    return new DartYield(expression, hasStar);
+    return DartYield(expression, hasStar);
   }
 
   Statement parseThrow() {
     if (skippedNewline) error('throw expression must be on same line');
     Expression expression = parseExpression();
     expectSemicolon();
-    return new Throw(expression);
+    return Throw(expression);
   }
 
   Statement parseBreakOrContinue(Statement Function(String) constructor) {
@@ -1482,9 +1484,9 @@
     if (acceptString('else')) {
       // Resolves dangling else by binding 'else' to closest 'if'.
       Statement elseStatement = parseStatement();
-      return new If(condition, thenStatement, elseStatement);
+      return If(condition, thenStatement, elseStatement);
     } else {
-      return new If.noElse(condition, thenStatement);
+      return If.noElse(condition, thenStatement);
     }
   }
 
@@ -1511,7 +1513,7 @@
         expectCategory(RPAREN);
       }
       Statement body = parseStatement();
-      return new For(init, condition, update, body);
+      return For(init, condition, update, body);
     }
 
     expectCategory(LPAREN);
@@ -1528,13 +1530,13 @@
         Expression objectExpression = parseExpression();
         expectCategory(RPAREN);
         Statement body = parseStatement();
-        return new ForIn(_createVariableDeclarationList(keyword, identifier),
+        return ForIn(_createVariableDeclarationList(keyword, identifier),
             objectExpression, body);
       } else if (acceptString('of')) {
         Expression iterableExpression = parseAssignment();
         expectCategory(RPAREN);
         Statement body = parseStatement();
-        return new ForOf(_createVariableDeclarationList(keyword, identifier),
+        return ForOf(_createVariableDeclarationList(keyword, identifier),
             iterableExpression, body);
       }
       var declarations = parseVariableDeclarationList(keyword, identifier);
@@ -1549,15 +1551,15 @@
 
   static VariableDeclarationList _createVariableDeclarationList(
       String keyword, String identifier) {
-    return new VariableDeclarationList(keyword,
-        [new VariableInitialization(new Identifier(identifier), null)]);
+    return VariableDeclarationList(
+        keyword, [VariableInitialization(Identifier(identifier), null)]);
   }
 
   Statement parseFunctionDeclaration() {
     String name = lastToken;
     expectCategory(ALPHA);
     var fun = parseFun();
-    return new FunctionDeclaration(new Identifier(name), fun);
+    return FunctionDeclaration(Identifier(name), fun);
   }
 
   Statement parseTry() {
@@ -1572,7 +1574,7 @@
     } else {
       if (catchPart == null) error("expected 'finally'");
     }
-    return new Try(body, catchPart, finallyPart);
+    return Try(body, catchPart, finallyPart);
   }
 
   SwitchCase parseSwitchClause() {
@@ -1592,7 +1594,7 @@
         lastToken != 'default') {
       statements.add(parseStatement());
     }
-    return new SwitchCase(expression, new Block(statements));
+    return SwitchCase(expression, Block(statements));
   }
 
   Statement parseWhile() {
@@ -1600,7 +1602,7 @@
     Expression condition = parseExpression();
     expectCategory(RPAREN);
     Statement body = parseStatement();
-    return new While(condition, body);
+    return While(condition, body);
   }
 
   Statement parseDo() {
@@ -1611,7 +1613,7 @@
     Expression condition = parseExpression();
     expectCategory(RPAREN);
     expectSemicolon();
-    return new Do(body, condition);
+    return Do(body, condition);
   }
 
   Statement parseSwitch() {
@@ -1619,12 +1621,12 @@
     Expression key = parseExpression();
     expectCategory(RPAREN);
     expectCategory(LBRACE);
-    var clauses = new List<SwitchCase>();
+    var clauses = List<SwitchCase>();
     while (lastCategory != RBRACE) {
       clauses.add(parseSwitchClause());
     }
     expectCategory(RBRACE);
-    return new Switch(key, clauses);
+    return Switch(key, clauses);
   }
 
   Catch parseCatch() {
@@ -1634,7 +1636,7 @@
     expectCategory(RPAREN);
     expectCategory(LBRACE);
     Block body = parseBlock();
-    return new Catch(new Identifier(identifier), body);
+    return Catch(Identifier(identifier), body);
   }
 
   ClassExpression parseClass() {
@@ -1644,12 +1646,12 @@
       heritage = parseConditional();
     }
     expectCategory(LBRACE);
-    var methods = new List<Method>();
+    var methods = List<Method>();
     while (lastCategory != RBRACE) {
       methods.add(parseMethodOrProperty(onlyMethods: true) as Method);
     }
     expectCategory(RBRACE);
-    return new ClassExpression(name, heritage, methods);
+    return ClassExpression(name, heritage, methods);
   }
 
   /**
@@ -1663,7 +1665,7 @@
    * - property names: `#: ...`
    * - entire methods: `#`
    */
-  Property parseMethodOrProperty({bool onlyMethods: false}) {
+  Property parseMethodOrProperty({bool onlyMethods = false}) {
     bool isStatic = acceptString('static');
 
     bool isGetter = lastToken == 'get';
@@ -1675,13 +1677,13 @@
       if (lastCategory == COLON) {
         // That wasn't a accessor but the 'get' or 'set' property: retropedal.
         isGetter = isSetter = false;
-        name = new LiteralString('"$token"');
+        name = LiteralString('"$token"');
       }
     }
     if (acceptCategory(HASH)) {
       if (lastCategory != LPAREN && (onlyMethods || lastCategory != COLON)) {
         // Interpolated method
-        var member = new InterpolatedMethod(parseHash());
+        var member = InterpolatedMethod(parseHash());
         interpolatedValues.add(member);
         return member;
       }
@@ -1692,10 +1694,10 @@
 
     if (!onlyMethods && acceptCategory(COLON)) {
       Expression value = parseAssignment();
-      return new Property(name, value);
+      return Property(name, value);
     } else {
       var fun = parseFun();
-      return new Method(name, fun,
+      return Method(name, fun,
           isGetter: isGetter, isSetter: isSetter, isStatic: isStatic);
     }
   }
@@ -1703,10 +1705,10 @@
   Expression parsePropertyName() {
     String identifier = lastToken;
     if (acceptCategory(STRING)) {
-      return new LiteralString(identifier);
+      return LiteralString(identifier);
     } else if (acceptCategory(ALPHA) || acceptCategory(SYMBOL)) {
       // ALPHA or a SYMBOL, e.g. void
-      return new LiteralString('"$identifier"');
+      return LiteralString('"$identifier"');
     } else if (acceptCategory(LSQUARE)) {
       var expr = parseAssignment();
       expectCategory(RSQUARE);
diff --git a/pkg/dev_compiler/lib/src/js_ast/js_types.dart b/pkg/dev_compiler/lib/src/js_ast/js_types.dart
index 6217798b..e45c96c 100644
--- a/pkg/dev_compiler/lib/src/js_ast/js_types.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/js_types.dart
@@ -4,9 +4,9 @@
 
 part of js_ast;
 
-final _any = new AnyTypeRef._();
-final _unknown = new UnknownTypeRef._();
-final _null = new NullTypeRef();
+final _any = AnyTypeRef._();
+final _unknown = UnknownTypeRef._();
+final _null = NullTypeRef();
 
 /// JavaScript type reference, designed to support a subset of the type systems
 /// of the Closure Compiler and TypeScript:
@@ -26,58 +26,57 @@
 
   factory TypeRef.any() => _any;
 
-  factory TypeRef.void_() => new TypeRef.named('void');
+  factory TypeRef.void_() => TypeRef.named('void');
 
   factory TypeRef.unknown() => _unknown;
 
   factory TypeRef.generic(TypeRef rawType, Iterable<TypeRef> typeArgs) {
     if (typeArgs.isEmpty) {
-      throw new ArgumentError.value(typeArgs, "typeArgs", "is empty");
+      throw ArgumentError.value(typeArgs, "typeArgs", "is empty");
     }
-    return new GenericTypeRef(rawType, typeArgs.toList());
+    return GenericTypeRef(rawType, typeArgs.toList());
   }
 
-  factory TypeRef.array([TypeRef elementType]) => new ArrayTypeRef(elementType);
+  factory TypeRef.array([TypeRef elementType]) => ArrayTypeRef(elementType);
 
   factory TypeRef.object([TypeRef keyType, TypeRef valueType]) {
     // TODO(ochafik): Roll out a dedicated ObjectTypeRef?
-    var rawType = new TypeRef.named('Object');
+    var rawType = TypeRef.named('Object');
     return keyType == null && valueType == null
         ? rawType
-        : new GenericTypeRef(rawType, [keyType ?? _any, valueType ?? _any]);
+        : GenericTypeRef(rawType, [keyType ?? _any, valueType ?? _any]);
   }
 
   factory TypeRef.function(
           [TypeRef returnType, Map<Identifier, TypeRef> paramTypes]) =>
-      new FunctionTypeRef(returnType, paramTypes);
+      FunctionTypeRef(returnType, paramTypes);
 
   factory TypeRef.record(Map<Identifier, TypeRef> types) =>
-      new RecordTypeRef(types);
+      RecordTypeRef(types);
 
-  factory TypeRef.string() => new TypeRef.named('string');
+  factory TypeRef.string() => TypeRef.named('string');
 
-  factory TypeRef.number() => new TypeRef.named('number');
+  factory TypeRef.number() => TypeRef.named('number');
 
-  factory TypeRef.undefined() => new TypeRef.named('undefined');
+  factory TypeRef.undefined() => TypeRef.named('undefined');
 
-  factory TypeRef.boolean() => new TypeRef.named('boolean');
+  factory TypeRef.boolean() => TypeRef.named('boolean');
 
-  factory TypeRef.qualified(List<Identifier> path) =>
-      new QualifiedTypeRef(path);
+  factory TypeRef.qualified(List<Identifier> path) => QualifiedTypeRef(path);
 
   factory TypeRef.named(String name) =>
-      new TypeRef.qualified(<Identifier>[new Identifier(name)]);
+      TypeRef.qualified(<Identifier>[Identifier(name)]);
 
   bool get isAny => this is AnyTypeRef;
   bool get isUnknown => this is UnknownTypeRef;
   bool get isNull => this is NullTypeRef;
 
-  TypeRef or(TypeRef other) => new UnionTypeRef([this, other]);
+  TypeRef or(TypeRef other) => UnionTypeRef([this, other]);
 
-  TypeRef orUndefined() => or(new TypeRef.undefined());
+  TypeRef orUndefined() => or(TypeRef.undefined());
   TypeRef orNull() => or(_null);
 
-  TypeRef toOptional() => new OptionalTypeRef(this);
+  TypeRef toOptional() => OptionalTypeRef(this);
 }
 
 class AnyTypeRef extends TypeRef {
@@ -86,12 +85,12 @@
   factory AnyTypeRef() => _any;
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitAnyTypeRef(this);
   void visitChildren(NodeVisitor visitor) {}
-  _clone() => new AnyTypeRef();
+  _clone() => AnyTypeRef();
 }
 
 class NullTypeRef extends QualifiedTypeRef {
-  NullTypeRef() : super([new Identifier("null")]);
-  _clone() => new NullTypeRef();
+  NullTypeRef() : super([Identifier("null")]);
+  _clone() => NullTypeRef();
 }
 
 class UnknownTypeRef extends TypeRef {
@@ -100,7 +99,7 @@
   factory UnknownTypeRef() => _unknown;
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitUnknownTypeRef(this);
   void visitChildren(NodeVisitor visitor) {}
-  _clone() => new UnknownTypeRef();
+  _clone() => UnknownTypeRef();
 }
 
 class QualifiedTypeRef extends TypeRef {
@@ -110,7 +109,7 @@
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitQualifiedTypeRef(this);
   void visitChildren(NodeVisitor visitor) =>
       path.forEach((p) => p.accept(visitor));
-  _clone() => new QualifiedTypeRef(path);
+  _clone() => QualifiedTypeRef(path);
 }
 
 class ArrayTypeRef extends TypeRef {
@@ -121,7 +120,7 @@
     elementType.accept(visitor);
   }
 
-  _clone() => new ArrayTypeRef(elementType);
+  _clone() => ArrayTypeRef(elementType);
 }
 
 class GenericTypeRef extends TypeRef {
@@ -135,7 +134,7 @@
     typeArgs.forEach((p) => p.accept(visitor));
   }
 
-  _clone() => new GenericTypeRef(rawType, typeArgs);
+  _clone() => GenericTypeRef(rawType, typeArgs);
 }
 
 class UnionTypeRef extends TypeRef {
@@ -147,12 +146,12 @@
     types.forEach((p) => p.accept(visitor));
   }
 
-  _clone() => new UnionTypeRef(types);
+  _clone() => UnionTypeRef(types);
 
   @override
   TypeRef or(TypeRef other) {
     if (types.contains(other)) return this;
-    return new UnionTypeRef([]
+    return UnionTypeRef([]
       ..addAll(types)
       ..add(other));
   }
@@ -167,7 +166,7 @@
     type.accept(visitor);
   }
 
-  _clone() => new OptionalTypeRef(type);
+  _clone() => OptionalTypeRef(type);
 
   @override
   TypeRef orUndefined() => this;
@@ -182,7 +181,7 @@
     types.values.forEach((p) => p.accept(visitor));
   }
 
-  _clone() => new RecordTypeRef(types);
+  _clone() => RecordTypeRef(types);
 }
 
 class FunctionTypeRef extends TypeRef {
@@ -199,5 +198,5 @@
     });
   }
 
-  _clone() => new FunctionTypeRef(returnType, paramTypes);
+  _clone() => FunctionTypeRef(returnType, paramTypes);
 }
diff --git a/pkg/dev_compiler/lib/src/js_ast/nodes.dart b/pkg/dev_compiler/lib/src/js_ast/nodes.dart
index 2f7f188..2af42b1 100644
--- a/pkg/dev_compiler/lib/src/js_ast/nodes.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/nodes.dart
@@ -273,19 +273,19 @@
   bool get isCommaOperator => false;
 
   Statement toStatement() {
-    throw new UnsupportedError('toStatement');
+    throw UnsupportedError('toStatement');
   }
 
   Statement toReturn() {
-    throw new UnsupportedError('toReturn');
+    throw UnsupportedError('toReturn');
   }
 
   // For debugging
   String toString() {
-    var context = new SimpleJavaScriptPrintingContext();
-    var opts = new JavaScriptPrintingOptions(allowKeywordsInProperties: true);
+    var context = SimpleJavaScriptPrintingContext();
+    var opts = JavaScriptPrintingOptions(allowKeywordsInProperties: true);
     context.buffer.write('js_ast `');
-    accept(new Printer(opts, context));
+    accept(Printer(opts, context));
     context.buffer.write('`');
     return context.getText();
   }
@@ -311,15 +311,15 @@
     for (ModuleItem statement in body) statement.accept(visitor);
   }
 
-  Program _clone() => new Program(body);
+  Program _clone() => Program(body);
 }
 
 abstract class Statement extends ModuleItem {
   static Statement from(List<Statement> statements) {
     // TODO(jmesserly): empty block singleton? Should this use empty statement?
-    if (statements.length == 0) return new Block([]);
+    if (statements.length == 0) return Block([]);
     if (statements.length == 1) return statements[0];
-    return new Block(statements);
+    return Block(statements);
   }
 
   /// True if this declares any name from [names].
@@ -340,13 +340,13 @@
   /// If this statement [shadows] any name from [names], this will wrap it in a
   /// new scoped [Block].
   Statement toScopedBlock(Set<String> names) {
-    return shadows(names) ? new Block([this], isScope: true) : this;
+    return shadows(names) ? Block([this], isScope: true) : this;
   }
 
   Statement toStatement() => this;
-  Statement toReturn() => new Block([this, new Return()]);
+  Statement toReturn() => Block([this, Return()]);
 
-  Block toBlock() => new Block([this]);
+  Block toBlock() => Block([this]);
 }
 
 class Block extends Statement {
@@ -355,7 +355,7 @@
   /// True to preserve this [Block] for scoping reasons.
   final bool isScope;
 
-  Block(this.statements, {this.isScope: false}) {
+  Block(this.statements, {this.isScope = false}) {
     assert(statements.every((s) => s is Statement));
   }
   Block.empty()
@@ -377,7 +377,7 @@
   Block toScopedBlock(Set<String> names) {
     var scoped = statements.any((s) => s.shadows(names));
     if (scoped == isScope) return this;
-    return new Block(statements, isScope: scoped)
+    return Block(statements, isScope: scoped)
       ..sourceInformation = sourceInformation;
   }
 
@@ -386,7 +386,7 @@
     for (Statement statement in statements) statement.accept(visitor);
   }
 
-  Block _clone() => new Block(statements);
+  Block _clone() => Block(statements);
 }
 
 class ExpressionStatement extends Statement {
@@ -404,7 +404,7 @@
     expression.accept(visitor);
   }
 
-  ExpressionStatement _clone() => new ExpressionStatement(expression);
+  ExpressionStatement _clone() => ExpressionStatement(expression);
 }
 
 class EmptyStatement extends Statement {
@@ -412,7 +412,7 @@
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitEmptyStatement(this);
   void visitChildren(NodeVisitor visitor) {}
-  EmptyStatement _clone() => new EmptyStatement();
+  EmptyStatement _clone() => EmptyStatement();
 }
 
 class If extends Statement {
@@ -437,7 +437,7 @@
     if (otherwise != null) otherwise.accept(visitor);
   }
 
-  If _clone() => new If(condition, then, otherwise);
+  If _clone() => If(condition, then, otherwise);
 }
 
 abstract class Loop extends Statement {
@@ -461,7 +461,7 @@
     body.accept(visitor);
   }
 
-  For _clone() => new For(init, condition, update, body);
+  For _clone() => For(init, condition, update, body);
 }
 
 class ForIn extends Loop {
@@ -480,7 +480,7 @@
     body.accept(visitor);
   }
 
-  ForIn _clone() => new ForIn(leftHandSide, object, body);
+  ForIn _clone() => ForIn(leftHandSide, object, body);
 }
 
 class ForOf extends Loop {
@@ -499,7 +499,7 @@
     body.accept(visitor);
   }
 
-  ForIn _clone() => new ForIn(leftHandSide, iterable, body);
+  ForIn _clone() => ForIn(leftHandSide, iterable, body);
 }
 
 class While extends Loop {
@@ -514,7 +514,7 @@
     body.accept(visitor);
   }
 
-  While _clone() => new While(condition, body);
+  While _clone() => While(condition, body);
 }
 
 class Do extends Loop {
@@ -529,7 +529,7 @@
     condition.accept(visitor);
   }
 
-  Do _clone() => new Do(body, condition);
+  Do _clone() => Do(body, condition);
 }
 
 class Continue extends Statement {
@@ -540,7 +540,7 @@
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitContinue(this);
   void visitChildren(NodeVisitor visitor) {}
 
-  Continue _clone() => new Continue(targetLabel);
+  Continue _clone() => Continue(targetLabel);
 }
 
 class Break extends Statement {
@@ -551,7 +551,7 @@
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitBreak(this);
   void visitChildren(NodeVisitor visitor) {}
 
-  Break _clone() => new Break(targetLabel);
+  Break _clone() => Break(targetLabel);
 }
 
 class Return extends Statement {
@@ -570,7 +570,7 @@
     if (value != null) value.accept(visitor);
   }
 
-  Return _clone() => new Return(value);
+  Return _clone() => Return(value);
 
   static bool foundIn(Node node) {
     _returnFinder.found = false;
@@ -579,7 +579,7 @@
   }
 }
 
-final _returnFinder = new _ReturnFinder();
+final _returnFinder = _ReturnFinder();
 
 class _ReturnFinder extends BaseVisitor {
   bool found = false;
@@ -603,7 +603,7 @@
     expression.accept(visitor);
   }
 
-  Throw _clone() => new Throw(expression);
+  Throw _clone() => Throw(expression);
 }
 
 class Try extends Statement {
@@ -623,7 +623,7 @@
     if (finallyPart != null) finallyPart.accept(visitor);
   }
 
-  Try _clone() => new Try(body, catchPart, finallyPart);
+  Try _clone() => Try(body, catchPart, finallyPart);
 }
 
 class Catch extends Node {
@@ -639,7 +639,7 @@
     body.accept(visitor);
   }
 
-  Catch _clone() => new Catch(declaration, body);
+  Catch _clone() => Catch(declaration, body);
 }
 
 class Switch extends Statement {
@@ -655,7 +655,7 @@
     for (var clause in cases) clause.accept(visitor);
   }
 
-  Switch _clone() => new Switch(key, cases);
+  Switch _clone() => Switch(key, cases);
 }
 
 class SwitchCase extends Node {
@@ -674,7 +674,7 @@
     body.accept(visitor);
   }
 
-  SwitchCase _clone() => new SwitchCase(expression, body);
+  SwitchCase _clone() => SwitchCase(expression, body);
 }
 
 class FunctionDeclaration extends Statement {
@@ -690,7 +690,7 @@
     function.accept(visitor);
   }
 
-  FunctionDeclaration _clone() => new FunctionDeclaration(name, function);
+  FunctionDeclaration _clone() => FunctionDeclaration(name, function);
 }
 
 class LabeledStatement extends Statement {
@@ -705,7 +705,7 @@
     body.accept(visitor);
   }
 
-  LabeledStatement _clone() => new LabeledStatement(label, body);
+  LabeledStatement _clone() => LabeledStatement(label, body);
 }
 
 class LiteralStatement extends Statement {
@@ -716,7 +716,7 @@
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitLiteralStatement(this);
   void visitChildren(NodeVisitor visitor) {}
 
-  LiteralStatement _clone() => new LiteralStatement(code);
+  LiteralStatement _clone() => LiteralStatement(code);
 }
 
 // Not a real JavaScript node, but represents the yield statement from a dart
@@ -734,7 +734,7 @@
     expression.accept(visitor);
   }
 
-  DartYield _clone() => new DartYield(expression, hasStar);
+  DartYield _clone() => DartYield(expression, hasStar);
 }
 
 abstract class Expression extends Node {
@@ -743,28 +743,28 @@
   factory Expression.binary(List<Expression> exprs, String op) {
     Expression comma = null;
     for (var node in exprs) {
-      comma = (comma == null) ? node : new Binary(op, comma, node);
+      comma = (comma == null) ? node : Binary(op, comma, node);
     }
     return comma;
   }
 
   int get precedenceLevel;
 
-  Statement toStatement() => new ExpressionStatement(toVoidExpression());
-  Statement toReturn() => new Return(this);
+  Statement toStatement() => ExpressionStatement(toVoidExpression());
+  Statement toReturn() => Return(this);
 
   // TODO(jmesserly): make this return a Yield?
-  Statement toYieldStatement({bool star: false}) =>
-      new ExpressionStatement(new Yield(this, star: star));
+  Statement toYieldStatement({bool star = false}) =>
+      ExpressionStatement(Yield(this, star: star));
 
   Expression toVoidExpression() => this;
   Expression toAssignExpression(Expression left, [String op]) =>
-      new Assignment.compound(left, op, this);
+      Assignment.compound(left, op, this);
 
   // TODO(jmesserly): make this work for more cases?
   Statement toVariableDeclaration(VariableBinding name) =>
-      new VariableDeclarationList(
-          'let', [new VariableInitialization(name, this)]).toStatement();
+      VariableDeclarationList('let', [VariableInitialization(name, this)])
+          .toStatement();
 }
 
 class LiteralExpression extends Expression {
@@ -782,8 +782,7 @@
     }
   }
 
-  LiteralExpression _clone() =>
-      new LiteralExpression.withData(template, inputs);
+  LiteralExpression _clone() => LiteralExpression.withData(template, inputs);
 
   // Code that uses JS must take care of operator precedences, and
   // put parenthesis if needed.
@@ -823,7 +822,7 @@
   }
 
   VariableDeclarationList _clone() =>
-      new VariableDeclarationList(keyword, declarations);
+      VariableDeclarationList(keyword, declarations);
 
   int get precedenceLevel => EXPRESSION;
 }
@@ -847,7 +846,7 @@
     if (value != null) value.accept(visitor);
   }
 
-  Assignment _clone() => new Assignment.compound(leftHandSide, op, value);
+  Assignment _clone() => Assignment.compound(leftHandSide, op, value);
 }
 
 class VariableInitialization extends Expression {
@@ -860,8 +859,7 @@
   T accept<T>(NodeVisitor<T> visitor) =>
       visitor.visitVariableInitialization(this);
 
-  VariableInitialization _clone() =>
-      new VariableInitialization(declaration, value);
+  VariableInitialization _clone() => VariableInitialization(declaration, value);
 
   int get precedenceLevel => ASSIGNMENT;
 
@@ -921,7 +919,7 @@
   @override
   int get precedenceLevel => PRIMARY;
   @override
-  Node _clone() => new DestructuredVariable(
+  Node _clone() => DestructuredVariable(
       name: name,
       property: property,
       structure: structure,
@@ -946,7 +944,7 @@
   final Identifier name;
   SimpleBindingPattern(Identifier name)
       : name = name,
-        super([new DestructuredVariable(name: name)]);
+        super([DestructuredVariable(name: name)]);
 
   T accept<T>(NodeVisitor<T> visitor) =>
       visitor.visitSimpleBindingPattern(this);
@@ -958,7 +956,7 @@
   @override
   int get precedenceLevel => PRIMARY;
   @override
-  Node _clone() => new SimpleBindingPattern(name);
+  Node _clone() => SimpleBindingPattern(name);
 }
 
 class ObjectBindingPattern extends BindingPattern {
@@ -970,7 +968,7 @@
   @override
   int get precedenceLevel => PRIMARY;
   @override
-  Node _clone() => new ObjectBindingPattern(variables);
+  Node _clone() => ObjectBindingPattern(variables);
 }
 
 class ArrayBindingPattern extends BindingPattern {
@@ -981,7 +979,7 @@
   @override
   int get precedenceLevel => PRIMARY;
   @override
-  Node _clone() => new ArrayBindingPattern(variables);
+  Node _clone() => ArrayBindingPattern(variables);
 }
 
 class Conditional extends Expression {
@@ -999,7 +997,7 @@
     otherwise.accept(visitor);
   }
 
-  Conditional _clone() => new Conditional(condition, then, otherwise);
+  Conditional _clone() => Conditional(condition, then, otherwise);
 
   int get precedenceLevel => ASSIGNMENT;
 }
@@ -1017,7 +1015,7 @@
     for (Expression arg in arguments) arg.accept(visitor);
   }
 
-  Call _clone() => new Call(target, arguments);
+  Call _clone() => Call(target, arguments);
 
   int get precedenceLevel => CALL;
 }
@@ -1027,7 +1025,7 @@
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitNew(this);
 
-  New _clone() => new New(target, arguments);
+  New _clone() => New(target, arguments);
 
   int get precedenceLevel => ACCESS;
 }
@@ -1041,7 +1039,7 @@
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitBinary(this);
 
-  Binary _clone() => new Binary(op, left, right);
+  Binary _clone() => Binary(op, left, right);
 
   void visitChildren(NodeVisitor visitor) {
     left.accept(visitor);
@@ -1055,26 +1053,26 @@
     var l = left.toVoidExpression();
     var r = right.toVoidExpression();
     if (l == left && r == right) return this;
-    return new Binary(',', l, r);
+    return Binary(',', l, r);
   }
 
   Statement toStatement() {
     if (!isCommaOperator) return super.toStatement();
-    return new Block([left.toStatement(), right.toStatement()]);
+    return Block([left.toStatement(), right.toStatement()]);
   }
 
   Statement toReturn() {
     if (!isCommaOperator) return super.toReturn();
-    return new Block([left.toStatement(), right.toReturn()]);
+    return Block([left.toStatement(), right.toReturn()]);
   }
 
-  Statement toYieldStatement({bool star: false}) {
+  Statement toYieldStatement({bool star = false}) {
     if (!isCommaOperator) return super.toYieldStatement(star: star);
-    return new Block([left.toStatement(), right.toYieldStatement(star: star)]);
+    return Block([left.toStatement(), right.toYieldStatement(star: star)]);
   }
 
   List<Expression> commaToExpressionList() {
-    if (!isCommaOperator) throw new StateError('not a comma expression');
+    if (!isCommaOperator) throw StateError('not a comma expression');
     var exprs = <Expression>[];
     _flattenComma(exprs, left);
     _flattenComma(exprs, right);
@@ -1142,7 +1140,7 @@
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitPrefix(this);
 
-  Prefix _clone() => new Prefix(op, argument);
+  Prefix _clone() => Prefix(op, argument);
 
   void visitChildren(NodeVisitor visitor) {
     argument.accept(visitor);
@@ -1159,7 +1157,7 @@
   int get precedenceLevel => SPREAD;
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitSpread(this);
-  Spread _clone() => new Spread(argument);
+  Spread _clone() => Spread(argument);
 }
 
 class Postfix extends Expression {
@@ -1170,7 +1168,7 @@
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitPostfix(this);
 
-  Postfix _clone() => new Postfix(op, argument);
+  Postfix _clone() => Postfix(op, argument);
 
   void visitChildren(NodeVisitor visitor) {
     argument.accept(visitor);
@@ -1188,16 +1186,16 @@
   final bool allowRename;
   final TypeRef type;
 
-  Identifier(this.name, {this.allowRename: true, this.type}) {
+  Identifier(this.name, {this.allowRename = true, this.type}) {
     if (!_identifierRE.hasMatch(name)) {
-      throw new ArgumentError.value(name, "name", "not a valid identifier");
+      throw ArgumentError.value(name, "name", "not a valid identifier");
     }
   }
-  static RegExp _identifierRE = new RegExp(r'^[A-Za-z_$][A-Za-z_$0-9]*$');
+  static RegExp _identifierRE = RegExp(r'^[A-Za-z_$][A-Za-z_$0-9]*$');
 
   bool shadows(Set<String> names) => names.contains(name);
 
-  Identifier _clone() => new Identifier(name, allowRename: allowRename);
+  Identifier _clone() => Identifier(name, allowRename: allowRename);
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitIdentifier(this);
   int get precedenceLevel => PRIMARY;
   void visitChildren(NodeVisitor visitor) {}
@@ -1212,7 +1210,7 @@
 
   bool shadows(Set<String> names) => names.contains(parameter.name);
 
-  RestParameter _clone() => new RestParameter(parameter);
+  RestParameter _clone() => RestParameter(parameter);
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitRestParameter(this);
   void visitChildren(NodeVisitor visitor) {
     parameter.accept(visitor);
@@ -1223,7 +1221,7 @@
 
 class This extends Expression {
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitThis(this);
-  This _clone() => new This();
+  This _clone() => This();
   int get precedenceLevel => PRIMARY;
   void visitChildren(NodeVisitor visitor) {}
 
@@ -1234,7 +1232,7 @@
   }
 }
 
-final _thisFinder = new _ThisFinder();
+final _thisFinder = _ThisFinder();
 
 class _ThisFinder extends BaseVisitor {
   bool found = false;
@@ -1251,7 +1249,7 @@
 // it anywhere that `this` is accepted.
 class Super extends Expression {
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitSuper(this);
-  Super _clone() => new Super();
+  Super _clone() => Super();
   int get precedenceLevel => PRIMARY;
   void visitChildren(NodeVisitor visitor) {}
 }
@@ -1273,8 +1271,7 @@
     function.accept(visitor);
   }
 
-  NamedFunction _clone() =>
-      new NamedFunction(name, function, immediatelyInvoked);
+  NamedFunction _clone() => NamedFunction(name, function, immediatelyInvoked);
 
   int get precedenceLevel =>
       immediatelyInvoked ? EXPRESSION : PRIMARY_LOW_PRECEDENCE;
@@ -1306,8 +1303,8 @@
   final AsyncModifier asyncModifier;
 
   Fun(this.params, this.body,
-      {this.isGenerator: false,
-      this.asyncModifier: const AsyncModifier.sync(),
+      {this.isGenerator = false,
+      this.asyncModifier = const AsyncModifier.sync(),
       this.typeParams,
       this.returnType});
 
@@ -1318,8 +1315,8 @@
     body.accept(visitor);
   }
 
-  Fun _clone() => new Fun(params, body,
-      isGenerator: isGenerator, asyncModifier: asyncModifier);
+  Fun _clone() =>
+      Fun(params, body, isGenerator: isGenerator, asyncModifier: asyncModifier);
 
   int get precedenceLevel => PRIMARY_LOW_PRECEDENCE;
 }
@@ -1343,7 +1340,7 @@
 
   int get precedenceLevel => PRIMARY_LOW_PRECEDENCE;
 
-  ArrowFun _clone() => new ArrowFun(params, body);
+  ArrowFun _clone() => ArrowFun(params, body);
 }
 
 /**
@@ -1382,9 +1379,9 @@
 
   PropertyAccess(this.receiver, this.selector);
   PropertyAccess.field(this.receiver, String fieldName)
-      : selector = new LiteralString('"$fieldName"');
+      : selector = LiteralString('"$fieldName"');
   PropertyAccess.indexed(this.receiver, int index)
-      : selector = new LiteralNumber('$index');
+      : selector = LiteralNumber('$index');
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitAccess(this);
 
@@ -1393,7 +1390,7 @@
     selector.accept(visitor);
   }
 
-  PropertyAccess _clone() => new PropertyAccess(receiver, selector);
+  PropertyAccess _clone() => PropertyAccess(receiver, selector);
 
   int get precedenceLevel => ACCESS;
 }
@@ -1411,14 +1408,14 @@
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitLiteralBool(this);
   // [visitChildren] inherited from [Literal].
-  LiteralBool _clone() => new LiteralBool(value);
+  LiteralBool _clone() => LiteralBool(value);
 }
 
 class LiteralNull extends Literal {
   LiteralNull();
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitLiteralNull(this);
-  LiteralNull _clone() => new LiteralNull();
+  LiteralNull _clone() => LiteralNull();
 }
 
 class LiteralString extends Literal {
@@ -1440,7 +1437,7 @@
   String get valueWithoutQuotes => value.substring(1, value.length - 1);
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitLiteralString(this);
-  LiteralString _clone() => new LiteralString(value);
+  LiteralString _clone() => LiteralString(value);
 }
 
 class LiteralNumber extends Literal {
@@ -1449,7 +1446,7 @@
   LiteralNumber(this.value);
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitLiteralNumber(this);
-  LiteralNumber _clone() => new LiteralNumber(value);
+  LiteralNumber _clone() => LiteralNumber(value);
 
   /**
    * Use a different precedence level depending on whether the value contains a
@@ -1462,7 +1459,7 @@
   final List<Expression> elements;
   final bool multiline;
 
-  ArrayInitializer(this.elements, {this.multiline: false});
+  ArrayInitializer(this.elements, {this.multiline = false});
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitArrayInitializer(this);
 
@@ -1470,7 +1467,7 @@
     for (Expression element in elements) element.accept(visitor);
   }
 
-  ArrayInitializer _clone() => new ArrayInitializer(elements);
+  ArrayInitializer _clone() => ArrayInitializer(elements);
 
   int get precedenceLevel => PRIMARY;
 }
@@ -1484,7 +1481,7 @@
 
   void visitChildren(NodeVisitor visitor) {}
 
-  ArrayHole _clone() => new ArrayHole();
+  ArrayHole _clone() => ArrayHole();
 
   int get precedenceLevel => PRIMARY;
 }
@@ -1496,7 +1493,7 @@
   /**
    * Constructs a new object-initializer containing the given [properties].
    */
-  ObjectInitializer(this.properties, {bool multiline: false})
+  ObjectInitializer(this.properties, {bool multiline = false})
       : _multiline = multiline;
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitObjectInitializer(this);
@@ -1505,7 +1502,7 @@
     for (Property init in properties) init.accept(visitor);
   }
 
-  ObjectInitializer _clone() => new ObjectInitializer(properties);
+  ObjectInitializer _clone() => ObjectInitializer(properties);
 
   int get precedenceLevel => PRIMARY;
   /**
@@ -1531,7 +1528,7 @@
     value.accept(visitor);
   }
 
-  Property _clone() => new Property(name, value);
+  Property _clone() => Property(name, value);
 }
 
 // TODO(jmesserly): parser does not support this yet.
@@ -1568,7 +1565,7 @@
     }
   }
 
-  TemplateString _clone() => new TemplateString(strings, interpolations);
+  TemplateString _clone() => TemplateString(strings, interpolations);
 
   int get precedenceLevel => PRIMARY;
 }
@@ -1587,7 +1584,7 @@
     template.accept(visitor);
   }
 
-  TaggedTemplate _clone() => new TaggedTemplate(tag, template);
+  TaggedTemplate _clone() => TaggedTemplate(tag, template);
 
   int get precedenceLevel => CALL;
 }
@@ -1602,7 +1599,7 @@
    */
   final bool star;
 
-  Yield(this.value, {this.star: false});
+  Yield(this.value, {this.star = false});
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitYield(this);
 
@@ -1610,7 +1607,7 @@
     if (value != null) value.accept(visitor);
   }
 
-  Yield _clone() => new Yield(value);
+  Yield _clone() => Yield(value);
 
   int get precedenceLevel => YIELD;
 }
@@ -1622,7 +1619,7 @@
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitClassDeclaration(this);
   visitChildren(NodeVisitor visitor) => classExpr.accept(visitor);
-  ClassDeclaration _clone() => new ClassDeclaration(classExpr);
+  ClassDeclaration _clone() => ClassDeclaration(classExpr);
 }
 
 class ClassExpression extends Expression {
@@ -1659,9 +1656,9 @@
   }
 
   @override
-  ClassDeclaration toStatement() => new ClassDeclaration(this);
+  ClassDeclaration toStatement() => ClassDeclaration(this);
 
-  ClassExpression _clone() => new ClassExpression(name, heritage, methods,
+  ClassExpression _clone() => ClassExpression(name, heritage, methods,
       typeParams: typeParams, fields: fields);
 
   int get precedenceLevel => PRIMARY_LOW_PRECEDENCE;
@@ -1675,7 +1672,7 @@
   final bool isStatic;
 
   Method(this.name, this.function,
-      {this.isGetter: false, this.isSetter: false, this.isStatic: false}) {
+      {this.isGetter = false, this.isSetter = false, this.isStatic = false}) {
     assert(!isGetter || function.params.length == 0);
     assert(!isSetter || function.params.length == 1);
     assert(!isGetter && !isSetter || !function.isGenerator);
@@ -1690,7 +1687,7 @@
     function.accept(visitor);
   }
 
-  Method _clone() => new Method(name, function,
+  Method _clone() => Method(name, function,
       isGetter: isGetter, isSetter: isSetter, isStatic: isStatic);
 }
 
@@ -1710,7 +1707,7 @@
   T accept<T>(NodeVisitor<T> visitor) =>
       visitor.visitInterpolatedExpression(this);
   void visitChildren(NodeVisitor visitor) {}
-  InterpolatedExpression _clone() => new InterpolatedExpression(nameOrPosition);
+  InterpolatedExpression _clone() => InterpolatedExpression(nameOrPosition);
 
   int get precedenceLevel => PRIMARY;
 }
@@ -1722,7 +1719,7 @@
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitInterpolatedLiteral(this);
   void visitChildren(NodeVisitor visitor) {}
-  InterpolatedLiteral _clone() => new InterpolatedLiteral(nameOrPosition);
+  InterpolatedLiteral _clone() => InterpolatedLiteral(nameOrPosition);
 }
 
 class InterpolatedParameter extends Expression
@@ -1744,7 +1741,7 @@
   T accept<T>(NodeVisitor<T> visitor) =>
       visitor.visitInterpolatedParameter(this);
   void visitChildren(NodeVisitor visitor) {}
-  InterpolatedParameter _clone() => new InterpolatedParameter(nameOrPosition);
+  InterpolatedParameter _clone() => InterpolatedParameter(nameOrPosition);
 
   int get precedenceLevel => PRIMARY;
 }
@@ -1757,7 +1754,7 @@
   T accept<T>(NodeVisitor<T> visitor) =>
       visitor.visitInterpolatedSelector(this);
   void visitChildren(NodeVisitor visitor) {}
-  InterpolatedSelector _clone() => new InterpolatedSelector(nameOrPosition);
+  InterpolatedSelector _clone() => InterpolatedSelector(nameOrPosition);
 
   int get precedenceLevel => PRIMARY;
 }
@@ -1770,7 +1767,7 @@
   T accept<T>(NodeVisitor<T> visitor) =>
       visitor.visitInterpolatedStatement(this);
   void visitChildren(NodeVisitor visitor) {}
-  InterpolatedStatement _clone() => new InterpolatedStatement(nameOrPosition);
+  InterpolatedStatement _clone() => InterpolatedStatement(nameOrPosition);
 }
 
 // TODO(jmesserly): generalize this to InterpolatedProperty?
@@ -1783,7 +1780,7 @@
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitInterpolatedMethod(this);
   void visitChildren(NodeVisitor visitor) {}
-  InterpolatedMethod _clone() => new InterpolatedMethod(nameOrPosition);
+  InterpolatedMethod _clone() => InterpolatedMethod(nameOrPosition);
 
   int get precedenceLevel => PRIMARY;
   Expression get name => throw _unsupported;
@@ -1793,7 +1790,7 @@
   bool get isStatic => throw _unsupported;
   Fun get function => throw _unsupported;
   Error get _unsupported =>
-      new UnsupportedError('$runtimeType does not support this member.');
+      UnsupportedError('$runtimeType does not support this member.');
 }
 
 class InterpolatedIdentifier extends Expression
@@ -1809,7 +1806,7 @@
   T accept<T>(NodeVisitor<T> visitor) =>
       visitor.visitInterpolatedIdentifier(this);
   void visitChildren(NodeVisitor visitor) {}
-  InterpolatedIdentifier _clone() => new InterpolatedIdentifier(nameOrPosition);
+  InterpolatedIdentifier _clone() => InterpolatedIdentifier(nameOrPosition);
 
   int get precedenceLevel => PRIMARY;
   String get name => throw '$runtimeType does not support this member.';
@@ -1829,7 +1826,7 @@
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitRegExpLiteral(this);
   void visitChildren(NodeVisitor visitor) {}
-  RegExpLiteral _clone() => new RegExpLiteral(pattern);
+  RegExpLiteral _clone() => RegExpLiteral(pattern);
 
   int get precedenceLevel => PRIMARY;
 }
@@ -1849,7 +1846,7 @@
   int get precedenceLevel => UNARY;
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitAwait(this);
   void visitChildren(NodeVisitor visitor) => expression.accept(visitor);
-  Await _clone() => new Await(expression);
+  Await _clone() => Await(expression);
 }
 
 /**
@@ -1864,7 +1861,7 @@
   Comment(this.comment);
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitComment(this);
-  Comment _clone() => new Comment(comment);
+  Comment _clone() => Comment(comment);
 
   void visitChildren(NodeVisitor visitor) {}
 }
@@ -1883,14 +1880,14 @@
 
   int get precedenceLevel => PRIMARY;
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitCommentExpression(this);
-  CommentExpression _clone() => new CommentExpression(comment, expression);
+  CommentExpression _clone() => CommentExpression(comment, expression);
 
   void visitChildren(NodeVisitor visitor) => expression.accept(visitor);
 }
 
 class DebuggerStatement extends Statement {
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitDebuggerStatement(this);
-  DebuggerStatement _clone() => new DebuggerStatement();
+  DebuggerStatement _clone() => DebuggerStatement();
   void visitChildren(NodeVisitor visitor) {}
 }
 
@@ -1933,7 +1930,7 @@
     from.accept(visitor);
   }
 
-  ImportDeclaration _clone() => new ImportDeclaration(
+  ImportDeclaration _clone() => ImportDeclaration(
       defaultBinding: defaultBinding, namedImports: namedImports, from: from);
 }
 
@@ -1950,7 +1947,7 @@
   /** True if this is an `export default`. */
   final bool isDefault;
 
-  ExportDeclaration(this.exported, {this.isDefault: false}) {
+  ExportDeclaration(this.exported, {this.isDefault = false}) {
     assert(exported is ClassDeclaration ||
             exported is FunctionDeclaration ||
             isDefault
@@ -1963,7 +1960,7 @@
   ///
   /// This can be useful for lowering to other module formats.
   List<Identifier> get exportedNames {
-    if (isDefault) return [new Identifier('default')];
+    if (isDefault) return [Identifier('default')];
 
     var exported = this.exported;
     if (exported is ClassDeclaration) return [exported.classExpr.name];
@@ -1977,13 +1974,13 @@
       if (exported.exportStar) return null;
       return exported.exports.map((e) => e.name).toList();
     }
-    throw new StateError('invalid export declaration');
+    throw StateError('invalid export declaration');
   }
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitExportDeclaration(this);
   visitChildren(NodeVisitor visitor) => exported.accept(visitor);
   ExportDeclaration _clone() =>
-      new ExportDeclaration(exported, isDefault: isDefault);
+      ExportDeclaration(exported, isDefault: isDefault);
 }
 
 class ExportClause extends Node {
@@ -1994,7 +1991,7 @@
 
   /** The `export * from 'name.js'` form. */
   ExportClause.star(LiteralString from)
-      : this([new NameSpecifier.star()], from: from);
+      : this([NameSpecifier.star()], from: from);
 
   /** True if this is an `export *`. */
   bool get exportStar => exports.length == 1 && exports[0].isStar;
@@ -2005,7 +2002,7 @@
     if (from != null) from.accept(visitor);
   }
 
-  ExportClause _clone() => new ExportClause(exports, from: from);
+  ExportClause _clone() => ExportClause(exports, from: from);
 }
 
 /** An import or export specifier. */
@@ -2021,7 +2018,7 @@
 
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitNameSpecifier(this);
   void visitChildren(NodeVisitor visitor) {}
-  NameSpecifier _clone() => new NameSpecifier(name, asName: asName);
+  NameSpecifier _clone() => NameSpecifier(name, asName: asName);
 }
 
 // TODO(jmesserly): should this be related to [Program]?
@@ -2039,5 +2036,5 @@
     for (ModuleItem item in body) item.accept(visitor);
   }
 
-  Module _clone() => new Module(body);
+  Module _clone() => Module(body);
 }
diff --git a/pkg/dev_compiler/lib/src/js_ast/printer.dart b/pkg/dev_compiler/lib/src/js_ast/printer.dart
index 58c8bbb..da72745 100644
--- a/pkg/dev_compiler/lib/src/js_ast/printer.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/printer.dart
@@ -16,12 +16,12 @@
   final bool allowKeywordsInProperties;
 
   JavaScriptPrintingOptions(
-      {this.shouldCompressOutput: false,
-      this.minifyLocalVariables: false,
-      this.preferSemicolonToNewlineInMinifiedOutput: false,
-      this.emitTypes: false,
-      this.allowKeywordsInProperties: false,
-      this.allowSingleLineIfStatements: false});
+      {this.shouldCompressOutput = false,
+      this.minifyLocalVariables = false,
+      this.preferSemicolonToNewlineInMinifiedOutput = false,
+      this.emitTypes = false,
+      this.allowKeywordsInProperties = false,
+      this.allowSingleLineIfStatements = false});
 }
 
 /// An environment in which JavaScript printing is done.  Provides emitting of
@@ -47,7 +47,7 @@
 
 /// A simple implementation of [JavaScriptPrintingContext] suitable for tests.
 class SimpleJavaScriptPrintingContext extends JavaScriptPrintingContext {
-  final StringBuffer buffer = new StringBuffer();
+  final StringBuffer buffer = StringBuffer();
 
   void emit(String string) {
     buffer.write(string);
@@ -79,15 +79,15 @@
   /// Whether the next call to [indent] should just be a no-op.
   bool _skipNextIndent = false;
 
-  static final identifierCharacterRegExp = new RegExp(r'^[a-zA-Z_0-9$]');
-  static final expressionContinuationRegExp = new RegExp(r'^[-+([]');
+  static final identifierCharacterRegExp = RegExp(r'^[a-zA-Z_0-9$]');
+  static final expressionContinuationRegExp = RegExp(r'^[-+([]');
 
   Printer(JavaScriptPrintingOptions options, JavaScriptPrintingContext context,
       {LocalNamer localNamer})
       : options = options,
         context = context,
         shouldCompressOutput = options.shouldCompressOutput,
-        danglingElseVisitor = new DanglingElseVisitor(context),
+        danglingElseVisitor = DanglingElseVisitor(context),
         localNamer = determineRenamer(localNamer, options) {
     context.printer = this;
   }
@@ -96,8 +96,8 @@
       LocalNamer localNamer, JavaScriptPrintingOptions options) {
     if (localNamer != null) return localNamer;
     return (options.shouldCompressOutput && options.minifyLocalVariables)
-        ? new MinifyRenamer()
-        : new IdentityNamer();
+        ? MinifyRenamer()
+        : IdentityNamer();
   }
 
   // The current indentation string.
@@ -317,7 +317,7 @@
     if (hasElse) {
       bool needsBraces = node.then.accept(danglingElseVisitor) || then is Do;
       if (needsBraces) {
-        then = new Block(<Statement>[then]);
+        then = Block(<Statement>[then]);
       }
     }
     if (shouldIndent) indent();
@@ -1210,7 +1210,7 @@
   }
 
   void propertyNameOut(Expression node,
-      {bool inMethod: false, bool inAccess: false}) {
+      {bool inMethod = false, bool inAccess = false}) {
     if (node is LiteralNumber) {
       LiteralNumber nameNumber = node;
       if (inAccess) out('[');
@@ -1296,7 +1296,7 @@
 
   /// This is unused, see [nameSpecifierOut].
   visitNameSpecifier(NameSpecifier node) {
-    throw new UnsupportedError('visitNameSpecifier');
+    throw UnsupportedError('visitNameSpecifier');
   }
 
   nameSpecifierOut(NameSpecifier node, bool export) {
@@ -1427,8 +1427,8 @@
 
   VarCollector()
       : nested = false,
-        vars = new Set<String>(),
-        params = new Set<String>();
+        vars = Set<String>(),
+        params = Set<String>();
 
   void forEachVar(void fn(String v)) => vars.forEach(fn);
   void forEachParam(void fn(String p)) => params.forEach(fn);
@@ -1565,9 +1565,9 @@
   int variableNumber = 0;
 
   void enterScope(Node node) {
-    var vars = new VarCollector();
+    var vars = VarCollector();
     node.accept(vars);
-    maps.add(new Map<String, String>());
+    maps.add(Map<String, String>());
     variableNumberStack.add(variableNumber);
     parameterNumberStack.add(parameterNumber);
     vars.forEachVar(declareVariable);
@@ -1648,7 +1648,7 @@
     String newName;
     if (n < LETTERS) {
       // Start naming variables a, b, c, ..., z, A, B, C, ..., Z.
-      newName = new String.fromCharCodes([nthLetter(n)]);
+      newName = String.fromCharCodes([nthLetter(n)]);
     } else {
       // Then name variables a0, a1, a2, ..., a9, b0, b1, ..., Z9, aa0, aa1, ...
       // For all functions with fewer than 500 locals this is just as compact
@@ -1671,9 +1671,9 @@
         codes.add(nthLetter((n ~/ nameSpaceSize) % LETTERS));
       }
       codes.add(charCodes.$0 + digit);
-      newName = new String.fromCharCodes(codes);
+      newName = String.fromCharCodes(codes);
     }
-    assert(new RegExp(r'[a-zA-Z][a-zA-Z0-9]*').hasMatch(newName));
+    assert(RegExp(r'[a-zA-Z][a-zA-Z0-9]*').hasMatch(newName));
     maps.last[oldName] = newName;
     return newName;
   }
diff --git a/pkg/dev_compiler/lib/src/js_ast/source_map_printer.dart b/pkg/dev_compiler/lib/src/js_ast/source_map_printer.dart
index 4474cae..af5a5b6 100644
--- a/pkg/dev_compiler/lib/src/js_ast/source_map_printer.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/source_map_printer.dart
@@ -33,7 +33,7 @@
   int _column = 0;
 
   /// The source_maps builder we write JavaScript code to.
-  final sourceMap = new SourceMapBuilder();
+  final sourceMap = SourceMapBuilder();
 
   /// The last marked line in the buffer.
   int _previousDartOffset = -1;
@@ -75,7 +75,7 @@
       _mark(srcInfo.end);
       emit('*/');
     } else if (srcInfo is! NodeEnd) {
-      throw new StateError(
+      throw StateError(
           'wrong kind of source map data: `$srcInfo` <${srcInfo.runtimeType}>');
     }
 
@@ -101,7 +101,7 @@
     } else if (srcInfo is NodeEnd) {
       dartEnd = srcInfo.end;
     } else if (srcInfo is! SourceLocation && srcInfo is! HoverComment) {
-      throw new StateError(
+      throw StateError(
           'wrong kind of source map data: `$srcInfo` <${srcInfo.runtimeType}>');
     }
 
@@ -113,8 +113,8 @@
         if (column >= 0) {
           // Adjust the colum, because any ending brace or semicolon is already in
           // the output.
-          var jsEnd = new SourceLocation(buffer.length - 1,
-              line: _line, column: column);
+          var jsEnd =
+              SourceLocation(buffer.length - 1, line: _line, column: column);
           _mark(dartEnd, jsEnd);
         }
       } else {
@@ -168,7 +168,7 @@
   }
 
   SourceLocation _getJSLocation() =>
-      new SourceLocation(buffer.length, line: _line, column: _column);
+      SourceLocation(buffer.length, line: _line, column: _column);
 }
 
 const int _LF = 10;
diff --git a/pkg/dev_compiler/lib/src/js_ast/template.dart b/pkg/dev_compiler/lib/src/js_ast/template.dart
index 5a06359..6475446 100644
--- a/pkg/dev_compiler/lib/src/js_ast/template.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/template.dart
@@ -5,8 +5,8 @@
 part of js_ast;
 
 class TemplateManager {
-  Map<String, Template> expressionTemplates = new Map<String, Template>();
-  Map<String, Template> statementTemplates = new Map<String, Template>();
+  Map<String, Template> expressionTemplates = Map<String, Template>();
+  Map<String, Template> statementTemplates = Map<String, Template>();
 
   TemplateManager();
 
@@ -16,7 +16,7 @@
 
   Template defineExpressionTemplate(String source, Node ast) {
     Template template =
-        new Template(source, ast, isExpression: true, forceCopy: false);
+        Template(source, ast, isExpression: true, forceCopy: false);
     expressionTemplates[source] = template;
     return template;
   }
@@ -27,7 +27,7 @@
 
   Template defineStatementTemplate(String source, Node ast) {
     Template template =
-        new Template(source, ast, isExpression: false, forceCopy: false);
+        Template(source, ast, isExpression: false, forceCopy: false);
     statementTemplates[source] = template;
     return template;
   }
@@ -54,7 +54,7 @@
   bool get isPositional => holeNames == null;
 
   Template(this.source, this.ast,
-      {this.isExpression: true, this.forceCopy: false}) {
+      {this.isExpression = true, this.forceCopy = false}) {
     _compile();
   }
 
@@ -79,13 +79,13 @@
   }
 
   bool _checkNoPlaceholders() {
-    var generator = new InstantiatorGeneratorVisitor(false);
+    var generator = InstantiatorGeneratorVisitor(false);
     generator.compile(ast);
     return generator.analysis.count == 0;
   }
 
   void _compile() {
-    var generator = new InstantiatorGeneratorVisitor(forceCopy);
+    var generator = InstantiatorGeneratorVisitor(forceCopy);
     instantiator = generator.compile(ast);
     positionalArgumentCount = generator.analysis.count;
     Set<String> names = generator.analysis.holeNames;
@@ -120,7 +120,7 @@
       }
       return instantiator(arguments) as Node;
     }
-    throw new ArgumentError.value(arguments, 'must be a List or Map');
+    throw ArgumentError.value(arguments, 'must be a List or Map');
   }
 }
 
@@ -139,7 +139,7 @@
 class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
   final bool forceCopy;
 
-  final analysis = new InterpolatedNodeAnalysis();
+  final analysis = InterpolatedNodeAnalysis();
 
   /**
    * The entire tree is cloned if [forceCopy] is true.
@@ -173,7 +173,7 @@
   }
 
   Instantiator visitNode(Node node) {
-    throw new UnimplementedError('visit${node.runtimeType}');
+    throw UnimplementedError('visit${node.runtimeType}');
   }
 
   Instantiator<Expression> visitInterpolatedExpression(
@@ -182,8 +182,8 @@
     return (arguments) {
       var value = arguments[nameOrPosition];
       if (value is Expression) return value;
-      if (value is String) return new Identifier(value);
-      throw new StateError(
+      if (value is String) return Identifier(value);
+      throw StateError(
           'Interpolated value #$nameOrPosition is not an Expression: $value');
     };
   }
@@ -195,8 +195,8 @@
         var value = arguments[nameOrPosition];
         Expression toExpression(item) {
           if (item is Expression) return item;
-          if (item is String) return new Identifier(item);
-          throw new StateError('Interpolated value #$nameOrPosition is not '
+          if (item is String) return Identifier(item);
+          throw StateError('Interpolated value #$nameOrPosition is not '
               'an Expression or List of Expressions: $value');
         }
 
@@ -225,7 +225,7 @@
     return (arguments) {
       var value = arguments[nameOrPosition];
       if (value is Literal) return value;
-      throw new StateError(
+      throw StateError(
           'Interpolated value #$nameOrPosition is not a Literal: $value');
     };
   }
@@ -237,8 +237,8 @@
 
       Parameter toIdentifier(item) {
         if (item is Parameter) return item;
-        if (item is String) return new Identifier(item);
-        throw new StateError(
+        if (item is String) return Identifier(item);
+        throw StateError(
             'Interpolated value #$nameOrPosition is not an Identifier'
             ' or List of Identifiers: $value');
       }
@@ -257,8 +257,8 @@
     return (arguments) {
       var value = arguments[nameOrPosition];
       if (value is Expression) return value;
-      if (value is String) return new LiteralString('"$value"');
-      throw new StateError(
+      if (value is String) return LiteralString('"$value"');
+      throw StateError(
           'Interpolated value #$nameOrPosition is not a selector: $value');
     };
   }
@@ -269,7 +269,7 @@
     return (arguments) {
       var value = arguments[nameOrPosition];
       if (value is Node) return value.toStatement();
-      throw new StateError(
+      throw StateError(
           'Interpolated value #$nameOrPosition is not a Statement: $value');
     };
   }
@@ -280,8 +280,7 @@
       var value = arguments[nameOrPosition];
       Method toMethod(item) {
         if (item is Method) return item;
-        throw new StateError(
-            'Interpolated value #$nameOrPosition is not a Method '
+        throw StateError('Interpolated value #$nameOrPosition is not a Method '
             'or List of Methods: $value');
       }
 
@@ -296,8 +295,8 @@
     return (arguments) {
       var item = arguments[nameOrPosition];
       if (item is Identifier) return item;
-      if (item is String) return new Identifier(item);
-      throw new StateError('Interpolated value #$nameOrPosition is not a '
+      if (item is String) return Identifier(item);
+      throw StateError('Interpolated value #$nameOrPosition is not a '
           'Identifier or String: $item');
     };
   }
@@ -310,7 +309,7 @@
         Statement toStatement(item) {
           if (item is Statement) return item;
           if (item is Expression) return item.toStatement();
-          throw new StateError('Interpolated value #$nameOrPosition is not '
+          throw StateError('Interpolated value #$nameOrPosition is not '
               'a Statement or List of Statements: $value');
         }
 
@@ -323,7 +322,7 @@
 
   Instantiator<Program> visitProgram(Program node) {
     var instantiators = node.body.map(visitSplayableStatement).toList();
-    return (a) => new Program(splayStatements(instantiators, a));
+    return (a) => Program(splayStatements(instantiators, a));
   }
 
   List<Statement> splayStatements(List<Instantiator> instantiators, arguments) {
@@ -344,7 +343,7 @@
 
   Instantiator<Block> visitBlock(Block node) {
     var instantiators = node.statements.map(visitSplayableStatement).toList();
-    return (a) => new Block(splayStatements(instantiators, a));
+    return (a) => Block(splayStatements(instantiators, a));
   }
 
   Instantiator<Statement> visitExpressionStatement(ExpressionStatement node) {
@@ -353,10 +352,10 @@
   }
 
   Instantiator<DebuggerStatement> visitDebuggerStatement(node) =>
-      (a) => new DebuggerStatement();
+      (a) => DebuggerStatement();
 
   Instantiator<EmptyStatement> visitEmptyStatement(EmptyStatement node) =>
-      (a) => new EmptyStatement();
+      (a) => EmptyStatement();
 
   Instantiator<Statement> visitIf(If node) {
     var condition = node.condition;
@@ -378,8 +377,8 @@
       if (value is bool) {
         return value ? makeThen(arguments) : makeOtherwise(arguments);
       }
-      var cond = value is String ? new Identifier(value) : value as Expression;
-      return new If(cond, makeThen(arguments), makeOtherwise(arguments));
+      var cond = value is String ? Identifier(value) : value as Expression;
+      return If(cond, makeThen(arguments), makeOtherwise(arguments));
     };
   }
 
@@ -387,7 +386,7 @@
     Instantiator<Expression> makeCondition = visit(node.condition);
     Instantiator<Statement> makeThen = visit(node.then);
     Instantiator<Statement> makeOtherwise = visit(node.otherwise);
-    return (a) => new If(makeCondition(a), makeThen(a), makeOtherwise(a));
+    return (a) => If(makeCondition(a), makeThen(a), makeOtherwise(a));
   }
 
   Instantiator<Statement> visitFor(For node) {
@@ -395,7 +394,7 @@
     Instantiator<Expression> makeCondition = visitNullable(node.condition);
     Instantiator<Expression> makeUpdate = visitNullable(node.update);
     Instantiator<Statement> makeBody = visit(node.body);
-    return (a) => new For(makeInit(a), makeCondition(a),
+    return (a) => For(makeInit(a), makeCondition(a),
         makeUpdate(a)?.toVoidExpression(), makeBody(a));
   }
 
@@ -403,74 +402,73 @@
     Instantiator<Expression> makeLeftHandSide = visit(node.leftHandSide);
     Instantiator<Expression> makeObject = visit(node.object);
     Instantiator<Statement> makeBody = visit(node.body);
-    return (a) => new ForIn(makeLeftHandSide(a), makeObject(a), makeBody(a));
+    return (a) => ForIn(makeLeftHandSide(a), makeObject(a), makeBody(a));
   }
 
   Instantiator<ForOf> visitForOf(ForOf node) {
     Instantiator<Expression> makeLeftHandSide = visit(node.leftHandSide);
     Instantiator<Expression> makeObject = visit(node.iterable);
     Instantiator<Statement> makeBody = visit(node.body);
-    return (a) => new ForOf(makeLeftHandSide(a), makeObject(a), makeBody(a));
+    return (a) => ForOf(makeLeftHandSide(a), makeObject(a), makeBody(a));
   }
 
   Instantiator<While> visitWhile(While node) {
     Instantiator<Expression> makeCondition = visit(node.condition);
     Instantiator<Statement> makeBody = visit(node.body);
-    return (a) => new While(makeCondition(a), makeBody(a));
+    return (a) => While(makeCondition(a), makeBody(a));
   }
 
   Instantiator<Do> visitDo(Do node) {
     Instantiator<Statement> makeBody = visit(node.body);
     Instantiator<Expression> makeCondition = visit(node.condition);
-    return (a) => new Do(makeBody(a), makeCondition(a));
+    return (a) => Do(makeBody(a), makeCondition(a));
   }
 
   Instantiator<Continue> visitContinue(Continue node) =>
-      (a) => new Continue(node.targetLabel);
+      (a) => Continue(node.targetLabel);
 
-  Instantiator<Break> visitBreak(Break node) =>
-      (a) => new Break(node.targetLabel);
+  Instantiator<Break> visitBreak(Break node) => (a) => Break(node.targetLabel);
 
   Instantiator<Statement> visitReturn(Return node) {
-    if (node.value == null) return (args) => new Return();
+    if (node.value == null) return (args) => Return();
     Instantiator<Expression> makeExpression = visit(node.value);
     return (a) => makeExpression(a).toReturn();
   }
 
   Instantiator<DartYield> visitDartYield(DartYield node) {
     Instantiator<Expression> makeExpression = visit(node.expression);
-    return (a) => new DartYield(makeExpression(a), node.hasStar);
+    return (a) => DartYield(makeExpression(a), node.hasStar);
   }
 
   Instantiator<Throw> visitThrow(Throw node) {
     Instantiator<Expression> makeExpression = visit(node.expression);
-    return (a) => new Throw(makeExpression(a));
+    return (a) => Throw(makeExpression(a));
   }
 
   Instantiator<Try> visitTry(Try node) {
     Instantiator<Block> makeBody = visit(node.body);
     Instantiator<Catch> makeCatch = visitNullable(node.catchPart);
     Instantiator<Block> makeFinally = visitNullable(node.finallyPart);
-    return (a) => new Try(makeBody(a), makeCatch(a), makeFinally(a));
+    return (a) => Try(makeBody(a), makeCatch(a), makeFinally(a));
   }
 
   Instantiator<Catch> visitCatch(Catch node) {
     Instantiator<Identifier> makeDeclaration = visit(node.declaration);
     Instantiator<Block> makeBody = visit(node.body);
-    return (a) => new Catch(makeDeclaration(a), makeBody(a));
+    return (a) => Catch(makeDeclaration(a), makeBody(a));
   }
 
   Instantiator<Switch> visitSwitch(Switch node) {
     Instantiator<Expression> makeKey = visit(node.key);
     var makeCases = node.cases.map(visitSwitchCase).toList();
-    return (a) => new Switch(makeKey(a), makeCases.map((m) => m(a)).toList());
+    return (a) => Switch(makeKey(a), makeCases.map((m) => m(a)).toList());
   }
 
   Instantiator<SwitchCase> visitSwitchCase(SwitchCase node) {
     Instantiator<Expression> makeExpression = visitNullable(node.expression);
     Instantiator<Block> makeBody = visit(node.body);
     return (arguments) {
-      return new SwitchCase(makeExpression(arguments), makeBody(arguments));
+      return SwitchCase(makeExpression(arguments), makeBody(arguments));
     };
   }
 
@@ -478,12 +476,12 @@
       FunctionDeclaration node) {
     Instantiator<Identifier> makeName = visit(node.name);
     Instantiator<Fun> makeFunction = visit(node.function);
-    return (a) => new FunctionDeclaration(makeName(a), makeFunction(a));
+    return (a) => FunctionDeclaration(makeName(a), makeFunction(a));
   }
 
   Instantiator<LabeledStatement> visitLabeledStatement(LabeledStatement node) {
     Instantiator<Statement> makeBody = visit(node.body);
-    return (a) => new LabeledStatement(node.label, makeBody(a));
+    return (a) => LabeledStatement(node.label, makeBody(a));
   }
 
   Instantiator visitLiteralStatement(LiteralStatement node) => visitNode(node);
@@ -494,7 +492,7 @@
       VariableDeclarationList node) {
     var declarationMakers =
         node.declarations.map(visitVariableInitialization).toList();
-    return (a) => new VariableDeclarationList(
+    return (a) => VariableDeclarationList(
         node.keyword, declarationMakers.map((m) => m(a)).toList());
   }
 
@@ -512,15 +510,14 @@
       VariableInitialization node) {
     Instantiator<VariableBinding> makeDeclaration = visit(node.declaration);
     Instantiator<Expression> makeValue = visitNullable(node.value);
-    return (a) => new VariableInitialization(makeDeclaration(a), makeValue(a));
+    return (a) => VariableInitialization(makeDeclaration(a), makeValue(a));
   }
 
   Instantiator<Conditional> visitConditional(Conditional cond) {
     Instantiator<Expression> makeCondition = visit(cond.condition);
     Instantiator<Expression> makeThen = visit(cond.then);
     Instantiator<Expression> makeOtherwise = visit(cond.otherwise);
-    return (a) =>
-        new Conditional(makeCondition(a), makeThen(a), makeOtherwise(a));
+    return (a) => Conditional(makeCondition(a), makeThen(a), makeOtherwise(a));
   }
 
   Instantiator<Call> visitNew(New node) => handleCallOrNew(node, true);
@@ -536,7 +533,7 @@
     return (a) {
       var target = makeTarget(a);
       var callArgs = splayNodes<Expression>(argumentMakers, a);
-      return isNew ? new New(target, callArgs) : new Call(target, callArgs);
+      return isNew ? New(target, callArgs) : Call(target, callArgs);
     };
   }
 
@@ -544,117 +541,117 @@
     Instantiator<Expression> makeLeft = visit(node.left);
     Instantiator<Expression> makeRight = visit(node.right);
     String op = node.op;
-    return (a) => new Binary(op, makeLeft(a), makeRight(a));
+    return (a) => Binary(op, makeLeft(a), makeRight(a));
   }
 
   Instantiator<Prefix> visitPrefix(Prefix node) {
     Instantiator<Expression> makeOperand = visit(node.argument);
     String op = node.op;
-    return (a) => new Prefix(op, makeOperand(a));
+    return (a) => Prefix(op, makeOperand(a));
   }
 
   Instantiator<Postfix> visitPostfix(Postfix node) {
     Instantiator<Expression> makeOperand = visit(node.argument);
     String op = node.op;
-    return (a) => new Postfix(op, makeOperand(a));
+    return (a) => Postfix(op, makeOperand(a));
   }
 
-  Instantiator<This> visitThis(This node) => (a) => new This();
-  Instantiator<Super> visitSuper(Super node) => (a) => new Super();
+  Instantiator<This> visitThis(This node) => (a) => This();
+  Instantiator<Super> visitSuper(Super node) => (a) => Super();
 
   Instantiator<Identifier> visitIdentifier(Identifier node) =>
-      (a) => new Identifier(node.name);
+      (a) => Identifier(node.name);
 
   Instantiator<Spread> visitSpread(Spread node) {
     var maker = visit(node.argument);
-    return (a) => new Spread(maker(a) as Expression);
+    return (a) => Spread(maker(a) as Expression);
   }
 
   Instantiator<Yield> visitYield(Yield node) {
     var maker = visitNullable(node.value);
-    return (a) => new Yield(maker(a) as Expression, star: node.star);
+    return (a) => Yield(maker(a) as Expression, star: node.star);
   }
 
   Instantiator<RestParameter> visitRestParameter(RestParameter node) {
     var maker = visit(node.parameter);
-    return (a) => new RestParameter(maker(a) as Identifier);
+    return (a) => RestParameter(maker(a) as Identifier);
   }
 
   Instantiator<PropertyAccess> visitAccess(PropertyAccess node) {
     Instantiator<Expression> makeReceiver = visit(node.receiver);
     Instantiator<Expression> makeSelector = visit(node.selector);
-    return (a) => new PropertyAccess(makeReceiver(a), makeSelector(a));
+    return (a) => PropertyAccess(makeReceiver(a), makeSelector(a));
   }
 
   Instantiator<NamedFunction> visitNamedFunction(NamedFunction node) {
     Instantiator<Identifier> makeDeclaration = visit(node.name);
     Instantiator<Fun> makeFunction = visit(node.function);
-    return (a) => new NamedFunction(makeDeclaration(a), makeFunction(a));
+    return (a) => NamedFunction(makeDeclaration(a), makeFunction(a));
   }
 
   Instantiator<Fun> visitFun(Fun node) {
     var paramMakers = node.params.map(visitSplayable).toList();
     Instantiator<Block> makeBody = visit(node.body);
-    return (a) => new Fun(splayNodes(paramMakers, a), makeBody(a),
+    return (a) => Fun(splayNodes(paramMakers, a), makeBody(a),
         isGenerator: node.isGenerator, asyncModifier: node.asyncModifier);
   }
 
   Instantiator<ArrowFun> visitArrowFun(ArrowFun node) {
     var paramMakers = node.params.map(visitSplayable).toList();
     Instantiator makeBody = visit(node.body as Node);
-    return (a) => new ArrowFun(splayNodes(paramMakers, a), makeBody(a));
+    return (a) => ArrowFun(splayNodes(paramMakers, a), makeBody(a));
   }
 
   Instantiator<LiteralBool> visitLiteralBool(LiteralBool node) =>
-      (a) => new LiteralBool(node.value);
+      (a) => LiteralBool(node.value);
 
   Instantiator<LiteralString> visitLiteralString(LiteralString node) =>
-      (a) => new LiteralString(node.value);
+      (a) => LiteralString(node.value);
 
   Instantiator<LiteralNumber> visitLiteralNumber(LiteralNumber node) =>
-      (a) => new LiteralNumber(node.value);
+      (a) => LiteralNumber(node.value);
 
   Instantiator<LiteralNull> visitLiteralNull(LiteralNull node) =>
-      (a) => new LiteralNull();
+      (a) => LiteralNull();
 
   Instantiator<ArrayInitializer> visitArrayInitializer(ArrayInitializer node) {
     var makers = node.elements.map(visitSplayableExpression).toList();
-    return (a) => new ArrayInitializer(splayNodes(makers, a));
+    return (a) => ArrayInitializer(splayNodes(makers, a));
   }
 
   Instantiator visitArrayHole(ArrayHole node) {
-    return (arguments) => new ArrayHole();
+    return (arguments) => ArrayHole();
   }
 
   Instantiator<ObjectInitializer> visitObjectInitializer(
       ObjectInitializer node) {
     var propertyMakers = node.properties.map(visitSplayable).toList();
-    return (a) => new ObjectInitializer(splayNodes(propertyMakers, a));
+    return (a) => ObjectInitializer(splayNodes(propertyMakers, a));
   }
 
   Instantiator<Property> visitProperty(Property node) {
     Instantiator<Expression> makeName = visit(node.name);
     Instantiator<Expression> makeValue = visit(node.value);
-    return (a) => new Property(makeName(a), makeValue(a));
+    return (a) => Property(makeName(a), makeValue(a));
   }
 
   Instantiator<RegExpLiteral> visitRegExpLiteral(RegExpLiteral node) =>
-      (a) => new RegExpLiteral(node.pattern);
+      (a) => RegExpLiteral(node.pattern);
 
   Instantiator<TemplateString> visitTemplateString(TemplateString node) {
     var makeElements = node.interpolations.map(visit).toList();
-    return (a) => new TemplateString(node.strings, splayNodes(makeElements, a));
+    return (a) => TemplateString(node.strings, splayNodes(makeElements, a));
   }
 
   Instantiator<TaggedTemplate> visitTaggedTemplate(TaggedTemplate node) {
     Instantiator<Expression> makeTag = visit(node.tag);
     var makeTemplate = visitTemplateString(node.template);
-    return (a) => new TaggedTemplate(makeTag(a), makeTemplate(a));
+    return (a) => TaggedTemplate(makeTag(a), makeTemplate(a));
   }
 
   Instantiator visitClassDeclaration(ClassDeclaration node) {
     var makeClass = visitClassExpression(node.classExpr);
-    return (a) => new ClassDeclaration(makeClass(a));
+    return (a) => ClassDeclaration(makeClass(a));
   }
 
   Instantiator<ClassExpression> visitClassExpression(ClassExpression node) {
@@ -662,73 +659,72 @@
     Instantiator<Identifier> makeName = visit(node.name);
     Instantiator<Expression> makeHeritage = visit(node.heritage);
 
-    return (a) => new ClassExpression(
+    return (a) => ClassExpression(
         makeName(a), makeHeritage(a), splayNodes(makeMethods, a));
   }
 
   Instantiator<Method> visitMethod(Method node) {
     Instantiator<Expression> makeName = visit(node.name);
     Instantiator<Fun> makeFunction = visit(node.function);
-    return (a) => new Method(makeName(a), makeFunction(a),
+    return (a) => Method(makeName(a), makeFunction(a),
         isGetter: node.isGetter,
         isSetter: node.isSetter,
         isStatic: node.isStatic);
   }
 
   Instantiator<Comment> visitComment(Comment node) =>
-      (a) => new Comment(node.comment);
+      (a) => Comment(node.comment);
 
   Instantiator<CommentExpression> visitCommentExpression(
       CommentExpression node) {
     Instantiator<Expression> makeExpr = visit(node.expression);
-    return (a) => new CommentExpression(node.comment, makeExpr(a));
+    return (a) => CommentExpression(node.comment, makeExpr(a));
   }
 
   Instantiator<Await> visitAwait(Await node) {
     Instantiator<Expression> makeExpr = visit(node.expression);
-    return (a) => new Await(makeExpr(a));
+    return (a) => Await(makeExpr(a));
   }
 
   // Note: these are not supported yet in the interpolation grammar.
-  Instantiator visitModule(Module node) => throw new UnimplementedError();
+  Instantiator visitModule(Module node) => throw UnimplementedError();
   Instantiator visitNameSpecifier(NameSpecifier node) =>
-      throw new UnimplementedError();
+      throw UnimplementedError();
 
   Instantiator visitImportDeclaration(ImportDeclaration node) =>
-      throw new UnimplementedError();
+      throw UnimplementedError();
 
   Instantiator visitExportDeclaration(ExportDeclaration node) =>
-      throw new UnimplementedError();
+      throw UnimplementedError();
 
   Instantiator visitExportClause(ExportClause node) =>
-      throw new UnimplementedError();
+      throw UnimplementedError();
 
-  Instantiator visitAnyTypeRef(AnyTypeRef node) =>
-      throw new UnimplementedError();
+  Instantiator visitAnyTypeRef(AnyTypeRef node) => throw UnimplementedError();
 
   Instantiator visitUnknownTypeRef(UnknownTypeRef node) =>
-      throw new UnimplementedError();
+      throw UnimplementedError();
 
   Instantiator visitArrayTypeRef(ArrayTypeRef node) =>
-      throw new UnimplementedError();
+      throw UnimplementedError();
 
   Instantiator visitFunctionTypeRef(FunctionTypeRef node) =>
-      throw new UnimplementedError();
+      throw UnimplementedError();
 
   Instantiator visitGenericTypeRef(GenericTypeRef node) =>
-      throw new UnimplementedError();
+      throw UnimplementedError();
 
   Instantiator visitQualifiedTypeRef(QualifiedTypeRef node) =>
-      throw new UnimplementedError();
+      throw UnimplementedError();
 
   Instantiator visitOptionalTypeRef(OptionalTypeRef node) =>
-      throw new UnimplementedError();
+      throw UnimplementedError();
 
   Instantiator visitRecordTypeRef(RecordTypeRef node) =>
-      throw new UnimplementedError();
+      throw UnimplementedError();
 
   Instantiator visitUnionTypeRef(UnionTypeRef node) =>
-      throw new UnimplementedError();
+      throw UnimplementedError();
 
   @override
   Instantiator<DestructuredVariable> visitDestructuredVariable(
@@ -738,7 +734,7 @@
     Instantiator<BindingPattern> makeStructure = visitNullable(node.structure);
     Instantiator<Expression> makeDefaultValue =
         visitNullable(node.defaultValue);
-    return (a) => new DestructuredVariable(
+    return (a) => DestructuredVariable(
         name: makeName(a),
         property: makeProperty(a),
         structure: makeStructure(a),
@@ -749,18 +745,18 @@
   Instantiator<ArrayBindingPattern> visitArrayBindingPattern(
       ArrayBindingPattern node) {
     List<Instantiator> makeVars = node.variables.map(this.visit).toList();
-    return (a) => new ArrayBindingPattern(splayNodes(makeVars, a));
+    return (a) => ArrayBindingPattern(splayNodes(makeVars, a));
   }
 
   @override
   Instantiator visitObjectBindingPattern(ObjectBindingPattern node) {
     List<Instantiator> makeVars = node.variables.map(this.visit).toList();
-    return (a) => new ObjectBindingPattern(splayNodes(makeVars, a));
+    return (a) => ObjectBindingPattern(splayNodes(makeVars, a));
   }
 
   @override
   Instantiator visitSimpleBindingPattern(SimpleBindingPattern node) =>
-      (a) => new SimpleBindingPattern(new Identifier(node.name.name));
+      (a) => SimpleBindingPattern(Identifier(node.name.name));
 }
 
 /**
@@ -768,8 +764,8 @@
  * [InterpolatedNode]s, and the names of the named interpolated nodes.
  */
 class InterpolatedNodeAnalysis extends BaseVisitor {
-  final Set<Node> containsInterpolatedNode = new Set<Node>();
-  final Set<String> holeNames = new Set<String>();
+  final Set<Node> containsInterpolatedNode = Set<Node>();
+  final Set<String> holeNames = Set<String>();
   int count = 0;
 
   InterpolatedNodeAnalysis();
diff --git a/pkg/dev_compiler/lib/src/js_ast/type_printer.dart b/pkg/dev_compiler/lib/src/js_ast/type_printer.dart
index f0252c7..5123482 100644
--- a/pkg/dev_compiler/lib/src/js_ast/type_printer.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/type_printer.dart
@@ -123,7 +123,7 @@
 }
 
 class ClosureTypePrinter extends _TypePrinterBase implements NodeVisitor {
-  final _buffer = new StringBuffer();
+  final _buffer = StringBuffer();
 
   @override
   void out(String s) => _buffer.write(s);
diff --git a/pkg/dev_compiler/lib/src/kernel/command.dart b/pkg/dev_compiler/lib/src/kernel/command.dart
index cd9aaf9..3b47f14 100644
--- a/pkg/dev_compiler/lib/src/kernel/command.dart
+++ b/pkg/dev_compiler/lib/src/kernel/command.dart
@@ -67,7 +67,7 @@
   Uri result = Uri.base.resolve(s);
   if (windows && result.scheme.length == 1) {
     // Assume c: or similar --- interpret as file path.
-    return new Uri.file(s, windows: true);
+    return Uri.file(s, windows: true);
   }
   return result;
 }
@@ -110,7 +110,7 @@
 Future<CompilerResult> _compile(List<String> args,
     {fe.InitializedCompilerState compilerState}) async {
   // TODO(jmesserly): refactor options to share code with dartdevc CLI.
-  var argParser = new ArgParser(allowTrailingOptions: true)
+  var argParser = ArgParser(allowTrailingOptions: true)
     ..addFlag('help',
         abbr: 'h', help: 'Display this message.', negatable: false)
     ..addOption('out', abbr: 'o', help: 'Output file (required).')
@@ -164,7 +164,7 @@
 
   if (argResults['help'] as bool || args.isEmpty) {
     print(_usageMessage(argParser));
-    return new CompilerResult.noState(true);
+    return CompilerResult.noState(true);
   }
 
   var moduleFormat = parseModuleFormatOption(argResults).first;
@@ -207,7 +207,7 @@
   // lib folder). The following [FileSystem] will resolve those references to
   // the correct location and keeps the real file location hidden from the
   // front end.
-  var fileSystem = new MultiRootFileSystem(
+  var fileSystem = MultiRootFileSystem(
       customScheme, multiRoots, StandardFileSystem.instance);
 
   var oldCompilerState = compilerState;
@@ -216,21 +216,21 @@
       stringToUri(sdkSummaryPath),
       stringToUri(packageFile),
       summaryUris,
-      new DevCompilerTarget(),
+      DevCompilerTarget(),
       fileSystem: fileSystem);
   fe.DdcResult result = await fe.compile(compilerState, inputs, errorHandler);
   if (result == null || !succeeded) {
-    return new CompilerResult(compilerState, false);
+    return CompilerResult(compilerState, false);
   }
 
   var component = result.component;
   var emitMetadata = argResults['emit-metadata'] as bool;
   if (!emitMetadata && _checkForDartMirrorsImport(component)) {
-    return new CompilerResult(compilerState, false);
+    return CompilerResult(compilerState, false);
   }
 
   String output = argResults['out'];
-  var file = new File(output);
+  var file = File(output);
   await file.parent.create(recursive: true);
 
   // Output files can be written in parallel, so collect the futures.
@@ -245,17 +245,17 @@
     if (identical(compilerState, oldCompilerState)) {
       component.unbindCanonicalNames();
     }
-    var sink = new File(path.withoutExtension(output) + '.dill').openWrite();
-    new kernel.BinaryPrinter(sink).writeComponentFile(component);
+    var sink = File(path.withoutExtension(output) + '.dill').openWrite();
+    kernel.BinaryPrinter(sink).writeComponentFile(component);
     outFiles.add(sink.flush().then((_) => sink.close()));
   }
   if (argResults['summarize-text'] as bool) {
-    var sink = new File(output + '.txt').openWrite();
-    new kernel.Printer(sink, showExternal: false).writeComponentFile(component);
+    var sink = File(output + '.txt').openWrite();
+    kernel.Printer(sink, showExternal: false).writeComponentFile(component);
     outFiles.add(sink.flush().then((_) => sink.close()));
   }
 
-  var compiler = new ProgramCompiler(component,
+  var compiler = ProgramCompiler(component,
       declaredVariables: declaredVariables,
       emitMetadata: emitMetadata,
       enableAsserts: argResults['enable-asserts'] as bool);
@@ -271,11 +271,11 @@
   outFiles.add(file.writeAsString(jsCode.code));
   if (jsCode.sourceMap != null) {
     outFiles.add(
-        new File(output + '.map').writeAsString(json.encode(jsCode.sourceMap)));
+        File(output + '.map').writeAsString(json.encode(jsCode.sourceMap)));
   }
 
   await Future.wait(outFiles);
-  return new CompilerResult(compilerState, true);
+  return CompilerResult(compilerState, true);
 }
 
 /// The output of compiling a JavaScript module in a particular format.
@@ -297,25 +297,24 @@
 }
 
 JSCode jsProgramToCode(JS.Program moduleTree, ModuleFormat format,
-    {bool buildSourceMap: false,
+    {bool buildSourceMap = false,
     String jsUrl,
     String mapUrl,
     String customScheme}) {
-  var opts = new JS.JavaScriptPrintingOptions(
+  var opts = JS.JavaScriptPrintingOptions(
       allowKeywordsInProperties: true, allowSingleLineIfStatements: true);
   JS.SimpleJavaScriptPrintingContext printer;
   SourceMapBuilder sourceMap;
   if (buildSourceMap) {
-    var sourceMapContext = new SourceMapPrintingContext();
+    var sourceMapContext = SourceMapPrintingContext();
     sourceMap = sourceMapContext.sourceMap;
     printer = sourceMapContext;
   } else {
-    printer = new JS.SimpleJavaScriptPrintingContext();
+    printer = JS.SimpleJavaScriptPrintingContext();
   }
 
   var tree = transformModuleFormat(format, moduleTree);
-  tree.accept(
-      new JS.Printer(opts, printer, localNamer: new JS.TemporaryNamer(tree)));
+  tree.accept(JS.Printer(opts, printer, localNamer: JS.TemporaryNamer(tree)));
 
   Map builtMap;
   if (buildSourceMap && sourceMap != null) {
@@ -332,7 +331,7 @@
 
   var text = printer.getText();
 
-  return new JSCode(text, builtMap);
+  return JSCode(text, builtMap);
 }
 
 /// This was copied from module_compiler.dart.
@@ -343,7 +342,7 @@
 // TODO(sigmund): delete bazelMappings - customScheme should be used instead.
 Map placeSourceMap(Map sourceMap, String sourceMapPath,
     Map<String, String> bazelMappings, String customScheme) {
-  var map = new Map.from(sourceMap);
+  var map = Map.from(sourceMap);
   // Convert to a local file path if it's not.
   sourceMapPath = path.fromUri(_sourceToUri(sourceMapPath, customScheme));
   var sourceMapDir = path.dirname(path.absolute(sourceMapPath));
@@ -394,7 +393,7 @@
   }
   // Assume a file path.
   // TODO(jmesserly): shouldn't this be `path.toUri(path.absolute)`?
-  return new Uri.file(path.absolute(source));
+  return Uri.file(path.absolute(source));
 }
 
 /// Parses Dart's non-standard `-Dname=value` syntax for declared variables,
@@ -408,7 +407,7 @@
       var eq = rest.indexOf('=');
       if (eq <= 0) {
         var kind = eq == 0 ? 'name' : 'value';
-        throw new FormatException('no $kind given to -D option `$arg`');
+        throw FormatException('no $kind given to -D option `$arg`');
       }
       var name = rest.substring(0, eq);
       var value = rest.substring(eq + 1);
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index 6a21ffb..3d6f202 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -42,17 +42,17 @@
   ///
   /// We sometimes special case codegen for a single library, as it simplifies
   /// name scoping requirements.
-  final _libraries = new Map<Library, JS.Identifier>.identity();
+  final _libraries = Map<Library, JS.Identifier>.identity();
 
   /// Maps a library URI import, that is not in [_libraries], to the
   /// corresponding Kernel summary module we imported it with.
-  final _importToSummary = new Map<Library, Component>.identity();
+  final _importToSummary = Map<Library, Component>.identity();
 
   /// Maps a summary to the file URI we used to load it from disk.
-  final _summaryToUri = new Map<Component, Uri>.identity();
+  final _summaryToUri = Map<Component, Uri>.identity();
 
   /// Imported libraries, and the temporaries used to refer to them.
-  final _imports = new Map<Library, JS.TemporaryId>();
+  final _imports = Map<Library, JS.TemporaryId>();
 
   /// The variable for the current catch clause
   VariableDeclaration _catchParameter;
@@ -61,7 +61,7 @@
   JS.TemporaryId _asyncStarController;
 
   JS.Identifier _extensionSymbolsModule;
-  final _extensionSymbols = new Map<String, JS.TemporaryId>();
+  final _extensionSymbols = Map<String, JS.TemporaryId>();
 
   Set<Class> _pendingClasses;
 
@@ -119,13 +119,13 @@
 
   /// Information about virtual fields for all libraries in the current build
   /// unit.
-  final virtualFields = new VirtualFieldModel();
+  final virtualFields = VirtualFieldModel();
 
   final JSTypeRep _typeRep;
 
   bool _superAllowed = true;
 
-  final _superHelpers = new Map<String, JS.Method>();
+  final _superHelpers = Map<String, JS.Method>();
 
   final bool emitMetadata;
   final bool enableAsserts;
@@ -171,14 +171,14 @@
   /// statement that is not a loop body is the outermost non-labeled statement
   /// that it encloses.  A [BreakStatement] targeting this statement can be
   /// compiled to `break` either with or without a label.
-  final _effectiveTargets = new HashMap<LabeledStatement, Statement>.identity();
+  final _effectiveTargets = HashMap<LabeledStatement, Statement>.identity();
 
   /// A map from effective targets to their label names.
   ///
   /// If the target needs to be labeled when compiled to JS, because it was
   /// targeted by a break or continue with a label, then this map contains the
   /// label name that was assigned to it.
-  final _labelNames = new HashMap<Statement, String>.identity();
+  final _labelNames = HashMap<Statement, String>.identity();
 
   final Class _jsArrayClass;
   final Class privateSymbolClass;
@@ -187,6 +187,7 @@
   final Class linkedHashSetImplClass;
   final Class identityHashSetImplClass;
   final Class syncIterableClass;
+  final Class asyncStarImplClass;
 
   /// The dart:async `StreamIterator<T>` type.
   final Class _asyncStreamIteratorClass;
@@ -196,18 +197,18 @@
   final NullableInference _nullableInference;
 
   factory ProgramCompiler(Component component,
-      {bool emitMetadata: false,
-      bool replCompile: false,
-      bool enableAsserts: true,
-      Map<String, String> declaredVariables: const {}}) {
-    var coreTypes = new CoreTypes(component);
-    var types = new TypeSchemaEnvironment(
-        coreTypes, new ClassHierarchy(component), true);
-    var constants = new DevCompilerConstants(types, declaredVariables);
-    var nativeTypes = new NativeTypeSet(coreTypes, constants);
-    var jsTypeRep = new JSTypeRep(types);
-    return new ProgramCompiler._(coreTypes, coreTypes.index, nativeTypes,
-        constants, types, jsTypeRep, new NullableInference(jsTypeRep),
+      {bool emitMetadata = false,
+      bool replCompile = false,
+      bool enableAsserts = true,
+      Map<String, String> declaredVariables = const {}}) {
+    var coreTypes = CoreTypes(component);
+    var types =
+        TypeSchemaEnvironment(coreTypes, ClassHierarchy(component), true);
+    var constants = DevCompilerConstants(types, declaredVariables);
+    var nativeTypes = NativeTypeSet(coreTypes, constants);
+    var jsTypeRep = JSTypeRep(types);
+    return ProgramCompiler._(coreTypes, coreTypes.index, nativeTypes, constants,
+        types, jsTypeRep, NullableInference(jsTypeRep),
         emitMetadata: emitMetadata,
         enableAsserts: enableAsserts,
         replCompile: replCompile);
@@ -226,7 +227,8 @@
         linkedHashSetImplClass = sdk.getClass('dart:collection', '_HashSet'),
         identityHashSetImplClass =
             sdk.getClass('dart:collection', '_IdentityHashSet'),
-        syncIterableClass = sdk.getClass('dart:_js_helper', 'SyncIterable');
+        syncIterableClass = sdk.getClass('dart:_js_helper', 'SyncIterable'),
+        asyncStarImplClass = sdk.getClass('dart:async', '_AsyncStarImpl');
 
   ClassHierarchy get hierarchy => types.hierarchy;
 
@@ -235,7 +237,7 @@
   JS.Program emitModule(
       Component buildUnit, List<Component> summaries, List<Uri> summaryUris) {
     if (moduleItems.isNotEmpty) {
-      throw new StateError('Can only call emitModule once.');
+      throw StateError('Can only call emitModule once.');
     }
     _component = buildUnit;
 
@@ -255,33 +257,33 @@
     if (ddcRuntime != null) {
       // 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');
-      _extensionSymbolsModule = new JS.Identifier('dartx');
+      runtimeModule = JS.Identifier('dart');
+      _extensionSymbolsModule = JS.Identifier('dartx');
       _nullableInference.allowNotNullDeclarations = true;
     } else {
       // Otherwise allow these to be renamed so users can write them.
-      runtimeModule = new JS.TemporaryId('dart');
-      _extensionSymbolsModule = new JS.TemporaryId('dartx');
+      runtimeModule = JS.TemporaryId('dart');
+      _extensionSymbolsModule = JS.TemporaryId('dartx');
     }
-    _typeTable = new TypeTable(runtimeModule);
+    _typeTable = TypeTable(runtimeModule);
 
     // Initialize our library variables.
     var items = <JS.ModuleItem>[];
     var exports = <JS.NameSpecifier>[];
     // TODO(jmesserly): this is a performance optimization for V8 to prevent it
     // from treating our Dart library objects as JS Maps.
-    var root = new JS.Identifier('_root');
+    var root = JS.Identifier('_root');
     items.add(js.statement('const # = Object.create(null)', [root]));
 
     void emitLibrary(JS.Identifier id) {
       items.add(js.statement('const # = Object.create(#)', [id, root]));
-      exports.add(new JS.NameSpecifier(id));
+      exports.add(JS.NameSpecifier(id));
     }
 
     for (var library in libraries) {
       var libraryTemp = library == ddcRuntime
           ? runtimeModule
-          : new JS.TemporaryId(jsLibraryName(library));
+          : JS.TemporaryId(jsLibraryName(library));
       _libraries[library] = libraryTemp;
       emitLibrary(libraryTemp);
     }
@@ -290,11 +292,11 @@
     // TODO(jmesserly): find a cleaner design for this.
     if (ddcRuntime != null) emitLibrary(_extensionSymbolsModule);
 
-    items.add(new JS.ExportDeclaration(new JS.ExportClause(exports)));
+    items.add(JS.ExportDeclaration(JS.ExportClause(exports)));
 
     // Collect all class/type Element -> Node mappings
     // in case we need to forward declare any classes.
-    _pendingClasses = new HashSet.identity();
+    _pendingClasses = HashSet.identity();
     for (var l in libraries) {
       _pendingClasses.addAll(l.classes);
     }
@@ -317,7 +319,7 @@
     // Initialize extension symbols
     _extensionSymbols.forEach((name, id) {
       JS.Expression value =
-          new JS.PropertyAccess(_extensionSymbolsModule, _propertyName(name));
+          JS.PropertyAccess(_extensionSymbolsModule, _propertyName(name));
       if (ddcRuntime != null) {
         value = js.call('# = Symbol(#)', [value, js.string("dartx.$name")]);
       }
@@ -332,7 +334,7 @@
     _copyAndFlattenBlocks(items, moduleItems);
 
     // Build the module.
-    return new JS.Program(items, name: buildUnit.root.name);
+    return JS.Program(items, name: buildUnit.root.name);
   }
 
   /// Flattens blocks in [items] to a single list.
@@ -354,7 +356,7 @@
     // It's either one of the libraries in this module, or it's an import.
     return _libraries[library] ??
         _imports.putIfAbsent(
-            library, () => new JS.TemporaryId(jsLibraryName(library)));
+            library, () => JS.TemporaryId(jsLibraryName(library)));
   }
 
   String _libraryToModule(Library library) {
@@ -379,7 +381,7 @@
   }
 
   void _finishImports(List<JS.ModuleItem> items) {
-    var modules = new Map<String, List<Library>>();
+    var modules = Map<String, List<Library>>();
 
     for (var import in _imports.keys) {
       modules.putIfAbsent(_libraryToModule(import), () => []).add(import);
@@ -400,13 +402,13 @@
       //     import {foo as foo$} from 'foo'; // if rename was needed
       //
       var imports =
-          libraries.map((l) => new JS.NameSpecifier(_imports[l])).toList();
+          libraries.map((l) => JS.NameSpecifier(_imports[l])).toList();
       if (module == coreModuleName) {
-        imports.add(new JS.NameSpecifier(runtimeModule));
-        imports.add(new JS.NameSpecifier(_extensionSymbolsModule));
+        imports.add(JS.NameSpecifier(runtimeModule));
+        imports.add(JS.NameSpecifier(_extensionSymbolsModule));
       }
 
-      items.add(new JS.ImportDeclaration(
+      items.add(JS.ImportDeclaration(
           namedImports: imports, from: js.string(module, "'")));
     });
   }
@@ -529,13 +531,13 @@
     // https://github.com/dart-lang/sdk/issues/31003
     var className = c.typeParameters.isNotEmpty
         ? (c == _jsArrayClass
-            ? new JS.Identifier(c.name)
-            : new JS.TemporaryId(getLocalClassName(c)))
+            ? JS.Identifier(c.name)
+            : JS.TemporaryId(getLocalClassName(c)))
         : _emitTopLevelName(c);
 
     var savedClassProperties = _classProperties;
     _classProperties =
-        new ClassPropertyModel.build(types, _extensionTypes, virtualFields, c);
+        ClassPropertyModel.build(types, _extensionTypes, virtualFields, c);
 
     var jsCtors = _defineConstructors(c, className);
     var jsMethods = _emitClassMethods(c);
@@ -595,7 +597,7 @@
       jsFormals,
       _typeTable.discharge(formals),
       body,
-      className ?? new JS.Identifier(name)
+      className ?? JS.Identifier(name)
     ]);
 
     var genericArgs = [typeConstructor];
@@ -613,12 +615,11 @@
   JS.Statement _emitClassStatement(Class c, JS.Expression className,
       JS.Expression heritage, List<JS.Method> methods) {
     if (c.typeParameters.isNotEmpty) {
-      return new JS.ClassExpression(
-              className as JS.Identifier, heritage, methods)
+      return JS.ClassExpression(className as JS.Identifier, heritage, methods)
           .toStatement();
     }
-    var classExpr = new JS.ClassExpression(
-        new JS.TemporaryId(getLocalClassName(c)), heritage, methods);
+    var classExpr = JS.ClassExpression(
+        JS.TemporaryId(getLocalClassName(c)), heritage, methods);
     return js.statement('# = #;', [className, classExpr]);
   }
 
@@ -638,7 +639,7 @@
     }
 
     bool shouldDefer(InterfaceType t) {
-      var visited = new Set<DartType>();
+      var visited = Set<DartType>();
       bool defer(DartType t) {
         if (t is InterfaceType) {
           var tc = t.classNode;
@@ -717,7 +718,7 @@
           ctorBody.add(_emitSuperConstructorCall(className, name, jsParams));
         }
         body.add(_addConstructorToClass(
-            className, name, new JS.Fun(jsParams, new JS.Block(ctorBody))));
+            className, name, JS.Fun(jsParams, JS.Block(ctorBody))));
       }
     }
 
@@ -760,8 +761,8 @@
         //     mixinMembers(C, class C$ extends M { <methods>  });
         mixinBody.add(runtimeStatement('mixinMembers(#, #)', [
           classExpr,
-          new JS.ClassExpression(
-              new JS.TemporaryId(getLocalClassName(c)), mixinClass, methods)
+          JS.ClassExpression(
+              JS.TemporaryId(getLocalClassName(c)), mixinClass, methods)
         ]));
       }
 
@@ -779,14 +780,14 @@
       var m = mixins[i];
       var mixinName =
           getLocalClassName(superclass) + '_' + getLocalClassName(m.classNode);
-      var mixinId = new JS.TemporaryId(mixinName + '\$');
+      var mixinId = JS.TemporaryId(mixinName + '\$');
       // Bind the mixin class to a name to workaround a V8 bug with es6 classes
       // and anonymous function names.
       // TODO(leafp:) Eliminate this once the bug is fixed:
       // https://bugs.chromium.org/p/v8/issues/detail?id=7069
       body.add(js.statement("const # = #", [
         mixinId,
-        new JS.ClassExpression(new JS.TemporaryId(mixinName), baseClass, [])
+        JS.ClassExpression(JS.TemporaryId(mixinName), baseClass, [])
       ]));
 
       emitMixinConstructors(mixinId, m);
@@ -997,10 +998,10 @@
     }
     if (c.enclosingLibrary == coreTypes.asyncLibrary) {
       if (c == coreTypes.futureOrClass) {
-        var typeParam = new TypeParameterType(c.typeParameters[0]);
+        var typeParam = TypeParameterType(c.typeParameters[0]);
         var typeT = visitTypeParameterType(typeParam);
         var futureOfT = visitInterfaceType(
-            new InterfaceType(coreTypes.futureClass, [typeParam]));
+            InterfaceType(coreTypes.futureClass, [typeParam]));
         body.add(js.statement('''
             #.is = function is_FutureOr(o) {
               return #.is(o) || #.is(o);
@@ -1034,7 +1035,7 @@
     if (isClassSymbol == null) {
       // TODO(jmesserly): we could export these symbols, if we want to mark
       // implemented interfaces for user-defined classes.
-      var id = new JS.TemporaryId("_is_${getLocalClassName(c)}_default");
+      var id = JS.TemporaryId("_is_${getLocalClassName(c)}_default");
       moduleItems.add(
           js.statement('const # = Symbol(#);', [id, js.string(id.name, "'")]));
       isClassSymbol = id;
@@ -1098,8 +1099,8 @@
       body.add(js.statement('#[#.metadata] = #;', [
         className,
         runtimeModule,
-        _arrowFunctionWithLetScope(() => new JS.ArrayInitializer(
-            metadata.map(_instantiateAnnotation).toList()))
+        _arrowFunctionWithLetScope(() =>
+            JS.ArrayInitializer(metadata.map(_instantiateAnnotation).toList()))
       ]));
     }
   }
@@ -1129,7 +1130,7 @@
         runtimeModule,
         helperName,
         className,
-        new JS.ArrayInitializer(names, multiline: names.length > 4)
+        JS.ArrayInitializer(names, multiline: names.length > 4)
       ]));
     }
 
@@ -1159,11 +1160,11 @@
         var proto = c == coreTypes.objectClass
             ? js.call('Object.create(null)')
             : runtimeCall('get${name}s(#.__proto__)', [className]);
-        elements.insert(0, new JS.Property(_propertyName('__proto__'), proto));
+        elements.insert(0, JS.Property(_propertyName('__proto__'), proto));
       }
       body.add(runtimeStatement('set${name}Signature(#, () => #)', [
         className,
-        new JS.ObjectInitializer(elements, multiline: elements.length > 1)
+        JS.ObjectInitializer(elements, multiline: elements.length > 1)
       ]));
     }
 
@@ -1229,12 +1230,12 @@
         } else {
           type = _emitAnnotatedFunctionType(reifiedType, member);
         }
-        var property = new JS.Property(_declareMemberName(member), type);
+        var property = JS.Property(_declareMemberName(member), type);
         var signatures = getSignatureList(member);
         signatures.add(property);
         if (!member.isStatic &&
             (extMethods.contains(name) || extAccessors.contains(name))) {
-          signatures.add(new JS.Property(
+          signatures.add(JS.Property(
               _declareMemberName(member, useExtension: true), type));
         }
       }
@@ -1259,20 +1260,20 @@
       var memberName = _declareMemberName(field);
       var fieldSig = _emitFieldSignature(field, c);
       (isStatic ? staticFields : instanceFields)
-          .add(new JS.Property(memberName, fieldSig));
+          .add(JS.Property(memberName, fieldSig));
     }
     emitSignature('Field', instanceFields);
     emitSignature('StaticField', staticFields);
 
     if (emitMetadata) {
       var constructors = <JS.Property>[];
-      var allConstructors = new List<Member>.from(c.constructors)
+      var allConstructors = List<Member>.from(c.constructors)
         ..addAll(c.procedures.where((p) => p.isFactory));
       for (var ctor in allConstructors) {
         var memberName = _constructorName(ctor.name.name);
         var type = _emitAnnotatedFunctionType(
             ctor.function.functionType.withoutTypeParameters, ctor);
-        constructors.add(new JS.Property(memberName, type));
+        constructors.add(JS.Property(memberName, type));
       }
       emitSignature('Constructor', constructors);
     }
@@ -1294,7 +1295,7 @@
     if (emitMetadata && annotations != null && annotations.isNotEmpty) {
       var savedUri = _currentUri;
       _currentUri = field.enclosingClass.fileUri;
-      args.add(new JS.ArrayInitializer(
+      args.add(JS.ArrayInitializer(
           annotations.map(_instantiateAnnotation).toList()));
       _currentUri = savedUri;
     }
@@ -1315,11 +1316,11 @@
       reifyParameter(VariableDeclaration p) =>
           isCovariant(p) ? coreTypes.objectClass.thisType : p.type;
       reifyNamedParameter(VariableDeclaration p) =>
-          new NamedType(p.name, reifyParameter(p));
+          NamedType(p.name, reifyParameter(p));
 
       // TODO(jmesserly): do covariant type parameter bounds also need to be
       // reified as `Object`?
-      result = new FunctionType(
+      result = FunctionType(
           f.positionalParameters.map(reifyParameter).toList(), f.returnType,
           namedParameters: f.namedParameters.map(reifyNamedParameter).toList()
             ..sort(),
@@ -1332,8 +1333,8 @@
 
   DartType _getTypeFromClass(DartType type, Class superclass, Class subclass) {
     if (identical(superclass, subclass)) return type;
-    return Substitution
-        .fromSupertype(hierarchy.getClassAsInstanceOf(subclass, superclass))
+    return Substitution.fromSupertype(
+            hierarchy.getClassAsInstanceOf(subclass, superclass))
         .substituteType(type);
   }
 
@@ -1351,7 +1352,7 @@
     _currentUri = savedUri;
     end ??= _nodeEnd(node.enclosingClass.fileEndOffset);
 
-    return new JS.Fun(params, new JS.Block(body))..sourceInformation = end;
+    return JS.Fun(params, JS.Block(body))..sourceInformation = end;
   }
 
   List<JS.Statement> _emitConstructorBody(
@@ -1517,7 +1518,7 @@
       Expression init, List<Expression> annotations) {
     // explicitly initialize to null, to avoid getting `undefined`.
     // TODO(jmesserly): do this only for vars that aren't definitely assigned.
-    if (init == null) return new JS.LiteralNull();
+    if (init == null) return JS.LiteralNull();
     return _annotatedNullCheck(annotations)
         ? notNull(init)
         : _visitExpression(init);
@@ -1564,8 +1565,8 @@
     if (c == coreTypes.objectClass) {
       // Dart does not use ES6 constructors.
       // Add an error to catch any invalid usage.
-      jsMethods.add(
-          new JS.Method(_propertyName('constructor'), js.fun(r'''function() {
+      jsMethods
+          .add(JS.Method(_propertyName('constructor'), js.fun(r'''function() {
                   throw Error("use `new " + #.typeName(#.getReifiedType(this)) +
                       ".new(...)` to create a Dart object");
               }''', [runtimeModule, runtimeModule])));
@@ -1582,8 +1583,8 @@
       }
     }
 
-    var getters = new Map<String, Procedure>();
-    var setters = new Map<String, Procedure>();
+    var getters = Map<String, Procedure>();
+    var setters = Map<String, Procedure>();
     for (var m in c.procedures) {
       if (m.isAbstract) continue;
       if (m.isGetter) {
@@ -1672,7 +1673,7 @@
       fn = _emitFunction(member.function, member.name.name);
     }
 
-    return new JS.Method(_declareMemberName(member), fn,
+    return JS.Method(_declareMemberName(member), fn,
         isGetter: member.isGetter,
         isSetter: member.isSetter,
         isStatic: member.isStatic)
@@ -1682,11 +1683,10 @@
   JS.Fun _emitNativeFunctionBody(Procedure node) {
     String name = getAnnotationName(node, isJSAnnotation) ?? node.name.name;
     if (node.isGetter) {
-      return new JS.Fun([], js.block('{ return this.#; }', [name]));
+      return JS.Fun([], js.block('{ return this.#; }', [name]));
     } else if (node.isSetter) {
       var params = _emitParameters(node.function);
-      return new JS.Fun(
-          params, js.block('{ this.# = #; }', [name, params.last]));
+      return JS.Fun(params, js.block('{ this.# = #; }', [name, params.last]));
     } else {
       return js.fun(
           'function (...args) { return this.#.apply(this, args); }', name);
@@ -1722,12 +1722,12 @@
       var setterType = substituteType(superMember.setterType);
       if (types.isTop(setterType)) return const [];
       return [
-        new JS.Method(
+        JS.Method(
             name,
             js.fun('function(x) { return super.# = #; }',
-                [name, _emitImplicitCast(new JS.Identifier('x'), setterType)]),
+                [name, _emitImplicitCast(JS.Identifier('x'), setterType)]),
             isSetter: true),
-        new JS.Method(name, js.fun('function() { return super.#; }', [name]),
+        JS.Method(name, js.fun('function() { return super.#; }', [name]),
             isGetter: true)
       ];
     }
@@ -1742,11 +1742,11 @@
     _emitCovarianceBoundsCheck(typeParameters, body);
 
     var typeFormals = _emitTypeFormals(typeParameters);
-    var jsParams = new List<JS.Parameter>.from(typeFormals);
+    var jsParams = List<JS.Parameter>.from(typeFormals);
     var positionalParameters = function.positionalParameters;
     for (var i = 0, n = positionalParameters.length; i < n; i++) {
       var param = positionalParameters[i];
-      var jsParam = new JS.Identifier(param.name);
+      var jsParam = JS.Identifier(param.name);
       jsParams.add(jsParam);
 
       if (isCovariant(param) &&
@@ -1772,7 +1772,7 @@
           name,
           namedArgumentTemp,
           _emitImplicitCast(
-              new JS.PropertyAccess(namedArgumentTemp, name), paramType.type)
+              JS.PropertyAccess(namedArgumentTemp, name), paramType.type)
         ]));
       }
     }
@@ -1781,7 +1781,7 @@
 
     if (namedParameters.isNotEmpty) jsParams.add(namedArgumentTemp);
     body.add(js.statement('return super.#(#);', [name, jsParams]));
-    return [new JS.Method(name, new JS.Fun(jsParams, new JS.Block(body)))];
+    return [JS.Method(name, JS.Fun(jsParams, JS.Block(body)))];
   }
 
   /// Emits a Dart factory constructor to a JS static method.
@@ -1789,8 +1789,8 @@
     if (isUnsupportedFactoryConstructor(node)) return null;
 
     var function = node.function;
-    return new JS.Method(_constructorName(node.name.name),
-        new JS.Fun(_emitParameters(function), _emitFunctionBody(function)),
+    return JS.Method(_constructorName(node.name.name),
+        JS.Fun(_emitParameters(function), _emitFunctionBody(function)),
         isStatic: true)
       ..sourceInformation = _nodeEnd(node.fileEndOffset);
   }
@@ -1812,19 +1812,18 @@
     var name = _declareMemberName(field);
 
     var getter = js.fun('function() { return this[#]; }', [virtualField]);
-    var jsGetter = new JS.Method(name, getter, isGetter: true)
+    var jsGetter = JS.Method(name, getter, isGetter: true)
       ..sourceInformation = _nodeStart(field);
 
-    var args =
-        field.isFinal ? [new JS.Super(), name] : [new JS.This(), virtualField];
+    var args = field.isFinal ? [JS.Super(), name] : [JS.This(), virtualField];
 
-    JS.Expression value = new JS.Identifier('value');
+    JS.Expression value = JS.Identifier('value');
     if (!field.isFinal && field.isGenericCovariantImpl) {
       value = _emitImplicitCast(value, field.type);
     }
     args.add(value);
 
-    var jsSetter = new JS.Method(
+    var jsSetter = JS.Method(
         name, js.fun('function(value) { #[#] = #; }', args),
         isSetter: true)
       ..sourceInformation = _nodeStart(field);
@@ -1846,15 +1845,15 @@
 
     var name = getAnnotationName(field, isJSName) ?? field.name.name;
     // Generate getter
-    var fn = new JS.Fun([], js.block('{ return this.#; }', [name]));
-    var method = new JS.Method(_declareMemberName(field), fn, isGetter: true);
+    var fn = JS.Fun([], js.block('{ return this.#; }', [name]));
+    var method = JS.Method(_declareMemberName(field), fn, isGetter: true);
     jsMethods.add(method);
 
     // Generate setter
     if (!field.isFinal) {
-      var value = new JS.TemporaryId('value');
-      fn = new JS.Fun([value], js.block('{ this.# = #; }', [name, value]));
-      method = new JS.Method(_declareMemberName(field), fn, isSetter: true);
+      var value = JS.TemporaryId('value');
+      fn = JS.Fun([value], js.block('{ this.# = #; }', [name, value]));
+      method = JS.Method(_declareMemberName(field), fn, isSetter: true);
       jsMethods.add(method);
     }
 
@@ -1876,7 +1875,7 @@
           _classProperties.inheritedSetters.contains(name)) {
         // Generate a setter that forwards to super.
         var fn = js.fun('function(value) { super[#] = value; }', [memberName]);
-        return new JS.Method(memberName, fn, isSetter: true);
+        return JS.Method(memberName, fn, isSetter: true);
       }
     } else {
       assert(method.isSetter);
@@ -1884,7 +1883,7 @@
           _classProperties.inheritedGetters.contains(name)) {
         // Generate a getter that forwards to super.
         var fn = js.fun('function() { return super[#]; }', [memberName]);
-        return new JS.Method(memberName, fn, isGetter: true);
+        return JS.Method(memberName, fn, isGetter: true);
       }
     }
     return null;
@@ -1905,8 +1904,7 @@
     // If a parent had an `iterator` (concrete or abstract) or implements
     // Iterable, we know the adapter is already there, so we can skip it as a
     // simple code size optimization.
-    var parent =
-        hierarchy.getDispatchTarget(c.superclass, new Name('iterator'));
+    var parent = hierarchy.getDispatchTarget(c.superclass, Name('iterator'));
     if (parent != null) return null;
 
     var parentIterable =
@@ -1920,7 +1918,7 @@
 
     // Otherwise, emit the adapter method, which wraps the Dart iterator in
     // an ES6 iterator.
-    return new JS.Method(
+    return JS.Method(
         js.call('Symbol.iterator'),
         js.call('function() { return new #.JsIterator(this.#); }', [
           runtimeModule,
@@ -2001,16 +1999,16 @@
     for (var field in fields) {
       _currentUri = field.fileUri;
       var access = emitFieldName(field);
-      accessors.add(new JS.Method(access, _emitStaticFieldInitializer(field),
-          isGetter: true)
-        ..sourceInformation = _hoverComment(
-            new JS.PropertyAccess(objExpr, access),
-            field.fileOffset,
-            field.name.name.length));
+      accessors.add(
+          JS.Method(access, _emitStaticFieldInitializer(field), isGetter: true)
+            ..sourceInformation = _hoverComment(
+                JS.PropertyAccess(objExpr, access),
+                field.fileOffset,
+                field.name.name.length));
 
       // TODO(jmesserly): currently uses a dummy setter to indicate writable.
       if (!field.isFinal && !field.isConst) {
-        accessors.add(new JS.Method(access, js.call('function(_) {}') as JS.Fun,
+        accessors.add(JS.Method(access, js.call('function(_) {}') as JS.Fun,
             isSetter: true));
       }
     }
@@ -2021,11 +2019,10 @@
   }
 
   JS.Fun _emitStaticFieldInitializer(Field field) {
-    return new JS.Fun(
+    return JS.Fun(
         [],
-        new JS.Block(_withLetScope(() => [
-              new JS.Return(
-                  _visitInitializer(field.initializer, field.annotations))
+        JS.Block(_withLetScope(() => [
+              JS.Return(_visitInitializer(field.initializer, field.annotations))
             ])));
   }
 
@@ -2049,11 +2046,11 @@
     var letVars = _initLetVariables();
 
     _letVariables = savedLetVariables;
-    return new JS.ArrowFun(
-        [], letVars == null ? expr : new JS.Block([letVars, expr.toReturn()]));
+    return JS.ArrowFun(
+        [], letVars == null ? expr : JS.Block([letVars, expr.toReturn()]));
   }
 
-  JS.PropertyAccess _emitTopLevelName(NamedNode n, {String suffix: ''}) {
+  JS.PropertyAccess _emitTopLevelName(NamedNode n, {String suffix = ''}) {
     return _emitJSInterop(n) ?? _emitTopLevelNameNoInterop(n, suffix: suffix);
   }
 
@@ -2110,7 +2107,7 @@
   /// helper, that checks for null. The user defined method is called '=='.
   ///
   JS.Expression _emitMemberName(String name,
-      {bool isStatic: false,
+      {bool isStatic = false,
       bool useExtension,
       Member member,
       Class memberClass}) {
@@ -2128,9 +2125,9 @@
         var parts = runtimeName.split('.');
         if (parts.length < 2) return _propertyName(runtimeName);
 
-        JS.Expression result = new JS.Identifier(parts[0]);
+        JS.Expression result = JS.Identifier(parts[0]);
         for (int i = 1; i < parts.length; i++) {
-          result = new JS.PropertyAccess(result, _propertyName(parts[i]));
+          result = JS.PropertyAccess(result, _propertyName(parts[i]));
         }
         return result;
       }
@@ -2159,7 +2156,7 @@
   JS.TemporaryId _getExtensionSymbolInternal(String name) {
     return _extensionSymbols.putIfAbsent(
         name,
-        () => new JS.TemporaryId(
+        () => JS.TemporaryId(
             '\$${JS.friendlyNameForDartOperator[name] ?? name}'));
   }
 
@@ -2195,7 +2192,7 @@
     return _extensionTypes.isNativeInterface(c);
   }
 
-  var _forwardingCache = new HashMap<Class, Map<String, Member>>();
+  var _forwardingCache = HashMap<Class, Map<String, Member>>();
 
   Member _lookupForwardedMember(Class c, String name) {
     // We only care about public methods.
@@ -2206,8 +2203,8 @@
     return map.putIfAbsent(
         name,
         () =>
-            hierarchy.getDispatchTarget(c, new Name(name)) ??
-            hierarchy.getDispatchTarget(c, new Name(name), setter: true));
+            hierarchy.getDispatchTarget(c, Name(name)) ??
+            hierarchy.getDispatchTarget(c, Name(name), setter: true));
   }
 
   JS.Expression _emitStaticMemberName(String name, [NamedNode member]) {
@@ -2247,7 +2244,7 @@
     var name = getAnnotationName(n, isPublicJSAnnotation);
     if (name != null) {
       if (name.contains('.')) {
-        throw new UnsupportedError(
+        throw UnsupportedError(
             'static members do not support "." in their names. '
             'See https://github.com/dart-lang/sdk/issues/27926');
       }
@@ -2258,8 +2255,8 @@
   }
 
   JS.PropertyAccess _emitTopLevelNameNoInterop(NamedNode n,
-      {String suffix: ''}) {
-    return new JS.PropertyAccess(emitLibraryName(getLibrary(n)),
+      {String suffix = ''}) {
+    return JS.PropertyAccess(emitLibraryName(getLibrary(n)),
         _emitTopLevelMemberName(n, suffix: suffix));
   }
 
@@ -2267,7 +2264,7 @@
   ///
   /// NOTE: usually you should use [_emitTopLevelName] instead of this. This
   /// function does not handle JS interop.
-  JS.Expression _emitTopLevelMemberName(NamedNode n, {String suffix: ''}) {
+  JS.Expression _emitTopLevelMemberName(NamedNode n, {String suffix = ''}) {
     var name = getJSExportName(n) ?? getTopLevelName(n);
     return _propertyName(name + suffix);
   }
@@ -2291,7 +2288,7 @@
     if (parts.isEmpty) parts = [''];
     JS.PropertyAccess access;
     for (var part in parts) {
-      access = new JS.PropertyAccess(
+      access = JS.PropertyAccess(
           access ?? runtimeCall('global'), js.escapedString(part, "'"));
     }
     return access;
@@ -2321,7 +2318,7 @@
     _currentUri = node.fileUri;
 
     var name = node.name.name;
-    var result = new JS.Method(
+    var result = JS.Method(
         _propertyName(name), _emitFunction(node.function, node.name.name),
         isGetter: node.isGetter, isSetter: node.isSetter)
       ..sourceInformation = _nodeEnd(node.fileEndOffset);
@@ -2360,7 +2357,7 @@
   }
 
   JS.Expression _emitFunctionTagged(JS.Expression fn, FunctionType type,
-      {bool topLevel: false}) {
+      {bool topLevel = false}) {
     var lazy = topLevel && !_typeIsLoaded(type);
     var typeRep = visitFunctionType(type, lazy: lazy);
     return runtimeCall(lazy ? 'lazyFn(#, #)' : 'fn(#, #)', [fn, typeRep]);
@@ -2407,7 +2404,7 @@
   visitBottomType(type) => runtimeCall('bottom');
 
   @override
-  visitInterfaceType(type, {bool lowerGeneric: false}) {
+  visitInterfaceType(type, {bool lowerGeneric = false}) {
     var c = type.classNode;
     _declareBeforeUse(c);
 
@@ -2470,7 +2467,7 @@
   visitVectorType(type) => defaultDartType(type);
 
   @override
-  visitFunctionType(type, {Member member, bool lazy: false}) {
+  visitFunctionType(type, {Member member, bool lazy = false}) {
     var requiredTypes =
         type.positionalParameters.take(type.requiredParameterCount).toList();
     var function = member?.function;
@@ -2538,7 +2535,7 @@
       // TODO(jmesserly): should we disable source info for annotations?
       var savedUri = _currentUri;
       _currentUri = member.enclosingClass.fileUri;
-      result = new JS.ArrayInitializer(
+      result = JS.ArrayInitializer(
           [result]..addAll(annotations.map(_instantiateAnnotation)));
       _currentUri = savedUri;
     }
@@ -2552,7 +2549,7 @@
 
   JS.Expression _emitConstructorName(InterfaceType type, Member c) {
     return _emitJSInterop(type.classNode) ??
-        new JS.PropertyAccess(
+        JS.PropertyAccess(
             _emitConstructorAccess(type), _constructorName(c.name.name));
   }
 
@@ -2570,7 +2567,7 @@
       // TODO(jmesserly): should we disable source info for annotations?
       var savedUri = _currentUri;
       _currentUri = member.enclosingClass.fileUri;
-      result = new JS.ArrayInitializer(
+      result = JS.ArrayInitializer(
           [result]..addAll(metadata.map(_instantiateAnnotation)));
       _currentUri = savedUri;
     }
@@ -2578,8 +2575,8 @@
   }
 
   JS.ObjectInitializer _emitTypeProperties(Iterable<NamedType> types) {
-    return new JS.ObjectInitializer(types
-        .map((t) => new JS.Property(_propertyName(t.name), _emitType(t.type)))
+    return JS.ObjectInitializer(types
+        .map((t) => JS.Property(_propertyName(t.name), _emitType(t.type)))
         .toList());
   }
 
@@ -2593,7 +2590,7 @@
       }
       result.add(type);
     }
-    return new JS.ArrayInitializer(result);
+    return JS.ArrayInitializer(result);
   }
 
   @override
@@ -2601,11 +2598,11 @@
 
   JS.Identifier _emitTypeParameter(TypeParameter t) {
     _typeParamInConst?.add(t);
-    return new JS.Identifier(getTypeParameterName(t));
+    return JS.Identifier(getTypeParameterName(t));
   }
 
   @override
-  visitTypedefType(type, {bool lowerGeneric: false}) {
+  visitTypedefType(type, {bool lowerGeneric = false}) {
     var args = type.typeArguments;
     List<JS.Expression> jsArgs = null;
     if (args.any((a) => a != const DynamicType())) {
@@ -2616,7 +2613,7 @@
     if (jsArgs != null) {
       var genericName =
           _emitTopLevelNameNoInterop(type.typedefNode, suffix: '\$');
-      var typeRep = new JS.Call(genericName, jsArgs);
+      var typeRep = JS.Call(genericName, jsArgs);
       return _cacheTypes ? _typeTable.nameType(type, typeRep) : typeRep;
     }
 
@@ -2640,23 +2637,23 @@
 
     JS.Block code = isSync
         ? _emitFunctionBody(f)
-        : new JS.Block([
+        : JS.Block([
             _emitGeneratorFunction(f, name).toReturn()
               ..sourceInformation = _nodeStart(f)
           ]);
 
     code = super.exitFunction(name, formals, code);
 
-    return new JS.Fun(formals, code);
+    return JS.Fun(formals, code);
   }
 
   List<JS.Parameter> _emitParameters(FunctionNode f) {
     var positional = f.positionalParameters;
-    var result = new List<JS.Parameter>.from(positional.map(_emitVariableDef));
+    var result = List<JS.Parameter>.from(positional.map(_emitVariableDef));
     if (positional.isNotEmpty &&
         f.requiredParameterCount == positional.length &&
         positional.last.annotations.any(isJsRestAnnotation)) {
-      result.last = new JS.RestParameter(result.last);
+      result.last = JS.RestParameter(result.last);
     }
     if (f.namedParameters.isNotEmpty) result.add(namedArgumentTemp);
     return result;
@@ -2673,7 +2670,7 @@
 
   List<JS.Identifier> _emitTypeFormals(List<TypeParameter> typeFormals) {
     return typeFormals
-        .map((t) => new JS.Identifier(getTypeParameterName(t)))
+        .map((t) => JS.Identifier(getTypeParameterName(t)))
         .toList();
   }
 
@@ -2684,7 +2681,7 @@
     emitGeneratorFn(List<JS.Parameter> getParameters(JS.Block jsBody)) {
       var savedController = _asyncStarController;
       _asyncStarController = function.asyncMarker == AsyncMarker.AsyncStar
-          ? new JS.TemporaryId('stream')
+          ? JS.TemporaryId('stream')
           : null;
 
       JS.Expression gen;
@@ -2694,14 +2691,13 @@
         // TODO(jmesserly): this will emit argument initializers (for default
         // values) inside the generator function body. Is that the best place?
         var jsBody = _emitFunctionBody(function);
-        var genFn =
-            new JS.Fun(getParameters(jsBody), jsBody, isGenerator: true);
+        var genFn = JS.Fun(getParameters(jsBody), jsBody, isGenerator: true);
 
         // Name the function if possible, to get better stack traces.
         gen = genFn;
         if (name != null) {
-          gen = new JS.NamedFunction(
-              new JS.TemporaryId(JS.friendlyNameForDartOperator[name] ?? name),
+          gen = JS.NamedFunction(
+              JS.TemporaryId(JS.friendlyNameForDartOperator[name] ?? name),
               genFn);
         }
 
@@ -2739,23 +2735,23 @@
       var returnType =
           _getExpectedReturnType(function, coreTypes.iterableClass);
       var syncIterable =
-          _emitType(new InterfaceType(syncIterableClass, [returnType]));
+          _emitType(InterfaceType(syncIterableClass, [returnType]));
       return js.call('new #.new(#)', [syncIterable, gen]);
     }
 
     if (function.asyncMarker == AsyncMarker.AsyncStar) {
-      // `async*` uses the `dart.asyncStar` helper, and also has an extra
-      // `stream` parameter to the generator, which is used for passing values
-      // to the `_AsyncStarStreamController` implementation type.
+      // `async*` uses the `_AsyncStarImpl<T>` helper class. The generator
+      // callback takes an instance of this class.
       //
       // `yield` is specially generated inside `async*` by visitYieldStatement.
       // `await` is generated as `yield`.
       //
-      // dart:_runtime/generators.dart has an example of the generated code.
+      // _AsyncStarImpl has an example of the generated code.
       var gen = emitGeneratorFn((_) => [_asyncStarController]);
 
       var returnType = _getExpectedReturnType(function, coreTypes.streamClass);
-      return runtimeCall('asyncStar(#, #)', [_emitType(returnType), gen]);
+      var asyncStarImpl = InterfaceType(asyncStarImplClass, [returnType]);
+      return js.call('new #.new(#).stream', [_emitType(asyncStarImpl), gen]);
     }
 
     assert(function.asyncMarker == AsyncMarker.Async);
@@ -2794,7 +2790,7 @@
       return block;
     });
 
-    return new JS.Block(block);
+    return JS.Block(block);
   }
 
   List<JS.Statement> _withCurrentFunction(
@@ -2836,11 +2832,11 @@
     }
 
     for (var p in f.positionalParameters.take(f.requiredParameterCount)) {
-      var jsParam = new JS.Identifier(p.name);
+      var jsParam = JS.Identifier(p.name);
       initParameter(p, jsParam);
     }
     for (var p in f.positionalParameters.skip(f.requiredParameterCount)) {
-      var jsParam = new JS.Identifier(p.name);
+      var jsParam = JS.Identifier(p.name);
       var defaultValue = _defaultParamValue(p);
       if (defaultValue != null) {
         body.add(js.statement(
@@ -2897,7 +2893,7 @@
       var value = p.initializer;
       return _isJSUndefined(value) ? null : _visitExpression(value);
     } else {
-      return new JS.LiteralNull();
+      return JS.LiteralNull();
     }
   }
 
@@ -2915,7 +2911,7 @@
     for (var t in typeFormals) {
       if (t.isGenericCovariantImpl && !types.isTop(t.bound)) {
         body.add(runtimeStatement('checkTypeBound(#, #, #)', [
-          _emitType(new TypeParameterType(t)),
+          _emitType(TypeParameterType(t)),
           _emitType(t.bound),
           _propertyName(t.name)
         ]));
@@ -2931,7 +2927,7 @@
 
     // The statement might be the target of a break or continue with a label.
     var name = _labelNames[s];
-    if (name != null) result = new JS.LabeledStatement(name, result);
+    if (name != null) result = JS.LabeledStatement(name, result);
     return result;
   }
 
@@ -2945,7 +2941,7 @@
       // (sync*/async/async*). Our code generator assumes it can emit names for
       // named argument initialization, and sync* functions also emit locally
       // modified parameters into the function's scope.
-      var parameterNames = new HashSet<String>()
+      var parameterNames = HashSet<String>()
         ..addAll(f.positionalParameters.map((p) => p.name))
         ..addAll(f.namedParameters.map((p) => p.name));
 
@@ -3013,7 +3009,7 @@
   /// end of `.bar` to ensure `foo.bar` has a hover tooltip.
   NodeEnd _nodeEnd(int endOffset) {
     var loc = _getLocation(endOffset);
-    return loc != null ? new NodeEnd(loc) : null;
+    return loc != null ? NodeEnd(loc) : null;
   }
 
   /// Combines [_nodeStart] with the variable name length to produce a hoverable
@@ -3023,7 +3019,7 @@
   NodeSpan _variableSpan(int offset, int nameLength) {
     var start = _getLocation(offset);
     var end = _getLocation(offset + nameLength);
-    return start != null && end != null ? new NodeSpan(start, end) : null;
+    return start != null && end != null ? NodeSpan(start, end) : null;
   }
 
   SourceLocation _getLocation(int offset) {
@@ -3032,7 +3028,7 @@
     if (fileUri == null) return null;
     var loc = _component.getLocation(fileUri, offset);
     if (loc == null) return null;
-    return new SourceLocation(offset,
+    return SourceLocation(offset,
         sourceUrl: fileUri, line: loc.line - 1, column: loc.column - 1);
   }
 
@@ -3045,9 +3041,7 @@
   HoverComment _hoverComment(JS.Expression expr, int offset, int nameLength) {
     var start = _getLocation(offset);
     var end = _getLocation(offset + nameLength);
-    return start != null && end != null
-        ? new HoverComment(expr, start, end)
-        : null;
+    return start != null && end != null ? HoverComment(expr, start, end) : null;
   }
 
   @override
@@ -3077,23 +3071,23 @@
     // slightly different (in Dart, there is a nested scope), but that's handled
     // by _emitFunctionBody.
     var isScope = !identical(node.parent, _currentFunction);
-    return new JS.Block(node.statements.map(_visitStatement).toList(),
+    return JS.Block(node.statements.map(_visitStatement).toList(),
         isScope: isScope);
   }
 
   @override
-  visitEmptyStatement(EmptyStatement node) => new JS.EmptyStatement();
+  visitEmptyStatement(EmptyStatement node) => JS.EmptyStatement();
 
   @override
   visitAssertBlock(AssertBlock node) {
     // AssertBlocks are introduced by the VM-specific async elimination
     // transformation.  We do not expect them to arise here.
-    throw new UnsupportedError('compilation of an assert block');
+    throw UnsupportedError('compilation of an assert block');
   }
 
   @override
   visitAssertStatement(AssertStatement node) {
-    if (!enableAsserts) return new JS.EmptyStatement();
+    if (!enableAsserts) return JS.EmptyStatement();
     var condition = node.condition;
     var conditionType = condition.getStaticType(types);
     var jsCondition = _visitExpression(condition);
@@ -3165,11 +3159,11 @@
   visitBreakStatement(BreakStatement node) {
     // Can it be compiled to a break without a label?
     if (_currentBreakTargets.contains(node.target)) {
-      return new JS.Break(null);
+      return JS.Break(null);
     }
     // Can it be compiled to a continue without a label?
     if (_currentContinueTargets.contains(node.target)) {
-      return new JS.Continue(null);
+      return JS.Continue(null);
     }
 
     // Ensure the effective target is labeled.  Labels are named globally per
@@ -3187,10 +3181,10 @@
       current = (current as LabeledStatement).body;
     }
     if (identical(current, target)) {
-      return new JS.Break(name);
+      return JS.Break(name);
     }
     // Otherwise it is a continue.
-    return new JS.Continue(name);
+    return JS.Continue(name);
   }
 
   // Labeled loop bodies can be the target of a continue without a label
@@ -3234,7 +3228,7 @@
     return translateLoop(node, () {
       var condition = _visitTest(node.condition);
       var body = _visitScope(effectiveBodyOf(node, node.body));
-      return new JS.While(condition, body);
+      return JS.While(condition, body);
     });
   }
 
@@ -3243,31 +3237,30 @@
     return translateLoop(node, () {
       var body = _visitScope(effectiveBodyOf(node, node.body));
       var condition = _visitTest(node.condition);
-      return new JS.Do(body, condition);
+      return JS.Do(body, condition);
     });
   }
 
   @override
   JS.For visitForStatement(ForStatement node) {
     return translateLoop(node, () {
-      emitForInitializer(VariableDeclaration v) =>
-          new JS.VariableInitialization(_emitVariableDef(v),
-              _visitInitializer(v.initializer, v.annotations));
+      emitForInitializer(VariableDeclaration v) => JS.VariableInitialization(
+          _emitVariableDef(v), _visitInitializer(v.initializer, v.annotations));
 
       var init = node.variables.map(emitForInitializer).toList();
       var initList =
-          init.isEmpty ? null : new JS.VariableDeclarationList('let', init);
+          init.isEmpty ? null : JS.VariableDeclarationList('let', init);
       var updates = node.updates;
       JS.Expression update;
       if (updates.isNotEmpty) {
-        update = new JS.Expression.binary(
-                updates.map(_visitExpression).toList(), ',')
-            .toVoidExpression();
+        update =
+            JS.Expression.binary(updates.map(_visitExpression).toList(), ',')
+                .toVoidExpression();
       }
       var condition = _visitTest(node.condition);
       var body = _visitScope(effectiveBodyOf(node, node.body));
 
-      return new JS.For(initList, condition, update, body);
+      return JS.For(initList, condition, update, body);
     });
   }
 
@@ -3283,11 +3276,11 @@
 
       var init = js.call('let #', _emitVariableDef(node.variable));
       if (_annotatedNullCheck(node.variable.annotations)) {
-        body = new JS.Block(
+        body = JS.Block(
             [_nullParameterCheck(_emitVariableRef(node.variable)), body]);
       }
 
-      return new JS.ForOf(init, iterable, body);
+      return JS.ForOf(init, iterable, body);
     });
   }
 
@@ -3310,14 +3303,14 @@
     // TODO(jmesserly): we may want a helper if these become common. For now the
     // full desugaring seems okay.
     var streamIterator = _asyncStreamIteratorClass.rawType;
-    var createStreamIter = new JS.Call(
+    var createStreamIter = JS.Call(
         _emitConstructorName(
             streamIterator,
             _asyncStreamIteratorClass.procedures
                 .firstWhere((p) => p.isFactory && p.name.name == '')),
         [_visitExpression(node.iterable)]);
 
-    var iter = new JS.TemporaryId('iter');
+    var iter = JS.TemporaryId('iter');
     return js.statement(
         '{'
         '  let # = #;'
@@ -3328,12 +3321,12 @@
         [
           iter,
           createStreamIter,
-          new JS.Yield(js.call('#.moveNext()', iter))
+          JS.Yield(js.call('#.moveNext()', iter))
             ..sourceInformation = _nodeStart(node.variable),
           _emitVariableDef(node.variable),
           iter,
           _visitStatement(node.body),
-          new JS.Yield(js.call('#.cancel()', iter))
+          JS.Yield(js.call('#.cancel()', iter))
             ..sourceInformation = _nodeStart(node.variable)
         ]);
   }
@@ -3341,7 +3334,7 @@
   @override
   visitSwitchStatement(SwitchStatement node) {
     var cases = <JS.SwitchCase>[];
-    var emptyBlock = new JS.Block.empty();
+    var emptyBlock = JS.Block.empty();
     for (var c in node.cases) {
       // TODO(jmesserly): make sure we are statically checking fall through
       var body = _visitStatement(c.body).toBlock();
@@ -3350,12 +3343,12 @@
           expressions.isNotEmpty && !c.isDefault ? expressions.last : null;
       for (var e in expressions) {
         var jsExpr = _visitExpression(e);
-        cases.add(new JS.SwitchCase(jsExpr, e == last ? body : emptyBlock));
+        cases.add(JS.SwitchCase(jsExpr, e == last ? body : emptyBlock));
       }
-      if (c.isDefault) cases.add(new JS.SwitchCase.defaultCase(body));
+      if (c.isDefault) cases.add(JS.SwitchCase.defaultCase(body));
     }
 
-    return new JS.Switch(_visitExpression(node.expression), cases);
+    return JS.Switch(_visitExpression(node.expression), cases);
   }
 
   @override
@@ -3375,7 +3368,7 @@
       var fromIndex = switchCases.indexOf(switchCase);
       var toIndex = switchCases.indexOf(node.target);
       if (toIndex == fromIndex + 1) {
-        return new JS.Comment('continue to next case');
+        return JS.Comment('continue to next case');
       }
     }
     return _emitInvalidNode(
@@ -3385,7 +3378,7 @@
 
   @override
   visitIfStatement(IfStatement node) {
-    return new JS.If(_visitTest(node.condition), _visitScope(node.then),
+    return JS.If(_visitTest(node.condition), _visitScope(node.then),
         _visitScope(node.otherwise));
   }
 
@@ -3399,7 +3392,7 @@
     var result = _visitStatement(stmt);
     if (result is JS.ExpressionStatement &&
         result.expression is JS.VariableDeclarationList) {
-      return new JS.Block([result]);
+      return JS.Block([result]);
     }
     return result;
   }
@@ -3411,7 +3404,7 @@
 
   @override
   visitTryCatch(TryCatch node) {
-    return new JS.Try(
+    return JS.Try(
         _visitStatement(node.body).toBlock(), _visitCatch(node.catches), null);
   }
 
@@ -3424,7 +3417,7 @@
       // Special case for a single catch.
       _catchParameter = clauses.single.exception;
     } else {
-      _catchParameter = new VariableDeclaration('#e');
+      _catchParameter = VariableDeclaration('#e');
     }
 
     JS.Statement catchBody =
@@ -3435,14 +3428,14 @@
 
     var catchVarDecl = _emitVariableRef(_catchParameter);
     _catchParameter = savedCatch;
-    return new JS.Catch(catchVarDecl, catchBody.toBlock());
+    return JS.Catch(catchVarDecl, catchBody.toBlock());
   }
 
   JS.Statement _catchClauseGuard(Catch node, JS.Statement otherwise) {
     var body = <JS.Statement>[];
 
     var savedCatch = _catchParameter;
-    var vars = new HashSet<String>();
+    var vars = HashSet<String>();
     if (node.exception != null) {
       var name = node.exception;
       if (name == _catchParameter) {
@@ -3466,13 +3459,13 @@
 
     body.add(_visitStatement(node.body).toScopedBlock(vars));
     _catchParameter = savedCatch;
-    var then = new JS.Block(body);
+    var then = JS.Block(body);
 
     if (types.isTop(node.guard)) return then;
 
     // TODO(jmesserly): this is inconsistent with [visitIsExpression], which
     // has special case for typeof.
-    return new JS.If(
+    return JS.If(
         js.call('#.is(#)',
             [_emitType(node.guard), _emitVariableRef(_catchParameter)]),
         then,
@@ -3490,9 +3483,9 @@
       // Kernel represents Dart try/catch/finally as try/catch nested inside of
       // try/finally.  Flatten that pattern in the output into JS try/catch/
       // finally.
-      return new JS.Try(body.body, body.catchPart, finallyBlock);
+      return JS.Try(body.body, body.catchPart, finallyBlock);
     }
-    return new JS.Try(body.toBlock(), null, finallyBlock);
+    return JS.Try(body.toBlock(), null, finallyBlock);
   }
 
   @override
@@ -3515,7 +3508,7 @@
         _asyncStarController,
         helperName,
         jsExpr,
-        new JS.Yield(null)..sourceInformation = _nodeStart(node)
+        JS.Yield(null)..sourceInformation = _nodeStart(node)
       ]);
     }
     // A normal yield in a sync*
@@ -3541,10 +3534,10 @@
     if (JS.This.foundIn(fn)) {
       declareFn = js.statement('const # = #.bind(this);', [name, fn]);
     } else {
-      declareFn = new JS.FunctionDeclaration(name, fn);
+      declareFn = JS.FunctionDeclaration(name, fn);
     }
     if (_reifyFunctionType(func)) {
-      declareFn = new JS.Block([
+      declareFn = JS.Block([
         declareFn,
         _emitFunctionTagged(_emitVariableRef(node.variable), func.functionType)
             .toStatement()
@@ -3580,9 +3573,9 @@
     var name = v.name;
     if (name == null || name.startsWith('#')) {
       name = name == null ? 't${_tempVariables.length}' : name.substring(1);
-      return _tempVariables.putIfAbsent(v, () => new JS.TemporaryId(name));
+      return _tempVariables.putIfAbsent(v, () => JS.TemporaryId(name));
     }
-    return new JS.Identifier(name);
+    return JS.Identifier(name);
   }
 
   /// Emits the declaration of a variable.
@@ -3595,10 +3588,10 @@
 
   JS.Statement _initLetVariables() {
     if (_letVariables.isEmpty) return null;
-    var result = new JS.VariableDeclarationList(
+    var result = JS.VariableDeclarationList(
             'let',
             _letVariables
-                .map((v) => new JS.VariableInitialization(v, null))
+                .map((v) => JS.VariableInitialization(v, null))
                 .toList())
         .toStatement();
     _letVariables.clear();
@@ -3667,7 +3660,7 @@
     if (_reifyTearoff(member)) {
       return runtimeCall('bind(#, #)', [jsReceiver, jsName]);
     } else {
-      return new JS.PropertyAccess(jsReceiver, jsName);
+      return JS.PropertyAccess(jsReceiver, jsName);
     }
   }
 
@@ -3770,7 +3763,7 @@
         return _emitDynamicInvoke(jsReceiver, null, args, arguments);
       } else if (_isDirectCallable(receiverType)) {
         // Call methods on function types should be handled as function calls.
-        return new JS.Call(jsReceiver, args);
+        return JS.Call(jsReceiver, args);
       }
     }
 
@@ -3840,7 +3833,7 @@
 
   JS.Expression _getImplicitCallTarget(InterfaceType from) {
     var c = from.classNode;
-    var member = hierarchy.getInterfaceMember(c, new Name("call"));
+    var member = hierarchy.getInterfaceMember(c, Name("call"));
     if (member is Procedure && !member.isAccessor && !usesJSInterop(c)) {
       return _emitMemberName('call', member: member);
     }
@@ -4188,18 +4181,18 @@
   @override
   visitSuperMethodInvocation(SuperMethodInvocation node) {
     var target = node.interfaceTarget;
-    return new JS.Call(_emitSuperTarget(target),
+    return JS.Call(_emitSuperTarget(target),
         _emitArgumentList(node.arguments, target: target));
   }
 
   /// Emits the [JS.PropertyAccess] for accessors or method calls to
   /// [jsTarget].[jsName], replacing `super` if it is not allowed in scope.
-  JS.PropertyAccess _emitSuperTarget(Member member, {bool setter: false}) {
+  JS.PropertyAccess _emitSuperTarget(Member member, {bool setter = false}) {
     var jsName = _emitMemberName(member.name.name, member: member);
     if (member is Field && !virtualFields.isVirtual(member)) {
-      return new JS.PropertyAccess(new JS.This(), jsName);
+      return JS.PropertyAccess(JS.This(), jsName);
     }
-    if (_superAllowed) return new JS.PropertyAccess(new JS.Super(), jsName);
+    if (_superAllowed) return JS.PropertyAccess(JS.Super(), jsName);
 
     // If we can't emit `super` in this context, generate a helper that does it
     // for us, and call the helper.
@@ -4216,13 +4209,13 @@
                 : 'function() { return super[#]; }',
             [jsName]);
 
-        return new JS.Method(new JS.TemporaryId(name), fn,
+        return JS.Method(JS.TemporaryId(name), fn,
             isGetter: !setter, isSetter: setter);
       } else {
         var function = member.function;
         var params = _emitTypeFormals(function.typeParameters);
         for (var param in function.positionalParameters) {
-          params.add(new JS.Identifier(param.name));
+          params.add(JS.Identifier(param.name));
         }
         if (function.namedParameters.isNotEmpty) {
           params.add(namedArgumentTemp);
@@ -4231,10 +4224,10 @@
         var fn = js.fun(
             'function(#) { return super[#](#); }', [params, jsName, params]);
         name = JS.friendlyNameForDartOperator[name] ?? name;
-        return new JS.Method(new JS.TemporaryId(name), fn);
+        return JS.Method(JS.TemporaryId(name), fn);
       }
     });
-    return new JS.PropertyAccess(new JS.This(), jsMethod.name);
+    return JS.PropertyAccess(JS.This(), jsMethod.name);
   }
 
   @override
@@ -4270,7 +4263,7 @@
 
     var fn = _emitStaticTarget(target);
     var args = _emitArgumentList(node.arguments, target: target);
-    return new JS.Call(fn, args);
+    return JS.Call(fn, args);
   }
 
   bool _isDebuggerCall(Procedure target) {
@@ -4306,10 +4299,10 @@
         // coerces to true (the default value of `when`).
         ? (args[0].name == 'when'
             ? jsArgs[0].value
-            : new JS.ObjectInitializer(jsArgs))
+            : JS.ObjectInitializer(jsArgs))
         // If we have both `message` and `when` arguments, evaluate them in
         // order, then extract the `when` argument.
-        : js.call('#.when', new JS.ObjectInitializer(jsArgs));
+        : js.call('#.when', JS.ObjectInitializer(jsArgs));
     return isStatement
         ? js.statement('if (#) debugger;', when)
         : js.call('# && (() => { debugger; return true })()', when);
@@ -4329,14 +4322,14 @@
           return runtimeCall('global.#.#', [nativeName[0], memberName]);
         }
       }
-      return new JS.PropertyAccess(_emitStaticClassName(c),
+      return JS.PropertyAccess(_emitStaticClassName(c),
           _emitStaticMemberName(target.name.name, target));
     }
     return _emitTopLevelName(target);
   }
 
   List<JS.Expression> _emitArgumentList(Arguments node,
-      {bool types: true, Member target}) {
+      {bool types = true, Member target}) {
     types = types && _reifyGenericFunction(target);
     var args = <JS.Expression>[];
     if (types) {
@@ -4348,21 +4341,20 @@
       if (arg is StaticInvocation &&
           isJSSpreadInvocation(arg.target) &&
           arg.arguments.positional.length == 1) {
-        args.add(new JS.Spread(_visitExpression(arg.arguments.positional[0])));
+        args.add(JS.Spread(_visitExpression(arg.arguments.positional[0])));
       } else {
         args.add(_visitExpression(arg));
       }
     }
     if (node.named.isNotEmpty) {
-      args.add(new JS.ObjectInitializer(
-          node.named.map(_emitNamedExpression).toList()));
+      args.add(
+          JS.ObjectInitializer(node.named.map(_emitNamedExpression).toList()));
     }
     return args;
   }
 
   JS.Property _emitNamedExpression(NamedExpression arg) {
-    return new JS.Property(
-        _propertyName(arg.name), _visitExpression(arg.value));
+    return JS.Property(_propertyName(arg.name), _visitExpression(arg.value));
   }
 
   /// Emits code for the `JS(...)` macro.
@@ -4378,7 +4370,7 @@
         source = code.expressions.map((e) => (e as StringLiteral).value).join();
       } else {
         if (args.length > 2) {
-          throw new ArgumentError(
+          throw ArgumentError(
               "Can't mix template args and string interpolation in JS calls: "
               "`$node`");
         }
@@ -4468,8 +4460,8 @@
       return _emitJSDoubleEq(jsArgs, negated: negated);
     }
     var code = negated ? '!#' : '#';
-    return js.call(code,
-        new JS.Call(_emitTopLevelName(coreTypes.identicalProcedure), jsArgs));
+    return js.call(
+        code, JS.Call(_emitTopLevelName(coreTypes.identicalProcedure), jsArgs));
   }
 
   @override
@@ -4477,7 +4469,7 @@
     var ctor = node.target;
     var args = node.arguments;
     JS.Expression emitNew() {
-      return new JS.New(_emitConstructorName(node.constructedType, ctor),
+      return JS.New(_emitConstructorName(node.constructedType, ctor),
           _emitArgumentList(args, types: false));
     }
 
@@ -4494,7 +4486,7 @@
 
     var type = ctorClass.typeParameters.isEmpty
         ? ctorClass.rawType
-        : new InterfaceType(ctorClass, args.types);
+        : InterfaceType(ctorClass, args.types);
 
     if (isFromEnvironmentInvocation(coreTypes, node)) {
       var value = _constants.evaluate(node);
@@ -4535,7 +4527,7 @@
     }
 
     JS.Expression emitNew() {
-      return new JS.Call(_emitConstructorName(type, ctor),
+      return JS.Call(_emitConstructorName(type, ctor),
           _emitArgumentList(args, types: false));
     }
 
@@ -4545,7 +4537,7 @@
   JS.Expression _emitJSInteropNew(Member ctor, Arguments args) {
     var ctorClass = ctor.enclosingClass;
     if (isJSAnonymousType(ctorClass)) return _emitObjectLiteral(args);
-    return new JS.New(_emitConstructorName(ctorClass.rawType, ctor),
+    return JS.New(_emitConstructorName(ctorClass.rawType, ctor),
         _emitArgumentList(args, types: false));
   }
 
@@ -4554,7 +4546,7 @@
     if (typeArgs.isEmpty) return _emitType(type);
     identity ??= _typeRep.isPrimitive(typeArgs[0]);
     var c = identity ? identityHashMapImplClass : linkedHashMapImplClass;
-    return _emitType(new InterfaceType(c, typeArgs));
+    return _emitType(InterfaceType(c, typeArgs));
   }
 
   JS.Expression _emitSetImplType(InterfaceType type, {bool identity}) {
@@ -4562,7 +4554,7 @@
     if (typeArgs.isEmpty) return _emitType(type);
     identity ??= _typeRep.isPrimitive(typeArgs[0]);
     var c = identity ? identityHashSetImplClass : linkedHashSetImplClass;
-    return _emitType(new InterfaceType(c, typeArgs));
+    return _emitType(InterfaceType(c, typeArgs));
   }
 
   JS.Expression _emitObjectLiteral(Arguments node) {
@@ -4624,7 +4616,7 @@
           : runtimeCall('str(#)', jsExpr));
     }
     if (parts.isEmpty) return js.string('');
-    return new JS.Expression.binary(parts, '+');
+    return JS.Expression.binary(parts, '+');
   }
 
   @override
@@ -4736,7 +4728,7 @@
     // params are available.
     if (_currentFunction == null || usesTypeParams) return jsExpr;
 
-    var temp = new JS.TemporaryId('const');
+    var temp = JS.TemporaryId('const');
     moduleItems.add(js.statement('let #;', [temp]));
     return js.call('# || (# = #)', [temp, temp, jsExpr]);
   }
@@ -4753,7 +4745,7 @@
   }
 
   @override
-  visitThisExpression(ThisExpression node) => new JS.This();
+  visitThisExpression(ThisExpression node) => JS.This();
 
   @override
   visitRethrow(Rethrow node) {
@@ -4782,7 +4774,7 @@
   }
 
   JS.Expression _emitList(DartType itemType, List<JS.Expression> items) {
-    var list = new JS.ArrayInitializer(items);
+    var list = JS.ArrayInitializer(items);
 
     // TODO(jmesserly): analyzer will usually infer `List<Object>` because
     // that is the least upper bound of the element types. So we rarely
@@ -4790,7 +4782,7 @@
     if (itemType == const DynamicType()) return list;
 
     // Call `new JSArray<E>.of(list)`
-    var arrayType = new InterfaceType(_jsArrayClass, [itemType]);
+    var arrayType = InterfaceType(_jsArrayClass, [itemType]);
     return js.call('#.of(#)', [_emitType(arrayType), list]);
   }
 
@@ -4802,7 +4794,7 @@
         entries.add(_visitExpression(e.key));
         entries.add(_visitExpression(e.value));
       }
-      return new JS.ArrayInitializer(entries);
+      return JS.ArrayInitializer(entries);
     }
 
     if (!node.isConst) {
@@ -4819,7 +4811,7 @@
 
   @override
   visitAwaitExpression(AwaitExpression node) =>
-      new JS.Yield(_visitExpression(node.operand));
+      JS.Yield(_visitExpression(node.operand));
 
   @override
   visitFunctionExpression(FunctionExpression node) {
@@ -4847,7 +4839,7 @@
 
     // Convert `function(...) { ... }` to `(...) => ...`
     // This is for readability, but it also ensures correct `this` binding.
-    return new JS.ArrowFun(f.params, body,
+    return JS.ArrowFun(f.params, body,
         typeParams: f.typeParams, returnType: f.returnType);
   }
 
@@ -4855,16 +4847,16 @@
   visitStringLiteral(StringLiteral node) => js.escapedString(node.value, '"');
 
   @override
-  visitIntLiteral(IntLiteral node) => js.number(node.value);
+  visitIntLiteral(IntLiteral node) => js.uint64(node.value);
 
   @override
   visitDoubleLiteral(DoubleLiteral node) => js.number(node.value);
 
   @override
-  visitBoolLiteral(BoolLiteral node) => new JS.LiteralBool(node.value);
+  visitBoolLiteral(BoolLiteral node) => JS.LiteralBool(node.value);
 
   @override
-  visitNullLiteral(NullLiteral node) => new JS.LiteralNull();
+  visitNullLiteral(NullLiteral node) => JS.LiteralNull();
 
   @override
   visitLet(Let node) {
@@ -4874,7 +4866,7 @@
     var temp = _tempVariables.remove(v);
     if (temp != null) {
       if (_letVariables != null) {
-        init = new JS.Assignment(temp, init);
+        init = JS.Assignment(temp, init);
         _letVariables.add(temp);
       } else {
         // TODO(jmesserly): make sure this doesn't happen on any performance
@@ -4882,10 +4874,10 @@
         //
         // Annotations on a top-level, non-lazy function type should be the only
         // remaining use.
-        return new JS.Call(new JS.ArrowFun([temp], body), [init]);
+        return JS.Call(JS.ArrowFun([temp], body), [init]);
       }
     }
-    return new JS.Binary(',', init, body);
+    return JS.Binary(',', init, body);
   }
 
   @override
@@ -4970,7 +4962,7 @@
   }
 
   @override
-  visitNullConstant(NullConstant node) => new JS.LiteralNull();
+  visitNullConstant(NullConstant node) => JS.LiteralNull();
   @override
   visitBoolConstant(BoolConstant node) => js.boolean(node.value);
   @override
diff --git a/pkg/dev_compiler/lib/src/kernel/constants.dart b/pkg/dev_compiler/lib/src/kernel/constants.dart
index fb88289..79448fc 100644
--- a/pkg/dev_compiler/lib/src/kernel/constants.dart
+++ b/pkg/dev_compiler/lib/src/kernel/constants.dart
@@ -18,8 +18,8 @@
 
   DevCompilerConstants(
       TypeEnvironment types, Map<String, String> declaredVariables)
-      : _visitor = new _ConstantVisitor(types.coreTypes),
-        _evaluator = new _ConstantEvaluator(types, declaredVariables);
+      : _visitor = _ConstantVisitor(types.coreTypes),
+        _evaluator = _ConstantEvaluator(types, declaredVariables);
 
   /// Determines if an expression is constant.
   bool isConstant(Expression e) => _visitor.isConstant(e);
@@ -31,7 +31,7 @@
   ///
   /// To avoid performance costs associated with try+catch on invalid constant
   /// evaluation, call this after [isConstant] is known to be true.
-  Constant evaluate(Expression e, {bool cache: false}) {
+  Constant evaluate(Expression e, {bool cache = false}) {
     if (e == null) return null;
 
     try {
@@ -181,15 +181,15 @@
 
   _ConstantEvaluator(TypeEnvironment types, this.declaredVariables,
       {bool enableAsserts})
-      : unavailableConstant = new InstanceConstant(
+      : unavailableConstant = InstanceConstant(
             types.coreTypes.index
                 .getClass('dart:core', '_ConstantExpressionError')
                 .reference,
             [],
             {}),
-        super(new _ConstantsBackend(types.coreTypes), types, types.coreTypes,
-            true, enableAsserts, const _ErrorReporter()) {
-    env = new EvaluationEnvironment();
+        super(_ConstantsBackend(types.coreTypes), types, types.coreTypes, true,
+            enableAsserts, const _ErrorReporter()) {
+    env = EvaluationEnvironment();
   }
 
   @override
@@ -249,11 +249,11 @@
       var targetClass = target.enclosingClass;
 
       if (targetClass == coreTypes.stringClass) {
-        if (value != null) return canonicalize(new StringConstant(value));
+        if (value != null) return canonicalize(StringConstant(value));
         return defaultArg ?? nullConstant;
       } else if (targetClass == coreTypes.intClass) {
         var intValue = int.parse(value ?? '', onError: (_) => null);
-        if (intValue != null) return canonicalize(new IntConstant(intValue));
+        if (intValue != null) return canonicalize(IntConstant(intValue));
         return defaultArg ?? nullConstant;
       } else if (targetClass == coreTypes.boolClass) {
         if (value == "true") return trueConstant;
@@ -279,7 +279,7 @@
       var d = constant.value;
       if (d.isFinite) {
         var i = d.toInt();
-        if (d == i.toDouble()) return super.canonicalize(new IntConstant(i));
+        if (d == i.toDouble()) return super.canonicalize(IntConstant(i));
       }
     }
     return super.canonicalize(constant);
@@ -301,11 +301,11 @@
   @override
   buildConstantForNative(
           nativeName, typeArguments, positionalArguments, namedArguments) =>
-      throw new StateError('unreachable'); // DDC does not use VM native syntax
+      throw StateError('unreachable'); // DDC does not use VM native syntax
 
   @override
   buildSymbolConstant(StringConstant value) {
-    return new InstanceConstant(
+    return InstanceConstant(
         coreTypes.internalSymbolClass.reference,
         const <DartType>[],
         <Reference, Constant>{symbolNameField.reference: value});
diff --git a/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart b/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
index b9b6412..27b4e85 100644
--- a/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
+++ b/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
@@ -17,7 +17,7 @@
   return null;
 }
 
-final Pattern _syntheticTypeCharacters = new RegExp('[&^#.]');
+final Pattern _syntheticTypeCharacters = RegExp('[&^#.]');
 
 String _escapeIdentifier(String identifier) {
   // Remove the special characters used to encode mixin application class names
@@ -138,7 +138,7 @@
 
 List<Class> getSuperclasses(Class c) {
   var result = <Class>[];
-  var visited = new HashSet<Class>();
+  var visited = HashSet<Class>();
   while (c != null && visited.add(c)) {
     for (var m = c.mixedInClass; m != null; m = m.mixedInClass) {
       result.add(m);
diff --git a/pkg/dev_compiler/lib/src/kernel/native_types.dart b/pkg/dev_compiler/lib/src/kernel/native_types.dart
index cde8c08..1daac64 100644
--- a/pkg/dev_compiler/lib/src/kernel/native_types.dart
+++ b/pkg/dev_compiler/lib/src/kernel/native_types.dart
@@ -30,11 +30,11 @@
 
   // Abstract types that may be implemented by both native and non-native
   // classes.
-  final _extensibleTypes = new HashSet<Class>.identity();
+  final _extensibleTypes = HashSet<Class>.identity();
 
   // Concrete native types.
-  final _nativeTypes = new HashSet<Class>.identity();
-  final _pendingLibraries = new HashSet<Library>.identity();
+  final _nativeTypes = HashSet<Class>.identity();
+  final _pendingLibraries = HashSet<Library>.identity();
 
   NativeTypeSet(this.coreTypes, this.constants) {
     // First, core types:
diff --git a/pkg/dev_compiler/lib/src/kernel/nullable_inference.dart b/pkg/dev_compiler/lib/src/kernel/nullable_inference.dart
index edf71af..8e212cf 100644
--- a/pkg/dev_compiler/lib/src/kernel/nullable_inference.dart
+++ b/pkg/dev_compiler/lib/src/kernel/nullable_inference.dart
@@ -36,7 +36,7 @@
   /// [allowNotNullDeclarations].
   bool allowPackageMetaAnnotations = false;
 
-  final _variableInference = new _NullableVariableInference();
+  final _variableInference = _NullableVariableInference();
 
   NullableInference(this.jsTypeRep)
       : types = jsTypeRep.types,
@@ -276,19 +276,19 @@
   NullableInference _nullInference;
 
   /// Variables that are currently believed to be not-null.
-  final _notNullLocals = new HashSet<VariableDeclaration>.identity();
+  final _notNullLocals = HashSet<VariableDeclaration>.identity();
 
   /// For each variable currently believed to be not-null ([_notNullLocals]),
   /// this collects variables that it is assigned to, so we update them if we
   /// later determine that the variable can be null.
   final _assignedTo =
-      new HashMap<VariableDeclaration, List<VariableDeclaration>>.identity();
+      HashMap<VariableDeclaration, List<VariableDeclaration>>.identity();
 
   /// All functions that have been analyzed with [analyzeFunction].
   ///
   /// In practice this will include the outermost function (typically a
   /// [Procedure]) as well as an local functions it contains.
-  final _functions = new HashSet<FunctionNode>.identity();
+  final _functions = HashSet<FunctionNode>.identity();
 
   /// The current variable we are setting/initializing, so we can track if it
   /// is [_assignedTo] from another variable.
diff --git a/pkg/dev_compiler/lib/src/kernel/property_model.dart b/pkg/dev_compiler/lib/src/kernel/property_model.dart
index 1edc3b7..4242554 100644
--- a/pkg/dev_compiler/lib/src/kernel/property_model.dart
+++ b/pkg/dev_compiler/lib/src/kernel/property_model.dart
@@ -21,10 +21,10 @@
 /// which members are private and thus, could not be overridden outside of the
 /// current library.
 class VirtualFieldModel {
-  final _modelForLibrary = new HashMap<Library, _LibraryVirtualFieldModel>();
+  final _modelForLibrary = HashMap<Library, _LibraryVirtualFieldModel>();
 
   _LibraryVirtualFieldModel _getModel(Library library) => _modelForLibrary
-      .putIfAbsent(library, () => new _LibraryVirtualFieldModel.build(library));
+      .putIfAbsent(library, () => _LibraryVirtualFieldModel.build(library));
 
   /// Returns true if a field is virtual.
   bool isVirtual(Field field) =>
@@ -39,7 +39,7 @@
   ///
   /// This means we must generate them as virtual fields using a property pair
   /// in JavaScript.
-  final _overriddenPrivateFields = new HashSet<Field>();
+  final _overriddenPrivateFields = HashSet<Field>();
 
   /// Private classes that can be extended outside of this library.
   ///
@@ -53,7 +53,7 @@
   ///     class C extends _A {}
   ///
   /// The class _A must treat is "x" as virtual, however _B does not.
-  final _extensiblePrivateClasses = new HashSet<Class>();
+  final _extensiblePrivateClasses = HashSet<Class>();
 
   _LibraryVirtualFieldModel.build(Library library) {
     var allClasses = library.classes;
@@ -62,7 +62,7 @@
     // From there, visit all immediate private types in this library, and so on
     // from those private types, marking them as extensible.
     var classesToVisit =
-        new Queue<Class>.from(allClasses.where((c) => !c.name.startsWith('_')));
+        Queue<Class>.from(allClasses.where((c) => !c.name.startsWith('_')));
     while (classesToVisit.isNotEmpty) {
       var c = classesToVisit.removeFirst();
 
@@ -84,12 +84,12 @@
     // time.
     Map<String, Field> getInstanceFieldMap(Class c) {
       var instanceFields = c.fields.where((f) => !f.isStatic);
-      return new HashMap.fromIterables(
+      return HashMap.fromIterables(
           instanceFields.map((f) => f.name.name), instanceFields);
     }
 
-    var allFields = new HashMap.fromIterables(
-        allClasses, allClasses.map(getInstanceFieldMap));
+    var allFields =
+        HashMap.fromIterables(allClasses, allClasses.map(getInstanceFieldMap));
 
     for (var class_ in allClasses) {
       Set<Class> superclasses = null;
@@ -113,7 +113,7 @@
         }
 
         if (superclasses == null) {
-          superclasses = new Set();
+          superclasses = Set();
           void collectSupertypes(Class c) {
             if (!superclasses.add(c)) return;
             var s = c.superclass;
@@ -189,16 +189,16 @@
   /// The set of inherited getters, used because JS getters/setters are paired,
   /// so if we're generating a setter we may need to emit a getter that calls
   /// super.
-  final inheritedGetters = new HashSet<String>();
+  final inheritedGetters = HashSet<String>();
 
   /// The set of inherited setters, used because JS getters/setters are paired,
   /// so if we're generating a getter we may need to emit a setter that calls
   /// super.
-  final inheritedSetters = new HashSet<String>();
+  final inheritedSetters = HashSet<String>();
 
-  final extensionMethods = new Set<String>();
+  final extensionMethods = Set<String>();
 
-  final extensionAccessors = new Set<String>();
+  final extensionAccessors = Set<String>();
 
   ClassPropertyModel.build(this.types, this.extensionTypes,
       VirtualFieldModel fieldModel, Class class_) {
@@ -231,7 +231,7 @@
 
     _collectExtensionMembers(class_);
 
-    var virtualAccessorNames = new HashSet<String>()
+    var virtualAccessorNames = HashSet<String>()
       ..addAll(inheritedGetters)
       ..addAll(inheritedSetters)
       ..addAll(extensionAccessors);
@@ -247,7 +247,7 @@
           fieldModel.isVirtual(field) ||
           field.isCovariant ||
           field.isGenericCovariantImpl) {
-        virtualFields[field] = new JS.TemporaryId(name);
+        virtualFields[field] = JS.TemporaryId(name);
       }
     }
   }
@@ -260,23 +260,23 @@
     // Find all generic interfaces that could be used to call into members of
     // this class. This will help us identify which parameters need checks
     // for soundness.
-    var allNatives = new HashSet<String>();
+    var allNatives = HashSet<String>();
     _collectNativeMembers(class_, allNatives);
     if (allNatives.isEmpty) return;
 
     // For members on this class, check them against all generic interfaces.
-    var seenConcreteMembers = new HashSet<String>();
+    var seenConcreteMembers = HashSet<String>();
     _findExtensionMembers(class_, seenConcreteMembers, allNatives);
 
     // For members of the superclass, we may need to add checks because this
     // class adds a new unsafe interface. Collect those checks.
-    var visited = new HashSet<Class>()..add(class_);
-    var existingMembers = new HashSet<String>();
+    var visited = HashSet<Class>()..add(class_);
+    var existingMembers = HashSet<String>();
 
     void visitImmediateSuper(Class c) {
       // For members of mixins/supertypes, check them against new interfaces,
       // and also record any existing checks they already had.
-      var oldCovariant = new HashSet<String>();
+      var oldCovariant = HashSet<String>();
       _collectNativeMembers(c, oldCovariant);
       var newCovariant = allNatives.difference(oldCovariant);
       if (newCovariant.isEmpty) return;
diff --git a/pkg/dev_compiler/lib/src/kernel/target.dart b/pkg/dev_compiler/lib/src/kernel/target.dart
index 5996ea5..33329bb 100644
--- a/pkg/dev_compiler/lib/src/kernel/target.dart
+++ b/pkg/dev_compiler/lib/src/kernel/target.dart
@@ -85,31 +85,31 @@
           .getClass('dart:core', '_Invocation')
           .constructors
           .firstWhere((c) => c.name.name == name);
-      return new ConstructorInvocation(ctor, new Arguments(positional));
+      return ConstructorInvocation(ctor, Arguments(positional));
     }
 
     if (name.startsWith('get:')) {
-      return createInvocation('getter', [new SymbolLiteral(name.substring(4))]);
+      return createInvocation('getter', [SymbolLiteral(name.substring(4))]);
     }
     if (name.startsWith('set:')) {
       return createInvocation('setter', [
-        new SymbolLiteral(name.substring(4) + '='),
+        SymbolLiteral(name.substring(4) + '='),
         arguments.positional.single
       ]);
     }
-    var ctorArgs = <Expression>[new SymbolLiteral(name)];
+    var ctorArgs = <Expression>[SymbolLiteral(name)];
     bool isGeneric = arguments.types.isNotEmpty;
     if (isGeneric) {
-      ctorArgs.add(new ListLiteral(
-          arguments.types.map((t) => new TypeLiteral(t)).toList()));
+      ctorArgs.add(
+          ListLiteral(arguments.types.map((t) => TypeLiteral(t)).toList()));
     } else {
-      ctorArgs.add(new NullLiteral());
+      ctorArgs.add(NullLiteral());
     }
-    ctorArgs.add(new ListLiteral(arguments.positional));
+    ctorArgs.add(ListLiteral(arguments.positional));
     if (arguments.named.isNotEmpty) {
-      ctorArgs.add(new MapLiteral(
+      ctorArgs.add(MapLiteral(
           arguments.named
-              .map((n) => new MapEntry(new SymbolLiteral(n.name), n.value))
+              .map((n) => MapEntry(SymbolLiteral(n.name), n.value))
               .toList(),
           keyType: coreTypes.symbolClass.rawType));
     }
@@ -119,17 +119,17 @@
   @override
   Expression instantiateNoSuchMethodError(CoreTypes coreTypes,
       Expression receiver, String name, Arguments arguments, int offset,
-      {bool isMethod: false,
-      bool isGetter: false,
-      bool isSetter: false,
-      bool isField: false,
-      bool isLocalVariable: false,
-      bool isDynamic: false,
-      bool isSuper: false,
-      bool isStatic: false,
-      bool isConstructor: false,
-      bool isTopLevel: false}) {
+      {bool isMethod = false,
+      bool isGetter = false,
+      bool isSetter = false,
+      bool isField = false,
+      bool isLocalVariable = false,
+      bool isDynamic = false,
+      bool isSuper = false,
+      bool isStatic = false,
+      bool isConstructor = false,
+      bool isTopLevel = false}) {
     // TODO(sigmund): implement;
-    return new InvalidExpression(null);
+    return InvalidExpression(null);
   }
 }
diff --git a/pkg/dev_compiler/lib/src/kernel/type_table.dart b/pkg/dev_compiler/lib/src/kernel/type_table.dart
index d3f4ff7..313e8c9 100644
--- a/pkg/dev_compiler/lib/src/kernel/type_table.dart
+++ b/pkg/dev_compiler/lib/src/kernel/type_table.dart
@@ -9,7 +9,7 @@
 import '../compiler/js_names.dart' as JS;
 
 Set<TypeParameter> freeTypeParameters(DartType t) {
-  var result = new Set<TypeParameter>();
+  var result = Set<TypeParameter>();
   void find(DartType t) {
     if (t is TypeParameterType) {
       result.add(t.parameter);
@@ -63,7 +63,7 @@
 
   bool isNamed(DartType type) => _names.containsKey(type);
 
-  String _typeString(DartType type, {bool flat: false}) {
+  String _typeString(DartType type, {bool flat = false}) {
     if (type is InterfaceType) {
       var name = type.classNode.name;
       var typeArgs = type.typeArguments;
@@ -103,7 +103,7 @@
   /// Heuristically choose a good name for the cache and generator
   /// variables.
   JS.TemporaryId chooseTypeName(DartType type) {
-    return new JS.TemporaryId(_typeString(type));
+    return JS.TemporaryId(_typeString(type));
   }
 }
 
@@ -150,7 +150,7 @@
   /// parameter.
   final _scopeDependencies = <TypeParameter, List<DartType>>{};
 
-  TypeTable(JS.Identifier runtime) : _generators = new _GeneratorTable(runtime);
+  TypeTable(JS.Identifier runtime) : _generators = _GeneratorTable(runtime);
 
   /// Emit a list of statements declaring the cache variables and generator
   /// definitions tracked by the table.  If [formals] is present, only
@@ -200,9 +200,9 @@
   /// type itself. This allows better integration with `lazyFn`, avoiding an
   /// extra level of indirection.
   JS.Expression nameFunctionType(FunctionType type, JS.Expression typeRep,
-      {bool lazy: false}) {
+      {bool lazy = false}) {
     if (!_generators.isNamed(type) && recordScopeDependencies(type)) {
-      return lazy ? new JS.ArrowFun([], typeRep) : typeRep;
+      return lazy ? JS.ArrowFun([], typeRep) : typeRep;
     }
     var name = _generators._nameType(type, typeRep);
     return lazy ? name : js.call('#()', [name]);
diff --git a/pkg/dev_compiler/test/child_server_process.dart b/pkg/dev_compiler/test/child_server_process.dart
index 8a6f85e..f274290 100644
--- a/pkg/dev_compiler/test/child_server_process.dart
+++ b/pkg/dev_compiler/test/child_server_process.dart
@@ -9,7 +9,7 @@
   /// [IOSink]s like [stdout] don't like to be piped more than one [Stream], but
   /// we want to pipe many of them (basically, every standard output and error
   /// of every child process we open), so we pipe to an accommodating consumer.
-  static final _consoleOut = new _MultipleStreamConsumer(stdout);
+  static final _consoleOut = _MultipleStreamConsumer(stdout);
 
   final Process process;
   final String host;
@@ -19,20 +19,20 @@
   get httpUri => Uri.parse('http://$host:$port');
 
   static build(Future<Process> builder(String host, int port),
-      {int defaultPort: 1024,
-      int maxPort: 65535,
-      String host: '0.0.0.0'}) async {
+      {int defaultPort = 1024,
+      int maxPort = 65535,
+      String host = '0.0.0.0'}) async {
     var port = await _findUnusedPort(defaultPort, maxPort);
     var p = (await builder(host, port))
       ..stdout.pipe(_consoleOut)
       ..stderr.pipe(_consoleOut);
     await _waitForServer(host, port);
-    return new ChildServerProcess._(p, host, port);
+    return ChildServerProcess._(p, host, port);
   }
 
   static _waitForServer(String host, int port,
-      {int attempts: 10,
-      Duration retryDelay: const Duration(seconds: 1)}) async {
+      {int attempts = 10,
+      Duration retryDelay = const Duration(seconds: 1)}) async {
     var lastError;
     for (int i = 0; i < attempts; i++) {
       try {
@@ -40,10 +40,10 @@
         return;
       } catch (e) {
         lastError = e;
-        await new Future.delayed(retryDelay);
+        await Future.delayed(retryDelay);
       }
     }
-    throw new StateError(
+    throw StateError(
         'Failed to connect to $host:$port after $attempts attempts; '
         'Last error:\n$lastError');
   }
@@ -59,7 +59,7 @@
         lastError = e;
       }
     }
-    throw new StateError(
+    throw StateError(
         'Failed to find an unused port between $fromPort and $toPort; '
         'Last error:\n$lastError');
   }
diff --git a/pkg/dev_compiler/test/closure/closure_annotation_test.dart b/pkg/dev_compiler/test/closure/closure_annotation_test.dart
index 7c3ae32..e3347c6 100644
--- a/pkg/dev_compiler/test/closure/closure_annotation_test.dart
+++ b/pkg/dev_compiler/test/closure/closure_annotation_test.dart
@@ -11,36 +11,35 @@
 
 void main() {
   group('ClosureAnnotation', () {
-    var anyType = new TypeRef.any();
-    var unknownType = new TypeRef.unknown();
-    var numberType = new TypeRef.number();
-    var stringType = new TypeRef.string();
-    var booleanType = new TypeRef.boolean();
-    var fooType =
-        new TypeRef.qualified([new Identifier("foo"), new Identifier("Foo")]);
-    var barType = new TypeRef.named("Bar");
-    var bazType = new TypeRef.named("Baz");
-    var bamType = new TypeRef.named("Bam");
-    var batType = new TypeRef.named("Bat");
+    var anyType = TypeRef.any();
+    var unknownType = TypeRef.unknown();
+    var numberType = TypeRef.number();
+    var stringType = TypeRef.string();
+    var booleanType = TypeRef.boolean();
+    var fooType = TypeRef.qualified([Identifier("foo"), Identifier("Foo")]);
+    var barType = TypeRef.named("Bar");
+    var bazType = TypeRef.named("Baz");
+    var bamType = TypeRef.named("Bam");
+    var batType = TypeRef.named("Bat");
 
     test('gives empty comment when no has no meaningful info', () {
-      expect(new ClosureAnnotation().toString(), "");
-      expect(new ClosureAnnotation(type: anyType).toString(), "");
-      expect(new ClosureAnnotation(type: unknownType).toString(), "");
+      expect(ClosureAnnotation().toString(), "");
+      expect(ClosureAnnotation(type: anyType).toString(), "");
+      expect(ClosureAnnotation(type: unknownType).toString(), "");
     });
 
     test('gives single line comment when it fits', () {
-      expect(new ClosureAnnotation(type: numberType).toString(),
+      expect(ClosureAnnotation(type: numberType).toString(),
           "/** @type {number} */");
-      expect(new ClosureAnnotation(paramTypes: {'foo': anyType}).toString(),
+      expect(ClosureAnnotation(paramTypes: {'foo': anyType}).toString(),
           "/** @param {*} foo */");
-      expect(new ClosureAnnotation(paramTypes: {'foo': unknownType}).toString(),
+      expect(ClosureAnnotation(paramTypes: {'foo': unknownType}).toString(),
           "/** @param {?} foo */");
     });
 
     test('gives multiple line comment when it it does not fit on one line', () {
       expect(
-          new ClosureAnnotation(
+          ClosureAnnotation(
               returnType: stringType,
               paramTypes: {'foo': numberType}).toString(),
           "/**\n"
@@ -51,7 +50,7 @@
 
     test('inserts indentation', () {
       expect(
-          new ClosureAnnotation(
+          ClosureAnnotation(
               returnType: stringType,
               paramTypes: {'foo': numberType}).toString("  "),
           "/**\n" // No indent on first line.
@@ -62,23 +61,20 @@
 
     test('compresses @type, @final, @const, @private, @protected, @typedef',
         () {
-      expect(new ClosureAnnotation(type: stringType).toString(),
+      expect(ClosureAnnotation(type: stringType).toString(),
           "/** @type {string} */");
-      expect(new ClosureAnnotation(type: stringType, isConst: true).toString(),
+      expect(ClosureAnnotation(type: stringType, isConst: true).toString(),
           "/** @const {string} */");
-      expect(new ClosureAnnotation(type: stringType, isFinal: true).toString(),
+      expect(ClosureAnnotation(type: stringType, isFinal: true).toString(),
           "/** @final {string} */");
-      expect(
-          new ClosureAnnotation(type: stringType, isPrivate: true).toString(),
+      expect(ClosureAnnotation(type: stringType, isPrivate: true).toString(),
           "/** @private {string} */");
-      expect(
-          new ClosureAnnotation(type: stringType, isTypedef: true).toString(),
+      expect(ClosureAnnotation(type: stringType, isTypedef: true).toString(),
           "/** @typedef {string} */");
-      expect(
-          new ClosureAnnotation(type: stringType, isProtected: true).toString(),
+      expect(ClosureAnnotation(type: stringType, isProtected: true).toString(),
           "/** @protected {string} */");
       expect(
-          new ClosureAnnotation(
+          ClosureAnnotation(
                   type: stringType,
                   isPrivate: true,
                   isConst: true,
@@ -91,7 +87,7 @@
 
     test('supports a full constructor annotation', () {
       expect(
-          new ClosureAnnotation(
+          ClosureAnnotation(
               returnType: booleanType,
               throwsType: bamType,
               thisType: fooType,
diff --git a/pkg/dev_compiler/test/closure/closure_type_test.dart b/pkg/dev_compiler/test/closure/closure_type_test.dart
index b21d9d2..c8b7c62 100644
--- a/pkg/dev_compiler/test/closure/closure_type_test.dart
+++ b/pkg/dev_compiler/test/closure/closure_type_test.dart
@@ -22,65 +22,61 @@
 
   group('ClosureType', () {
     test('supports simple types', () {
-      expectToString(new ClosureType.number(), "number",
+      expectToString(ClosureType.number(), "number",
           nullable: "?number", nonNullable: "number");
-      expectToString(new ClosureType.boolean(), "boolean",
+      expectToString(ClosureType.boolean(), "boolean",
           nullable: "?boolean", nonNullable: "boolean");
-      expectToString(new ClosureType.string(), "string",
+      expectToString(ClosureType.string(), "string",
           nullable: "string", nonNullable: "!string");
-      expectToString(new ClosureType.type("foo.Bar"), "foo.Bar",
+      expectToString(ClosureType.type("foo.Bar"), "foo.Bar",
           nullable: "foo.Bar", nonNullable: "!foo.Bar");
     });
 
     test('supports array types', () {
-      expectToString(new ClosureType.array(), "Array<*>",
+      expectToString(ClosureType.array(), "Array<*>",
           nullable: "Array<*>", nonNullable: "!Array<*>");
-      expectToString(
-          new ClosureType.array(new ClosureType.type("Foo")), "Array<Foo>",
+      expectToString(ClosureType.array(ClosureType.type("Foo")), "Array<Foo>",
           nullable: "Array<Foo>", nonNullable: "!Array<Foo>");
     });
 
     test('supports map types', () {
       expectToString(
-          new ClosureType.map(
-              new ClosureType.type("Foo"), new ClosureType.type("Bar")),
+          ClosureType.map(ClosureType.type("Foo"), ClosureType.type("Bar")),
           "Object<Foo, Bar>",
           nullable: "Object<Foo, Bar>",
           nonNullable: "!Object<Foo, Bar>");
-      expectToString(new ClosureType.map(), "Object<*, *>",
+      expectToString(ClosureType.map(), "Object<*, *>",
           nullable: "Object<*, *>", nonNullable: "!Object<*, *>");
     });
 
     test('supports function types', () {
-      expectToString(new ClosureType.function(), "Function",
+      expectToString(ClosureType.function(), "Function",
           nullable: "Function", nonNullable: "!Function");
-      expectToString(new ClosureType.function([new ClosureType.number()]),
-          "function(number)");
-      expectToString(new ClosureType.function(null, new ClosureType.number()),
+      expectToString(
+          ClosureType.function([ClosureType.number()]), "function(number)");
+      expectToString(ClosureType.function(null, ClosureType.number()),
           "function(...*):number");
       expectToString(
-          new ClosureType.function(
-              [new ClosureType.number(), new ClosureType.string()],
-              new ClosureType.boolean()),
+          ClosureType.function([ClosureType.number(), ClosureType.string()],
+              ClosureType.boolean()),
           "function(number, string):boolean");
     });
 
     test('supports union types', () {
-      expectToString(new ClosureType.number().or(new ClosureType.boolean()),
-          "(number|boolean)");
       expectToString(
-          new ClosureType.number().orUndefined(), "(number|undefined)");
+          ClosureType.number().or(ClosureType.boolean()), "(number|boolean)");
+      expectToString(ClosureType.number().orUndefined(), "(number|undefined)");
     });
 
     test('supports record types', () {
       expectToString(
-          new ClosureType.record(
-              {'x': new ClosureType.number(), 'y': new ClosureType.boolean()}),
+          ClosureType.record(
+              {'x': ClosureType.number(), 'y': ClosureType.boolean()}),
           "{x: number, y: boolean}");
     });
 
     test('supports optional pseudo-types', () {
-      expectToString(new ClosureType.number().toOptional(), "number=");
+      expectToString(ClosureType.number().toOptional(), "number=");
     });
   });
 }
diff --git a/pkg/dev_compiler/test/codegen/BenchmarkBase.dart b/pkg/dev_compiler/test/codegen/BenchmarkBase.dart
index c6612c7..05dde11 100644
--- a/pkg/dev_compiler/test/codegen/BenchmarkBase.dart
+++ b/pkg/dev_compiler/test/codegen/BenchmarkBase.dart
@@ -56,7 +56,7 @@
   static double measureFor(Function f, int timeMinimum) {
     int time = 0;
     int iter = 0;
-    Stopwatch watch = new Stopwatch();
+    Stopwatch watch = Stopwatch();
     watch.start();
     int elapsed = 0;
     while (elapsed < timeMinimum) {
diff --git a/pkg/dev_compiler/test/codegen/closure.dart b/pkg/dev_compiler/test/codegen/closure.dart
index 0093013..9d3294b 100644
--- a/pkg/dev_compiler/test/codegen/closure.dart
+++ b/pkg/dev_compiler/test/codegen/closure.dart
@@ -18,7 +18,7 @@
 
   Foo(this.i, this.v);
 
-  factory Foo.build() => new Foo(1, null);
+  factory Foo.build() => Foo(1, null);
 
   untyped_method(a, b) {}
 
diff --git a/pkg/dev_compiler/test/codegen/destructuring.dart b/pkg/dev_compiler/test/codegen/destructuring.dart
index 60cbe62..dd8745e 100644
--- a/pkg/dev_compiler/test/codegen/destructuring.dart
+++ b/pkg/dev_compiler/test/codegen/destructuring.dart
@@ -11,14 +11,14 @@
 f_sync(int a, b, [c = 1]) sync* {}
 f_async(int a, b, [c = 1]) async* {}
 
-g(int a, b, {c: 1}) {
+g(int a, b, {c = 1}) {
   f(a, b, c);
 }
 
-external g_ext(int a, b, {c: 1});
-g_nat(int a, b, {c: 1}) native "g_nat";
-g_sync(int a, b, {c: 1}) sync* {}
-g_async(int a, b, {c: 1}) async* {}
+external g_ext(int a, b, {c = 1});
+g_nat(int a, b, {c = 1}) native "g_nat";
+g_sync(int a, b, {c = 1}) sync* {}
+g_async(int a, b, {c = 1}) async* {}
 
 r(int a, @rest others) {
   r(a, spread(others));
@@ -37,11 +37,11 @@
   f(let, function, arguments);
 }
 
-invalid_names3({int let, function, arguments: 2}) {
+invalid_names3({int let, function, arguments = 2}) {
   f(let, function, arguments);
 }
 
 names_clashing_with_object_props(
-    {int constructor, valueOf, hasOwnProperty: 2}) {
+    {int constructor, valueOf, hasOwnProperty = 2}) {
   f(constructor, valueOf, hasOwnProperty);
 }
diff --git a/pkg/dev_compiler/test/codegen/equality_test.dart b/pkg/dev_compiler/test/codegen/equality_test.dart
index d77a155..cd1d90d7 100644
--- a/pkg/dev_compiler/test/codegen/equality_test.dart
+++ b/pkg/dev_compiler/test/codegen/equality_test.dart
@@ -26,7 +26,7 @@
 T hideNull<T>(T x) => x;
 
 /// Generate undefined at a type
-T getUndefined<T>() => (new List(1))[0];
+T getUndefined<T>() => (List(1))[0];
 
 main() {
   group('Enum equality', () {
@@ -95,8 +95,8 @@
       String s2 = hideNull("");
       int i1 = hideNull(3);
       int i2 = hideNull(0);
-      List l1 = hideNull(new List(3));
-      BluesBrother b1 = hideNull(new _Norman());
+      List l1 = hideNull(List(3));
+      BluesBrother b1 = hideNull(_Norman());
 
       expect(e1 == s1, false);
       expect(e1 == s2, false);
@@ -120,8 +120,8 @@
       String s2 = "";
       int i1 = 3;
       int i2 = 0;
-      List l1 = new List(3);
-      BluesBrother b1 = new _Norman();
+      List l1 = List(3);
+      BluesBrother b1 = _Norman();
 
       expect(e1 == s1, false);
       expect(e1 == s2, false);
@@ -146,8 +146,8 @@
       dynamic s2 = hideNull("");
       dynamic i1 = hideNull(3);
       dynamic i2 = hideNull(0);
-      dynamic l1 = hideNull(new List(3));
-      dynamic b1 = hideNull(new _Norman());
+      dynamic l1 = hideNull(List(3));
+      dynamic b1 = hideNull(_Norman());
 
       expect(e1 == s1, false);
       expect(e1 == s2, false);
@@ -186,8 +186,8 @@
       String s2 = "";
       int i1 = 3;
       int i2 = 0;
-      List l1 = new List(3);
-      BluesBrother b1 = new _Norman();
+      List l1 = List(3);
+      BluesBrother b1 = _Norman();
 
       expect(e1 == s1, false);
       expect(e1 == s2, false);
@@ -285,8 +285,8 @@
       String s2 = hideNull("");
       int i1 = hideNull(3);
       int i2 = hideNull(0);
-      List l1 = hideNull(new List(3));
-      BluesBrother b1 = hideNull(new _Norman());
+      List l1 = hideNull(List(3));
+      BluesBrother b1 = hideNull(_Norman());
 
       expect(e1 == s1, false);
       expect(e1 == s2, false);
@@ -310,8 +310,8 @@
       String s2 = "";
       int i1 = 3;
       int i2 = 0;
-      List l1 = new List(3);
-      BluesBrother b1 = new _Norman();
+      List l1 = List(3);
+      BluesBrother b1 = _Norman();
 
       expect(e1 == s1, false);
       expect(e1 == s2, false);
@@ -336,8 +336,8 @@
       dynamic s2 = hideNull("");
       dynamic i1 = hideNull(3);
       dynamic i2 = hideNull(0);
-      dynamic l1 = hideNull(new List(3));
-      dynamic b1 = hideNull(new _Norman());
+      dynamic l1 = hideNull(List(3));
+      dynamic b1 = hideNull(_Norman());
 
       expect(e1 == s1, false);
       expect(e1 == s2, false);
@@ -376,8 +376,8 @@
       String s2 = "";
       int i1 = 3;
       int i2 = 0;
-      List l1 = new List(3);
-      BluesBrother b1 = new _Norman();
+      List l1 = List(3);
+      BluesBrother b1 = _Norman();
 
       expect(e1 == s1, false);
       expect(e1 == s2, false);
@@ -475,8 +475,8 @@
       String s2 = hideNull("");
       int i1 = hideNull(3);
       int i2 = hideNull(0);
-      List l1 = hideNull(new List(3));
-      BluesBrother b1 = hideNull(new _Norman());
+      List l1 = hideNull(List(3));
+      BluesBrother b1 = hideNull(_Norman());
 
       expect(e1 == s1, false);
       expect(e1 == s2, false);
@@ -500,8 +500,8 @@
       String s2 = "";
       int i1 = 3;
       int i2 = 0;
-      List l1 = new List(3);
-      BluesBrother b1 = new _Norman();
+      List l1 = List(3);
+      BluesBrother b1 = _Norman();
 
       expect(e1 == s1, false);
       expect(e1 == s2, false);
@@ -526,8 +526,8 @@
       dynamic s2 = hideNull("");
       dynamic i1 = hideNull(3);
       dynamic i2 = hideNull(0);
-      dynamic l1 = hideNull(new List(3));
-      dynamic b1 = hideNull(new _Norman());
+      dynamic l1 = hideNull(List(3));
+      dynamic b1 = hideNull(_Norman());
 
       expect(e1 == s1, false);
       expect(e1 == s2, false);
@@ -566,8 +566,8 @@
       String s2 = "";
       int i1 = 3;
       int i2 = 0;
-      List l1 = new List(3);
-      BluesBrother b1 = new _Norman();
+      List l1 = List(3);
+      BluesBrother b1 = _Norman();
 
       expect(e1 == s1, false);
       expect(e1 == s2, false);
@@ -665,8 +665,8 @@
       String s2 = hideNull("");
       int i1 = hideNull(3);
       int i2 = hideNull(0);
-      List l1 = hideNull(new List(3));
-      BluesBrother b1 = hideNull(new _Norman());
+      List l1 = hideNull(List(3));
+      BluesBrother b1 = hideNull(_Norman());
 
       expect(e1 == s1, false);
       expect(e1 == s2, false);
@@ -690,8 +690,8 @@
       String s2 = "";
       int i1 = 3;
       int i2 = 0;
-      List l1 = new List(3);
-      BluesBrother b1 = new _Norman();
+      List l1 = List(3);
+      BluesBrother b1 = _Norman();
 
       expect(e1 == s1, false);
       expect(e1 == s2, false);
@@ -716,8 +716,8 @@
       dynamic s2 = hideNull("");
       dynamic i1 = hideNull(3);
       dynamic i2 = hideNull(0);
-      dynamic l1 = hideNull(new List(3));
-      dynamic b1 = hideNull(new _Norman());
+      dynamic l1 = hideNull(List(3));
+      dynamic b1 = hideNull(_Norman());
 
       expect(e1 == s1, false);
       expect(e1 == s2, false);
@@ -756,8 +756,8 @@
       String s2 = "";
       int i1 = 3;
       int i2 = 0;
-      List l1 = new List(3);
-      BluesBrother b1 = new _Norman();
+      List l1 = List(3);
+      BluesBrother b1 = _Norman();
 
       expect(e1 == s1, false);
       expect(e1 == s2, false);
@@ -855,8 +855,8 @@
       String s2 = hideNull("");
       int i1 = hideNull(3);
       int i2 = hideNull(0);
-      List l1 = hideNull(new List(3));
-      BluesBrother b1 = hideNull(new _Norman());
+      List l1 = hideNull(List(3));
+      BluesBrother b1 = hideNull(_Norman());
 
       expect(e1 == s1, false);
       expect(e1 == s2, false);
@@ -880,8 +880,8 @@
       String s2 = "";
       int i1 = 3;
       int i2 = 0;
-      List l1 = new List(3);
-      BluesBrother b1 = new _Norman();
+      List l1 = List(3);
+      BluesBrother b1 = _Norman();
 
       expect(e1 == s1, false);
       expect(e1 == s2, false);
@@ -906,8 +906,8 @@
       dynamic s2 = hideNull("");
       dynamic i1 = hideNull(3);
       dynamic i2 = hideNull(0);
-      dynamic l1 = hideNull(new List(3));
-      dynamic b1 = hideNull(new _Norman());
+      dynamic l1 = hideNull(List(3));
+      dynamic b1 = hideNull(_Norman());
 
       expect(e1 == s1, false);
       expect(e1 == s2, false);
@@ -946,8 +946,8 @@
       String s2 = "";
       int i1 = 3;
       int i2 = 0;
-      List l1 = new List(3);
-      BluesBrother b1 = new _Norman();
+      List l1 = List(3);
+      BluesBrother b1 = _Norman();
 
       expect(e1 == s1, false);
       expect(e1 == s2, false);
@@ -982,12 +982,12 @@
   group('Object equality', () {
     // Test equality of two objects, various types, nullable
     test('Equal object/object (nullable)', () {
-      _Jake e1 = hideNull(new _Jake());
-      _Elwood e2 = hideNull(new _Elwood());
+      _Jake e1 = hideNull(_Jake());
+      _Elwood e2 = hideNull(_Elwood());
       dynamic d1 = hideNull(e1);
-      dynamic d2 = hideNull(new _Elwood());
+      dynamic d2 = hideNull(_Elwood());
       Object o1 = hideNull(e1);
-      Object o2 = hideNull(new _Elwood());
+      Object o2 = hideNull(_Elwood());
       expect(e1 == e1, true);
       expect(e1 == d1, true);
       expect(e1 == o1, true);
@@ -1011,12 +1011,12 @@
 
     // Test equality of two objects, various types, non-nullable
     test('Equal object/object (non-null)', () {
-      _Jake e1 = new _Jake();
-      _Elwood e2 = new _Elwood();
+      _Jake e1 = _Jake();
+      _Elwood e2 = _Elwood();
       dynamic d1 = e1;
-      dynamic d2 = new _Elwood();
+      dynamic d2 = _Elwood();
       Object o1 = e1;
-      Object o2 = new _Elwood();
+      Object o2 = _Elwood();
       expect(e1 == e1, true);
       expect(e1 == d1, true);
       expect(e1 == o1, true);
@@ -1040,13 +1040,13 @@
 
     // Test equality of object and other types (static, nullable)
     test('Equal object/other (static, nullable)', () {
-      _Jake e1 = hideNull(new _Jake());
+      _Jake e1 = hideNull(_Jake());
       String s1 = hideNull("hello");
       String s2 = hideNull("");
       int i1 = hideNull(3);
       int i2 = hideNull(0);
-      List l1 = hideNull(new List(3));
-      BluesBrother b1 = hideNull(new _Norman());
+      List l1 = hideNull(List(3));
+      BluesBrother b1 = hideNull(_Norman());
 
       expect(e1 == s1, false);
       expect(e1 == s2, false);
@@ -1065,13 +1065,13 @@
 
     // Test equality of object and other types (static, non-null)
     test('Equal object/other (static, non-null)', () {
-      _Jake e1 = new _Jake();
+      _Jake e1 = _Jake();
       String s1 = "hello";
       String s2 = "";
       int i1 = 3;
       int i2 = 0;
-      List l1 = new List(3);
-      BluesBrother b1 = new _Norman();
+      List l1 = List(3);
+      BluesBrother b1 = _Norman();
 
       expect(e1 == s1, false);
       expect(e1 == s2, false);
@@ -1090,14 +1090,14 @@
 
     // Test equality of object and other types (dynamic, nullable)
     test('Equal object/other (dynamic, nullable)', () {
-      _Jake e1 = hideNull(new _Jake());
-      dynamic d1 = hideNull(new _Jake());
+      _Jake e1 = hideNull(_Jake());
+      dynamic d1 = hideNull(_Jake());
       dynamic s1 = hideNull("hello");
       dynamic s2 = hideNull("");
       dynamic i1 = hideNull(3);
       dynamic i2 = hideNull(0);
-      dynamic l1 = hideNull(new List(3));
-      dynamic b1 = hideNull(new _Norman());
+      dynamic l1 = hideNull(List(3));
+      dynamic b1 = hideNull(_Norman());
 
       expect(e1 == s1, false);
       expect(e1 == s2, false);
@@ -1130,14 +1130,14 @@
 
     // Test equality of object and other types (dynamic, non-null)
     test('Equal object/other (dynamic, non-null)', () {
-      _Jake e1 = new _Jake();
-      dynamic d1 = new _Jake();
+      _Jake e1 = _Jake();
+      dynamic d1 = _Jake();
       String s1 = "hello";
       String s2 = "";
       int i1 = 3;
       int i2 = 0;
-      List l1 = new List(3);
-      BluesBrother b1 = new _Norman();
+      List l1 = List(3);
+      BluesBrother b1 = _Norman();
 
       expect(e1 == s1, false);
       expect(e1 == s2, false);
diff --git a/pkg/dev_compiler/test/codegen/identity_test.dart b/pkg/dev_compiler/test/codegen/identity_test.dart
index 0c42bc6..3ca0dad 100644
--- a/pkg/dev_compiler/test/codegen/identity_test.dart
+++ b/pkg/dev_compiler/test/codegen/identity_test.dart
@@ -26,7 +26,7 @@
 T hideNull<T>(T x) => x;
 
 /// Generate undefined at a type
-T getUndefined<T>() => (new List(1))[0];
+T getUndefined<T>() => (List(1))[0];
 
 main() {
   group('Enum identity', () {
@@ -95,8 +95,8 @@
       String s2 = hideNull("");
       int i1 = hideNull(3);
       int i2 = hideNull(0);
-      List l1 = hideNull(new List(3));
-      BluesBrother b1 = hideNull(new _Norman());
+      List l1 = hideNull(List(3));
+      BluesBrother b1 = hideNull(_Norman());
 
       expect(identical(e1, s1), false);
       expect(identical(e1, s2), false);
@@ -120,8 +120,8 @@
       String s2 = "";
       int i1 = 3;
       int i2 = 0;
-      List l1 = new List(3);
-      BluesBrother b1 = new _Norman();
+      List l1 = List(3);
+      BluesBrother b1 = _Norman();
 
       expect(identical(e1, s1), false);
       expect(identical(e1, s2), false);
@@ -146,8 +146,8 @@
       dynamic s2 = hideNull("");
       dynamic i1 = hideNull(3);
       dynamic i2 = hideNull(0);
-      dynamic l1 = hideNull(new List(3));
-      dynamic b1 = hideNull(new _Norman());
+      dynamic l1 = hideNull(List(3));
+      dynamic b1 = hideNull(_Norman());
 
       expect(identical(e1, s1), false);
       expect(identical(e1, s2), false);
@@ -186,8 +186,8 @@
       String s2 = "";
       int i1 = 3;
       int i2 = 0;
-      List l1 = new List(3);
-      BluesBrother b1 = new _Norman();
+      List l1 = List(3);
+      BluesBrother b1 = _Norman();
 
       expect(identical(e1, s1), false);
       expect(identical(e1, s2), false);
@@ -285,8 +285,8 @@
       String s2 = hideNull("");
       int i1 = hideNull(3);
       int i2 = hideNull(0);
-      List l1 = hideNull(new List(3));
-      BluesBrother b1 = hideNull(new _Norman());
+      List l1 = hideNull(List(3));
+      BluesBrother b1 = hideNull(_Norman());
 
       expect(identical(e1, s1), false);
       expect(identical(e1, s2), false);
@@ -310,8 +310,8 @@
       String s2 = "";
       int i1 = 3;
       int i2 = 0;
-      List l1 = new List(3);
-      BluesBrother b1 = new _Norman();
+      List l1 = List(3);
+      BluesBrother b1 = _Norman();
 
       expect(identical(e1, s1), false);
       expect(identical(e1, s2), false);
@@ -336,8 +336,8 @@
       dynamic s2 = hideNull("");
       dynamic i1 = hideNull(3);
       dynamic i2 = hideNull(0);
-      dynamic l1 = hideNull(new List(3));
-      dynamic b1 = hideNull(new _Norman());
+      dynamic l1 = hideNull(List(3));
+      dynamic b1 = hideNull(_Norman());
 
       expect(identical(e1, s1), false);
       expect(identical(e1, s2), false);
@@ -376,8 +376,8 @@
       String s2 = "";
       int i1 = 3;
       int i2 = 0;
-      List l1 = new List(3);
-      BluesBrother b1 = new _Norman();
+      List l1 = List(3);
+      BluesBrother b1 = _Norman();
 
       expect(identical(e1, s1), false);
       expect(identical(e1, s2), false);
@@ -475,8 +475,8 @@
       String s2 = hideNull("");
       int i1 = hideNull(3);
       int i2 = hideNull(0);
-      List l1 = hideNull(new List(3));
-      BluesBrother b1 = hideNull(new _Norman());
+      List l1 = hideNull(List(3));
+      BluesBrother b1 = hideNull(_Norman());
 
       expect(identical(e1, s1), false);
       expect(identical(e1, s2), false);
@@ -500,8 +500,8 @@
       String s2 = "";
       int i1 = 3;
       int i2 = 0;
-      List l1 = new List(3);
-      BluesBrother b1 = new _Norman();
+      List l1 = List(3);
+      BluesBrother b1 = _Norman();
 
       expect(identical(e1, s1), false);
       expect(identical(e1, s2), false);
@@ -526,8 +526,8 @@
       dynamic s2 = hideNull("");
       dynamic i1 = hideNull(3);
       dynamic i2 = hideNull(0);
-      dynamic l1 = hideNull(new List(3));
-      dynamic b1 = hideNull(new _Norman());
+      dynamic l1 = hideNull(List(3));
+      dynamic b1 = hideNull(_Norman());
 
       expect(identical(e1, s1), false);
       expect(identical(e1, s2), false);
@@ -566,8 +566,8 @@
       String s2 = "";
       int i1 = 3;
       int i2 = 0;
-      List l1 = new List(3);
-      BluesBrother b1 = new _Norman();
+      List l1 = List(3);
+      BluesBrother b1 = _Norman();
 
       expect(identical(e1, s1), false);
       expect(identical(e1, s2), false);
@@ -665,8 +665,8 @@
       String s2 = hideNull("");
       int i1 = hideNull(3);
       int i2 = hideNull(0);
-      List l1 = hideNull(new List(3));
-      BluesBrother b1 = hideNull(new _Norman());
+      List l1 = hideNull(List(3));
+      BluesBrother b1 = hideNull(_Norman());
 
       expect(identical(e1, s1), false);
       expect(identical(e1, s2), false);
@@ -690,8 +690,8 @@
       String s2 = "";
       int i1 = 3;
       int i2 = 0;
-      List l1 = new List(3);
-      BluesBrother b1 = new _Norman();
+      List l1 = List(3);
+      BluesBrother b1 = _Norman();
 
       expect(identical(e1, s1), false);
       expect(identical(e1, s2), false);
@@ -716,8 +716,8 @@
       dynamic s2 = hideNull("");
       dynamic i1 = hideNull(3);
       dynamic i2 = hideNull(0);
-      dynamic l1 = hideNull(new List(3));
-      dynamic b1 = hideNull(new _Norman());
+      dynamic l1 = hideNull(List(3));
+      dynamic b1 = hideNull(_Norman());
 
       expect(identical(e1, s1), false);
       expect(identical(e1, s2), false);
@@ -756,8 +756,8 @@
       String s2 = "";
       int i1 = 3;
       int i2 = 0;
-      List l1 = new List(3);
-      BluesBrother b1 = new _Norman();
+      List l1 = List(3);
+      BluesBrother b1 = _Norman();
 
       expect(identical(e1, s1), false);
       expect(identical(e1, s2), false);
@@ -855,8 +855,8 @@
       String s2 = hideNull("");
       int i1 = hideNull(3);
       int i2 = hideNull(0);
-      List l1 = hideNull(new List(3));
-      BluesBrother b1 = hideNull(new _Norman());
+      List l1 = hideNull(List(3));
+      BluesBrother b1 = hideNull(_Norman());
 
       expect(identical(e1, s1), false);
       expect(identical(e1, s2), false);
@@ -880,8 +880,8 @@
       String s2 = "";
       int i1 = 3;
       int i2 = 0;
-      List l1 = new List(3);
-      BluesBrother b1 = new _Norman();
+      List l1 = List(3);
+      BluesBrother b1 = _Norman();
 
       expect(identical(e1, s1), false);
       expect(identical(e1, s2), false);
@@ -906,8 +906,8 @@
       dynamic s2 = hideNull("");
       dynamic i1 = hideNull(3);
       dynamic i2 = hideNull(0);
-      dynamic l1 = hideNull(new List(3));
-      dynamic b1 = hideNull(new _Norman());
+      dynamic l1 = hideNull(List(3));
+      dynamic b1 = hideNull(_Norman());
 
       expect(identical(e1, s1), false);
       expect(identical(e1, s2), false);
@@ -946,8 +946,8 @@
       String s2 = "";
       int i1 = 3;
       int i2 = 0;
-      List l1 = new List(3);
-      BluesBrother b1 = new _Norman();
+      List l1 = List(3);
+      BluesBrother b1 = _Norman();
 
       expect(identical(e1, s1), false);
       expect(identical(e1, s2), false);
@@ -982,12 +982,12 @@
   group('Object identity', () {
     // Test identity of two objects, various types, nullable
     test('Identical object/object (nullable)', () {
-      _Jake e1 = hideNull(new _Jake());
-      _Elwood e2 = hideNull(new _Elwood());
+      _Jake e1 = hideNull(_Jake());
+      _Elwood e2 = hideNull(_Elwood());
       dynamic d1 = hideNull(e1);
-      dynamic d2 = hideNull(new _Elwood());
+      dynamic d2 = hideNull(_Elwood());
       Object o1 = hideNull(e1);
-      Object o2 = hideNull(new _Elwood());
+      Object o2 = hideNull(_Elwood());
       expect(identical(e1, e1), true);
       expect(identical(e1, d1), true);
       expect(identical(e1, o1), true);
@@ -1011,12 +1011,12 @@
 
     // Test identity of two objects, various types, non-nullable
     test('Identical object/object (non-null)', () {
-      _Jake e1 = new _Jake();
-      _Elwood e2 = new _Elwood();
+      _Jake e1 = _Jake();
+      _Elwood e2 = _Elwood();
       dynamic d1 = e1;
-      dynamic d2 = new _Elwood();
+      dynamic d2 = _Elwood();
       Object o1 = e1;
-      Object o2 = new _Elwood();
+      Object o2 = _Elwood();
       expect(identical(e1, e1), true);
       expect(identical(e1, d1), true);
       expect(identical(e1, o1), true);
@@ -1040,13 +1040,13 @@
 
     // Test identity of object and other types (static, nullable)
     test('Identical object/other (static, nullable)', () {
-      _Jake e1 = hideNull(new _Jake());
+      _Jake e1 = hideNull(_Jake());
       String s1 = hideNull("hello");
       String s2 = hideNull("");
       int i1 = hideNull(3);
       int i2 = hideNull(0);
-      List l1 = hideNull(new List(3));
-      BluesBrother b1 = hideNull(new _Norman());
+      List l1 = hideNull(List(3));
+      BluesBrother b1 = hideNull(_Norman());
 
       expect(identical(e1, s1), false);
       expect(identical(e1, s2), false);
@@ -1065,13 +1065,13 @@
 
     // Test identity of object and other types (static, non-null)
     test('Identical object/other (static, non-null)', () {
-      _Jake e1 = new _Jake();
+      _Jake e1 = _Jake();
       String s1 = "hello";
       String s2 = "";
       int i1 = 3;
       int i2 = 0;
-      List l1 = new List(3);
-      BluesBrother b1 = new _Norman();
+      List l1 = List(3);
+      BluesBrother b1 = _Norman();
 
       expect(identical(e1, s1), false);
       expect(identical(e1, s2), false);
@@ -1090,14 +1090,14 @@
 
     // Test identity of object and other types (dynamic, nullable)
     test('Identical object/other (dynamic, nullable)', () {
-      _Jake e1 = hideNull(new _Jake());
-      dynamic d1 = hideNull(new _Jake());
+      _Jake e1 = hideNull(_Jake());
+      dynamic d1 = hideNull(_Jake());
       dynamic s1 = hideNull("hello");
       dynamic s2 = hideNull("");
       dynamic i1 = hideNull(3);
       dynamic i2 = hideNull(0);
-      dynamic l1 = hideNull(new List(3));
-      dynamic b1 = hideNull(new _Norman());
+      dynamic l1 = hideNull(List(3));
+      dynamic b1 = hideNull(_Norman());
 
       expect(identical(e1, s1), false);
       expect(identical(e1, s2), false);
@@ -1130,14 +1130,14 @@
 
     // Test identity of object and other types (dynamic, non-null)
     test('Identical object/other (dynamic, non-null)', () {
-      _Jake e1 = new _Jake();
-      dynamic d1 = new _Jake();
+      _Jake e1 = _Jake();
+      dynamic d1 = _Jake();
       String s1 = "hello";
       String s2 = "";
       int i1 = 3;
       int i2 = 0;
-      List l1 = new List(3);
-      BluesBrother b1 = new _Norman();
+      List l1 = List(3);
+      BluesBrother b1 = _Norman();
 
       expect(identical(e1, s1), false);
       expect(identical(e1, s2), false);
diff --git a/pkg/dev_compiler/test/codegen/sunflower/sunflower.dart b/pkg/dev_compiler/test/codegen/sunflower/sunflower.dart
index d74dfce..42b2417 100644
--- a/pkg/dev_compiler/test/codegen/sunflower/sunflower.dart
+++ b/pkg/dev_compiler/test/codegen/sunflower/sunflower.dart
@@ -39,7 +39,7 @@
     final r = sqrt(i) * SCALE_FACTOR;
     final x = centerX + r * cos(theta);
     final y = centerY - r * sin(theta);
-    new SunflowerSeed(x, y, SEED_RADIUS).draw(context);
+    SunflowerSeed(x, y, SEED_RADIUS).draw(context);
   }
   notes.text = "$seeds seeds";
 }
diff --git a/pkg/dev_compiler/test/codegen/unresolved_names.dart b/pkg/dev_compiler/test/codegen/unresolved_names.dart
index 171243a..2a14b21 100644
--- a/pkg/dev_compiler/test/codegen/unresolved_names.dart
+++ b/pkg/dev_compiler/test/codegen/unresolved_names.dart
@@ -3,8 +3,8 @@
 class C {}
 
 main() {
-  new Foo();
-  new C.bar();
+  Foo();
+  C.bar();
   print(baz);
   print(C.quux);
 }
diff --git a/pkg/dev_compiler/test/codegen_test.dart b/pkg/dev_compiler/test/codegen_test.dart
index d8327f4..0d5df3f 100644
--- a/pkg/dev_compiler/test/codegen_test.dart
+++ b/pkg/dev_compiler/test/codegen_test.dart
@@ -36,7 +36,7 @@
 import 'multitest.dart' show extractTestsFromMultitest, isMultiTest;
 import 'testing.dart' show repoDirectory, testDirectory;
 
-final ArgParser argParser = new ArgParser()
+final ArgParser argParser = ArgParser()
   ..addOption('dart-sdk', help: 'Dart SDK Path', defaultsTo: null);
 
 /// The `test/codegen` directory.
@@ -65,19 +65,19 @@
 main(List<String> arguments) {
   if (arguments == null) arguments = [];
   ArgResults args = argParser.parse(arguments);
-  filePattern = new RegExp(args.rest.length > 0 ? args.rest[0] : '.');
+  filePattern = RegExp(args.rest.length > 0 ? args.rest[0] : '.');
 
   var sdkDir = path.join(repoDirectory, 'gen', 'patched_sdk');
   var sdkSummaryFile =
       path.join(testDirectory, '..', 'gen', 'sdk', 'ddc_sdk.sum');
 
-  var summaryPaths = new Directory(path.join(codegenOutputDir, 'pkg'))
+  var summaryPaths = Directory(path.join(codegenOutputDir, 'pkg'))
       .listSync()
       .map((e) => e.path)
       .where((p) => p.endsWith('.sum'))
       .toList();
 
-  var sharedCompiler = new ModuleCompiler(new AnalyzerOptions.basic(
+  var sharedCompiler = ModuleCompiler(AnalyzerOptions.basic(
       dartSdkSummaryPath: sdkSummaryFile, summaryPaths: summaryPaths));
 
   var testDirs = ['language', 'corelib_2', 'lib'];
@@ -89,14 +89,14 @@
 
   // Our default compiler options. Individual tests can override these.
   var defaultOptions = ['--no-source-map', '--no-summarize'];
-  var compileArgParser = new ArgParser();
+  var compileArgParser = ArgParser();
   defineAnalysisArguments(compileArgParser, ddc: true);
   AnalyzerOptions.addArguments(compileArgParser);
   CompilerOptions.addArguments(compileArgParser);
   addModuleFormatOptions(compileArgParser);
 
   var testFileOptionsMatcher =
-      new RegExp(r'// (compile options: |SharedOptions=)(.*)', multiLine: true);
+      RegExp(r'// (compile options: |SharedOptions=)(.*)', multiLine: true);
 
   // Ignore dart2js options that we don't support in DDC.
   var ignoreOptions = [
@@ -122,7 +122,7 @@
     var name = path.withoutExtension(relativePath);
     test('dartdevc $name', () {
       // Check if we need to use special compile options.
-      var contents = new File(testFile).readAsStringSync();
+      var contents = File(testFile).readAsStringSync();
       var match = testFileOptionsMatcher.firstMatch(contents);
 
       var args = defaultOptions.toList();
@@ -132,22 +132,22 @@
       }
 
       ArgResults argResults = compileArgParser.parse(args);
-      var analyzerOptions = new AnalyzerOptions.fromArguments(argResults,
+      var analyzerOptions = AnalyzerOptions.fromArguments(argResults,
           dartSdkSummaryPath: sdkSummaryFile, summaryPaths: summaryPaths);
 
-      var options = new CompilerOptions.fromArguments(argResults);
+      var options = CompilerOptions.fromArguments(argResults);
 
       var moduleFormat = parseModuleFormatOption(argResults).first;
 
       // Collect any other files we've imported.
-      var files = new Set<String>();
+      var files = Set<String>();
       _collectTransitiveImports(contents, files, from: testFile);
-      var unit = new BuildUnit(
+      var unit = BuildUnit(
           name, path.dirname(testFile), files.toList(), _moduleForLibrary);
 
       var compiler = sharedCompiler;
       if (analyzerOptions.declaredVariables.isNotEmpty) {
-        compiler = new ModuleCompiler(analyzerOptions);
+        compiler = ModuleCompiler(analyzerOptions);
       }
       JSModuleFile module = null;
       var exception, stackTrace;
@@ -220,14 +220,14 @@
 
   String errors = result.errors.join('\n');
   if (errors.isNotEmpty && !errors.endsWith('\n')) errors += '\n';
-  new File(outPath + '.txt').writeAsStringSync(errors);
+  File(outPath + '.txt').writeAsStringSync(errors);
 
   if (result.isValid) {
     result.writeCodeSync(format, outPath + '.js');
   }
 
   if (result.summaryBytes != null) {
-    new File(outPath + '.sum').writeAsBytesSync(result.summaryBytes);
+    File(outPath + '.sum').writeAsBytesSync(result.summaryBytes);
   }
 
   // Write the expectation file if needed.
@@ -236,7 +236,7 @@
   if (expectPath != null) {
     _ensureDirectory(path.dirname(expectPath));
 
-    var expectFile = new File(expectPath + '.js');
+    var expectFile = File(expectPath + '.js');
     if (result.isValid) {
       result.writeCodeSync(format, expectFile.path);
     } else {
@@ -251,8 +251,8 @@
   var files = ['sunflower', 'circle', 'painter']
       .map((f) => path.join(baseDir, '$f.dart'))
       .toList();
-  var input = new BuildUnit('sunflower', baseDir, files, _moduleForLibrary);
-  var options = new CompilerOptions(summarizeApi: false);
+  var input = BuildUnit('sunflower', baseDir, files, _moduleForLibrary);
+  var options = CompilerOptions(summarizeApi: false);
 
   var built = compiler.compile(input, options);
   _writeModule(path.join(outputDir, 'sunflower', 'sunflower'),
@@ -264,7 +264,7 @@
   if (scheme == 'package') {
     return source.uri.pathSegments.first;
   }
-  throw new Exception('Module not found for library "${source.fullName}"');
+  throw Exception('Module not found for library "${source.fullName}"');
 }
 
 void _writeRuntimeStatus(Map<String, Set<Expectation>> testFiles) {
@@ -294,7 +294,7 @@
 
     runtimeStatus[name] = status.map((s) => '$s').join(',');
   });
-  new File(path.join(codegenOutputDir, 'test_status.js')).writeAsStringSync('''
+  File(path.join(codegenOutputDir, 'test_status.js')).writeAsStringSync('''
 define([], function() {
   'use strict';
   return ${new JsonEncoder.withIndent(' ').convert(runtimeStatus)};
@@ -316,17 +316,17 @@
           'tests', dirParts[0] + suffix, path.joinAll(dirParts.skip(1)));
       var inputPath = path.join(testDirectory, '..', '..', '..', sdkTestDir);
 
-      if (!new Directory(inputPath).existsSync()) continue;
+      if (!Directory(inputPath).existsSync()) continue;
 
       var browsers = Platform.environment['DDC_BROWSERS'];
       var runtime = browsers == 'Firefox' ? 'firefox' : 'chrome';
-      var config = new OptionsParser()
+      var config = OptionsParser()
           .parse('-m release -c dartdevc --use-sdk --strong'.split(' ')
             ..addAll(['-r', runtime, '--suite_dir', sdkTestDir]))
           .single;
 
-      var testSuite = new StandardTestSuite.forDirectory(
-          config, new test_dart.Path(sdkTestDir));
+      var testSuite =
+          StandardTestSuite.forDirectory(config, test_dart.Path(sdkTestDir));
       var expectations = testSuite.readExpectations();
 
       for (var file in _listFiles(inputPath, recursive: true)) {
@@ -347,10 +347,10 @@
               // integration.
               contents += '\nfinal _usesUnittestPackage = true;\n';
             }
-            new File(outputPath).writeAsStringSync(contents);
+            File(outputPath).writeAsStringSync(contents);
           }
 
-          var contents = new File(file).readAsStringSync();
+          var contents = File(file).readAsStringSync();
           if (isMultiTest(contents)) {
             // It's a multitest, so expand it and add all of the variants.
             var tests = <String, String>{};
@@ -378,7 +378,7 @@
           _writeTest(outputPath, contents);
         } else {
           // Copy the non-test file over, in case it is used as an import.
-          new File(file).copySync(outputPath);
+          File(file).copySync(outputPath);
         }
       }
     }
@@ -389,9 +389,9 @@
     var relativePath = path.relative(file, from: codegenDir);
     var outputPath = path.join(codegenTestDir, relativePath);
 
-    new File(file).copySync(outputPath);
+    File(file).copySync(outputPath);
     if (file.endsWith(".dart")) {
-      testFiles[outputPath] = new Set()..add(Expectation.pass);
+      testFiles[outputPath] = Set()..add(Expectation.pass);
     }
   }
 
@@ -400,12 +400,12 @@
 
 /// Recursively creates [dir] if it doesn't exist.
 void _ensureDirectory(String dir) {
-  new Directory(dir).createSync(recursive: true);
+  Directory(dir).createSync(recursive: true);
 }
 
 /// Lists all of the files within [dir] that match [filePattern].
-Iterable<String> _listFiles(String dir, {bool recursive: false}) {
-  return new Directory(dir)
+Iterable<String> _listFiles(String dir, {bool recursive = false}) {
+  return Directory(dir)
       .listSync(recursive: recursive, followLinks: false)
       .where((e) => e is File && filePattern.hasMatch(e.path))
       .map((f) => f.path);
@@ -433,7 +433,7 @@
         continue;
       }
 
-      var f = new File(path.join(path.dirname(from), uri));
+      var f = File(path.join(path.dirname(from), uri));
       if (f.existsSync()) {
         _collectTransitiveImports(f.readAsStringSync(), libraries,
             packageRoot: packageRoot, from: f.path);
diff --git a/pkg/dev_compiler/test/js/builder_test.dart b/pkg/dev_compiler/test/js/builder_test.dart
index 6604d4a..d294048 100644
--- a/pkg/dev_compiler/test/js/builder_test.dart
+++ b/pkg/dev_compiler/test/js/builder_test.dart
@@ -1,10 +1,10 @@
 import 'package:dev_compiler/src/js_ast/js_ast.dart';
 import 'package:test/test.dart';
 
-final _prenumberedPlaceholders = new RegExp(r'#\d+');
+final _prenumberedPlaceholders = RegExp(r'#\d+');
 
 MiniJsParser _parser(String src) =>
-    new MiniJsParser(src.replaceAll(_prenumberedPlaceholders, '#'));
+    MiniJsParser(src.replaceAll(_prenumberedPlaceholders, '#'));
 
 _check(Node node, String expected) =>
     expect(node.toString(), 'js_ast `$expected`');
diff --git a/pkg/dev_compiler/test/multitest.dart b/pkg/dev_compiler/test/multitest.dart
index 18a4391..f498744 100644
--- a/pkg/dev_compiler/test/multitest.dart
+++ b/pkg/dev_compiler/test/multitest.dart
@@ -6,7 +6,7 @@
 // dart-lang/sdk/tools/testing/dart/multitest.dart
 library dev_compiler.test.tools.multitest;
 
-final validMultitestOutcomes = new Set<String>.from([
+final validMultitestOutcomes = Set<String>.from([
   'ok',
   'compile-time error',
   'runtime error',
@@ -22,9 +22,9 @@
 
 // Require at least one non-space character before '//#'
 // Handle both //# and the legacy /// multitest regexp patterns.
-final _multiTestRegExp = new RegExp(r"\S *//[#/] \w+:(.*)");
+final _multiTestRegExp = RegExp(r"\S *//[#/] \w+:(.*)");
 
-final _multiTestRegExpSeperator = new RegExp(r"//[#/]");
+final _multiTestRegExpSeperator = RegExp(r"//[#/]");
 
 bool isMultiTest(String contents) => _multiTestRegExp.hasMatch(contents);
 
@@ -91,25 +91,25 @@
 
   // Create the set of multitests, which will have a new test added each
   // time we see a multitest line with a new key.
-  var testsAsLines = new Map<String, List<String>>();
-  var outcomes = new Map<String, Set<String>>();
+  var testsAsLines = Map<String, List<String>>();
+  var outcomes = Map<String, Set<String>>();
 
   // Add the default case with key "none".
-  testsAsLines['none'] = new List<String>();
-  outcomes['none'] = new Set<String>();
+  testsAsLines['none'] = List<String>();
+  outcomes['none'] = Set<String>();
 
   int lineCount = 0;
   for (String line in lines) {
     lineCount++;
-    var annotation = new _Annotation.from(line);
+    var annotation = _Annotation.from(line);
     if (annotation != null) {
       testsAsLines.putIfAbsent(
-          annotation.key, () => new List<String>.from(testsAsLines["none"]));
+          annotation.key, () => List<String>.from(testsAsLines["none"]));
       // Add line to test with annotation.key as key, empty line to the rest.
       for (var key in testsAsLines.keys) {
         testsAsLines[key].add(annotation.key == key ? line : "");
       }
-      outcomes.putIfAbsent(annotation.key, () => new Set<String>());
+      outcomes.putIfAbsent(annotation.key, () => Set<String>());
       if (annotation.rest != 'continued') {
         for (String nextOutcome in annotation.outcomesList) {
           if (validMultitestOutcomes.contains(nextOutcome)) {
@@ -178,7 +178,7 @@
       return null;
     }
 
-    var annotation = new _Annotation();
+    var annotation = _Annotation();
     annotation.key = parts[0];
     annotation.rest = parts[1];
     annotation.outcomesList =
diff --git a/pkg/dev_compiler/test/nullable_inference_test.dart b/pkg/dev_compiler/test/nullable_inference_test.dart
index dadc9018..4a986e2 100644
--- a/pkg/dev_compiler/test/nullable_inference_test.dart
+++ b/pkg/dev_compiler/test/nullable_inference_test.dart
@@ -469,7 +469,7 @@
 /// inference.
 Future expectNotNull(String code, String expectedNotNull) async {
   var component = await kernelCompile(code);
-  var collector = new NotNullCollector();
+  var collector = NotNullCollector();
   component.accept(collector);
   var actualNotNull =
       collector.notNullExpressions.map((e) => e.toString()).join(', ');
@@ -478,7 +478,7 @@
 
 /// Given the Dart [code], expects all the expressions inferred to be not-null.
 Future expectAllNotNull(String code) async {
-  (await kernelCompile(code)).accept(new ExpectAllNotNull());
+  (await kernelCompile(code)).accept(ExpectAllNotNull());
 }
 
 bool useAnnotations = false;
@@ -489,9 +489,8 @@
 
   @override
   visitComponent(Component node) {
-    inference ??= new NullableInference(new JSTypeRep(
-      new TypeSchemaEnvironment(
-          new CoreTypes(node), new ClassHierarchy(node), true),
+    inference ??= NullableInference(JSTypeRep(
+      TypeSchemaEnvironment(CoreTypes(node), ClassHierarchy(node), true),
     ));
 
     if (useAnnotations) {
@@ -543,7 +542,7 @@
 }
 
 fe.InitializedCompilerState _compilerState;
-final _fileSystem = new MemoryFileSystem(new Uri.file('/memory/'));
+final _fileSystem = MemoryFileSystem(Uri.file('/memory/'));
 
 Future<Component> kernelCompile(String code) async {
   var succeeded = true;
@@ -553,17 +552,17 @@
     }
   }
 
-  var sdkUri = new Uri.file('/memory/dart_sdk.dill');
+  var sdkUri = Uri.file('/memory/dart_sdk.dill');
   var sdkFile = _fileSystem.entityForUri(sdkUri);
   if (!await sdkFile.exists()) {
-    sdkFile.writeAsBytesSync(new File(defaultSdkSummaryPath).readAsBytesSync());
+    sdkFile.writeAsBytesSync(File(defaultSdkSummaryPath).readAsBytesSync());
   }
-  var packagesUri = new Uri.file('/memory/.packages');
+  var packagesUri = Uri.file('/memory/.packages');
   var packagesFile = _fileSystem.entityForUri(packagesUri);
   if (!await packagesFile.exists()) {
     packagesFile.writeAsStringSync('meta:/memory/meta/lib');
     _fileSystem
-        .entityForUri(new Uri.file('/memory/meta/lib/meta.dart'))
+        .entityForUri(Uri.file('/memory/meta/lib/meta.dart'))
         .writeAsStringSync('''
 class _NotNull { const _NotNull(); }
 const notNull = const _NotNull();
@@ -572,10 +571,10 @@
     ''');
   }
 
-  var mainUri = new Uri.file('/memory/test.dart');
+  var mainUri = Uri.file('/memory/test.dart');
   _fileSystem.entityForUri(mainUri).writeAsStringSync(code);
   _compilerState = await fe.initializeCompiler(
-      _compilerState, sdkUri, packagesUri, [], new DevCompilerTarget(),
+      _compilerState, sdkUri, packagesUri, [], DevCompilerTarget(),
       fileSystem: _fileSystem);
   fe.DdcResult result =
       await fe.compile(_compilerState, [mainUri], errorHandler);
diff --git a/pkg/dev_compiler/test/options/options_test.dart b/pkg/dev_compiler/test/options/options_test.dart
index 73da211..c553d95 100644
--- a/pkg/dev_compiler/test/options/options_test.dart
+++ b/pkg/dev_compiler/test/options/options_test.dart
@@ -24,20 +24,20 @@
 
 main() {
   test('basic', () {
-    var options = new AnalyzerOptions.basic();
-    var compiler = new ModuleCompiler(options, analysisRoot: optionsDir);
+    var options = AnalyzerOptions.basic();
+    var compiler = ModuleCompiler(options, analysisRoot: optionsDir);
     var processors = compiler.context.analysisOptions.errorProcessors;
     expect(processors, hasLength(1));
     expect(processors[0].code, CompileTimeErrorCode.UNDEFINED_CLASS.name);
   });
 
   test('basic sdk summary', () {
-    expect(new File(sdkSummaryFile).existsSync(), isTrue);
-    var options = new AnalyzerOptions.basic(dartSdkSummaryPath: sdkSummaryFile);
-    var compiler = new ModuleCompiler(options, analysisRoot: optionsDir);
+    expect(File(sdkSummaryFile).existsSync(), isTrue);
+    var options = AnalyzerOptions.basic(dartSdkSummaryPath: sdkSummaryFile);
+    var compiler = ModuleCompiler(options, analysisRoot: optionsDir);
     var context = compiler.context;
     var sdk = context.sourceFactory.dartSdk;
-    expect(sdk, new isInstanceOf<SummaryBasedDartSdk>());
+    expect(sdk, isInstanceOf<SummaryBasedDartSdk>());
     var processors = context.analysisOptions.errorProcessors;
     expect(processors, hasLength(1));
     expect(processors[0].code, CompileTimeErrorCode.UNDEFINED_CLASS.name);
@@ -48,8 +48,8 @@
     //TODO(danrubel) remove sdkSummaryArgs once all SDKs have summary file
     args.addAll(sdkSummaryArgs);
     var argResults = ddcArgParser().parse(args);
-    var options = new AnalyzerOptions.fromArguments(argResults);
-    var compiler = new ModuleCompiler(options, analysisRoot: optionsDir);
+    var options = AnalyzerOptions.fromArguments(argResults);
+    var compiler = ModuleCompiler(options, analysisRoot: optionsDir);
     var processors = compiler.context.analysisOptions.errorProcessors;
     expect(processors, hasLength(1));
     expect(processors[0].code, CompileTimeErrorCode.UNDEFINED_CLASS.name);
@@ -57,13 +57,13 @@
 
   test('fromArgs options file 2', () {
     var optionsFile2 = path.join(optionsDir, 'analysis_options_2.yaml');
-    expect(new File(optionsFile2).existsSync(), isTrue);
+    expect(File(optionsFile2).existsSync(), isTrue);
     var args = <String>['--$analysisOptionsFileOption', optionsFile2];
     //TODO(danrubel) remove sdkSummaryArgs once all SDKs have summary file
     args.addAll(sdkSummaryArgs);
     var argResults = ddcArgParser().parse(args);
-    var options = new AnalyzerOptions.fromArguments(argResults);
-    var compiler = new ModuleCompiler(options, analysisRoot: optionsDir);
+    var options = AnalyzerOptions.fromArguments(argResults);
+    var compiler = ModuleCompiler(options, analysisRoot: optionsDir);
     var processors = compiler.context.analysisOptions.errorProcessors;
     expect(processors, hasLength(1));
     expect(processors[0].code, CompileTimeErrorCode.DUPLICATE_DEFINITION.name);
@@ -78,7 +78,7 @@
     ];
 
     var argResults = ddcArgParser().parse(args);
-    var options = new AnalyzerOptions.fromArguments(argResults);
+    var options = AnalyzerOptions.fromArguments(argResults);
     expect(options.summaryPaths,
         orderedEquals(['normal', 'custom/path', 'another', 'custom/path2']));
     expect(options.customSummaryModules['custom/path'], equals('module'));
diff --git a/pkg/dev_compiler/test/sourcemap/common.dart b/pkg/dev_compiler/test/sourcemap/common.dart
index 3170c17..c934036 100644
--- a/pkg/dev_compiler/test/sourcemap/common.dart
+++ b/pkg/dev_compiler/test/sourcemap/common.dart
@@ -38,7 +38,7 @@
   String get name => "setup";
 
   Future<Result<Data>> run(TestDescription input, ChainContext context) async {
-    Data data = new Data()..uri = input.uri;
+    Data data = Data()..uri = input.uri;
     if (context is ChainContextWithCleanupHelper) {
       context.cleanupHelper[input] = data;
     }
@@ -89,7 +89,7 @@
   var outerDir = sdkRoot.path;
   for (var outDir in const ["out/ReleaseX64", "xcodebuild/ReleaseX64"]) {
     var tryPath = path.join(outerDir, outDir, relative);
-    File file = new File(tryPath);
+    File file = File(tryPath);
     if (file.existsSync()) return file;
   }
   throw "Couldn't find $relative. Try building more targets.";
diff --git a/pkg/dev_compiler/test/sourcemap/ddc_common.dart b/pkg/dev_compiler/test/sourcemap/ddc_common.dart
index 4efd79a..afb62f9 100644
--- a/pkg/dev_compiler/test/sourcemap/ddc_common.dart
+++ b/pkg/dev_compiler/test/sourcemap/ddc_common.dart
@@ -32,15 +32,15 @@
   String get name => "compile";
 
   Future<Result<Data>> run(Data data, ChainContext context) async {
-    var dartScriptAbsolute = new File.fromUri(data.uri).absolute;
+    var dartScriptAbsolute = File.fromUri(data.uri).absolute;
     var inputFile = dartScriptAbsolute.path;
 
     data.outDir = await Directory.systemTemp.createTemp("ddc_step_test");
-    data.code = new AnnotatedCode.fromText(
-        new File(inputFile).readAsStringSync(), commentStart, commentEnd);
+    data.code = AnnotatedCode.fromText(
+        File(inputFile).readAsStringSync(), commentStart, commentEnd);
     var outDirUri = data.outDir.uri;
     var testFile = outDirUri.resolve("test.dart");
-    new File.fromUri(testFile).writeAsStringSync(data.code.sourceCode);
+    File.fromUri(testFile).writeAsStringSync(data.code.sourceCode);
     var outputFilename = "js.js";
     var outputFile = outDirUri.resolve(outputFilename);
     var outWrapperPath = outDirUri.resolve("wrapper.js");
@@ -62,7 +62,7 @@
 
   Future<Result<Data>> run(Data data, ChainContext context) async {
     data.outDir = await Directory.systemTemp.createTemp("stacktrace-test");
-    String code = await new File.fromUri(data.uri).readAsString();
+    String code = await File.fromUri(data.uri).readAsString();
     Test test = processTestCode(code, knownMarkers);
     await testStackTrace(test, marker, _compile,
         jsPreambles: _getPreambles,
@@ -74,15 +74,15 @@
   }
 
   Future<bool> _compile(String input, String output) async {
-    var outWrapperPath = _getWrapperPathFromDirectoryFile(new Uri.file(input));
-    await runner.run(new Uri.file(input), new Uri.file(output), outWrapperPath);
+    var outWrapperPath = _getWrapperPathFromDirectoryFile(Uri.file(input));
+    await runner.run(Uri.file(input), Uri.file(output), outWrapperPath);
     return true;
   }
 
   List<String> _getPreambles(String input, String output) {
     return [
       '--module',
-      _getWrapperPathFromDirectoryFile(new Uri.file(input)).toFilePath(),
+      _getWrapperPathFromDirectoryFile(Uri.file(input)).toFilePath(),
       '--'
     ];
   }
@@ -108,7 +108,7 @@
 Directory _cachedDdcDir;
 Directory getDdcDir() {
   Directory search() {
-    Directory dir = new File.fromUri(Platform.script).parent;
+    Directory dir = File.fromUri(Platform.script).parent;
     Uri dirUrl = dir.uri;
     if (dirUrl.pathSegments.contains("dev_compiler")) {
       for (int i = dirUrl.pathSegments.length - 2; i >= 0; --i) {
@@ -151,10 +151,9 @@
   String jsRootDart =
       "/root_dart/${new File(path.relative(sdkJsFile.path, from: sdkPath.path))
       .uri}";
-  new File.fromUri(outputFile.resolve("$outputFilename.html.js"))
-      .writeAsStringSync(
-          jsContent.replaceFirst("from 'dart_sdk'", "from '$jsRootDart'"));
-  new File.fromUri(outputFile.resolve("$outputFilename.html.html"))
+  File.fromUri(outputFile.resolve("$outputFilename.html.js")).writeAsStringSync(
+      jsContent.replaceFirst("from 'dart_sdk'", "from '$jsRootDart'"));
+  File.fromUri(outputFile.resolve("$outputFilename.html.html"))
       .writeAsStringSync(getWrapperHtmlContent(
           jsRootDart, "/root_build/$outputFilename.html.js"));
 
@@ -192,6 +191,6 @@
 Uri selfUri = currentMirrorSystem()
     .findLibrary(#dev_compiler.test.sourcemap.ddc_common)
     .uri;
-String d8Preambles = new File.fromUri(
+String d8Preambles = File.fromUri(
         selfUri.resolve('../../tool/input_sdk/private/preambles/d8.js'))
     .readAsStringSync();
diff --git a/pkg/dev_compiler/test/sourcemap/sourcemaps_ddc_suite.dart b/pkg/dev_compiler/test/sourcemap/sourcemaps_ddc_suite.dart
index 29e48cf..729cca6 100644
--- a/pkg/dev_compiler/test/sourcemap/sourcemaps_ddc_suite.dart
+++ b/pkg/dev_compiler/test/sourcemap/sourcemaps_ddc_suite.dart
@@ -12,7 +12,7 @@
 
 Future<ChainContext> createContext(
     Chain suite, Map<String, String> environment) async {
-  return new SourceMapContext(environment);
+  return SourceMapContext(environment);
 }
 
 class SourceMapContext extends ChainContextWithCleanupHelper {
@@ -23,9 +23,9 @@
 
   List<Step> get steps => _steps ??= <Step>[
         const Setup(),
-        new Compile(new DevCompilerRunner(environment.containsKey("debug"))),
+        Compile(DevCompilerRunner(environment.containsKey("debug"))),
         const StepWithD8(),
-        new CheckSteps(environment.containsKey("debug")),
+        CheckSteps(environment.containsKey("debug")),
       ];
 
   bool debugging() => environment.containsKey("debug");
@@ -66,8 +66,8 @@
           "${args.reduce((value, element) => '$value "$element"')}";
     }
 
-    var jsContent = new File.fromUri(outputFile).readAsStringSync();
-    new File.fromUri(outputFile).writeAsStringSync(jsContent.replaceFirst(
+    var jsContent = File.fromUri(outputFile).readAsStringSync();
+    File.fromUri(outputFile).writeAsStringSync(jsContent.replaceFirst(
         "from 'dart_sdk'", "from '${uriPathForwardSlashed(jsSdkPath)}'"));
 
     if (debugging) {
@@ -78,7 +78,7 @@
     var inputFileName = inputFile.pathSegments.last;
     var inputFileNameNoExt =
         inputFileName.substring(0, inputFileName.lastIndexOf("."));
-    new File.fromUri(outWrapperFile).writeAsStringSync(
+    File.fromUri(outWrapperFile).writeAsStringSync(
         getWrapperContent(jsSdkPath, inputFileNameNoExt, outputFilename));
   }
 }
diff --git a/pkg/dev_compiler/test/sourcemap/sourcemaps_ddk_suite.dart b/pkg/dev_compiler/test/sourcemap/sourcemaps_ddk_suite.dart
index 0870331..bb23866 100644
--- a/pkg/dev_compiler/test/sourcemap/sourcemaps_ddk_suite.dart
+++ b/pkg/dev_compiler/test/sourcemap/sourcemaps_ddk_suite.dart
@@ -15,7 +15,7 @@
 
 Future<ChainContext> createContext(
     Chain suite, Map<String, String> environment) async {
-  return new SourceMapContext(environment);
+  return SourceMapContext(environment);
 }
 
 class SourceMapContext extends ChainContextWithCleanupHelper
@@ -30,9 +30,9 @@
   List<Step> get steps {
     return _steps ??= <Step>[
       const Setup(),
-      new Compile(new DevCompilerRunner(this, debugging())),
+      Compile(DevCompilerRunner(this, debugging())),
       const StepWithD8(),
-      new CheckSteps(debugging()),
+      CheckSteps(debugging()),
     ];
   }
 
@@ -82,8 +82,8 @@
           "${args.reduce((value, element) => '$value "$element"')}";
     }
 
-    var jsContent = new File.fromUri(outputFile).readAsStringSync();
-    new File.fromUri(outputFile).writeAsStringSync(jsContent.replaceFirst(
+    var jsContent = File.fromUri(outputFile).readAsStringSync();
+    File.fromUri(outputFile).writeAsStringSync(jsContent.replaceFirst(
         "from 'dart_sdk'", "from '${uriPathForwardSlashed(jsSdkPath)}'"));
 
     if (debugging) {
@@ -94,7 +94,7 @@
     var inputFileName = inputFile.pathSegments.last;
     var inputFileNameNoExt =
         inputFileName.substring(0, inputFileName.lastIndexOf("."));
-    new File.fromUri(outWrapperFile).writeAsStringSync(
+    File.fromUri(outWrapperFile).writeAsStringSync(
         getWrapperContent(jsSdkPath, inputFileNameNoExt, outputFilename));
   }
 }
diff --git a/pkg/dev_compiler/test/sourcemap/stacktrace_ddc_suite.dart b/pkg/dev_compiler/test/sourcemap/stacktrace_ddc_suite.dart
index d612c00..c4b1fae 100644
--- a/pkg/dev_compiler/test/sourcemap/stacktrace_ddc_suite.dart
+++ b/pkg/dev_compiler/test/sourcemap/stacktrace_ddc_suite.dart
@@ -6,7 +6,7 @@
 
 Future<ChainContext> createContext(
     Chain suite, Map<String, String> environment) async {
-  return new StackTraceContext();
+  return StackTraceContext();
 }
 
 class StackTraceContext extends ChainContextWithCleanupHelper {
@@ -14,7 +14,7 @@
     const Setup(),
     const SetCwdToSdkRoot(),
     const TestStackTrace(
-        const ddc.DevCompilerRunner(false), "ddc.", const ["ddc.", "ddk."]),
+        ddc.DevCompilerRunner(false), "ddc.", ["ddc.", "ddk."]),
   ];
 }
 
diff --git a/pkg/dev_compiler/test/sourcemap/stacktrace_ddk_suite.dart b/pkg/dev_compiler/test/sourcemap/stacktrace_ddk_suite.dart
index b300829..65fb257 100644
--- a/pkg/dev_compiler/test/sourcemap/stacktrace_ddk_suite.dart
+++ b/pkg/dev_compiler/test/sourcemap/stacktrace_ddk_suite.dart
@@ -7,7 +7,7 @@
 
 Future<ChainContext> createContext(
     Chain suite, Map<String, String> environment) async {
-  return new StackTraceContext();
+  return StackTraceContext();
 }
 
 class StackTraceContext extends ChainContextWithCleanupHelper
@@ -20,8 +20,8 @@
     return _steps ??= <Step>[
       const Setup(),
       const SetCwdToSdkRoot(),
-      new TestStackTrace(new ddk.DevCompilerRunner(this, false), "ddk.",
-          const ["ddk.", "ddc."]),
+      TestStackTrace(
+          ddk.DevCompilerRunner(this, false), "ddk.", const ["ddk.", "ddc."]),
     ];
   }
 }
diff --git a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/null_instance_field.dart b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/null_instance_field.dart
index a92e371..a624b2e 100644
--- a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/null_instance_field.dart
+++ b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/null_instance_field.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 main() {
-  /*1:main*/ test(new Class());
+  /*1:main*/ test(Class());
 }
 
 test(c) {
diff --git a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/null_interceptor_field.dart b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/null_interceptor_field.dart
index 298a7b5..21fc03c 100644
--- a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/null_interceptor_field.dart
+++ b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/null_interceptor_field.dart
@@ -9,7 +9,7 @@
 main() {
   confuse('').trim(); // includes some code above the interceptors
   confuse([]).length;
-  confuse(new MyType()).length;
+  confuse(MyType()).length;
   confuse(null). /*1:main*/ length; // called through the interceptor
 }
 
diff --git a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_constructor.dart b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_constructor.dart
index 9ef071d..fde3136 100644
--- a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_constructor.dart
+++ b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_constructor.dart
@@ -4,7 +4,7 @@
 
 main() {
   // ignore: UNUSED_LOCAL_VARIABLE
-  var c = /*ddc.1:main*/ new /*ddk.1:main*/ Class();
+  var /*ddc.1:main*/ c = /*ddk.1:main*/ Class();
 }
 
 class Class {
diff --git a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_constructor_from_async.dart b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_constructor_from_async.dart
index c3cf435..907777c 100644
--- a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_constructor_from_async.dart
+++ b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_constructor_from_async.dart
@@ -9,7 +9,7 @@
 
 test /*ddk.2:test*/ () /*ddc.2:test*/ async {
   // ignore: UNUSED_LOCAL_VARIABLE
-  var c = new /*3:test*/ Class();
+  var c = /*3:test*/ Class();
 }
 
 class Class {
diff --git a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_instance_method.dart b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_instance_method.dart
index 8b08113..4261c48 100644
--- a/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_instance_method.dart
+++ b/pkg/dev_compiler/test/sourcemap/stacktrace_testfiles/throw_in_instance_method.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 main() {
-  var c = new Class();
+  var c = Class();
   c. /*1:main*/ test();
 }
 
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/call_on_field_in_class.dart b/pkg/dev_compiler/test/sourcemap/testfiles/call_on_field_in_class.dart
index 785c76b..69b242d 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/call_on_field_in_class.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/call_on_field_in_class.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 main() {
-  /* bl */ var foo = new /*sl:1*/ Foo();
+  /* bl */ var foo = /*sl:1*/ Foo();
   foo.foo = foo. /*sl:2*/ fooMethod;
   foo /*sl:3*/ .fooMethod();
   // Stepping into this doesn't really work because what it does is something
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/hello_class_call.dart b/pkg/dev_compiler/test/sourcemap/testfiles/hello_class_call.dart
index 430f29c..31e4aa7 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/hello_class_call.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/hello_class_call.dart
@@ -4,7 +4,7 @@
 
 main() {
   /*bl*/
-  Foo foo = new Foo();
+  Foo foo = Foo();
   foo.foo();
   /*nbb:0:1*/
 }
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_on_super_test.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_on_super_test.dart
index ff8c7cd..b84e3fa 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_on_super_test.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_on_super_test.dart
@@ -21,7 +21,7 @@
 }
 
 main() {
-  Class3 c = new Class3();
+  Class3 c = Class3();
   c[42];
   c.code();
 }
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_on_this_test.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_on_this_test.dart
index 4dc4f138..d529139 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_on_this_test.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_on_this_test.dart
@@ -14,7 +14,7 @@
 }
 
 main() {
-  Class2 c = new Class2();
+  Class2 c = Class2();
   c[42];
   c.code();
 }
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_test.dart b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_test.dart
index 5bf49df..c3d7835 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_test.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/next_through_operator_bracket_test.dart
@@ -14,7 +14,7 @@
 }
 
 main() {
-  /*bl*/ /*sl:1*/ Class2 c = new Class2();
+  /*bl*/ /*sl:1*/ Class2 c = Class2();
   c /*sl:2*/ [42];
   c /*sl:3*/ .code();
 }
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/no_mapping_on_class_constructor_line.dart b/pkg/dev_compiler/test/sourcemap/testfiles/no_mapping_on_class_constructor_line.dart
index c06c0a5..f6b3b13 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/no_mapping_on_class_constructor_line.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/no_mapping_on_class_constructor_line.dart
@@ -4,7 +4,7 @@
 
 main() {
   // ignore: unused_local_variable
-  Foo foo = new Foo();
+  Foo foo = Foo();
 }
 
 class Foo {
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/no_mapping_on_class_function_line.dart b/pkg/dev_compiler/test/sourcemap/testfiles/no_mapping_on_class_function_line.dart
index 934da67..26508de 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/no_mapping_on_class_function_line.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/no_mapping_on_class_function_line.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 main() {
-  Foo foo = new Foo();
+  Foo foo = Foo();
   foo.foo();
 }
 
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/no_mapping_on_class_line.dart b/pkg/dev_compiler/test/sourcemap/testfiles/no_mapping_on_class_line.dart
index ba99e1c..0233caa4 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/no_mapping_on_class_line.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/no_mapping_on_class_line.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 main() {
-  Foo foo = new Foo();
+  Foo foo = Foo();
   foo.foo();
 }
 
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/no_mapping_on_class_named_constructor_line.dart b/pkg/dev_compiler/test/sourcemap/testfiles/no_mapping_on_class_named_constructor_line.dart
index 1ee465e..32ddfc4 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/no_mapping_on_class_named_constructor_line.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/no_mapping_on_class_named_constructor_line.dart
@@ -4,7 +4,7 @@
 
 main() {
   // ignore: unused_local_variable
-  Foo foo = new Foo.named();
+  Foo foo = Foo.named();
 }
 
 class Foo {
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/printing_class_fields.dart b/pkg/dev_compiler/test/sourcemap/testfiles/printing_class_fields.dart
index 671bbf0..8bf01a3 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/printing_class_fields.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/printing_class_fields.dart
@@ -5,12 +5,12 @@
 /*Debugger:stepOver*/
 main() {
   /*bl*/
-  /*sl:1*/ Foo foo = new Foo(1, 2);
+  /*sl:1*/ Foo foo = Foo(1, 2);
   /*sl:2*/ print(foo.x);
   /*sl:3*/ print(foo.y);
   /*sl:4*/ print(foo.z);
 
-  /*sl:5*/ foo = new Foo.named();
+  /*sl:5*/ foo = Foo.named();
   /*sl:6*/ print(foo.x);
   /*sl:7*/ print(foo.y);
   /*sl:8*/ print(foo.z);
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/printing_class_fields_step_into.dart b/pkg/dev_compiler/test/sourcemap/testfiles/printing_class_fields_step_into.dart
index f4f9d6f..f3f17c1 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/printing_class_fields_step_into.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/printing_class_fields_step_into.dart
@@ -5,7 +5,7 @@
 /*nb*/
 main() {
   /*bl*/
-  Foo foo = new /*sl:1*/ Foo(1, 2);
+  Foo foo = /*sl:1*/ Foo(1, 2);
   /*s:5*/ print(foo.x);
   /*s:6*/ print(foo.y);
   /*s:7*/ print(foo.z);
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/step_through_property_get_test.dart b/pkg/dev_compiler/test/sourcemap/testfiles/step_through_property_get_test.dart
index 20ad5ea..061bfde 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/step_through_property_get_test.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/step_through_property_get_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 main() {
-  Bar bar = new Bar();
+  Bar bar = Bar();
   bar.doStuff();
 }
 
diff --git a/pkg/dev_compiler/test/sourcemap/testfiles/stops_at_ending_brace.dart b/pkg/dev_compiler/test/sourcemap/testfiles/stops_at_ending_brace.dart
index da061d2..8bcca4b 100644
--- a/pkg/dev_compiler/test/sourcemap/testfiles/stops_at_ending_brace.dart
+++ b/pkg/dev_compiler/test/sourcemap/testfiles/stops_at_ending_brace.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 main() {
-  new Foo();
+  Foo();
   // Comment to push the ending brace back a bit.
 /*s:2*/
 }
diff --git a/pkg/dev_compiler/test/worker/worker_test.dart b/pkg/dev_compiler/test/worker/worker_test.dart
index d4caa69..dd4b5cc 100644
--- a/pkg/dev_compiler/test/worker/worker_test.dart
+++ b/pkg/dev_compiler/test/worker/worker_test.dart
@@ -13,7 +13,7 @@
 import 'package:path/path.dart' show join, joinAll;
 import 'package:test/test.dart';
 
-File file(String path) => new File(joinAll(path.split('/'))).absolute;
+File file(String path) => File(joinAll(path.split('/'))).absolute;
 
 main() {
   var dartdevc = join('bin', 'dartdevc.dart');
@@ -49,9 +49,9 @@
     test('can compile in worker mode', () async {
       var args = executableArgs.toList()..add('--persistent_worker');
       var process = await Process.start(Platform.executable, args);
-      var messageGrouper = new AsyncMessageGrouper(process.stdout);
+      var messageGrouper = AsyncMessageGrouper(process.stdout);
 
-      var request = new WorkRequest();
+      var request = WorkRequest();
       request.arguments.addAll(compilerArgs);
       process.stdin.add(protoToDelimitedBuffer(request));
 
@@ -89,7 +89,7 @@
     });
 
     test('unknown options', () {
-      var args = new List<String>.from(executableArgs)
+      var args = List<String>.from(executableArgs)
         ..add('--does-not-exist')
         ..addAll(compilerArgs);
       var result = Process.runSync(Platform.executable, args);
@@ -102,7 +102,7 @@
     });
 
     test('unknown options ignored', () {
-      var args = new List<String>.from(executableArgs)
+      var args = List<String>.from(executableArgs)
         ..add('--does-not-exist')
         ..add('--ignore-unrecognized-flags')
         ..addAll(compilerArgs);
@@ -367,7 +367,7 @@
 Future<WorkResponse> _readResponse(MessageGrouper messageGrouper) async {
   var buffer = (await messageGrouper.next) as List<int>;
   try {
-    return new WorkResponse.fromBuffer(buffer);
+    return WorkResponse.fromBuffer(buffer);
   } catch (_) {
     var bufferAsString =
         buffer == null ? '' : 'String: ${utf8.decode(buffer)}\n';
diff --git a/pkg/dev_compiler/tool/build_pkgs.dart b/pkg/dev_compiler/tool/build_pkgs.dart
index 57c7e30..1f083fe 100755
--- a/pkg/dev_compiler/tool/build_pkgs.dart
+++ b/pkg/dev_compiler/tool/build_pkgs.dart
@@ -38,7 +38,7 @@
 /// summaries for the test packages against that SDK summary. Otherwise, skips
 /// generating kernel summaries.
 Future main(List<String> arguments) async {
-  var argParser = new ArgParser();
+  var argParser = ArgParser();
   argParser.addOption("analyzer-sdk",
       help: "Path to SDK analyzer summary '.sum' file");
   argParser.addOption("kernel-sdk",
@@ -129,7 +129,7 @@
     {List<String> libs = const [], List<String> deps = const []}) async {
   makeArgs(bool kernel) {
     var pkgDirectory = p.join(outputDirectory, kernel ? 'pkg_kernel' : 'pkg');
-    new Directory(pkgDirectory).createSync(recursive: true);
+    Directory(pkgDirectory).createSync(recursive: true);
 
     var args = [
       '--dart-sdk-summary=${kernel ? kernelSummary : analyzerSummary}',
diff --git a/pkg/dev_compiler/tool/global_compile.dart b/pkg/dev_compiler/tool/global_compile.dart
index 1f344c5..ec294b5 100644
--- a/pkg/dev_compiler/tool/global_compile.dart
+++ b/pkg/dev_compiler/tool/global_compile.dart
@@ -15,7 +15,7 @@
 
 void main(List<String> args) {
   // Parse flags.
-  var parser = new ArgParser()
+  var parser = ArgParser()
     ..addOption('out',
         help: 'Output file (defaults to "out.js")',
         abbr: 'o',
@@ -64,8 +64,8 @@
   }
 
   // Compute the transitive closure
-  var total = new Stopwatch()..start();
-  var partial = new Stopwatch()..start();
+  var total = Stopwatch()..start();
+  var partial = Stopwatch()..start();
 
   // TODO(vsm): We're using the analyzer just to compute the import/export/part
   // dependence graph.  This is expensive.  Is there a lighterweight way to do
@@ -78,21 +78,20 @@
   print('Computed global build graph in $graphTime seconds');
 
   // Prepend Dart runtime files to the output
-  var out = new File(outfile);
+  var out = File(outfile);
   var dartLibrary =
-      new File(path.join(ddcPath, 'lib', 'js', 'legacy', 'dart_library.js'))
+      File(path.join(ddcPath, 'lib', 'js', 'legacy', 'dart_library.js'))
           .readAsStringSync();
   out.writeAsStringSync(dartLibrary);
-  var dartSdk =
-      new File(path.join(ddcPath, 'lib', 'js', 'legacy', 'dart_sdk.js'))
-          .readAsStringSync();
+  var dartSdk = File(path.join(ddcPath, 'lib', 'js', 'legacy', 'dart_sdk.js'))
+      .readAsStringSync();
   out.writeAsStringSync(dartSdk, mode: FileMode.APPEND);
 
   // Linearize module concatenation for deterministic output
-  var last = new Future.value();
+  var last = Future.value();
   for (var module in orderedModules) {
     linearizerMap[module] = last;
-    var completer = new Completer();
+    var completer = Completer();
     completerMap[module] = completer;
     last = completer.future;
   }
@@ -101,7 +100,7 @@
   var tmpdir = (tmp == null)
       ? Directory.systemTemp
           .createTempSync(outfile.replaceAll(path.separator, '__'))
-      : new Directory(tmp)
+      : Directory(tmp)
     ..createSync();
   for (var module in orderedModules) {
     var file = tmpdir.path + path.separator + module + '.js';
@@ -135,7 +134,7 @@
         print(result.stdout);
 
         // Schedule module append once the previous module is written
-        var codefile = new File(file);
+        var codefile = File(file);
         linearizerMap[module]
             .then((_) => codefile.readAsString())
             .then((code) =>
@@ -157,24 +156,24 @@
   });
 }
 
-final inputSet = new Set<String>();
-final dependenceMap = new Map<String, Set<String>>();
-final transitiveDependenceMap = new Map<String, Set<String>>();
-final fileMap = new Map<String, Set<String>>();
+final inputSet = Set<String>();
+final dependenceMap = Map<String, Set<String>>();
+final transitiveDependenceMap = Map<String, Set<String>>();
+final fileMap = Map<String, Set<String>>();
 
-final readyMap = new Map<String, Future>();
-final linearizerMap = new Map<String, Future>();
-final completerMap = new Map<String, Completer>();
+final readyMap = Map<String, Future>();
+final linearizerMap = Map<String, Future>();
+final completerMap = Map<String, Completer>();
 
-final orderedModules = new List<String>();
-final visitedModules = new Set<String>();
+final orderedModules = List<String>();
+final visitedModules = Set<String>();
 
 void orderModules(
     [String module = ENTRY, List<String> stack, Set<String> visited]) {
   if (stack == null) {
     assert(visited == null);
-    stack = new List<String>();
-    visited = new Set<String>();
+    stack = List<String>();
+    visited = Set<String>();
   }
   if (visited.contains(module)) return;
   visited.add(module);
@@ -196,7 +195,7 @@
 
 void computeTransitiveDependences() {
   for (var module in orderedModules) {
-    var transitiveSet = new Set<String>();
+    var transitiveSet = Set<String>();
     if (dependenceMap.containsKey(module)) {
       transitiveSet.addAll(dependenceMap[module]);
       for (var dependence in dependenceMap[module]) {
@@ -222,7 +221,7 @@
   inputSet.add(file);
 
   var module = getModule(file);
-  fileMap.putIfAbsent(module, () => new Set<String>());
+  fileMap.putIfAbsent(module, () => Set<String>());
   return fileMap[module].add(file);
 }
 
@@ -230,7 +229,7 @@
   var fromModule = getModule(from);
   var toModule = getModule(to);
   if (fromModule == toModule || toModule == 'dart') return;
-  dependenceMap.putIfAbsent(fromModule, () => new Set<String>());
+  dependenceMap.putIfAbsent(fromModule, () => Set<String>());
   dependenceMap[fromModule].add(toModule);
 }
 
@@ -259,7 +258,7 @@
   if (uri.startsWith('package:')) {
     uri = path.join(packageRoot, uri.substring(8));
   }
-  return new File(uri).readAsStringSync();
+  return File(uri).readAsStringSync();
 }
 
 void transitiveFiles(String entryPoint, String root, String packageRoot) {
diff --git a/pkg/dev_compiler/tool/input_sdk/lib/js/dart2js/js_dart2js.dart b/pkg/dev_compiler/tool/input_sdk/lib/js/dart2js/js_dart2js.dart
index 8d7ad6e..6e5eb6d 100644
--- a/pkg/dev_compiler/tool/input_sdk/lib/js/dart2js/js_dart2js.dart
+++ b/pkg/dev_compiler/tool/input_sdk/lib/js/dart2js/js_dart2js.dart
@@ -119,7 +119,7 @@
     if (arguments == null) {
       return _wrapToDart(JS('', 'new #()', ctor));
     }
-    var unwrapped = new List.from(arguments.map(_convertToJS));
+    var unwrapped = List.from(arguments.map(_convertToJS));
     return _wrapToDart(JS('', 'new #(...#)', ctor, unwrapped));
   }
 
@@ -136,7 +136,7 @@
    */
   factory JsObject.fromBrowserObject(object) {
     if (object is num || object is String || object is bool || object == null) {
-      throw new ArgumentError("object cannot be a num, string, bool, or null");
+      throw ArgumentError("object cannot be a num, string, bool, or null");
     }
     return _wrapToDart(_convertToJS(object));
   }
@@ -152,13 +152,13 @@
    */
   factory JsObject.jsify(object) {
     if ((object is! Map) && (object is! Iterable)) {
-      throw new ArgumentError("object must be a Map or Iterable");
+      throw ArgumentError("object must be a Map or Iterable");
     }
     return _wrapToDart(_convertDataTree(object));
   }
 
   static _convertDataTree(data) {
-    var _convertedObjects = new HashMap.identity();
+    var _convertedObjects = HashMap.identity();
 
     _convert(o) {
       if (_convertedObjects.containsKey(o)) {
@@ -192,7 +192,7 @@
    */
   dynamic operator [](Object property) {
     if (property is! String && property is! num) {
-      throw new ArgumentError("property is not a String or num");
+      throw ArgumentError("property is not a String or num");
     }
     return _convertToDart(JS('', '#[#]', _jsObject, property));
   }
@@ -205,7 +205,7 @@
    */
   void operator []=(Object property, value) {
     if (property is! String && property is! num) {
-      throw new ArgumentError("property is not a String or num");
+      throw ArgumentError("property is not a String or num");
     }
     JS('', '#[#] = #', _jsObject, property, _convertToJS(value));
   }
@@ -223,7 +223,7 @@
    */
   bool hasProperty(property) {
     if (property is! String && property is! num) {
-      throw new ArgumentError("property is not a String or num");
+      throw ArgumentError("property is not a String or num");
     }
     return JS('bool', '# in #', property, _jsObject);
   }
@@ -235,7 +235,7 @@
    */
   void deleteProperty(property) {
     if (property is! String && property is! num) {
-      throw new ArgumentError("property is not a String or num");
+      throw ArgumentError("property is not a String or num");
     }
     JS('bool', 'delete #[#]', _jsObject, property);
   }
@@ -268,12 +268,12 @@
    */
   dynamic callMethod(method, [List args]) {
     if (method is! String && method is! num) {
-      throw new ArgumentError("method is not a String or num");
+      throw ArgumentError("method is not a String or num");
     }
-    if (args != null) args = new List.from(args.map(_convertToJS));
+    if (args != null) args = List.from(args.map(_convertToJS));
     var fn = JS('', '#[#]', _jsObject, method);
     if (JS('bool', 'typeof(#) !== "function"', fn)) {
-      throw new NoSuchMethodError(_jsObject, new Symbol(method), args, {});
+      throw NoSuchMethodError(_jsObject, Symbol(method), args, {});
     }
     return _convertToDart(JS('', '#.apply(#, #)', fn, _jsObject, args));
   }
@@ -288,7 +288,7 @@
    * with the value of this passed as the first argument.
    */
   factory JsFunction.withThis(Function f) {
-    return new JsFunction._fromJs(JS(
+    return JsFunction._fromJs(JS(
         '',
         'function(/*...arguments*/) {'
         '  let args = [#(this)];'
@@ -314,7 +314,7 @@
       '#.apply(#, #)',
       _jsObject,
       _convertToJS(thisArg),
-      args == null ? null : new List.from(args.map(_convertToJS))));
+      args == null ? null : List.from(args.map(_convertToJS))));
 }
 
 // TODO(jmesserly): this is totally unnecessary in dev_compiler.
@@ -336,22 +336,22 @@
 
   _checkIndex(int index) {
     if (index is int && (index < 0 || index >= length)) {
-      throw new RangeError.range(index, 0, length);
+      throw RangeError.range(index, 0, length);
     }
   }
 
   _checkInsertIndex(int index) {
     if (index is int && (index < 0 || index >= length + 1)) {
-      throw new RangeError.range(index, 0, length);
+      throw RangeError.range(index, 0, length);
     }
   }
 
   static _checkRange(int start, int end, int length) {
     if (start < 0 || start > length) {
-      throw new RangeError.range(start, 0, length);
+      throw RangeError.range(start, 0, length);
     }
     if (end < start || end > length) {
-      throw new RangeError.range(end, start, length);
+      throw RangeError.range(end, start, length);
     }
   }
 
@@ -382,7 +382,7 @@
     if (JS('bool', 'typeof # === "number" && (# >>> 0) === #', len, len, len)) {
       return JS('int', '#', len);
     }
-    throw new StateError('Bad JsArray length');
+    throw StateError('Bad JsArray length');
   }
 
   void set length(int length) {
@@ -398,7 +398,7 @@
   void addAll(Iterable<E> iterable) {
     var list = (JS('bool', '# instanceof Array', iterable))
         ? iterable
-        : new List.from(iterable);
+        : List.from(iterable);
     callMethod('push', list);
   }
 
@@ -413,7 +413,7 @@
   }
 
   E removeLast() {
-    if (length == 0) throw new RangeError(-1);
+    if (length == 0) throw RangeError(-1);
     return callMethod('pop') as E;
   }
 
@@ -426,7 +426,7 @@
     _checkRange(start, end, this.length);
     int length = end - start;
     if (length == 0) return;
-    if (skipCount < 0) throw new ArgumentError(skipCount);
+    if (skipCount < 0) throw ArgumentError(skipCount);
     var args = <Object>[start, length]
       ..addAll(iterable.skip(skipCount).take(length));
     callMethod('splice', args);
@@ -481,7 +481,7 @@
   } else {
     // TODO(jmesserly): for now, we wrap other objects, to keep compatibility
     // with the original dart:js behavior.
-    return _putIfAbsent(_jsProxies, o, (o) => new _DartObject(o));
+    return _putIfAbsent(_jsProxies, o, (o) => _DartObject(o));
   }
 }
 
@@ -507,7 +507,7 @@
     return o;
   } else if (JS('!', '# instanceof Date', o)) {
     num ms = JS('!', '#.getTime()', o);
-    return new DateTime.fromMillisecondsSinceEpoch(ms);
+    return DateTime.fromMillisecondsSinceEpoch(ms);
   } else if (o is _DartObject &&
       !identical(dart.getReifiedType(o), dart.jsobject)) {
     return o._dartObj;
@@ -520,12 +520,12 @@
 
 Object _wrapToDartHelper(o) {
   if (JS('bool', 'typeof # == "function"', o)) {
-    return new JsFunction._fromJs(o);
+    return JsFunction._fromJs(o);
   }
   if (JS('bool', '# instanceof Array', o)) {
-    return new JsArray._fromJs(o);
+    return JsArray._fromJs(o);
   }
-  return new JsObject._fromJs(o);
+  return JsObject._fromJs(o);
 }
 
 final _dartProxies = JS('', 'new WeakMap()');
@@ -557,7 +557,7 @@
 /// are more compatible with JavaScript.
 F allowInterop<F extends Function>(F f) => f;
 
-Expando<Function> _interopCaptureThisExpando = new Expando<Function>();
+Expando<Function> _interopCaptureThisExpando = Expando<Function>();
 
 /// Returns a [Function] that when called from JavaScript captures its 'this'
 /// binding and calls [f] with the value of this passed as the first argument.
diff --git a/pkg/dev_compiler/tool/input_sdk/lib/js_util/dart2js/js_util_dart2js.dart b/pkg/dev_compiler/tool/input_sdk/lib/js_util/dart2js/js_util_dart2js.dart
index 0dfb1e5..b67c538 100644
--- a/pkg/dev_compiler/tool/input_sdk/lib/js_util/dart2js/js_util_dart2js.dart
+++ b/pkg/dev_compiler/tool/input_sdk/lib/js_util/dart2js/js_util_dart2js.dart
@@ -24,13 +24,13 @@
 /// JavaScript type, and all other objects are proxied.
 jsify(object) {
   if ((object is! Map) && (object is! Iterable)) {
-    throw new ArgumentError("object must be a Map or Iterable");
+    throw ArgumentError("object must be a Map or Iterable");
   }
   return _convertDataTree(object);
 }
 
 _convertDataTree(data) {
-  var _convertedObjects = new HashMap.identity();
+  var _convertedObjects = HashMap.identity();
 
   _convert(o) {
     if (_convertedObjects.containsKey(o)) {
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 1dabfb7..0c5a8a6 100644
--- a/pkg/dev_compiler/tool/input_sdk/patch/async_patch.dart
+++ b/pkg/dev_compiler/tool/input_sdk/patch/async_patch.dart
@@ -4,7 +4,8 @@
 
 // Patch file for the dart:async library.
 
-import 'dart:_js_helper' show patch, setTraceForException, ReifyFunctionTypes;
+import 'dart:_js_helper'
+    show notNull, patch, setTraceForException, ReifyFunctionTypes;
 import 'dart:_isolate_helper'
     show TimerImpl, global, leaveJsAsync, enterJsAsync;
 import 'dart:_foreign_helper' show JS, JSExportName;
@@ -13,6 +14,17 @@
 typedef void _Callback();
 typedef void _TakeCallback(_Callback callback);
 
+/// This function adapts ES6 generators to implement Dart's async/await.
+///
+/// It's designed to interact with Dart's Future and follow Dart async/await
+/// semantics.
+///
+/// See https://github.com/dart-lang/sdk/issues/27315 for ideas on reconciling
+/// Dart's Future and ES6 Promise. At that point we should use native JS
+/// async/await.
+///
+/// Inspired by `co`: https://github.com/tj/co/blob/master/index.js, which is a
+/// stepping stone for ES async/await.
 @JSExportName('async')
 @ReifyFunctionTypes(false)
 _async<T>(Function() initGenerator) {
@@ -25,10 +37,10 @@
     if (value is _Future) {
       f = value;
     } else if (value is Future) {
-      f = new _Future();
+      f = _Future();
       _Future._chainForeignFuture(value, f);
     } else {
-      f = new _Future.value(value);
+      f = _Future.value(value);
     }
     f = JS('', '#', f._thenNoZoneRegistration(onValue, onError));
     return f;
@@ -59,7 +71,7 @@
     onValue = zone.registerUnaryCallback(onValue);
     onError = zone.registerUnaryCallback(onError);
   }
-  var asyncFuture = new _Future<T>();
+  var asyncFuture = _Future<T>();
   var body = () {
     try {
       iter = JS('', '#[Symbol.iterator]()', initGenerator());
@@ -203,7 +215,7 @@
   static Timer _createTimer(Duration duration, void callback()) {
     int milliseconds = duration.inMilliseconds;
     if (milliseconds < 0) milliseconds = 0;
-    return new TimerImpl(milliseconds, callback);
+    return TimerImpl(milliseconds, callback);
   }
 
   @patch
@@ -211,7 +223,7 @@
       Duration duration, void callback(Timer timer)) {
     int milliseconds = duration.inMilliseconds;
     if (milliseconds < 0) milliseconds = 0;
-    return new TimerImpl.periodic(milliseconds, callback);
+    return TimerImpl.periodic(milliseconds, callback);
   }
 }
 
@@ -220,3 +232,273 @@
   setTraceForException(error, stackTrace);
   dart.throw_(error);
 }
+
+/// Used by the compiler to implement `async*` functions.
+///
+/// This is inspired by _AsyncStarStreamController in dart-lang/sdk's
+/// runtime/lib/core_patch.dart
+///
+/// Given input like:
+///
+///     foo() async* {
+///       yield 1;
+///       yield* bar();
+///       print(await baz());
+///     }
+///
+/// This compiles to:
+///
+///     function foo() {
+///       return new (AsyncStarImplOfT()).new(function*(stream) {
+///         if (stream.add(1)) return;
+///         yield;
+///         if (stream.addStream(bar()) return;
+///         yield;
+///         print(yield baz());
+///      });
+///     }
+///
+class _AsyncStarImpl<T> {
+  StreamController<T> controller;
+  Object Function(_AsyncStarImpl<T>) initGenerator;
+  @notNull
+  bool isSuspendedAtYieldStar = false;
+  @notNull
+  bool onListenReceived = false;
+  @notNull
+  bool isScheduled = false;
+  @notNull
+  bool isSuspendedAtYield = false;
+
+  /// Whether we're suspended at an `await`.
+  @notNull
+  bool isSuspendedAtAwait = false;
+
+  Completer cancellationCompleter;
+  Object jsIterator;
+
+  Null Function(Object, StackTrace) _handleErrorCallback;
+  void Function([Object]) _runBodyCallback;
+
+  _AsyncStarImpl(this.initGenerator) {
+    controller = StreamController(
+        onListen: JS('!', 'this.onListen.bind(this)'),
+        onResume: JS('!', 'this.onResume.bind(this)'),
+        onCancel: JS('!', 'this.onCancel.bind(this)'));
+    jsIterator = JS('!', '#[Symbol.iterator]()', initGenerator(this));
+  }
+
+  /// The stream produced by this `async*` function.
+  Stream<T> get stream => controller.stream;
+
+  /// Returns the callback used for error handling.
+  ///
+  /// This callback throws the error back into the user code, at the appropriate
+  /// location (e.g. `await` `yield` or `yield*`). This gives user code a chance
+  /// to handle it try-catch. If they do not handle, the error gets routed to
+  /// the [stream] as an error via [addError].
+  ///
+  /// As a performance optimization, this callback is only bound once to the
+  /// current [Zone]. This works because a single subscription stream should
+  /// always be running in its original zone. An `async*` method will always
+  /// save/restore the zone that was active when `listen()` was first called,
+  /// similar to a stream. This follows from section 16.14 of the Dart 4th
+  /// edition spec:
+  ///
+  /// > If `f` is marked `async*` (9), then a fresh instance `s` implementing
+  /// > the built-in class `Stream` is associated with the invocation and
+  /// > immediately returned. When `s` is listened to, execution of the body of
+  /// > `f` will begin.
+  ///
+  Null Function(Object, StackTrace) get handleError {
+    if (_handleErrorCallback == null) {
+      _handleErrorCallback = (error, StackTrace stackTrace) {
+        try {
+          JS('', '#.throw(#)', jsIterator, error);
+        } catch (e) {
+          addError(e, stackTrace);
+        }
+      };
+      var zone = Zone.current;
+      if (!identical(zone, Zone.root)) {
+        _handleErrorCallback = zone.bindBinaryCallback(_handleErrorCallback);
+      }
+    }
+    return _handleErrorCallback;
+  }
+
+  void scheduleGenerator() {
+    // TODO(jmesserly): is this isPaused check in the right place? Assuming the
+    // async* Stream yields, then is paused (by other code), the body will
+    // already be scheduled. This will cause at least one more iteration to
+    // run (adding another data item to the Stream) before actually pausing.
+    // It could be fixed by moving the `isPaused` check inside `runBody`.
+    if (isScheduled ||
+        controller.isPaused ||
+        isSuspendedAtYieldStar ||
+        isSuspendedAtAwait) {
+      return;
+    }
+    isScheduled = true;
+    // Capture the current zone. See comment on [handleError] for more
+    // information about this optimization.
+    var zone = Zone.current;
+    if (_runBodyCallback == null) {
+      _runBodyCallback = JS('!', '#.bind(this)', runBody);
+      if (!identical(zone, Zone.root)) {
+        var registered = zone.registerUnaryCallback(_runBodyCallback);
+        _runBodyCallback = ([arg]) => zone.runUnaryGuarded(registered, arg);
+      }
+    }
+    zone.scheduleMicrotask(_runBodyCallback);
+  }
+
+  void runBody(awaitValue) {
+    isScheduled = false;
+    isSuspendedAtYield = false;
+    isSuspendedAtAwait = false;
+
+    Object iterResult;
+    try {
+      iterResult = JS('', '#.next(#)', jsIterator, awaitValue);
+    } catch (e, s) {
+      addError(e, s);
+      close();
+      return null;
+    }
+
+    if (JS('!', '#.done', iterResult)) {
+      close();
+      return null;
+    }
+
+    // If we're suspended at a yield/yield*, we're done for now.
+    if (isSuspendedAtYield || isSuspendedAtYieldStar) return null;
+
+    // Handle `await`: if we get a value passed to `yield` it means we are
+    // waiting on this Future. Make sure to prevent scheduling, and pass the
+    // value back as the result of the `yield`.
+    //
+    // TODO(jmesserly): is the timing here correct? The assumption here is
+    // that we should schedule `await` in `async*` the same as in `async`.
+    isSuspendedAtAwait = true;
+    FutureOr<Object> value = JS('', '#.value', iterResult);
+
+    // TODO(jmesserly): this logic was copied from `async` function impl.
+    _Future f;
+    if (value is _Future) {
+      f = value;
+    } else if (value is Future) {
+      f = _Future();
+      _Future._chainForeignFuture(value, f);
+    } else {
+      f = _Future.value(value);
+    }
+    f._thenNoZoneRegistration(_runBodyCallback, handleError);
+  }
+
+  /// Adds element to [stream] and returns true if the caller should terminate
+  /// execution of the generator.
+  ///
+  /// This is called from generated code like this:
+  ///
+  ///     if (controller.add(1)) return;
+  ///     yield;
+  //
+  // TODO(hausner): Per spec, the generator should be suspended before exiting
+  // when the stream is closed. We could add a getter like this:
+  //
+  //     get isCancelled => controller.hasListener;
+  //
+  // The generator would translate a 'yield e' statement to
+  //
+  //     controller.add(1);
+  //     suspend; // this is `yield` in JS.
+  //     if (controller.isCancelled) return;
+  bool add(T event) {
+    if (!onListenReceived) _fatal("yield before stream is listened to");
+    if (isSuspendedAtYield) _fatal("unexpected yield");
+    // If stream is cancelled, tell caller to exit the async generator.
+    if (!controller.hasListener) {
+      return true;
+    }
+    controller.add(event);
+    scheduleGenerator();
+    isSuspendedAtYield = true;
+    return false;
+  }
+
+  /// Adds the elements of [stream] into this [controller]'s stream, and returns
+  /// true if the caller should terminate execution of the generator.
+  ///
+  /// The generator will be scheduled again when all of the elements of the
+  /// added stream have been consumed.
+  bool addStream(Stream<T> stream) {
+    if (!onListenReceived) _fatal("yield* before stream is listened to");
+    // If stream is cancelled, tell caller to exit the async generator.
+    if (!controller.hasListener) return true;
+    isSuspendedAtYieldStar = true;
+    var whenDoneAdding = controller.addStream(stream, cancelOnError: false);
+    whenDoneAdding.then((_) {
+      isSuspendedAtYieldStar = false;
+      scheduleGenerator();
+      if (!isScheduled) isSuspendedAtYield = true;
+    }, onError: handleError);
+    return false;
+  }
+
+  void addError(Object error, StackTrace stackTrace) {
+    if (cancellationCompleter != null && !cancellationCompleter.isCompleted) {
+      // If the stream has been cancelled, complete the cancellation future
+      // with the error.
+      cancellationCompleter.completeError(error, stackTrace);
+      return;
+    }
+    // If stream is cancelled, tell caller to exit the async generator.
+    if (!controller.hasListener) return;
+    controller.addError(error, stackTrace);
+    // No need to schedule the generator body here. This code is only
+    // called from the catch clause of the implicit try-catch-finally
+    // around the generator body. That is, we are on the error path out
+    // of the generator and do not need to run the generator again.
+  }
+
+  close() {
+    if (cancellationCompleter != null && !cancellationCompleter.isCompleted) {
+      // If the stream has been cancelled, complete the cancellation future
+      // with the error.
+      cancellationCompleter.complete();
+    }
+    controller.close();
+  }
+
+  onListen() {
+    assert(!onListenReceived);
+    onListenReceived = true;
+    scheduleGenerator();
+  }
+
+  onResume() {
+    if (isSuspendedAtYield) {
+      scheduleGenerator();
+    }
+  }
+
+  onCancel() {
+    if (controller.isClosed) {
+      return null;
+    }
+    if (cancellationCompleter == null) {
+      cancellationCompleter = Completer();
+      // Only resume the generator if it is suspended at a yield.
+      // Cancellation does not affect an async generator that is
+      // suspended at an await.
+      if (isSuspendedAtYield) {
+        scheduleGenerator();
+      }
+    }
+    return cancellationCompleter.future;
+  }
+
+  _fatal(String message) => throw StateError(message);
+}
diff --git a/pkg/dev_compiler/tool/input_sdk/patch/cli_patch.dart b/pkg/dev_compiler/tool/input_sdk/patch/cli_patch.dart
index 6921e60..b1c3841 100644
--- a/pkg/dev_compiler/tool/input_sdk/patch/cli_patch.dart
+++ b/pkg/dev_compiler/tool/input_sdk/patch/cli_patch.dart
@@ -6,5 +6,5 @@
 
 @patch
 void _waitForEvent(int timeoutMillis) {
-  throw new UnsupportedError("waitForEvent");
+  throw UnsupportedError("waitForEvent");
 }
diff --git a/pkg/dev_compiler/tool/input_sdk/patch/collection_patch.dart b/pkg/dev_compiler/tool/input_sdk/patch/collection_patch.dart
index 4af9548..ae91eda 100644
--- a/pkg/dev_compiler/tool/input_sdk/patch/collection_patch.dart
+++ b/pkg/dev_compiler/tool/input_sdk/patch/collection_patch.dart
@@ -30,18 +30,18 @@
       if (hashCode == null) {
         if (equals == null) {
           if (identical(K, String) || identical(K, int)) {
-            return new IdentityMap<K, V>();
+            return IdentityMap<K, V>();
           }
-          return new LinkedMap<K, V>();
+          return LinkedMap<K, V>();
         }
         hashCode = dart.hashCode;
       } else if (identical(identityHashCode, hashCode) &&
           identical(identical, equals)) {
-        return new IdentityMap<K, V>();
+        return IdentityMap<K, V>();
       }
-      return new CustomHashMap<K, V>(equals ?? dart.equals, hashCode);
+      return CustomHashMap<K, V>(equals ?? dart.equals, hashCode);
     }
-    return new CustomKeyHashMap<K, V>(
+    return CustomKeyHashMap<K, V>(
         equals ?? dart.equals, hashCode ?? dart.hashCode, isValidKey);
   }
 
@@ -60,18 +60,18 @@
       if (hashCode == null) {
         if (equals == null) {
           if (identical(K, String) || identical(K, int)) {
-            return new IdentityMap<K, V>();
+            return IdentityMap<K, V>();
           }
-          return new LinkedMap<K, V>();
+          return LinkedMap<K, V>();
         }
         hashCode = dart.hashCode;
       } else if (identical(identityHashCode, hashCode) &&
           identical(identical, equals)) {
-        return new IdentityMap<K, V>();
+        return IdentityMap<K, V>();
       }
-      return new CustomHashMap<K, V>(equals ?? dart.equals, hashCode);
+      return CustomHashMap<K, V>(equals ?? dart.equals, hashCode);
     }
-    return new CustomKeyHashMap<K, V>(
+    return CustomKeyHashMap<K, V>(
         equals ?? dart.equals, hashCode ?? dart.hashCode, isValidKey);
   }
 
@@ -90,19 +90,19 @@
       if (hashCode == null) {
         if (equals == null) {
           if (identical(E, String) || identical(E, int)) {
-            return new _IdentityHashSet<E>();
+            return _IdentityHashSet<E>();
           }
-          return new _HashSet<E>();
+          return _HashSet<E>();
         }
         hashCode = dart.hashCode;
       } else if (identical(identityHashCode, hashCode) &&
           identical(identical, equals)) {
-        return new _IdentityHashSet<E>();
+        return _IdentityHashSet<E>();
       }
-      return new _CustomHashSet<E>(
+      return _CustomHashSet<E>(
           equals ?? dart.equals, hashCode ?? dart.hashCode);
     }
-    return new _CustomKeyHashSet<E>(
+    return _CustomKeyHashSet<E>(
         equals ?? dart.equals, hashCode ?? dart.hashCode, isValidKey);
   }
 
@@ -121,19 +121,19 @@
       if (hashCode == null) {
         if (equals == null) {
           if (identical(E, String) || identical(E, int)) {
-            return new _IdentityHashSet<E>();
+            return _IdentityHashSet<E>();
           }
-          return new _HashSet<E>();
+          return _HashSet<E>();
         }
         hashCode = dart.hashCode;
       } else if (identical(identityHashCode, hashCode) &&
           identical(identical, equals)) {
-        return new _IdentityHashSet<E>();
+        return _IdentityHashSet<E>();
       }
-      return new _CustomHashSet<E>(
+      return _CustomHashSet<E>(
           equals ?? dart.equals, hashCode ?? dart.hashCode);
     }
-    return new _CustomKeyHashSet<E>(
+    return _CustomKeyHashSet<E>(
         equals ?? dart.equals, hashCode ?? dart.hashCode, isValidKey);
   }
 
@@ -173,9 +173,9 @@
 
   _HashSet();
 
-  Set<E> _newSet() => new _HashSet<E>();
+  Set<E> _newSet() => _HashSet<E>();
 
-  Set<R> _newSimilarSet<R>() => new _HashSet<R>();
+  Set<R> _newSimilarSet<R>() => _HashSet<R>();
 
   bool contains(Object key) {
     if (key == null) {
@@ -313,9 +313,9 @@
 
   _IdentityHashSet();
 
-  Set<E> _newSet() => new _IdentityHashSet<E>();
+  Set<E> _newSet() => _IdentityHashSet<E>();
 
-  Set<R> _newSimilarSet<R>() => new _IdentityHashSet<R>();
+  Set<R> _newSimilarSet<R>() => _IdentityHashSet<R>();
 
   bool contains(Object element) {
     return JS('', '#.has(#)', _map, element);
@@ -366,9 +366,9 @@
   _CustomKeyHashSet(_Equality<E> equals, _Hasher<E> hashCode, this._validKey)
       : super(equals, hashCode);
 
-  Set<E> _newSet() => new _CustomKeyHashSet<E>(_equals, _hashCode, _validKey);
+  Set<E> _newSet() => _CustomKeyHashSet<E>(_equals, _hashCode, _validKey);
 
-  Set<R> _newSimilarSet<R>() => new _HashSet<R>();
+  Set<R> _newSimilarSet<R>() => _HashSet<R>();
 
   bool contains(Object element) {
     // TODO(jmesserly): there is a subtle difference here compared to Dart 1.
@@ -417,8 +417,8 @@
 
   _CustomHashSet(this._equals, this._hashCode);
 
-  Set<E> _newSet() => new _CustomHashSet<E>(_equals, _hashCode);
-  Set<R> _newSimilarSet<R>() => new _HashSet<R>();
+  Set<E> _newSet() => _CustomHashSet<E>(_equals, _hashCode);
+  Set<R> _newSimilarSet<R>() => _HashSet<R>();
 
   bool contains(Object key) {
     if (key is E) {
@@ -525,7 +525,7 @@
   @notNull
   bool get isNotEmpty => JS('bool', '#.size != 0', _map);
 
-  Iterator<E> get iterator => new DartIterator<E>(_jsIterator());
+  Iterator<E> get iterator => DartIterator<E>(_jsIterator());
 
   @JSExportName('Symbol.iterator')
   _jsIterator() {
@@ -544,7 +544,7 @@
     }''',
         modifications,
         self._modifications,
-        new ConcurrentModificationError(self),
+        ConcurrentModificationError(self),
         iterator);
   }
 }
diff --git a/pkg/dev_compiler/tool/input_sdk/patch/convert_patch.dart b/pkg/dev_compiler/tool/input_sdk/patch/convert_patch.dart
index 18a077e..cfaa3fc 100644
--- a/pkg/dev_compiler/tool/input_sdk/patch/convert_patch.dart
+++ b/pkg/dev_compiler/tool/input_sdk/patch/convert_patch.dart
@@ -36,7 +36,7 @@
     parsed = JS('=Object|JSExtendableArray|Null|bool|num|String',
         'JSON.parse(#)', source);
   } catch (e) {
-    throw new FormatException(JS('String', 'String(#)', e));
+    throw FormatException(JS('String', 'String(#)', e));
   }
 
   if (reviver == null) {
@@ -78,7 +78,7 @@
 
     // Otherwise it is a plain object, so copy to a JSON map, so we process
     // and revive all entries recursively.
-    _JsonMap map = new _JsonMap(e);
+    _JsonMap map = _JsonMap(e);
     var processed = map._processed;
     List<String> keys = map._computeKeys();
     for (int i = 0; i < keys.length; i++) {
@@ -108,7 +108,7 @@
   // TODO(sra): Replace this test with cheaper '#.constructor === Array' when
   // bug https://code.google.com/p/v8/issues/detail?id=621 is fixed.
   if (JS('bool', 'Object.getPrototypeOf(#) !== Array.prototype', object)) {
-    return new _JsonMap(object);
+    return _JsonMap(object);
   }
 
   // Update the elements in place since JS arrays are Dart lists.
@@ -159,12 +159,12 @@
 
   Iterable<String> get keys {
     if (_isUpgraded) return _upgradedMap.keys;
-    return new _JsonMapKeyIterable(this);
+    return _JsonMapKeyIterable(this);
   }
 
   Iterable get values {
     if (_isUpgraded) return _upgradedMap.values;
-    return new MappedIterable(_computeKeys(), (each) => this[each]);
+    return MappedIterable(_computeKeys(), (each) => this[each]);
   }
 
   operator []=(key, value) {
@@ -251,7 +251,7 @@
       // Check if invoking the callback function changed
       // the key set. If so, throw an exception.
       if (!identical(keys, _data)) {
-        throw new ConcurrentModificationError(this);
+        throw ConcurrentModificationError(this);
       }
     }
   }
@@ -361,7 +361,7 @@
 class JsonDecoder {
   @patch
   StringConversionSink startChunkedConversion(Sink<Object> sink) {
-    return new _JsonDecoderSink(_reviver, sink);
+    return _JsonDecoderSink(_reviver, sink);
   }
 }
 
@@ -376,7 +376,7 @@
   final _Reviver _reviver;
   final Sink<Object> _sink;
 
-  _JsonDecoderSink(this._reviver, this._sink) : super(new StringBuffer(''));
+  _JsonDecoderSink(this._reviver, this._sink) : super(StringBuffer(''));
 
   void close() {
     super.close();
diff --git a/pkg/dev_compiler/tool/input_sdk/patch/core_patch.dart b/pkg/dev_compiler/tool/input_sdk/patch/core_patch.dart
index 13b9a49..74f55ac 100644
--- a/pkg/dev_compiler/tool/input_sdk/patch/core_patch.dart
+++ b/pkg/dev_compiler/tool/input_sdk/patch/core_patch.dart
@@ -116,7 +116,7 @@
   void operator []=(Object object, T value) {
     var values = Primitives.getProperty(object, _EXPANDO_PROPERTY_NAME);
     if (values == null) {
-      values = new Object();
+      values = Object();
       Primitives.setProperty(object, _EXPANDO_PROPERTY_NAME, values);
     }
     Primitives.setProperty(values, _getKey(), value);
@@ -154,7 +154,7 @@
   @patch
   factory int.fromEnvironment(String name, {int defaultValue}) {
     // ignore: const_constructor_throws_exception
-    throw new UnsupportedError(
+    throw UnsupportedError(
         'int.fromEnvironment can only be used as a const constructor');
   }
 }
@@ -230,12 +230,12 @@
 class DateTime {
   @patch
   DateTime.fromMillisecondsSinceEpoch(int millisecondsSinceEpoch,
-      {bool isUtc: false})
+      {bool isUtc = false})
       : this._withValue(millisecondsSinceEpoch, isUtc: isUtc);
 
   @patch
   DateTime.fromMicrosecondsSinceEpoch(int microsecondsSinceEpoch,
-      {bool isUtc: false})
+      {bool isUtc = false})
       : this._withValue(
             _microsecondInRoundedMilliseconds(microsecondsSinceEpoch),
             isUtc: isUtc);
@@ -245,9 +245,8 @@
       int second, int millisecond, int microsecond, bool isUtc)
       // checkBool is manually inlined here because dart2js doesn't inline it
       // and [isUtc] is usually a constant.
-      : this.isUtc = isUtc is bool
-            ? isUtc
-            : throw new ArgumentError.value(isUtc, 'isUtc'),
+      : this.isUtc =
+            isUtc is bool ? isUtc : throw ArgumentError.value(isUtc, 'isUtc'),
         _value = checkInt(Primitives.valueFromDecomposedDate(
             year,
             month,
@@ -292,25 +291,23 @@
 
   @patch
   Duration get timeZoneOffset {
-    if (isUtc) return new Duration();
-    return new Duration(minutes: Primitives.getTimeZoneOffsetInMinutes(this));
+    if (isUtc) return Duration();
+    return Duration(minutes: Primitives.getTimeZoneOffsetInMinutes(this));
   }
 
   @patch
   DateTime add(Duration duration) {
-    return new DateTime._withValue(_value + duration.inMilliseconds,
-        isUtc: isUtc);
+    return DateTime._withValue(_value + duration.inMilliseconds, isUtc: isUtc);
   }
 
   @patch
   DateTime subtract(Duration duration) {
-    return new DateTime._withValue(_value - duration.inMilliseconds,
-        isUtc: isUtc);
+    return DateTime._withValue(_value - duration.inMilliseconds, isUtc: isUtc);
   }
 
   @patch
   Duration difference(DateTime other) {
-    return new Duration(milliseconds: _value - other._value);
+    return Duration(milliseconds: _value - other._value);
   }
 
   @patch
@@ -371,27 +368,26 @@
     } else {
       int length = JS('!', '#', _length);
       if (_length == null || length < 0) {
-        throw new ArgumentError(
-            "Length must be a non-negative integer: $_length");
+        throw ArgumentError("Length must be a non-negative integer: $_length");
       }
       list = JS('', 'new Array(#)', length);
       JS('', '#.fill(null)', list);
       JSArray.markFixedList(list);
     }
-    return new JSArray<E>.of(list);
+    return JSArray<E>.of(list);
   }
 
   @patch
-  factory List.filled(@nullCheck int length, E fill, {bool growable: false}) {
-    var list = new JSArray<E>.of(JS('', 'new Array(#)', length));
+  factory List.filled(@nullCheck int length, E fill, {bool growable = false}) {
+    var list = JSArray<E>.of(JS('', 'new Array(#)', length));
     JS('', '#.fill(#)', list, fill);
     if (!growable) JSArray.markFixedList(list);
     return list;
   }
 
   @patch
-  factory List.from(Iterable elements, {bool growable: true}) {
-    var list = new JSArray<E>.of(JS('', '[]'));
+  factory List.from(Iterable elements, {bool growable = true}) {
+    var list = JSArray<E>.of(JS('', '[]'));
     // Specialize the copy loop for the case that doesn't need a
     // runtime check.
     if (elements is Iterable<E>) {
@@ -409,7 +405,7 @@
 
   @patch
   factory List.unmodifiable(Iterable elements) {
-    var list = new List<E>.from(elements);
+    var list = List<E>.from(elements);
     JSArray.markUnmodifiableList(list);
     return list;
   }
@@ -419,7 +415,7 @@
 class Map<K, V> {
   @patch
   factory Map.unmodifiable(Map other) {
-    return new UnmodifiableMapView<K, V>(new Map<K, V>.from(other));
+    return UnmodifiableMapView<K, V>(Map<K, V>.from(other));
   }
 
   @patch
@@ -448,7 +444,7 @@
   @patch
   factory String.fromEnvironment(String name, {String defaultValue}) {
     // ignore: const_constructor_throws_exception
-    throw new UnsupportedError(
+    throw UnsupportedError(
         'String.fromEnvironment can only be used as a const constructor');
   }
 
@@ -473,14 +469,14 @@
 
   static String _stringFromIterable(
       Iterable<int> charCodes, int start, int end) {
-    if (start < 0) throw new RangeError.range(start, 0, charCodes.length);
+    if (start < 0) throw RangeError.range(start, 0, charCodes.length);
     if (end != null && end < start) {
-      throw new RangeError.range(end, start, charCodes.length);
+      throw RangeError.range(end, start, charCodes.length);
     }
     var it = charCodes.iterator;
     for (int i = 0; i < start; i++) {
       if (!it.moveNext()) {
-        throw new RangeError.range(start, 0, i);
+        throw RangeError.range(start, 0, i);
       }
     }
     var list = <int>[];
@@ -489,7 +485,7 @@
     } else {
       for (int i = start; i < end; i++) {
         if (!it.moveNext()) {
-          throw new RangeError.range(end, start, i);
+          throw RangeError.range(end, start, i);
         }
         list.add(it.current);
       }
@@ -501,9 +497,9 @@
 @patch
 class bool {
   @patch
-  factory bool.fromEnvironment(String name, {bool defaultValue: false}) {
+  factory bool.fromEnvironment(String name, {bool defaultValue = false}) {
     // ignore: const_constructor_throws_exception
-    throw new UnsupportedError(
+    throw UnsupportedError(
         'bool.fromEnvironment can only be used as a const constructor');
   }
 
@@ -515,8 +511,8 @@
 class RegExp {
   @patch
   factory RegExp(String source,
-          {bool multiLine: false, bool caseSensitive: true}) =>
-      new JSSyntaxRegExp(source,
+          {bool multiLine = false, bool caseSensitive = true}) =>
+      JSSyntaxRegExp(source,
           multiLine: multiLine, caseSensitive: caseSensitive);
 
   @patch
@@ -546,7 +542,7 @@
 
   @patch
   void writeCharCode(int charCode) {
-    _writeString(new String.fromCharCode(charCode));
+    _writeString(String.fromCharCode(charCode));
   }
 
   @patch
@@ -628,7 +624,7 @@
 
   @patch
   String toString() {
-    StringBuffer sb = new StringBuffer('');
+    StringBuffer sb = StringBuffer('');
     String comma = '';
     if (_arguments != null) {
       for (var argument in _arguments) {
@@ -670,7 +666,7 @@
   static Uri get base {
     String uri = Primitives.currentUri();
     if (uri != null) return Uri.parse(uri);
-    throw new UnsupportedError("'Uri.base' is not supported");
+    throw UnsupportedError("'Uri.base' is not supported");
   }
 }
 
@@ -688,7 +684,7 @@
   // Matches a String that _uriEncodes to itself regardless of the kind of
   // component.  This corresponds to [_unreservedTable], i.e. characters that
   // are not encoded by any encoding table.
-  static final RegExp _needsNoEncoding = new RegExp(r'^[\-\.0-9A-Z_a-z~]*$');
+  static final RegExp _needsNoEncoding = RegExp(r'^[\-\.0-9A-Z_a-z~]*$');
 
   /**
    * This is the internal implementation of JavaScript's encodeURI function.
@@ -704,7 +700,7 @@
 
     // Encode the string into bytes then generate an ASCII only string
     // by percent encoding selected bytes.
-    StringBuffer result = new StringBuffer('');
+    StringBuffer result = StringBuffer('');
     var bytes = encoding.encode(text);
     for (int i = 0; i < bytes.length; i++) {
       int byte = bytes[i];
@@ -810,12 +806,12 @@
   static const int _digitBase = 1 << _digitBits;
   static const int _digitMask = (1 << _digitBits) - 1;
 
-  static final _BigIntImpl zero = new _BigIntImpl._fromInt(0);
-  static final _BigIntImpl one = new _BigIntImpl._fromInt(1);
-  static final _BigIntImpl two = new _BigIntImpl._fromInt(2);
+  static final _BigIntImpl zero = _BigIntImpl._fromInt(0);
+  static final _BigIntImpl one = _BigIntImpl._fromInt(1);
+  static final _BigIntImpl two = _BigIntImpl._fromInt(2);
 
   static final _BigIntImpl _minusOne = -one;
-  static final _BigIntImpl _bigInt10000 = new _BigIntImpl._fromInt(10000);
+  static final _BigIntImpl _bigInt10000 = _BigIntImpl._fromInt(10000);
 
   // Result cache for last _divRem call.
   // Result cache for last _divRem call.
@@ -870,7 +866,7 @@
   static _BigIntImpl parse(String source, {int radix}) {
     var result = _tryParse(source, radix: radix);
     if (result == null) {
-      throw new FormatException("Could not parse BigInt", source);
+      throw FormatException("Could not parse BigInt", source);
     }
     return result;
   }
@@ -891,7 +887,7 @@
     for (int i = 0; i < source.length; i++) {
       part = part * 10 + source.codeUnitAt(i) - _0;
       if (++digitInPartCount == 4) {
-        result = result * _bigInt10000 + new _BigIntImpl._fromInt(part);
+        result = result * _bigInt10000 + _BigIntImpl._fromInt(part);
         part = 0;
         digitInPartCount = 0;
       }
@@ -932,7 +928,7 @@
     int hexDigitsPerChunk = _digitBits ~/ 4;
     int sourceLength = source.length - startPos;
     int chunkCount = (sourceLength / hexDigitsPerChunk).ceil();
-    var digits = new Uint16List(chunkCount);
+    var digits = Uint16List(chunkCount);
 
     int lastDigitLength = sourceLength - (chunkCount - 1) * hexDigitsPerChunk;
     int digitIndex = digits.length - 1;
@@ -955,7 +951,7 @@
       digits[digitIndex--] = chunk;
     }
     if (digits.length == 1 && digits[0] == 0) return zero;
-    return new _BigIntImpl._(isNegative, digits.length, digits);
+    return _BigIntImpl._(isNegative, digits.length, digits);
   }
 
   /// Parses the given [source] as a [radix] literal.
@@ -964,11 +960,11 @@
   /// this function returns `null`.
   static _BigIntImpl _parseRadix(String source, int radix, bool isNegative) {
     var result = zero;
-    var base = new _BigIntImpl._fromInt(radix);
+    var base = _BigIntImpl._fromInt(radix);
     for (int i = 0; i < source.length; i++) {
       var digitValue = _codeUnitToRadixValue(source.codeUnitAt(i));
       if (digitValue >= radix) return null;
-      result = result * base + new _BigIntImpl._fromInt(digitValue);
+      result = result * base + _BigIntImpl._fromInt(digitValue);
     }
     if (isNegative) return -result;
     return result;
@@ -982,7 +978,7 @@
   static _BigIntImpl _tryParse(String source, {int radix}) {
     if (source == "") return null;
 
-    var re = new RegExp(r'^\s*([+-]?)((0x[a-f0-9]+)|(\d+)|([a-z0-9]+))\s*$',
+    var re = RegExp(r'^\s*([+-]?)((0x[a-f0-9]+)|(\d+)|([a-z0-9]+))\s*$',
         caseSensitive: false);
     var match = re.firstMatch(source);
     int signIndex = 1;
@@ -1010,10 +1006,10 @@
     }
 
     if (radix is! int) {
-      throw new ArgumentError.value(radix, 'radix', 'is not an integer');
+      throw ArgumentError.value(radix, 'radix', 'is not an integer');
     }
     if (radix < 2 || radix > 36) {
-      throw new RangeError.range(radix, 2, 36, 'radix');
+      throw RangeError.range(radix, 2, 36, 'radix');
     }
     if (radix == 10 && decimalMatch != null) {
       return _parseDecimal(decimalMatch, isNegative);
@@ -1049,7 +1045,7 @@
   /// digits.
   static Uint16List _cloneDigits(
       Uint16List digits, int from, int to, int length) {
-    var resultDigits = new Uint16List(length);
+    var resultDigits = Uint16List(length);
     var n = to - from;
     for (var i = 0; i < n; i++) {
       resultDigits[i] = digits[from + i];
@@ -1065,10 +1061,9 @@
 
     // Given this order dart2js will use the `_fromInt` for smaller value and
     // then use the bit-manipulating `_fromDouble` for all other values.
-    if (value.abs() < 0x100000000)
-      return new _BigIntImpl._fromInt(value.toInt());
-    if (value is double) return new _BigIntImpl._fromDouble(value);
-    return new _BigIntImpl._fromInt(value);
+    if (value.abs() < 0x100000000) return _BigIntImpl._fromInt(value.toInt());
+    if (value is double) return _BigIntImpl._fromDouble(value);
+    return _BigIntImpl._fromInt(value);
   }
 
   factory _BigIntImpl._fromInt(int value) {
@@ -1079,43 +1074,43 @@
       // positive.
       const int minInt64 = -0x80000000 * 0x100000000;
       if (value == minInt64) {
-        var digits = new Uint16List(4);
+        var digits = Uint16List(4);
         digits[3] = 0x8000;
-        return new _BigIntImpl._(true, 4, digits);
+        return _BigIntImpl._(true, 4, digits);
       }
       value = -value;
     }
     if (value < _digitBase) {
-      var digits = new Uint16List(1);
+      var digits = Uint16List(1);
       digits[0] = value;
-      return new _BigIntImpl._(isNegative, 1, digits);
+      return _BigIntImpl._(isNegative, 1, digits);
     }
     if (value <= 0xFFFFFFFF) {
-      var digits = new Uint16List(2);
+      var digits = Uint16List(2);
       digits[0] = value & _digitMask;
       digits[1] = value >> _digitBits;
-      return new _BigIntImpl._(isNegative, 2, digits);
+      return _BigIntImpl._(isNegative, 2, digits);
     }
 
     var bits = value.bitLength;
-    var digits = new Uint16List((bits - 1) ~/ _digitBits + 1);
+    var digits = Uint16List((bits - 1) ~/ _digitBits + 1);
     var i = 0;
     while (value != 0) {
       digits[i++] = value & _digitMask;
       value = value ~/ _digitBase;
     }
-    return new _BigIntImpl._(isNegative, digits.length, digits);
+    return _BigIntImpl._(isNegative, digits.length, digits);
   }
 
   /// An 8-byte Uint8List we can reuse for [_fromDouble] to avoid generating
   /// garbage.
-  static final Uint8List _bitsForFromDouble = new Uint8List(8);
+  static final Uint8List _bitsForFromDouble = Uint8List(8);
 
   factory _BigIntImpl._fromDouble(double value) {
     const int exponentBias = 1075;
 
     if (value.isNaN || value.isInfinite) {
-      throw new ArgumentError("Value must be finite: $value");
+      throw ArgumentError("Value must be finite: $value");
     }
     bool isNegative = value < 0;
     if (isNegative) value = -value;
@@ -1134,14 +1129,14 @@
 
     assert(_digitBits == 16);
     // The significant bits are in 0 .. 52.
-    var unshiftedDigits = new Uint16List(4);
+    var unshiftedDigits = Uint16List(4);
     unshiftedDigits[0] = (bits[1] << 8) + bits[0];
     unshiftedDigits[1] = (bits[3] << 8) + bits[2];
     unshiftedDigits[2] = (bits[5] << 8) + bits[4];
     // Don't forget to add the hidden bit.
     unshiftedDigits[3] = 0x10 | (bits[6] & 0xF);
 
-    var unshiftedBig = new _BigIntImpl._normalized(false, 4, unshiftedDigits);
+    var unshiftedBig = _BigIntImpl._normalized(false, 4, unshiftedDigits);
     _BigIntImpl absResult = unshiftedBig;
     if (exponent < 0) {
       absResult = unshiftedBig >> -exponent;
@@ -1160,7 +1155,7 @@
    */
   _BigIntImpl operator -() {
     if (_used == 0) return this;
-    return new _BigIntImpl._(!_isNegative, _used, _digits);
+    return _BigIntImpl._(!_isNegative, _used, _digits);
   }
 
   /**
@@ -1178,11 +1173,11 @@
     }
     final resultUsed = used + n;
     final digits = _digits;
-    final resultDigits = new Uint16List(resultUsed);
+    final resultDigits = Uint16List(resultUsed);
     for (int i = used - 1; i >= 0; i--) {
       resultDigits[i + n] = digits[i];
     }
-    return new _BigIntImpl._(_isNegative, resultUsed, resultDigits);
+    return _BigIntImpl._(_isNegative, resultUsed, resultDigits);
   }
 
   /// Same as [_dlShift] but works on the decomposed big integers.
@@ -1219,11 +1214,11 @@
       return _isNegative ? _minusOne : zero;
     }
     final digits = _digits;
-    final resultDigits = new Uint16List(resultUsed);
+    final resultDigits = Uint16List(resultUsed);
     for (var i = n; i < used; i++) {
       resultDigits[i - n] = digits[i];
     }
-    final result = new _BigIntImpl._(_isNegative, resultUsed, resultDigits);
+    final result = _BigIntImpl._(_isNegative, resultUsed, resultDigits);
     if (_isNegative) {
       // Round down if any bit was shifted out.
       for (var i = 0; i < n; i++) {
@@ -1271,7 +1266,7 @@
    */
   _BigIntImpl operator <<(int shiftAmount) {
     if (shiftAmount < 0) {
-      throw new ArgumentError("shift-amount must be posititve $shiftAmount");
+      throw ArgumentError("shift-amount must be posititve $shiftAmount");
     }
     if (_isZero) return this;
     final digitShift = shiftAmount ~/ _digitBits;
@@ -1280,9 +1275,9 @@
       return _dlShift(digitShift);
     }
     var resultUsed = _used + digitShift + 1;
-    var resultDigits = new Uint16List(resultUsed);
+    var resultDigits = Uint16List(resultUsed);
     _lsh(_digits, _used, shiftAmount, resultDigits);
-    return new _BigIntImpl._(_isNegative, resultUsed, resultDigits);
+    return _BigIntImpl._(_isNegative, resultUsed, resultDigits);
   }
 
   // resultDigits[0..resultUsed-1] = xDigits[0..xUsed-1] << n.
@@ -1335,7 +1330,7 @@
    */
   _BigIntImpl operator >>(int shiftAmount) {
     if (shiftAmount < 0) {
-      throw new ArgumentError("shift-amount must be posititve $shiftAmount");
+      throw ArgumentError("shift-amount must be posititve $shiftAmount");
     }
     if (_isZero) return this;
     final digitShift = shiftAmount ~/ _digitBits;
@@ -1349,9 +1344,9 @@
       return _isNegative ? _minusOne : zero;
     }
     final digits = _digits;
-    final resultDigits = new Uint16List(resultUsed);
+    final resultDigits = Uint16List(resultUsed);
     _rsh(digits, used, shiftAmount, resultDigits);
-    final result = new _BigIntImpl._(_isNegative, resultUsed, resultDigits);
+    final result = _BigIntImpl._(_isNegative, resultUsed, resultDigits);
     if (_isNegative) {
       // Round down if any bit was shifted out.
       if ((digits[digitShift] & ((1 << bitShift) - 1)) != 0) {
@@ -1464,9 +1459,9 @@
       return _isNegative == isNegative ? this : -this;
     }
     var resultUsed = used + 1;
-    var resultDigits = new Uint16List(resultUsed);
+    var resultDigits = Uint16List(resultUsed);
     _absAdd(_digits, used, other._digits, otherUsed, resultDigits);
-    return new _BigIntImpl._(isNegative, resultUsed, resultDigits);
+    return _BigIntImpl._(isNegative, resultUsed, resultDigits);
   }
 
   /// Returns `abs(this) - abs(other)` with sign set according to [isNegative].
@@ -1483,9 +1478,9 @@
     if (otherUsed == 0) {
       return _isNegative == isNegative ? this : -this;
     }
-    var resultDigits = new Uint16List(used);
+    var resultDigits = Uint16List(used);
     _absSub(_digits, used, other._digits, otherUsed, resultDigits);
-    return new _BigIntImpl._(isNegative, used, resultDigits);
+    return _BigIntImpl._(isNegative, used, resultDigits);
   }
 
   /// Returns `abs(this) & abs(other)` with sign set according to [isNegative].
@@ -1493,11 +1488,11 @@
     var resultUsed = _min(_used, other._used);
     var digits = _digits;
     var otherDigits = other._digits;
-    var resultDigits = new Uint16List(resultUsed);
+    var resultDigits = Uint16List(resultUsed);
     for (var i = 0; i < resultUsed; i++) {
       resultDigits[i] = digits[i] & otherDigits[i];
     }
-    return new _BigIntImpl._(isNegative, resultUsed, resultDigits);
+    return _BigIntImpl._(isNegative, resultUsed, resultDigits);
   }
 
   /// Returns `abs(this) &~ abs(other)` with sign set according to [isNegative].
@@ -1505,7 +1500,7 @@
     var resultUsed = _used;
     var digits = _digits;
     var otherDigits = other._digits;
-    var resultDigits = new Uint16List(resultUsed);
+    var resultDigits = Uint16List(resultUsed);
     var m = _min(resultUsed, other._used);
     for (var i = 0; i < m; i++) {
       resultDigits[i] = digits[i] & ~otherDigits[i];
@@ -1513,7 +1508,7 @@
     for (var i = m; i < resultUsed; i++) {
       resultDigits[i] = digits[i];
     }
-    return new _BigIntImpl._(isNegative, resultUsed, resultDigits);
+    return _BigIntImpl._(isNegative, resultUsed, resultDigits);
   }
 
   /// Returns `abs(this) | abs(other)` with sign set according to [isNegative].
@@ -1523,7 +1518,7 @@
     var resultUsed = _max(used, otherUsed);
     var digits = _digits;
     var otherDigits = other._digits;
-    var resultDigits = new Uint16List(resultUsed);
+    var resultDigits = Uint16List(resultUsed);
     var l, m;
     if (used < otherUsed) {
       l = other;
@@ -1539,7 +1534,7 @@
     for (var i = m; i < resultUsed; i++) {
       resultDigits[i] = lDigits[i];
     }
-    return new _BigIntImpl._(isNegative, resultUsed, resultDigits);
+    return _BigIntImpl._(isNegative, resultUsed, resultDigits);
   }
 
   /// Returns `abs(this) ^ abs(other)` with sign set according to [isNegative].
@@ -1549,7 +1544,7 @@
     var resultUsed = _max(used, otherUsed);
     var digits = _digits;
     var otherDigits = other._digits;
-    var resultDigits = new Uint16List(resultUsed);
+    var resultDigits = Uint16List(resultUsed);
     var l, m;
     if (used < otherUsed) {
       l = other;
@@ -1565,7 +1560,7 @@
     for (var i = m; i < resultUsed; i++) {
       resultDigits[i] = lDigits[i];
     }
-    return new _BigIntImpl._(isNegative, resultUsed, resultDigits);
+    return _BigIntImpl._(isNegative, resultUsed, resultDigits);
   }
 
   /**
@@ -1791,13 +1786,13 @@
     var resultUsed = used + otherUsed;
     var digits = _digits;
     var otherDigits = other._digits;
-    var resultDigits = new Uint16List(resultUsed);
+    var resultDigits = Uint16List(resultUsed);
     var i = 0;
     while (i < otherUsed) {
       _mulAdd(otherDigits[i], digits, 0, resultDigits, i, used);
       i++;
     }
-    return new _BigIntImpl._(
+    return _BigIntImpl._(
         _isNegative != other._isNegative, resultUsed, resultDigits);
   }
 
@@ -1842,7 +1837,7 @@
     var lastQuo_used = _lastQuoRemUsed - _lastRemUsed;
     var quo_digits = _cloneDigits(
         _lastQuoRemDigits, _lastRemUsed, _lastQuoRemUsed, lastQuo_used);
-    var quo = new _BigIntImpl._(false, lastQuo_used, quo_digits);
+    var quo = _BigIntImpl._(false, lastQuo_used, quo_digits);
     if ((_isNegative != other._isNegative) && (quo._used > 0)) {
       quo = -quo;
     }
@@ -1861,7 +1856,7 @@
     // denormalized _lastQuoRem_digits[0.._lastRem_used-1] with proper sign.
     var remDigits =
         _cloneDigits(_lastQuoRemDigits, 0, _lastRemUsed, _lastRemUsed);
-    var rem = new _BigIntImpl._(false, _lastRemUsed, remDigits);
+    var rem = _BigIntImpl._(false, _lastRemUsed, remDigits);
     if (_lastRem_nsh > 0) {
       rem = rem >> _lastRem_nsh; // Denormalize remainder.
     }
@@ -1901,9 +1896,9 @@
     Uint16List yDigits;
     int yUsed;
     if (nsh > 0) {
-      yDigits = new Uint16List(other._used + 5);
+      yDigits = Uint16List(other._used + 5);
       yUsed = _lShiftDigits(other._digits, other._used, nsh, yDigits);
-      resultDigits = new Uint16List(_used + 5);
+      resultDigits = Uint16List(_used + 5);
       resultUsed = _lShiftDigits(_digits, _used, nsh, resultDigits);
     } else {
       yDigits = other._digits;
@@ -1915,7 +1910,7 @@
     var i = resultUsed;
     var j = i - yUsed;
     // tmpDigits is a temporary array of i (resultUsed) digits.
-    var tmpDigits = new Uint16List(i);
+    var tmpDigits = Uint16List(i);
     var tmpUsed = _dlShiftDigits(yDigits, yUsed, j, tmpDigits);
     // Explicit first division step in case normalized dividend is larger or
     // equal to shifted normalized divisor.
@@ -1930,7 +1925,7 @@
     }
 
     // Negate y so we can later use _mulAdd instead of non-existent _mulSub.
-    var nyDigits = new Uint16List(yUsed + 2);
+    var nyDigits = Uint16List(yUsed + 2);
     nyDigits[yUsed] = 1;
     _absSub(nyDigits, yUsed + 1, yDigits, yUsed, nyDigits);
     // nyDigits is read-only and has yUsed digits (possibly including several
@@ -2138,7 +2133,7 @@
 
   _BigIntImpl pow(int exponent) {
     if (exponent < 0) {
-      throw new ArgumentError("Exponent must not be negative: $exponent");
+      throw ArgumentError("Exponent must not be negative: $exponent");
     }
     if (exponent == 0) return one;
 
@@ -2168,10 +2163,10 @@
     _BigIntImpl exponent = bigExponent;
     _BigIntImpl modulus = bigModulus;
     if (exponent._isNegative) {
-      throw new ArgumentError("exponent must be positive: $exponent");
+      throw ArgumentError("exponent must be positive: $exponent");
     }
     if (modulus <= zero) {
-      throw new ArgumentError("modulus must be strictly positive: $modulus");
+      throw ArgumentError("modulus must be strictly positive: $modulus");
     }
     if (exponent._isZero) return one;
 
@@ -2179,10 +2174,10 @@
     final modulusUsed2p4 = 2 * modulusUsed + 4;
     final exponentBitlen = exponent.bitLength;
     if (exponentBitlen <= 0) return one;
-    _BigIntReduction z = new _BigIntClassic(modulus);
-    var resultDigits = new Uint16List(modulusUsed2p4);
-    var result2Digits = new Uint16List(modulusUsed2p4);
-    var gDigits = new Uint16List(modulusUsed);
+    _BigIntReduction z = _BigIntClassic(modulus);
+    var resultDigits = Uint16List(modulusUsed2p4);
+    var result2Digits = Uint16List(modulusUsed2p4);
+    var gDigits = Uint16List(modulusUsed);
     var gUsed = z.convert(this, gDigits);
     // Initialize result with g.
     // Copy leading zero if any.
@@ -2225,14 +2220,14 @@
     if (inv) {
       if ((yUsed == 1) && (yDigits[0] == 1)) return one;
       if ((yUsed == 0) || (yDigits[0].isEven && xDigits[0].isEven)) {
-        throw new Exception("Not coprime");
+        throw Exception("Not coprime");
       }
     } else {
       if (x._isZero) {
-        throw new ArgumentError.value(0, "this", "must not be zero");
+        throw ArgumentError.value(0, "this", "must not be zero");
       }
       if (y._isZero) {
-        throw new ArgumentError.value(0, "other", "must not be zero");
+        throw ArgumentError.value(0, "other", "must not be zero");
       }
       if (((xUsed == 1) && (xDigits[0] == 1)) ||
           ((yUsed == 1) && (yDigits[0] == 1))) return one;
@@ -2268,15 +2263,15 @@
     var aDigits, bDigits, cDigits, dDigits;
     bool aIsNegative, bIsNegative, cIsNegative, dIsNegative;
     if (ac) {
-      aDigits = new Uint16List(abcdLen);
+      aDigits = Uint16List(abcdLen);
       aIsNegative = false;
       aDigits[0] = 1;
-      cDigits = new Uint16List(abcdLen);
+      cDigits = Uint16List(abcdLen);
       cIsNegative = false;
     }
-    bDigits = new Uint16List(abcdLen);
+    bDigits = Uint16List(abcdLen);
     bIsNegative = false;
-    dDigits = new Uint16List(abcdLen);
+    dDigits = Uint16List(abcdLen);
     dIsNegative = false;
     dDigits[0] = 1;
 
@@ -2421,13 +2416,13 @@
       if (shiftAmount > 0) {
         maxUsed = _lShiftDigits(vDigits, maxUsed, shiftAmount, vDigits);
       }
-      return new _BigIntImpl._(false, maxUsed, vDigits);
+      return _BigIntImpl._(false, maxUsed, vDigits);
     }
     // No inverse if v != 1.
     var i = maxUsed - 1;
     while ((i > 0) && (vDigits[i] == 0)) --i;
     if ((i != 0) || (vDigits[0] != 1)) {
-      throw new Exception("Not coprime");
+      throw Exception("Not coprime");
     }
 
     if (dIsNegative) {
@@ -2453,7 +2448,7 @@
         _absSub(dDigits, abcdUsed, xDigits, maxUsed, dDigits);
       }
     }
-    return new _BigIntImpl._(false, maxUsed, dDigits);
+    return _BigIntImpl._(false, maxUsed, dDigits);
   }
 
   /**
@@ -2468,7 +2463,7 @@
   _BigIntImpl modInverse(BigInt bigInt) {
     _BigIntImpl modulus = bigInt;
     if (modulus <= zero) {
-      throw new ArgumentError("Modulus must be strictly positive: $modulus");
+      throw ArgumentError("Modulus must be strictly positive: $modulus");
     }
     if (modulus == one) return zero;
     var tmp = this;
@@ -2579,7 +2574,7 @@
     if (_used <= _simpleValidIntDigits) return true;
     var asInt = toInt();
     if (!asInt.toDouble().isFinite) return false;
-    return this == new _BigIntImpl._fromInt(asInt);
+    return this == _BigIntImpl._fromInt(asInt);
   }
 
   int toInt() {
@@ -2607,7 +2602,7 @@
     if (_isZero) return 0.0;
 
     // We fill the 53 bits little-endian.
-    var resultBits = new Uint8List(8);
+    var resultBits = Uint8List(8);
 
     var length = _digitBits * (_used - 1) + _digits[_used - 1].bitLength;
     if (length - 53 > maxDoubleExponent) return double.infinity;
@@ -2739,7 +2734,7 @@
    * The [radix] argument must be an integer in the range 2 to 36.
    */
   String toRadixString(int radix) {
-    if (radix > 36) throw new RangeError.range(radix, 2, 36);
+    if (radix > 36) throw RangeError.range(radix, 2, 36);
 
     if (_used == 0) return "0";
 
@@ -2751,7 +2746,7 @@
 
     if (radix == 16) return _toHexString();
 
-    var base = new _BigIntImpl._fromInt(radix);
+    var base = _BigIntImpl._fromInt(radix);
     var reversedDigitCodeUnits = <int>[];
     var rest = this.abs();
     while (!rest._isZero) {
@@ -2759,7 +2754,7 @@
       rest = rest ~/ base;
       reversedDigitCodeUnits.add(_toRadixCodeUnit(digit));
     }
-    var digitString = new String.fromCharCodes(reversedDigitCodeUnits.reversed);
+    var digitString = String.fromCharCodes(reversedDigitCodeUnits.reversed);
     if (_isNegative) return "-" + digitString;
     return digitString;
   }
@@ -2782,7 +2777,7 @@
       const _dash = 45;
       chars.add(_dash);
     }
-    return new String.fromCharCodes(chars.reversed);
+    return String.fromCharCodes(chars.reversed);
   }
 }
 
@@ -2832,7 +2827,7 @@
   }
 
   _BigIntImpl revert(Uint16List xDigits, int xUsed) {
-    return new _BigIntImpl._(false, xUsed, xDigits);
+    return _BigIntImpl._(false, xUsed, xDigits);
   }
 
   int _reduce(Uint16List xDigits, int xUsed) {
@@ -2845,7 +2840,7 @@
   }
 
   int sqr(Uint16List xDigits, int xUsed, Uint16List resultDigits) {
-    var b = new _BigIntImpl._(false, xUsed, xDigits);
+    var b = _BigIntImpl._(false, xUsed, xDigits);
     var b2 = b * b;
     for (int i = 0; i < b2._used; i++) {
       resultDigits[i] = b2._digits[i];
diff --git a/pkg/dev_compiler/tool/input_sdk/patch/developer_patch.dart b/pkg/dev_compiler/tool/input_sdk/patch/developer_patch.dart
index 99a85fd..a885aae 100644
--- a/pkg/dev_compiler/tool/input_sdk/patch/developer_patch.dart
+++ b/pkg/dev_compiler/tool/input_sdk/patch/developer_patch.dart
@@ -11,7 +11,7 @@
 
 @patch
 @ForceInline()
-bool debugger({bool when: true, String message}) {
+bool debugger({bool when = true, String message}) {
   if (when) {
     JS('', 'debugger');
   }
@@ -27,15 +27,15 @@
 void log(String message,
     {DateTime time,
     int sequenceNumber,
-    int level: 0,
-    String name: '',
+    int level = 0,
+    String name = '',
     Zone zone,
     Object error,
     StackTrace stackTrace}) {
   // TODO.
 }
 
-final _extensions = new Map<String, ServiceExtensionHandler>();
+final _extensions = Map<String, ServiceExtensionHandler>();
 
 @patch
 ServiceExtensionHandler _lookupExtension(String method) {
@@ -146,11 +146,11 @@
     }
     // Throw an exception if we've reached the maximum number of user tags.
     if (_instances.length == UserTag.MAX_USER_TAGS) {
-      throw new UnsupportedError(
+      throw UnsupportedError(
           'UserTag instance limit (${UserTag.MAX_USER_TAGS}) reached.');
     }
     // Create a new instance and add it to the instance map.
-    var instance = new _FakeUserTag.real(label);
+    var instance = _FakeUserTag.real(label);
     _instances[label] = instance;
     return instance;
   }
@@ -163,7 +163,7 @@
     return old;
   }
 
-  static final UserTag _defaultTag = new _FakeUserTag('Default');
+  static final UserTag _defaultTag = _FakeUserTag('Default');
 }
 
 var _currentTag = _FakeUserTag._defaultTag;
diff --git a/pkg/dev_compiler/tool/input_sdk/patch/io_patch.dart b/pkg/dev_compiler/tool/input_sdk/patch/io_patch.dart
index 672eb0a..20cb5ff 100644
--- a/pkg/dev_compiler/tool/input_sdk/patch/io_patch.dart
+++ b/pkg/dev_compiler/tool/input_sdk/patch/io_patch.dart
@@ -12,43 +12,43 @@
 class _Directory {
   @patch
   static _current(_Namespace namespace) {
-    throw new UnsupportedError("Directory._current");
+    throw UnsupportedError("Directory._current");
   }
 
   @patch
   static _setCurrent(_Namespace namespace, Uint8List rawPath) {
-    throw new UnsupportedError("Directory_SetCurrent");
+    throw UnsupportedError("Directory_SetCurrent");
   }
 
   @patch
   static _createTemp(_Namespace namespace, Uint8List rawPath) {
-    throw new UnsupportedError("Directory._createTemp");
+    throw UnsupportedError("Directory._createTemp");
   }
 
   @patch
   static String _systemTemp(_Namespace namespace) {
-    throw new UnsupportedError("Directory._systemTemp");
+    throw UnsupportedError("Directory._systemTemp");
   }
 
   @patch
   static _exists(_Namespace namespace, Uint8List rawPath) {
-    throw new UnsupportedError("Directory._exists");
+    throw UnsupportedError("Directory._exists");
   }
 
   @patch
   static _create(_Namespace namespace, Uint8List rawPath) {
-    throw new UnsupportedError("Directory._create");
+    throw UnsupportedError("Directory._create");
   }
 
   @patch
   static _deleteNative(
       _Namespace namespace, Uint8List rawPath, bool recursive) {
-    throw new UnsupportedError("Directory._deleteNative");
+    throw UnsupportedError("Directory._deleteNative");
   }
 
   @patch
   static _rename(_Namespace namespace, Uint8List rawPath, String newPath) {
-    throw new UnsupportedError("Directory._rename");
+    throw UnsupportedError("Directory._rename");
   }
 
   @patch
@@ -58,7 +58,7 @@
       Uint8List rawPath,
       bool recursive,
       bool followLinks) {
-    throw new UnsupportedError("Directory._fillWithDirectoryListing");
+    throw UnsupportedError("Directory._fillWithDirectoryListing");
   }
 }
 
@@ -66,7 +66,7 @@
 class _AsyncDirectoryListerOps {
   @patch
   factory _AsyncDirectoryListerOps(int pointer) {
-    throw new UnsupportedError("Directory._list");
+    throw UnsupportedError("Directory._list");
   }
 }
 
@@ -74,7 +74,7 @@
 class _EventHandler {
   @patch
   static void _sendData(Object sender, SendPort sendPort, int data) {
-    throw new UnsupportedError("EventHandler._sendData");
+    throw UnsupportedError("EventHandler._sendData");
   }
 }
 
@@ -82,7 +82,7 @@
 class FileStat {
   @patch
   static _statSync(_Namespace namespace, String path) {
-    throw new UnsupportedError("FileStat.stat");
+    throw UnsupportedError("FileStat.stat");
   }
 }
 
@@ -91,17 +91,17 @@
   @patch
   static _getTypeNative(
       _Namespace namespace, Uint8List rawPath, bool followLinks) {
-    throw new UnsupportedError("FileSystemEntity._getType");
+    throw UnsupportedError("FileSystemEntity._getType");
   }
 
   @patch
   static _identicalNative(_Namespace namespace, String path1, String path2) {
-    throw new UnsupportedError("FileSystemEntity._identical");
+    throw UnsupportedError("FileSystemEntity._identical");
   }
 
   @patch
   static _resolveSymbolicLinks(_Namespace namespace, Uint8List rawPath) {
-    throw new UnsupportedError("FileSystemEntity._resolveSymbolicLinks");
+    throw UnsupportedError("FileSystemEntity._resolveSymbolicLinks");
   }
 }
 
@@ -109,82 +109,82 @@
 class _File {
   @patch
   static _exists(_Namespace namespace, Uint8List rawPath) {
-    throw new UnsupportedError("File._exists");
+    throw UnsupportedError("File._exists");
   }
 
   @patch
   static _create(_Namespace namespace, Uint8List rawPath) {
-    throw new UnsupportedError("File._create");
+    throw UnsupportedError("File._create");
   }
 
   @patch
   static _createLink(_Namespace namespace, Uint8List rawPath, String target) {
-    throw new UnsupportedError("File._createLink");
+    throw UnsupportedError("File._createLink");
   }
 
   @patch
   static _linkTarget(_Namespace namespace, Uint8List rawPath) {
-    throw new UnsupportedError("File._linkTarget");
+    throw UnsupportedError("File._linkTarget");
   }
 
   @patch
   static _deleteNative(_Namespace namespace, Uint8List rawPath) {
-    throw new UnsupportedError("File._deleteNative");
+    throw UnsupportedError("File._deleteNative");
   }
 
   @patch
   static _deleteLinkNative(_Namespace namespace, Uint8List rawPath) {
-    throw new UnsupportedError("File._deleteLinkNative");
+    throw UnsupportedError("File._deleteLinkNative");
   }
 
   @patch
   static _rename(_Namespace namespace, Uint8List oldPath, String newPath) {
-    throw new UnsupportedError("File._rename");
+    throw UnsupportedError("File._rename");
   }
 
   @patch
   static _renameLink(_Namespace namespace, Uint8List oldPath, String newPath) {
-    throw new UnsupportedError("File._renameLink");
+    throw UnsupportedError("File._renameLink");
   }
 
   @patch
   static _copy(_Namespace namespace, Uint8List oldPath, String newPath) {
-    throw new UnsupportedError("File._copy");
+    throw UnsupportedError("File._copy");
   }
 
   @patch
   static _lengthFromPath(_Namespace namespace, Uint8List rawPath) {
-    throw new UnsupportedError("File._lengthFromPath");
+    throw UnsupportedError("File._lengthFromPath");
   }
 
   @patch
   static _lastModified(_Namespace namespace, Uint8List rawPath) {
-    throw new UnsupportedError("File._lastModified");
+    throw UnsupportedError("File._lastModified");
   }
 
   @patch
   static _lastAccessed(_Namespace namespace, Uint8List rawPath) {
-    throw new UnsupportedError("File._lastAccessed");
+    throw UnsupportedError("File._lastAccessed");
   }
 
   @patch
   static _setLastModified(_Namespace namespace, Uint8List rawPath, int millis) {
-    throw new UnsupportedError("File._setLastModified");
+    throw UnsupportedError("File._setLastModified");
   }
 
   @patch
   static _setLastAccessed(_Namespace namespace, Uint8List rawPath, int millis) {
-    throw new UnsupportedError("File._setLastAccessed");
+    throw UnsupportedError("File._setLastAccessed");
   }
 
   @patch
   static _open(_Namespace namespace, Uint8List rawPath, int mode) {
-    throw new UnsupportedError("File._open");
+    throw UnsupportedError("File._open");
   }
 
   @patch
   static int _openStdio(int fd) {
-    throw new UnsupportedError("File._openStdio");
+    throw UnsupportedError("File._openStdio");
   }
 }
 
@@ -192,17 +192,17 @@
 class _Namespace {
   @patch
   static void _setupNamespace(var namespace) {
-    throw new UnsupportedError("_Namespace");
+    throw UnsupportedError("_Namespace");
   }
 
   @patch
   static _Namespace get _namespace {
-    throw new UnsupportedError("_Namespace");
+    throw UnsupportedError("_Namespace");
   }
 
   @patch
   static int get _namespacePointer {
-    throw new UnsupportedError("_Namespace");
+    throw UnsupportedError("_Namespace");
   }
 }
 
@@ -210,7 +210,7 @@
 class _RandomAccessFileOps {
   @patch
   factory _RandomAccessFileOps(int pointer) {
-    throw new UnsupportedError("RandomAccessFile");
+    throw UnsupportedError("RandomAccessFile");
   }
 }
 
@@ -218,7 +218,7 @@
 class _IOCrypto {
   @patch
   static Uint8List getRandomBytes(int count) {
-    throw new UnsupportedError("_IOCrypto.getRandomBytes");
+    throw UnsupportedError("_IOCrypto.getRandomBytes");
   }
 }
 
@@ -226,72 +226,72 @@
 class _Platform {
   @patch
   static int _numberOfProcessors() {
-    throw new UnsupportedError("Platform._numberOfProcessors");
+    throw UnsupportedError("Platform._numberOfProcessors");
   }
 
   @patch
   static String _pathSeparator() {
-    throw new UnsupportedError("Platform._pathSeparator");
+    throw UnsupportedError("Platform._pathSeparator");
   }
 
   @patch
   static String _operatingSystem() {
-    throw new UnsupportedError("Platform._operatingSystem");
+    throw UnsupportedError("Platform._operatingSystem");
   }
 
   @patch
   static _operatingSystemVersion() {
-    throw new UnsupportedError("Platform._operatingSystemVersion");
+    throw UnsupportedError("Platform._operatingSystemVersion");
   }
 
   @patch
   static _localHostname() {
-    throw new UnsupportedError("Platform._localHostname");
+    throw UnsupportedError("Platform._localHostname");
   }
 
   @patch
   static _executable() {
-    throw new UnsupportedError("Platform._executable");
+    throw UnsupportedError("Platform._executable");
   }
 
   @patch
   static _resolvedExecutable() {
-    throw new UnsupportedError("Platform._resolvedExecutable");
+    throw UnsupportedError("Platform._resolvedExecutable");
   }
 
   @patch
   static List<String> _executableArguments() {
-    throw new UnsupportedError("Platform._executableArguments");
+    throw UnsupportedError("Platform._executableArguments");
   }
 
   @patch
   static String _packageRoot() {
-    throw new UnsupportedError("Platform._packageRoot");
+    throw UnsupportedError("Platform._packageRoot");
   }
 
   @patch
   static String _packageConfig() {
-    throw new UnsupportedError("Platform._packageConfig");
+    throw UnsupportedError("Platform._packageConfig");
   }
 
   @patch
   static _environment() {
-    throw new UnsupportedError("Platform._environment");
+    throw UnsupportedError("Platform._environment");
   }
 
   @patch
   static String _version() {
-    throw new UnsupportedError("Platform._version");
+    throw UnsupportedError("Platform._version");
   }
 
   @patch
   static String _localeName() {
-    throw new UnsupportedError("Platform._localeName");
+    throw UnsupportedError("Platform._localeName");
   }
 
   @patch
   static Uri _script() {
-    throw new UnsupportedError("Platform._script");
+    throw UnsupportedError("Platform._script");
   }
 }
 
@@ -299,32 +299,32 @@
 class _ProcessUtils {
   @patch
   static void _exit(int status) {
-    throw new UnsupportedError("ProcessUtils._exit");
+    throw UnsupportedError("ProcessUtils._exit");
   }
 
   @patch
   static void _setExitCode(int status) {
-    throw new UnsupportedError("ProcessUtils._setExitCode");
+    throw UnsupportedError("ProcessUtils._setExitCode");
   }
 
   @patch
   static int _getExitCode() {
-    throw new UnsupportedError("ProcessUtils._getExitCode");
+    throw UnsupportedError("ProcessUtils._getExitCode");
   }
 
   @patch
   static void _sleep(int millis) {
-    throw new UnsupportedError("ProcessUtils._sleep");
+    throw UnsupportedError("ProcessUtils._sleep");
   }
 
   @patch
   static int _pid(Process process) {
-    throw new UnsupportedError("ProcessUtils._pid");
+    throw UnsupportedError("ProcessUtils._pid");
   }
 
   @patch
   static Stream<ProcessSignal> _watchSignal(ProcessSignal signal) {
-    throw new UnsupportedError("ProcessUtils._watchSignal");
+    throw UnsupportedError("ProcessUtils._watchSignal");
   }
 }
 
@@ -332,12 +332,12 @@
 class ProcessInfo {
   @patch
   static int get currentRss {
-    throw new UnsupportedError("ProcessInfo.currentRss");
+    throw UnsupportedError("ProcessInfo.currentRss");
   }
 
   @patch
   static int get maxRss {
-    throw new UnsupportedError("ProcessInfo.maxRss");
+    throw UnsupportedError("ProcessInfo.maxRss");
   }
 }
 
@@ -347,37 +347,37 @@
   static Future<Process> start(String executable, List<String> arguments,
       {String workingDirectory,
       Map<String, String> environment,
-      bool includeParentEnvironment: true,
-      bool runInShell: false,
-      ProcessStartMode mode: ProcessStartMode.normal}) {
-    throw new UnsupportedError("Process.start");
+      bool includeParentEnvironment = true,
+      bool runInShell = false,
+      ProcessStartMode mode = ProcessStartMode.normal}) {
+    throw UnsupportedError("Process.start");
   }
 
   @patch
   static Future<ProcessResult> run(String executable, List<String> arguments,
       {String workingDirectory,
       Map<String, String> environment,
-      bool includeParentEnvironment: true,
-      bool runInShell: false,
-      Encoding stdoutEncoding: systemEncoding,
-      Encoding stderrEncoding: systemEncoding}) {
-    throw new UnsupportedError("Process.run");
+      bool includeParentEnvironment = true,
+      bool runInShell = false,
+      Encoding stdoutEncoding = systemEncoding,
+      Encoding stderrEncoding = systemEncoding}) {
+    throw UnsupportedError("Process.run");
   }
 
   @patch
   static ProcessResult runSync(String executable, List<String> arguments,
       {String workingDirectory,
       Map<String, String> environment,
-      bool includeParentEnvironment: true,
-      bool runInShell: false,
-      Encoding stdoutEncoding: systemEncoding,
-      Encoding stderrEncoding: systemEncoding}) {
-    throw new UnsupportedError("Process.runSync");
+      bool includeParentEnvironment = true,
+      bool runInShell = false,
+      Encoding stdoutEncoding = systemEncoding,
+      Encoding stderrEncoding = systemEncoding}) {
+    throw UnsupportedError("Process.runSync");
   }
 
   @patch
   static bool killPid(int pid, [ProcessSignal signal = ProcessSignal.sigterm]) {
-    throw new UnsupportedError("Process.killPid");
+    throw UnsupportedError("Process.killPid");
   }
 }
 
@@ -385,38 +385,38 @@
 class InternetAddress {
   @patch
   static InternetAddress get LOOPBACK_IP_V4 {
-    throw new UnsupportedError("InternetAddress.LOOPBACK_IP_V4");
+    throw UnsupportedError("InternetAddress.LOOPBACK_IP_V4");
   }
 
   @patch
   static InternetAddress get LOOPBACK_IP_V6 {
-    throw new UnsupportedError("InternetAddress.LOOPBACK_IP_V6");
+    throw UnsupportedError("InternetAddress.LOOPBACK_IP_V6");
   }
 
   @patch
   static InternetAddress get ANY_IP_V4 {
-    throw new UnsupportedError("InternetAddress.ANY_IP_V4");
+    throw UnsupportedError("InternetAddress.ANY_IP_V4");
   }
 
   @patch
   static InternetAddress get ANY_IP_V6 {
-    throw new UnsupportedError("InternetAddress.ANY_IP_V6");
+    throw UnsupportedError("InternetAddress.ANY_IP_V6");
   }
 
   @patch
   factory InternetAddress(String address) {
-    throw new UnsupportedError("InternetAddress");
+    throw UnsupportedError("InternetAddress");
   }
   @patch
   static Future<List<InternetAddress>> lookup(String host,
-      {InternetAddressType type: InternetAddressType.any}) {
-    throw new UnsupportedError("InternetAddress.lookup");
+      {InternetAddressType type = InternetAddressType.any}) {
+    throw UnsupportedError("InternetAddress.lookup");
   }
 
   @patch
   static InternetAddress _cloneWithNewHost(
       InternetAddress address, String host) {
-    throw new UnsupportedError("InternetAddress._cloneWithNewHost");
+    throw UnsupportedError("InternetAddress._cloneWithNewHost");
   }
 }
 
@@ -424,15 +424,15 @@
 class NetworkInterface {
   @patch
   static bool get listSupported {
-    throw new UnsupportedError("NetworkInterface.listSupported");
+    throw UnsupportedError("NetworkInterface.listSupported");
   }
 
   @patch
   static Future<List<NetworkInterface>> list(
-      {bool includeLoopback: false,
-      bool includeLinkLocal: false,
-      InternetAddressType type: InternetAddressType.any}) {
-    throw new UnsupportedError("NetworkInterface.list");
+      {bool includeLoopback = false,
+      bool includeLinkLocal = false,
+      InternetAddressType type = InternetAddressType.any}) {
+    throw UnsupportedError("NetworkInterface.list");
   }
 }
 
@@ -440,8 +440,8 @@
 class RawServerSocket {
   @patch
   static Future<RawServerSocket> bind(address, int port,
-      {int backlog: 0, bool v6Only: false, bool shared: false}) {
-    throw new UnsupportedError("RawServerSocket.bind");
+      {int backlog = 0, bool v6Only = false, bool shared = false}) {
+    throw UnsupportedError("RawServerSocket.bind");
   }
 }
 
@@ -449,8 +449,8 @@
 class ServerSocket {
   @patch
   static Future<ServerSocket> bind(address, int port,
-      {int backlog: 0, bool v6Only: false, bool shared: false}) {
-    throw new UnsupportedError("ServerSocket.bind");
+      {int backlog = 0, bool v6Only = false, bool shared = false}) {
+    throw UnsupportedError("ServerSocket.bind");
   }
 }
 
@@ -459,7 +459,7 @@
   @patch
   static Future<RawSocket> connect(host, int port,
       {sourceAddress, Duration timeout}) {
-    throw new UnsupportedError("RawSocket constructor");
+    throw UnsupportedError("RawSocket constructor");
   }
 }
 
@@ -468,7 +468,7 @@
   @patch
   static Future<Socket> _connect(host, int port,
       {sourceAddress, Duration timeout}) {
-    throw new UnsupportedError("Socket constructor");
+    throw UnsupportedError("Socket constructor");
   }
 }
 
@@ -476,7 +476,7 @@
 class SecureSocket {
   @patch
   factory SecureSocket._(RawSecureSocket rawSocket) {
-    throw new UnsupportedError("SecureSocket constructor");
+    throw UnsupportedError("SecureSocket constructor");
   }
 }
 
@@ -484,25 +484,25 @@
 class RawSynchronousSocket {
   @patch
   static RawSynchronousSocket connectSync(host, int port) {
-    throw new UnsupportedError("RawSynchronousSocket.connectSync");
+    throw UnsupportedError("RawSynchronousSocket.connectSync");
   }
 }
 
 @patch
 class SecurityContext {
   @patch
-  factory SecurityContext({bool withTrustedRoots: false}) {
-    throw new UnsupportedError("SecurityContext constructor");
+  factory SecurityContext({bool withTrustedRoots = false}) {
+    throw UnsupportedError("SecurityContext constructor");
   }
 
   @patch
   static SecurityContext get defaultContext {
-    throw new UnsupportedError("default SecurityContext getter");
+    throw UnsupportedError("default SecurityContext getter");
   }
 
   @patch
   static bool get alpnSupported {
-    throw new UnsupportedError("SecurityContext alpnSupported getter");
+    throw UnsupportedError("SecurityContext alpnSupported getter");
   }
 }
 
@@ -510,7 +510,7 @@
 class X509Certificate {
   @patch
   factory X509Certificate._() {
-    throw new UnsupportedError("X509Certificate constructor");
+    throw UnsupportedError("X509Certificate constructor");
   }
 }
 
@@ -518,8 +518,8 @@
 class RawDatagramSocket {
   @patch
   static Future<RawDatagramSocket> bind(host, int port,
-      {bool reuseAddress: true}) {
-    throw new UnsupportedError("RawDatagramSocket.bind");
+      {bool reuseAddress = true}) {
+    throw UnsupportedError("RawDatagramSocket.bind");
   }
 }
 
@@ -527,7 +527,7 @@
 class _SecureFilter {
   @patch
   factory _SecureFilter() {
-    throw new UnsupportedError("_SecureFilter._SecureFilter");
+    throw UnsupportedError("_SecureFilter._SecureFilter");
   }
 }
 
@@ -535,22 +535,22 @@
 class _StdIOUtils {
   @patch
   static Stdin _getStdioInputStream(int fd) {
-    throw new UnsupportedError("StdIOUtils._getStdioInputStream");
+    throw UnsupportedError("StdIOUtils._getStdioInputStream");
   }
 
   @patch
   static _getStdioOutputStream(int fd) {
-    throw new UnsupportedError("StdIOUtils._getStdioOutputStream");
+    throw UnsupportedError("StdIOUtils._getStdioOutputStream");
   }
 
   @patch
   static int _socketType(Socket socket) {
-    throw new UnsupportedError("StdIOUtils._socketType");
+    throw UnsupportedError("StdIOUtils._socketType");
   }
 
   @patch
   static _getStdioHandleType(int fd) {
-    throw new UnsupportedError("StdIOUtils._getStdioHandleType");
+    throw UnsupportedError("StdIOUtils._getStdioHandleType");
   }
 }
 
@@ -558,7 +558,7 @@
 class _WindowsCodePageDecoder {
   @patch
   static String _decodeBytes(List<int> bytes) {
-    throw new UnsupportedError("_WindowsCodePageDecoder._decodeBytes");
+    throw UnsupportedError("_WindowsCodePageDecoder._decodeBytes");
   }
 }
 
@@ -566,7 +566,7 @@
 class _WindowsCodePageEncoder {
   @patch
   static List<int> _encodeString(String string) {
-    throw new UnsupportedError("_WindowsCodePageEncoder._encodeString");
+    throw UnsupportedError("_WindowsCodePageEncoder._encodeString");
   }
 }
 
@@ -581,13 +581,13 @@
       int strategy,
       List<int> dictionary,
       bool raw) {
-    throw new UnsupportedError("_newZLibDeflateFilter");
+    throw UnsupportedError("_newZLibDeflateFilter");
   }
 
   @patch
   static RawZLibFilter _makeZLibInflateFilter(
       int windowBits, List<int> dictionary, bool raw) {
-    throw new UnsupportedError("_newZLibInflateFilter");
+    throw UnsupportedError("_newZLibInflateFilter");
   }
 }
 
@@ -595,32 +595,32 @@
 class Stdin {
   @patch
   int readByteSync() {
-    throw new UnsupportedError("Stdin.readByteSync");
+    throw UnsupportedError("Stdin.readByteSync");
   }
 
   @patch
   bool get echoMode {
-    throw new UnsupportedError("Stdin.echoMode");
+    throw UnsupportedError("Stdin.echoMode");
   }
 
   @patch
   void set echoMode(bool enabled) {
-    throw new UnsupportedError("Stdin.echoMode");
+    throw UnsupportedError("Stdin.echoMode");
   }
 
   @patch
   bool get lineMode {
-    throw new UnsupportedError("Stdin.lineMode");
+    throw UnsupportedError("Stdin.lineMode");
   }
 
   @patch
   void set lineMode(bool enabled) {
-    throw new UnsupportedError("Stdin.lineMode");
+    throw UnsupportedError("Stdin.lineMode");
   }
 
   @patch
   bool get supportsAnsiEscapes {
-    throw new UnsupportedError("Stdin.supportsAnsiEscapes");
+    throw UnsupportedError("Stdin.supportsAnsiEscapes");
   }
 }
 
@@ -628,22 +628,22 @@
 class Stdout {
   @patch
   bool _hasTerminal(int fd) {
-    throw new UnsupportedError("Stdout.hasTerminal");
+    throw UnsupportedError("Stdout.hasTerminal");
   }
 
   @patch
   int _terminalColumns(int fd) {
-    throw new UnsupportedError("Stdout.terminalColumns");
+    throw UnsupportedError("Stdout.terminalColumns");
   }
 
   @patch
   int _terminalLines(int fd) {
-    throw new UnsupportedError("Stdout.terminalLines");
+    throw UnsupportedError("Stdout.terminalLines");
   }
 
   @patch
   static bool _supportsAnsiEscapes(int fd) {
-    throw new UnsupportedError("Stdout.supportsAnsiEscapes");
+    throw UnsupportedError("Stdout.supportsAnsiEscapes");
   }
 }
 
@@ -652,12 +652,12 @@
   @patch
   static Stream<FileSystemEvent> _watch(
       String path, int events, bool recursive) {
-    throw new UnsupportedError("_FileSystemWatcher.watch");
+    throw UnsupportedError("_FileSystemWatcher.watch");
   }
 
   @patch
   static bool get isSupported {
-    throw new UnsupportedError("_FileSystemWatcher.isSupported");
+    throw UnsupportedError("_FileSystemWatcher.isSupported");
   }
 }
 
@@ -665,6 +665,6 @@
 class _IOService {
   @patch
   static Future _dispatch(int request, List data) {
-    throw new UnsupportedError("_IOService._dispatch");
+    throw UnsupportedError("_IOService._dispatch");
   }
 }
diff --git a/pkg/dev_compiler/tool/input_sdk/patch/isolate_patch.dart b/pkg/dev_compiler/tool/input_sdk/patch/isolate_patch.dart
index bd0b258..999f518 100644
--- a/pkg/dev_compiler/tool/input_sdk/patch/isolate_patch.dart
+++ b/pkg/dev_compiler/tool/input_sdk/patch/isolate_patch.dart
@@ -30,7 +30,7 @@
 
   @patch
   static Future<Isolate> spawn<T>(void entryPoint(T message), T message,
-          {bool paused: false,
+          {bool paused = false,
           bool errorsAreFatal,
           SendPort onExit,
           SendPort onError}) =>
@@ -38,7 +38,7 @@
 
   @patch
   static Future<Isolate> spawnUri(Uri uri, List<String> args, var message,
-          {bool paused: false,
+          {bool paused = false,
           SendPort onExit,
           SendPort onError,
           bool errorsAreFatal,
@@ -46,7 +46,7 @@
           Map<String, String> environment,
           Uri packageRoot,
           Uri packageConfig,
-          bool automaticPackageResolution: false}) =>
+          bool automaticPackageResolution = false}) =>
       _unsupported();
 
   @patch
@@ -66,10 +66,10 @@
   void setErrorsFatal(bool errorsAreFatal) => _unsupported();
 
   @patch
-  void kill({int priority: beforeNextEvent}) => _unsupported();
+  void kill({int priority = beforeNextEvent}) => _unsupported();
   @patch
   void ping(SendPort responsePort,
-          {Object response, int priority: immediate}) =>
+          {Object response, int priority = immediate}) =>
       _unsupported();
 
   @patch
@@ -115,5 +115,5 @@
 
 @NoReifyGeneric()
 T _unsupported<T>() {
-  throw new UnsupportedError('dart:isolate is not supported on dart4web');
+  throw UnsupportedError('dart:isolate is not supported on dart4web');
 }
diff --git a/pkg/dev_compiler/tool/input_sdk/patch/math_patch.dart b/pkg/dev_compiler/tool/input_sdk/patch/math_patch.dart
index c86c998..1e2c7dd 100644
--- a/pkg/dev_compiler/tool/input_sdk/patch/math_patch.dart
+++ b/pkg/dev_compiler/tool/input_sdk/patch/math_patch.dart
@@ -67,11 +67,11 @@
 
 @patch
 class Random {
-  static final _secureRandom = new _JSSecureRandom();
+  static final _secureRandom = _JSSecureRandom();
 
   @patch
   factory Random([int seed]) =>
-      (seed == null) ? const _JSRandom() : new _Random(seed);
+      (seed == null) ? const _JSRandom() : _Random(seed);
 
   @patch
   factory Random.secure() => _secureRandom;
@@ -84,7 +84,7 @@
   @notNull
   int nextInt(int max) {
     if (max <= 0 || max > _POW2_32) {
-      throw new RangeError("max must be in range 0 < max ≤ 2^32, was $max");
+      throw RangeError("max must be in range 0 < max ≤ 2^32, was $max");
     }
     return JS("int", "(Math.random() * #) >>> 0", max);
   }
@@ -225,7 +225,7 @@
   @notNull
   int nextInt(@nullCheck int max) {
     if (max <= 0 || max > _POW2_32) {
-      throw new RangeError("max must be in range 0 < max ≤ 2^32, was $max");
+      throw RangeError("max must be in range 0 < max ≤ 2^32, was $max");
     }
     if ((max & (max - 1)) == 0) {
       // Fast case for powers of two.
@@ -261,7 +261,7 @@
 
 class _JSSecureRandom implements Random {
   // Reused buffer with room enough for a double.
-  final _buffer = new ByteData(8);
+  final _buffer = ByteData(8);
 
   _JSSecureRandom() {
     var crypto = JS("", "self.crypto");
@@ -271,7 +271,7 @@
         return;
       }
     }
-    throw new UnsupportedError(
+    throw UnsupportedError(
         "No source of cryptographically secure random numbers available.");
   }
 
@@ -311,7 +311,7 @@
   @notNull
   int nextInt(@nullCheck int max) {
     if (max <= 0 || max > _POW2_32) {
-      throw new RangeError("max must be in range 0 < max ≤ 2^32, was $max");
+      throw RangeError("max must be in range 0 < max ≤ 2^32, was $max");
     }
     int byteCount = 1;
     if (max > 0xFF) {
diff --git a/pkg/dev_compiler/tool/input_sdk/patch/mirrors_patch.dart b/pkg/dev_compiler/tool/input_sdk/patch/mirrors_patch.dart
index b2c765f..dec3d20 100644
--- a/pkg/dev_compiler/tool/input_sdk/patch/mirrors_patch.dart
+++ b/pkg/dev_compiler/tool/input_sdk/patch/mirrors_patch.dart
@@ -33,11 +33,11 @@
 @patch
 ClassMirror reflectClass(Type key) {
   if (key is! Type || key == dynamic) {
-    throw new ArgumentError('$key does not denote a class');
+    throw ArgumentError('$key does not denote a class');
   }
   TypeMirror tm = reflectType(key);
   if (tm is! ClassMirror) {
-    throw new ArgumentError("$key does not denote a class");
+    throw ArgumentError("$key does not denote a class");
   }
   return (tm as ClassMirror).originalDeclaration;
 }
diff --git a/pkg/dev_compiler/tool/input_sdk/patch/typed_data_patch.dart b/pkg/dev_compiler/tool/input_sdk/patch/typed_data_patch.dart
index 54b2bd2..f1e2dc1 100644
--- a/pkg/dev_compiler/tool/input_sdk/patch/typed_data_patch.dart
+++ b/pkg/dev_compiler/tool/input_sdk/patch/typed_data_patch.dart
@@ -100,12 +100,12 @@
 class Int64List {
   @patch
   factory Int64List(int length) {
-    throw new UnsupportedError("Int64List not supported by dart2js.");
+    throw UnsupportedError("Int64List not supported by dart2js.");
   }
 
   @patch
   factory Int64List.fromList(List<int> elements) {
-    throw new UnsupportedError("Int64List not supported by dart2js.");
+    throw UnsupportedError("Int64List not supported by dart2js.");
   }
 }
 
@@ -113,12 +113,12 @@
 class Uint64List {
   @patch
   factory Uint64List(int length) {
-    throw new UnsupportedError("Uint64List not supported by dart2js.");
+    throw UnsupportedError("Uint64List not supported by dart2js.");
   }
 
   @patch
   factory Uint64List.fromList(List<int> elements) {
-    throw new UnsupportedError("Uint64List not supported by dart2js.");
+    throw UnsupportedError("Uint64List not supported by dart2js.");
   }
 }
 
diff --git a/pkg/dev_compiler/tool/input_sdk/private/annotations.dart b/pkg/dev_compiler/tool/input_sdk/private/annotations.dart
index 87df639..d7409da 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/annotations.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/annotations.dart
@@ -20,7 +20,7 @@
 /// or otherwise cause the contract to be violated.
 /// TODO(leafp): Consider adding static checking and exposing
 /// this to user code.
-const notNull = const _NotNull();
+const notNull = _NotNull();
 
 /// Marks a generic function or static method API to be not reified.
 /// ****CAUTION******
@@ -49,7 +49,7 @@
 /// ****CAUTION******
 /// This is currently unchecked, and hence will not catch re-assignments
 /// of a variable with null
-const nullCheck = const _NullCheck();
+const nullCheck = _NullCheck();
 
 /// Tells the optimizing compiler that the annotated method cannot throw.
 /// Requires @NoInline() to function correctly.
diff --git a/pkg/dev_compiler/tool/input_sdk/private/custom_hash_map.dart b/pkg/dev_compiler/tool/input_sdk/private/custom_hash_map.dart
index 578fbc1..e2cde4c 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/custom_hash_map.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/custom_hash_map.dart
@@ -63,8 +63,8 @@
   @notNull
   bool get isNotEmpty => JS('bool', '#.size != 0', _map);
 
-  Iterable<K> get keys => new _JSMapIterable<K>(this, true);
-  Iterable<V> get values => new _JSMapIterable<V>(this, false);
+  Iterable<K> get keys => _JSMapIterable<K>(this, true);
+  Iterable<V> get values => _JSMapIterable<V>(this, false);
 
   @notNull
   bool containsKey(Object key) {
diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/classes.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/classes.dart
index 0dd4e3e..5c504b4 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/classes.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/classes.dart
@@ -10,7 +10,7 @@
 ///
 
 // TODO(leafp): Consider splitting some of this out.
-part of dart._runtime;
+part of "runtime.dart";
 
 /// Returns a new type that mixes members from base and the mixin.
 ///
diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/errors.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/errors.dart
index 115a550..35ab4ae 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/errors.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/errors.dart
@@ -1,7 +1,7 @@
 // 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.
-part of dart._runtime;
+part of "runtime.dart";
 
 // We need to set these properties while the sdk is only partially initialized
 // so we cannot use regular Dart fields.
@@ -24,22 +24,22 @@
 
 argumentError(value) {
   if (JS('!', 'dart.__trapRuntimeErrors')) JS('', 'debugger');
-  throw new ArgumentError.value(value);
+  throw ArgumentError.value(value);
 }
 
 throwUnimplementedError(String message) {
   if (JS('!', 'dart.__trapRuntimeErrors')) JS('', 'debugger');
-  throw new UnimplementedError(message);
+  throw UnimplementedError(message);
 }
 
 assertFailed(message) {
   if (JS('!', 'dart.__trapRuntimeErrors')) JS('', 'debugger');
-  throw new AssertionErrorImpl(message);
+  throw AssertionErrorImpl(message);
 }
 
 throwCyclicInitializationError([Object field]) {
   if (JS('!', 'dart.__trapRuntimeErrors')) JS('', 'debugger');
-  throw new CyclicInitializationError(field);
+  throw CyclicInitializationError(field);
 }
 
 throwNullValueError() {
@@ -47,8 +47,8 @@
   // to thread through method info, but that uglifies the code and can't
   // actually be queried ... it only affects how the error is printed.
   if (JS('!', 'dart.__trapRuntimeErrors')) JS('', 'debugger');
-  throw new NoSuchMethodError(
-      null, new Symbol('<Unexpected Null Value>'), null, null, null);
+  throw NoSuchMethodError(
+      null, Symbol('<Unexpected Null Value>'), null, null, null);
 }
 
 castError(obj, expectedType, [@notNull bool isImplicit = false]) {
@@ -59,8 +59,7 @@
     return obj;
   }
   if (JS('!', 'dart.__trapRuntimeErrors')) JS('', 'debugger');
-  var error =
-      isImplicit ? new TypeErrorImpl(message) : new CastErrorImpl(message);
+  var error = isImplicit ? TypeErrorImpl(message) : CastErrorImpl(message);
   throw error;
 }
 
@@ -71,7 +70,7 @@
   if (fromClass != null) {
     var fromTypeFormals = getGenericTypeFormals(fromClass);
     var fromType = instantiateClass(fromClass, fromTypeFormals);
-    var inferrer = new _TypeInferrer(fromTypeFormals);
+    var inferrer = _TypeInferrer(fromTypeFormals);
     if (inferrer.trySubtypeMatch(fromType, to)) {
       var inferredTypes = inferrer.getInferredTypes();
       if (inferredTypes != null) {
diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/generators.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/generators.dart
deleted file mode 100644
index 584a6f1..0000000
--- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/generators.dart
+++ /dev/null
@@ -1,196 +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.
-
-/// This library adapts ES6 generators to implement Dart's async/await.
-/// It's designed to interact with Dart's Future/Stream and follow Dart
-/// async/await semantics.
-/// See https://github.com/dart-lang/sdk/issues/27315 for ideas on
-/// reconciling Dart's Future and ES6 Promise.
-/// Inspired by `co`: https://github.com/tj/co/blob/master/index.js, which is a
-/// stepping stone for proposed ES7 async/await, and uses ES6 Promises.
-part of dart._runtime;
-
-// TODO(vsm): Remove once this flag we've removed the ability to
-// whitelist / fallback on the old behavior.
-bool startAsyncSynchronously = true;
-void setStartAsyncSynchronously([bool value = true]) {
-  startAsyncSynchronously = value;
-}
-
-final _jsIterator = JS('', 'Symbol("_jsIterator")');
-final _current = JS('', 'Symbol("_current")');
-
-/// Implementation inspired by _AsyncStarStreamController in
-/// dart-lang/sdk's runtime/lib/core_patch.dart
-///
-/// Given input like:
-///
-///     foo() async* {
-///       yield 1;
-///       yield* bar();
-///       print(await baz());
-///     }
-///
-/// This generates as:
-///
-///     function foo() {
-///       return dart.asyncStar(function*(stream) {
-///         if (stream.add(1)) return;
-///         yield;
-///         if (stream.addStream(bar()) return;
-///         yield;
-///         print(yield baz());
-///      });
-///     }
-///
-// TODO(jmesserly): port back to Dart, based on VM's equivalent class, and move
-// to dart:async async_patch.dart
-final _AsyncStarStreamController = JS('', '''
-  class _AsyncStarStreamController {
-    constructor(T) {
-      this.isAdding = false;
-      this.isWaiting = false;
-      this.isScheduled = false;
-      this.isSuspendedAtYield = false;
-      this.canceler = null;
-      this.controller = ${getGenericClass(StreamController)}(T).new({
-        onListen: () => this.scheduleGenerator(),
-        onResume: () => this.onResume(),
-        onCancel: () => this.onCancel()
-      });
-    }
-
-    onResume() {
-      if (this.isSuspendedAtYield) {
-        this.scheduleGenerator();
-      }
-    }
-
-    onCancel() {
-      if (this.controller.isClosed) {
-        return null;
-      }
-      if (this.canceler == null) {
-        this.canceler = $Completer.new();
-        this.scheduleGenerator();
-      }
-      return this.canceler.future;
-    }
-
-    close() {
-      if (this.canceler != null && !this.canceler.isCompleted) {
-        // If the stream has been cancelled, complete the cancellation future
-        // with the error.
-        this.canceler.complete();
-      }
-      this.controller.close();
-    }
-
-    scheduleGenerator() {
-      // TODO(jmesserly): is this paused check in the right place? Assuming the
-      // async* Stream yields, then is paused (by other code), the body will
-      // already be scheduled. This will cause at least one more iteration to
-      // run (adding another data item to the Stream) before actually pausing.
-      // It could be fixed by moving the `isPaused` check inside `runBody`.
-      if (this.isScheduled || this.controller.isPaused ||
-          this.isAdding || this.isWaiting) {
-        return;
-      }
-      this.isScheduled = true;
-      $scheduleMicrotask(() => this.runBody());
-    }
-
-    runBody(opt_awaitValue) {
-      this.isScheduled = false;
-      this.isSuspendedAtYield = false;
-      this.isWaiting = false;
-      let iter;
-      try {
-        iter = this.iterator.next(opt_awaitValue);
-      } catch (e) {
-        this.addError(e, $stackTrace(e));
-        this.close();
-        return;
-      }
-      if (iter.done) {
-        this.close();
-        return;
-      }
-
-      // If we're suspended at a yield/yield*, we're done for now.
-      if (this.isSuspendedAtYield || this.isAdding) return;
-
-      // Handle `await`: if we get a value passed to `yield` it means we are
-      // waiting on this Future. Make sure to prevent scheduling, and pass the
-      // value back as the result of the `yield`.
-      //
-      // TODO(jmesserly): is the timing here correct? The assumption here is
-      // that we should schedule `await` in `async*` the same as in `async`.
-      this.isWaiting = true;
-      let future = iter.value;
-      // TODO(jmesserly): `async` uses a different check that looks for the
-      // (private) implementation type of `Future`, rather than the public type.
-      if (!$Future.is(future)) {
-        future = $Future.value(future);
-      }
-      return future.then($dynamic, (x) => this.runBody(x),
-          { onError: (e, s) => this.throwError(e, s) });
-    }
-
-    // Adds element to stream, returns true if the caller should terminate
-    // execution of the generator.
-    add(event) {
-      // If stream is cancelled, tell caller to exit the async generator.
-      if (!this.controller.hasListener) return true;
-      this.controller.add(event);
-      this.scheduleGenerator();
-      this.isSuspendedAtYield = true;
-      return false;
-    }
-
-    // Adds the elements of stream into this controller's stream.
-    // The generator will be scheduled again when all of the
-    // elements of the added stream have been consumed.
-    // Returns true if the caller should terminate
-    // execution of the generator.
-    addStream(stream) {
-      // If stream is cancelled, tell caller to exit the async generator.
-      if (!this.controller.hasListener) return true;
-
-      this.isAdding = true;
-      this.controller.addStream(stream, {cancelOnError: false}).then($dynamic,
-          () => {
-        this.isAdding = false;
-        this.scheduleGenerator();
-        if (!this.isScheduled) this.isSuspendedAtYield = true;
-      }, { onError: (e, s) => this.throwError(e, s) });
-    }
-
-    throwError(error, stackTrace) {
-      try {
-        this.iterator.throw(error);
-      } catch (e) {
-        this.addError(e, stackTrace);
-      }
-    }
-
-    addError(error, stackTrace) {
-      if ((this.canceler != null) && !this.canceler.isCompleted) {
-        // If the stream has been cancelled, complete the cancellation future
-        // with the error.
-        this.canceler.completeError(error, stackTrace);
-        return;
-      }
-      if (!this.controller.hasListener) return;
-      this.controller.addError(error, stackTrace);
-    }
-  }
-''');
-
-/// Returns a Stream of T implemented by an async* function.
-asyncStar<T>(Function(Object) initGenerator) {
-  var stream = JS('', 'new #(#)', _AsyncStarStreamController, T);
-  JS('', '#.iterator = #[Symbol.iterator]()', stream, initGenerator(stream));
-  return JS('', '#.controller.stream', stream);
-}
diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/operations.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/operations.dart
index cbeda90..5e3fef0 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/operations.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/operations.dart
@@ -4,7 +4,7 @@
 
 /// This library defines runtime operations on objects used by the code
 /// generator.
-part of dart._runtime;
+part of "runtime.dart";
 
 // TODO(jmesserly): remove this in favor of _Invocation.
 class InvocationImpl extends Invocation {
@@ -19,23 +19,21 @@
   InvocationImpl(memberName, List<Object> positionalArguments,
       {namedArguments,
       List typeArguments,
-      this.isMethod: false,
-      this.isGetter: false,
-      this.isSetter: false})
+      this.isMethod = false,
+      this.isGetter = false,
+      this.isSetter = false})
       : memberName =
             isSetter ? _setterSymbol(memberName) : _dartSymbol(memberName),
-        positionalArguments = new List.unmodifiable(positionalArguments),
+        positionalArguments = List.unmodifiable(positionalArguments),
         namedArguments = _namedArgsToSymbols(namedArguments),
         typeArguments = typeArguments == null
             ? const []
-            : new List.unmodifiable(typeArguments.map(wrapType));
+            : List.unmodifiable(typeArguments.map(wrapType));
 
   static Map<Symbol, dynamic> _namedArgsToSymbols(namedArgs) {
     if (namedArgs == null) return const {};
-    return new Map.unmodifiable(new Map.fromIterable(
-        getOwnPropertyNames(namedArgs),
-        key: _dartSymbol,
-        value: (k) => JS('', '#[#]', namedArgs, k)));
+    return Map.unmodifiable(Map.fromIterable(getOwnPropertyNames(namedArgs),
+        key: _dartSymbol, value: (k) => JS('', '#[#]', namedArgs, k)));
   }
 }
 
@@ -115,8 +113,7 @@
       return JS('', '#[#]', obj, f);
     }
   }
-  return noSuchMethod(
-      obj, new InvocationImpl(field, JS('', '[]'), isGetter: true));
+  return noSuchMethod(obj, InvocationImpl(field, JS('', '[]'), isGetter: true));
 }
 
 // Version of dload that matches legacy mirrors behavior for JS types.
@@ -153,7 +150,7 @@
     }
   }
   noSuchMethod(
-      obj, new InvocationImpl(field, JS('', '[#]', value), isSetter: true));
+      obj, InvocationImpl(field, JS('', '[#]', value), isSetter: true));
   return value;
 }
 
@@ -365,8 +362,7 @@
   }
   var symbol = _canonicalMember(obj, name);
   if (symbol == null) {
-    return noSuchMethod(
-        obj, new InvocationImpl(displayName, args, isMethod: true));
+    return noSuchMethod(obj, InvocationImpl(displayName, args, isMethod: true));
   }
   var f = obj != null ? JS('', '#[#]', obj, symbol) : null;
   var type = getType(obj);
@@ -412,7 +408,7 @@
   };
 })()''');
 
-final _ignoreTypeFailure = JS('', '''(() => {
+final Object _ignoreTypeFailure = JS('', '''(() => {
   return $_ignoreMemo((actual, type) => {
       // TODO(vsm): Remove this hack ...
       // This is primarily due to the lack of generic methods,
@@ -475,13 +471,11 @@
   return obj;
 }
 
-void _throwBooleanConversionError() =>
-    throw new BooleanConversionAssertionError();
+void _throwBooleanConversionError() => throw BooleanConversionAssertionError();
 
 void booleanConversionFailed(obj) {
   var actual = typeName(getReifiedType(test(obj)));
-  throw new TypeErrorImpl(
-      "type '$actual' is not a 'bool' in boolean expression");
+  throw TypeErrorImpl("type '$actual' is not a 'bool' in boolean expression");
 }
 
 asInt(obj) {
@@ -524,7 +518,7 @@
   map = lookupNonTerminal(map, K);
   var result = JS('', '#.get(#)', map, V);
   if (result != null) return result;
-  result = new ImmutableMap<K, V>.from(elements);
+  result = ImmutableMap<K, V>.from(elements);
   JS('', '#.set(#, #)', map, V, result);
   return result;
 }
@@ -772,7 +766,7 @@
 /// The default implementation of `noSuchMethod` to match `Object.noSuchMethod`.
 defaultNoSuchMethod(obj, Invocation i) {
   if (JS('!', 'dart.__trapRuntimeErrors')) JS('', 'debugger');
-  throw new NoSuchMethodError.withInvocation(obj, i);
+  throw NoSuchMethodError.withInvocation(obj, i);
 }
 
 runtimeType(obj) {
@@ -817,7 +811,7 @@
 ///
 /// Libraries are not actually deferred in DDC, so this just returns a future
 /// that completes immediately.
-Future loadLibrary() => new Future.value();
+Future loadLibrary() => Future.value();
 
 /// Defines lazy statics.
 void defineLazy(to, from) {
diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/rtti.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/rtti.dart
index 95af629..45a69c1 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/rtti.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/rtti.dart
@@ -4,7 +4,7 @@
 
 /// This library defines the association between runtime objects and
 /// runtime types.
-part of dart._runtime;
+part of "runtime.dart";
 
 /// Runtime type information.  This module defines the mapping from
 /// runtime objects to their runtime type information.  See the types
@@ -121,7 +121,7 @@
   if (JS('!', '#.hasOwnProperty(#)', type, _typeObject)) {
     return JS('', '#[#]', type, _typeObject);
   }
-  return JS('Type', '#[#] = #', type, _typeObject, new WrappedType(type));
+  return JS('Type', '#[#] = #', type, _typeObject, WrappedType(type));
 }
 
 /// The symbol used to store the cached `Type` object associated with a class.
diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/runtime.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/runtime.dart
index fd5a32b..39e38c1 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/runtime.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/runtime.dart
@@ -27,15 +27,13 @@
         notNull;
 import 'dart:_debugger' show trackCall;
 
-export 'dart:_debugger'
-    show getDynamicStats, clearDynamicStats, trackCall;
+export 'dart:_debugger' show getDynamicStats, clearDynamicStats, trackCall;
 
 part 'utils.dart';
 part 'classes.dart';
 part 'rtti.dart';
 part 'types.dart';
 part 'errors.dart';
-part 'generators.dart';
 part 'operations.dart';
 
 // TODO(vsm): Move polyfill code to dart:html.
@@ -149,3 +147,10 @@
 }
 
 final JsSymbol = JS('', 'Symbol');
+
+// TODO(vsm): Remove once this flag we've removed the ability to
+// whitelist / fallback on the old behavior.
+bool startAsyncSynchronously = true;
+void setStartAsyncSynchronously([bool value = true]) {
+  startAsyncSynchronously = value;
+}
diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/types.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/types.dart
index 8ac9b89..7090c94 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/types.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/types.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 /// This library defines the representation of runtime types.
-part of dart._runtime;
+part of "runtime.dart";
 
 final metadata = JS('', 'Symbol("metadata")');
 
@@ -149,7 +149,7 @@
 lazyJSType(Function() getJSTypeCallback, String name) {
   var ret = JS('', '#.get(#)', _lazyJSTypes, name);
   if (ret == null) {
-    ret = new LazyJSType(getJSTypeCallback, name);
+    ret = LazyJSType(getJSTypeCallback, name);
     JS('', '#.set(#, #)', _lazyJSTypes, name, ret);
   }
   return ret;
@@ -158,33 +158,33 @@
 anonymousJSType(String name) {
   var ret = JS('', '#.get(#)', _anonymousJSTypes, name);
   if (ret == null) {
-    ret = new AnonymousJSType(name);
+    ret = AnonymousJSType(name);
     JS('', '#.set(#, #)', _anonymousJSTypes, name, ret);
   }
   return ret;
 }
 
 @JSExportName('dynamic')
-final _dynamic = new DynamicType();
+final _dynamic = DynamicType();
 
 class VoidType extends TypeRep {
   toString() => 'void';
 }
 
 @JSExportName('void')
-final void_ = new VoidType();
+final void_ = VoidType();
 
 class BottomType extends TypeRep {
   toString() => 'bottom';
 }
 
-final bottom = new BottomType();
+final bottom = BottomType();
 
 class JSObjectType extends TypeRep {
   toString() => 'NativeJavaScriptObject';
 }
 
-final jsobject = new JSObjectType();
+final jsobject = JSObjectType();
 
 class WrappedType extends Type {
   final _wrappedType;
@@ -310,17 +310,16 @@
     FunctionType Function() create;
     if (extra == null) {
       keys = [returnType, args];
-      create = () => new FunctionType(returnType, args, [], JS('', '{}'));
+      create = () => FunctionType(returnType, args, [], JS('', '{}'));
     } else if (JS('!', '# instanceof Array', extra)) {
       var optionals =
           _canonicalizeArray(JS('', '#', extra), _fnTypeArrayArgMap);
       keys = [returnType, args, optionals];
-      create =
-          () => new FunctionType(returnType, args, optionals, JS('', '{}'));
+      create = () => FunctionType(returnType, args, optionals, JS('', '{}'));
     } else {
       var named = _canonicalizeNamed(extra, _fnTypeNamedArgMap);
       keys = [returnType, args, named];
-      create = () => new FunctionType(returnType, args, [], named);
+      create = () => FunctionType(returnType, args, [], named);
     }
     return _memoizeArray(_fnTypeTypeMap, keys, create);
   }
@@ -534,7 +533,7 @@
       // The Dart 1 spec says omitted type parameters have an upper bound of
       // Object. However strong mode assumes `dynamic` for all purposes
       // (such as instantiate to bounds) so we use that here.
-      return new List.filled(formalCount, _dynamic);
+      return List.filled(formalCount, _dynamic);
     }
     // If bounds are recursive, we need to apply type formals and return them.
     return JS('List', '#.apply(null, #)', boundsFn, typeArgs);
@@ -566,16 +565,16 @@
     var typeFormals = this.typeFormals;
 
     // All type formals
-    var all = new HashMap<Object, int>.identity();
+    var all = HashMap<Object, int>.identity();
     // ground types, by index.
     //
     // For each index, this will be a ground type for the corresponding type
     // formal if known, or it will be the original TypeVariable if we are still
     // solving for it. This array is passed to `instantiateToBounds` as we are
     // progressively solving for type variables.
-    var defaults = new List<Object>(typeFormals.length);
+    var defaults = List<Object>(typeFormals.length);
     // not ground
-    var partials = new Map<TypeVariable, Object>.identity();
+    var partials = Map<TypeVariable, Object>.identity();
 
     var typeBounds = this.instantiateTypeBounds(typeFormals);
     for (var i = 0; i < typeFormals.length; i++) {
@@ -675,15 +674,15 @@
     return str
         .substring(1, end)
         .split(',')
-        .map((n) => new TypeVariable(n.trim()))
+        .map((n) => TypeVariable(n.trim()))
         .toList();
   } else {
-    return [new TypeVariable(str.substring(0, end).trim())];
+    return [TypeVariable(str.substring(0, end).trim())];
   }
 }
 
 Typedef typedef(name, AbstractFunctionType Function() closure) =>
-    new Typedef(name, closure);
+    Typedef(name, closure);
 
 /// Create a function type.
 FunctionType fnType(returnType, List args, [extra = undefined]) =>
@@ -700,14 +699,14 @@
 /// For example given the type <T extends Iterable<T>>(T) -> T, we can declare
 /// this type with `gFnType(T => [T, [T]], T => [Iterable$(T)])`.\
 gFnType(instantiateFn, typeBounds) =>
-    new GenericFunctionType(instantiateFn, typeBounds);
+    GenericFunctionType(instantiateFn, typeBounds);
 
 /// TODO(vsm): Remove when mirrors is deprecated.
 /// This is a temporary workaround to support dart:mirrors, which doesn't
 /// understand generic methods.
 getFunctionTypeMirror(AbstractFunctionType type) {
   if (type is GenericFunctionType) {
-    var typeArgs = new List.filled(type.formalCount, dynamic);
+    var typeArgs = List.filled(type.formalCount, dynamic);
     return type.instantiate(typeArgs);
   }
   return type;
@@ -1066,15 +1065,15 @@
 
 Object extractTypeArguments<T>(T instance, Function f) {
   if (instance == null) {
-    throw new ArgumentError('Cannot extract type of null instance.');
+    throw ArgumentError('Cannot extract type of null instance.');
   }
   var type = unwrapType(T);
   if (type is AbstractFunctionType || _isFutureOr(type)) {
-    throw new ArgumentError('Cannot extract from non-class type ($type).');
+    throw ArgumentError('Cannot extract from non-class type ($type).');
   }
   var typeArguments = getGenericArgs(type);
   if (typeArguments.isEmpty) {
-    throw new ArgumentError('Cannot extract from non-generic type ($type).');
+    throw ArgumentError('Cannot extract from non-generic type ($type).');
   }
   var supertype = _getMatchingSupertype(getReifiedType(instance), type);
   // The signature of this method guarantees that instance is a T, so we
@@ -1093,12 +1092,12 @@
   /// Creates a [TypeConstraintGatherer] which is prepared to gather type
   /// constraints for the given type parameters.
   _TypeInferrer(Iterable<TypeVariable> typeVariables)
-      : _typeVariables = new Map.fromIterables(
-            typeVariables, typeVariables.map((_) => new TypeConstraint()));
+      : _typeVariables = Map.fromIterables(
+            typeVariables, typeVariables.map((_) => TypeConstraint()));
 
   /// Returns the inferred types based on the current constraints.
   List<Object> getInferredTypes() {
-    var result = new List<Object>();
+    var result = List<Object>();
     for (var constraint in _typeVariables.values) {
       // Prefer the known bound, if any.
       if (constraint.lower != null) {
diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/utils.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/utils.dart
index 8e3b738..24a9463 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/utils.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/utils.dart
@@ -1,7 +1,7 @@
 // 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.
-part of dart._runtime;
+part of "runtime.dart";
 
 /// This library defines a set of general javascript utilities for us
 /// by the Dart runtime.
@@ -40,7 +40,7 @@
 /// assertion failure (TypeError) or CastError.
 void throwTypeError(String message) {
   if (JS('!', 'dart.__trapRuntimeErrors')) JS('', 'debugger');
-  throw new TypeErrorImpl(message);
+  throw TypeErrorImpl(message);
 }
 
 /// This error indicates a bug in the runtime or the compiler.
diff --git a/pkg/dev_compiler/tool/input_sdk/private/debugger.dart b/pkg/dev_compiler/tool/input_sdk/private/debugger.dart
index 7b68c31..9fa9679 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/debugger.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/debugger.dart
@@ -28,16 +28,16 @@
   const JsonMLConfig(this.name);
 
   final String name;
-  static const none = const JsonMLConfig("none");
-  static const skipDart = const JsonMLConfig("skipDart");
-  static const keyToString = const JsonMLConfig("keyToString");
-  static const asClass = const JsonMLConfig("asClass");
-  static const asObject = const JsonMLConfig("asObject");
+  static const none = JsonMLConfig("none");
+  static const skipDart = JsonMLConfig("skipDart");
+  static const keyToString = JsonMLConfig("keyToString");
+  static const asClass = JsonMLConfig("asClass");
+  static const asObject = JsonMLConfig("asObject");
   toString() => "JsonMLConfig($name)";
 }
 
 int _maxSpanLength = 100;
-var _devtoolsFormatter = new JsonMLFormatter(new DartFormatter());
+var _devtoolsFormatter = JsonMLFormatter(DartFormatter());
 
 /// We truncate a toString() longer than [maxStringLength].
 int maxFormatterStringLength = 100;
@@ -45,7 +45,7 @@
 String _typeof(object) => JS('String', 'typeof #', object);
 
 List<String> getOwnPropertyNames(object) =>
-    new JSArray<String>.of(dart.getOwnPropertyNames(object));
+    JSArray<String>.of(dart.getOwnPropertyNames(object));
 
 List getOwnPropertySymbols(object) =>
     JS('List', 'Object.getOwnPropertySymbols(#)', object);
@@ -60,7 +60,7 @@
 }
 
 void addMetadataChildren(object, Set<NameValuePair> ret) {
-  ret.add(new NameValuePair(
+  ret.add(NameValuePair(
       name: "[[class]]",
       value: dart.getReifiedType(object),
       config: JsonMLConfig.asClass));
@@ -72,11 +72,11 @@
 ///
 void addPropertiesFromSignature(
     sig, Set<NameValuePair> properties, object, bool walkPrototypeChain,
-    {tagTypes: false}) {
+    {tagTypes = false}) {
   // Including these property names doesn't add any value and just clutters
   // the debugger output.
   // TODO(jacobr): consider adding runtimeType to this list.
-  var skippedNames = new Set()..add('hashCode');
+  var skippedNames = Set()..add('hashCode');
   var objectPrototype = JS('', 'Object.prototype');
   while (sig != null && !identical(sig, objectPrototype)) {
     for (var symbol in getOwnPropertySymbols(sig)) {
@@ -91,7 +91,7 @@
       if (tagTypes && _typeof(value) == 'function') {
         dart.fn(value, JS('', '#[#]', sig, symbol));
       }
-      properties.add(new NameValuePair(name: dartName, value: value));
+      properties.add(NameValuePair(name: dartName, value: value));
     }
 
     for (var name in getOwnPropertyNames(sig)) {
@@ -101,7 +101,7 @@
       if (tagTypes && _typeof(value) == 'function') {
         dart.fn(value, JS('', '#[#]', sig, name));
       }
-      properties.add(new NameValuePair(name: name, value: value));
+      properties.add(NameValuePair(name: name, value: value));
     }
 
     if (!walkPrototypeChain) break;
@@ -170,8 +170,8 @@
   NameValuePair(
       {this.name,
       this.value,
-      this.config: JsonMLConfig.none,
-      this.hideName: false});
+      this.config = JsonMLConfig.none,
+      this.hideName = false});
 
   // Define equality and hashCode so that NameValuePair can be used
   // in a Set to dedupe entries with duplicate names.
@@ -222,17 +222,17 @@
     var children = <NameValuePair>[];
     if (length <= _maxSpanLength) {
       asMap().forEach((i, element) {
-        children.add(
-            new NameValuePair(name: (i + start).toString(), value: element));
+        children
+            .add(NameValuePair(name: (i + start).toString(), value: element));
       });
     } else {
       for (var i = start; i < end; i += subsetSize) {
-        var subSpan = new IterableSpan(i, min(end, subsetSize + i), iterable);
+        var subSpan = IterableSpan(i, min(end, subsetSize + i), iterable);
         if (subSpan.length == 1) {
-          children.add(new NameValuePair(
-              name: i.toString(), value: iterable.elementAt(i)));
+          children.add(
+              NameValuePair(name: i.toString(), value: iterable.elementAt(i)));
         } else {
-          children.add(new NameValuePair(
+          children.add(NameValuePair(
               name: '[${i}...${subSpan.end - 1}]',
               value: subSpan,
               hideName: true));
@@ -271,7 +271,7 @@
   }
 }
 
-safeProperties(object) => new Map.fromIterable(
+safeProperties(object) => Map.fromIterable(
     getOwnPropertyNames(object)
         .where((each) => safeGetProperty(object, each) != null),
     key: (name) => name,
@@ -293,7 +293,7 @@
   }
 
   JsonMLElement createChild(String tagName) {
-    var c = new JsonMLElement(tagName);
+    var c = JsonMLElement(tagName);
     _jsonML.add(c.toJsonML());
     return c;
   }
@@ -378,7 +378,7 @@
     // Indicate this is a Dart Object by using a Dart background color.
     // This is stylistically a bit ugly but it eases distinguishing Dart and
     // JS objects.
-    var element = new JsonMLElement('span')
+    var element = JsonMLElement('span')
       ..setStyle('background-color: #d9edf7;')
       ..createTextChild(c);
     return element.toJsonML();
@@ -387,7 +387,7 @@
   bool hasBody(object, config) => _simpleFormatter.hasChildren(object, config);
 
   body(object, config) {
-    var body = new JsonMLElement('ol')
+    var body = JsonMLElement('ol')
       ..setStyle('list-style-type: none;'
           'padding-left: 0px;'
           'margin-top: 0px;'
@@ -408,7 +408,7 @@
       JsonMLElement nameSpan;
       var valueStyle = '';
       if (!child.hideName) {
-        nameSpan = new JsonMLElement('span')
+        nameSpan = JsonMLElement('span')
           ..createTextChild(
               child.displayName.isNotEmpty ? '${child.displayName}: ' : '')
           ..setStyle('color: rgb(136, 19, 145); margin-right: -13px');
@@ -417,7 +417,7 @@
 
       if (_typeof(child.value) == 'object' ||
           _typeof(child.value) == 'function') {
-        var valueSpan = new JsonMLElement('span')..setStyle(valueStyle);
+        var valueSpan = JsonMLElement('span')..setStyle(valueStyle);
         valueSpan.createObjectTag(child.value)
           ..addAttribute('config', child.config);
         if (nameSpan != null) {
@@ -429,7 +429,7 @@
         if (nameSpan != null) {
           line.appendChild(nameSpan);
         }
-        line.appendChild(new JsonMLElement('span')
+        line.appendChild(JsonMLElement('span')
           ..createTextChild(safePreview(child.value, child.config))
           ..setStyle(valueStyle));
       }
@@ -452,20 +452,20 @@
     // The order of formatters matters as formatters earlier in the list take
     // precedence.
     _formatters = [
-      new ObjectInternalsFormatter(),
-      new ClassFormatter(),
-      new TypeFormatter(),
-      new NamedConstructorFormatter(),
-      new MapFormatter(),
-      new IterableFormatter(),
-      new IterableSpanFormatter(),
-      new MapEntryFormatter(),
-      new StackTraceFormatter(),
-      new FunctionFormatter(),
-      new HeritageClauseFormatter(),
-      new LibraryModuleFormatter(),
-      new LibraryFormatter(),
-      new ObjectFormatter(),
+      ObjectInternalsFormatter(),
+      ClassFormatter(),
+      TypeFormatter(),
+      NamedConstructorFormatter(),
+      MapFormatter(),
+      IterableFormatter(),
+      IterableSpanFormatter(),
+      MapEntryFormatter(),
+      StackTraceFormatter(),
+      FunctionFormatter(),
+      HeritageClauseFormatter(),
+      LibraryModuleFormatter(),
+      LibraryFormatter(),
+      ObjectFormatter(),
     ];
   }
 
@@ -552,11 +552,11 @@
 
   List<NameValuePair> children(object) {
     var type = dart.getType(object);
-    var ret = new LinkedHashSet<NameValuePair>();
+    var ret = LinkedHashSet<NameValuePair>();
     // We use a Set rather than a List to avoid duplicates.
-    var fields = new Set<NameValuePair>();
+    var fields = Set<NameValuePair>();
     addPropertiesFromSignature(dart.getFields(type), fields, object, true);
-    var getters = new Set<NameValuePair>();
+    var getters = Set<NameValuePair>();
     addPropertiesFromSignature(dart.getGetters(type), getters, object, true);
     ret.addAll(sortProperties(fields));
     ret.addAll(sortProperties(getters));
@@ -601,18 +601,18 @@
   }
 
   List<NameValuePair> children(object) {
-    var children = new LinkedHashSet<NameValuePair>();
+    var children = LinkedHashSet<NameValuePair>();
     for (var name in getOwnPropertyNames(object)) {
       var value = safeGetProperty(object, name);
-      children.add(new NameValuePair(
-          name: name, value: new Library(name, value), hideName: true));
+      children.add(NameValuePair(
+          name: name, value: Library(name, value), hideName: true));
     }
     return children.toList();
   }
 }
 
 class LibraryFormatter implements Formatter {
-  var genericParameters = new HashMap<String, String>();
+  var genericParameters = HashMap<String, String>();
 
   accept(object, config) => object is Library;
 
@@ -623,7 +623,7 @@
   List<NameValuePair> children(object) {
     // Maintain library member order rather than sorting members as is the
     // case for class members.
-    var children = new LinkedHashSet<NameValuePair>();
+    var children = LinkedHashSet<NameValuePair>();
     var objectProperties = safeProperties(object.object);
     objectProperties.forEach((name, value) {
       // Skip the generic constructors for each class as users are only
@@ -632,14 +632,14 @@
 
       children.add(dart.isType(value)
           ? classChild(name, value)
-          : new NameValuePair(name: name, value: value));
+          : NameValuePair(name: name, value: value));
     });
     return children.toList();
   }
 
   classChild(String name, Object child) {
     var typeName = getTypeName(child);
-    return new NameValuePair(
+    return NameValuePair(
         name: typeName, value: child, config: JsonMLConfig.asClass);
   }
 }
@@ -661,8 +661,8 @@
   }
 
   List<NameValuePair> children(object) => <NameValuePair>[
-        new NameValuePair(name: 'signature', value: preview(object)),
-        new NameValuePair(
+        NameValuePair(name: 'signature', value: preview(object)),
+        NameValuePair(
             name: 'JavaScript Function',
             value: object,
             config: JsonMLConfig.skipDart)
@@ -685,11 +685,11 @@
     // the build in LinkedHashMap class.
     // TODO(jacobr): handle large Maps better.
     Map map = object;
-    var entries = new LinkedHashSet<NameValuePair>();
+    var entries = LinkedHashSet<NameValuePair>();
     map.forEach((key, value) {
-      var entryWrapper = new MapEntry(key: key, value: value);
-      entries.add(new NameValuePair(
-          name: entries.length.toString(), value: entryWrapper));
+      var entryWrapper = MapEntry(key: key, value: value);
+      entries.add(
+          NameValuePair(name: entries.length.toString(), value: entryWrapper));
     });
     addInstanceMembers(object, entries);
     addMetadataChildren(object, entries);
@@ -700,7 +700,7 @@
   // of the Map, particularly for domain objects that implement Map.
   // Add an ObjectFormatter view underneath.
   void addInstanceMembers(object, Set<NameValuePair> ret) {
-    ret.add(new NameValuePair(
+    ret.add(NameValuePair(
         name: "[[instance members]]",
         value: object,
         config: JsonMLConfig.asObject));
@@ -728,8 +728,8 @@
     // are not the built in Set or List types.
     // TODO(jacobr): handle large Iterables better.
     // TODO(jacobr): consider only using numeric indices
-    var children = new LinkedHashSet<NameValuePair>();
-    children.addAll(new IterableSpan(0, object.length, object).children());
+    var children = LinkedHashSet<NameValuePair>();
+    children.addAll(IterableSpan(0, object.length, object).children());
     // TODO(jacobr): provide a link to show regular class properties here.
     // required for subclasses of iterable, etc.
     addMetadataChildren(object, children);
@@ -747,7 +747,7 @@
   bool hasChildren(object) => true;
 
   List<NameValuePair> children(object) => <NameValuePair>[
-        new NameValuePair(
+        NameValuePair(
             name: 'JavaScript Function',
             value: object,
             config: JsonMLConfig.skipDart)
@@ -767,9 +767,9 @@
   bool hasChildren(object) => true;
 
   List<NameValuePair> children(object) => <NameValuePair>[
-        new NameValuePair(
+        NameValuePair(
             name: 'key', value: object.key, config: JsonMLConfig.keyToString),
-        new NameValuePair(name: 'value', value: object.value)
+        NameValuePair(name: 'value', value: object.value)
       ];
 }
 
@@ -789,8 +789,7 @@
     HeritageClause clause = object;
     var children = <NameValuePair>[];
     for (var type in clause.types) {
-      children
-          .add(new NameValuePair(value: type, config: JsonMLConfig.asClass));
+      children.add(NameValuePair(value: type, config: JsonMLConfig.asClass));
     }
     return children;
   }
@@ -823,9 +822,8 @@
   List<NameValuePair> children(object) => object
       .toString()
       .split('\n')
-      .map((line) => new NameValuePair(
-          value: line.replaceFirst(new RegExp(r'^\s+at\s'), ''),
-          hideName: true))
+      .map((line) => NameValuePair(
+          value: line.replaceFirst(RegExp(r'^\s+at\s'), ''), hideName: true))
       .toList();
 }
 
@@ -848,10 +846,10 @@
   List<NameValuePair> children(type) {
     // TODO(jacobr): add other entries describing the class such as
     // implemented interfaces, and methods.
-    var ret = new LinkedHashSet<NameValuePair>();
+    var ret = LinkedHashSet<NameValuePair>();
 
-    var staticProperties = new Set<NameValuePair>();
-    var staticMethods = new Set<NameValuePair>();
+    var staticProperties = Set<NameValuePair>();
+    var staticMethods = Set<NameValuePair>();
     // Static fields and properties.
     addPropertiesFromSignature(
         dart.getStaticFields(type), staticProperties, type, false);
@@ -863,33 +861,33 @@
 
     if (staticProperties.isNotEmpty || staticMethods.isNotEmpty) {
       ret
-        ..add(new NameValuePair(value: '[[Static members]]', hideName: true))
+        ..add(NameValuePair(value: '[[Static members]]', hideName: true))
         ..addAll(sortProperties(staticProperties))
         ..addAll(sortProperties(staticMethods));
     }
 
     // instance methods.
-    var instanceMethods = new Set<NameValuePair>();
+    var instanceMethods = Set<NameValuePair>();
     // Instance methods are defined on the prototype not the constructor object.
     addPropertiesFromSignature(dart.getMethods(type), instanceMethods,
         JS('', '#.prototype', type), false,
         tagTypes: true);
     if (instanceMethods.isNotEmpty) {
       ret
-        ..add(new NameValuePair(value: '[[Instance Methods]]', hideName: true))
+        ..add(NameValuePair(value: '[[Instance Methods]]', hideName: true))
         ..addAll(sortProperties(instanceMethods));
     }
 
     var mixin = dart.getMixin(type);
     if (mixin != null) {
       // TODO(jmesserly): this can only be one value.
-      ret.add(new NameValuePair(
-          name: '[[Mixins]]', value: new HeritageClause('mixins', [mixin])));
+      ret.add(NameValuePair(
+          name: '[[Mixins]]', value: HeritageClause('mixins', [mixin])));
     }
 
     var baseProto = JS('', '#.__proto__', type);
     if (baseProto != null && !dart.isJsInterop(baseProto)) {
-      ret.add(new NameValuePair(
+      ret.add(NameValuePair(
           name: "[[base class]]",
           value: baseProto,
           config: JsonMLConfig.asClass));
diff --git a/pkg/dev_compiler/tool/input_sdk/private/foreign_helper.dart b/pkg/dev_compiler/tool/input_sdk/private/foreign_helper.dart
index bcb2736..9df99fec1 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/foreign_helper.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/foreign_helper.dart
@@ -275,9 +275,9 @@
   const _Rest();
 }
 
-const _Rest rest = const _Rest();
+const _Rest rest = _Rest();
 
 dynamic spread(args) {
-  throw new StateError('The spread function cannot be called, '
+  throw StateError('The spread function cannot be called, '
       'it should be compiled away.');
 }
diff --git a/pkg/dev_compiler/tool/input_sdk/private/identity_hash_map.dart b/pkg/dev_compiler/tool/input_sdk/private/identity_hash_map.dart
index c2671eb..22d2125 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/identity_hash_map.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/identity_hash_map.dart
@@ -30,8 +30,8 @@
   bool get isEmpty => JS('bool', '#.size == 0', _map);
   bool get isNotEmpty => JS('bool', '#.size != 0', _map);
 
-  Iterable<K> get keys => new _JSMapIterable<K>(this, true);
-  Iterable<V> get values => new _JSMapIterable<V>(this, false);
+  Iterable<K> get keys => _JSMapIterable<K>(this, true);
+  Iterable<V> get values => _JSMapIterable<V>(this, false);
 
   bool containsKey(Object key) {
     return JS('bool', '#.has(#)', _map, key);
@@ -118,11 +118,11 @@
     }''',
         modifications,
         map._modifications,
-        new ConcurrentModificationError(map),
+        ConcurrentModificationError(map),
         iterator);
   }
 
-  Iterator<E> get iterator => new DartIterator<E>(_jsIterator());
+  Iterator<E> get iterator => DartIterator<E>(_jsIterator());
 
   bool contains(Object element) =>
       _isKeys ? _map.containsKey(element) : _map.containsValue(element);
diff --git a/pkg/dev_compiler/tool/input_sdk/private/interceptors.dart b/pkg/dev_compiler/tool/input_sdk/private/interceptors.dart
index 5566a25..cbad218 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/interceptors.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/interceptors.dart
@@ -104,10 +104,9 @@
 // it to be picked up as an extension type.
 @JsPeerInterface(name: 'TypeError')
 class NullError extends NativeError implements NoSuchMethodError {
-  static RegExp _nullError =
-      new RegExp(r"^Cannot read property '(.+)' of null$");
-  static RegExp _extensionName = new RegExp(r"^Symbol\(dartx\.(.+)\)$");
-  static RegExp _privateName = new RegExp(r"^Symbol\((_.+)\)$");
+  static RegExp _nullError = RegExp(r"^Cannot read property '(.+)' of null$");
+  static RegExp _extensionName = RegExp(r"^Symbol\(dartx\.(.+)\)$");
+  static RegExp _privateName = RegExp(r"^Symbol\((_.+)\)$");
 
   String _fieldName() {
     var message = JS('String', '#.message', this);
@@ -186,7 +185,7 @@
   noSuchMethod(Invocation i) => dart.defaultNoSuchMethod(null, i);
 }
 
-final Object jsNull = new JSNull();
+final Object jsNull = JSNull();
 
 // Note that this needs to be in interceptors.dart in order for
 // it to be picked up as an extension type.
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 dec36ce..6de83f2 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/isolate_helper.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/isolate_helper.dart
@@ -34,7 +34,7 @@
 void startRootIsolate(main, args) {
   if (args == null) args = <String>[];
   if (args is List) {
-    if (args is! List<String>) args = new List<String>.from(args);
+    if (args is! List<String>) args = List<String>.from(args);
     // DDC attaches signatures only when torn off, and the typical way of
     // getting `main` via the JS ABI won't do this. So use JS to invoke main.
     if (JS<bool>('!', 'typeof # == "function"', main)) {
@@ -45,7 +45,7 @@
       (main as dynamic)(args);
     }
   } else {
-    throw new ArgumentError("Arguments to main must be a List: $args");
+    throw ArgumentError("Arguments to main must be a List: $args");
   }
 }
 
@@ -72,7 +72,7 @@
       _handle = JS(
           'int', '#.setTimeout(#, #)', global, internalCallback, milliseconds);
     } else {
-      throw new UnsupportedError("`setTimeout()` not found.");
+      throw UnsupportedError("`setTimeout()` not found.");
     }
   }
 
@@ -93,7 +93,7 @@
         callback(this);
       }, milliseconds);
     } else {
-      throw new UnsupportedError("Periodic timer.");
+      throw UnsupportedError("Periodic timer.");
     }
   }
 
@@ -110,7 +110,7 @@
       }
       _handle = null;
     } else {
-      throw new UnsupportedError("Canceling a timer.");
+      throw UnsupportedError("Canceling a timer.");
     }
   }
 
diff --git a/pkg/dev_compiler/tool/input_sdk/private/js_array.dart b/pkg/dev_compiler/tool/input_sdk/private/js_array.dart
index 7dba1a8..5b4a54b 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/js_array.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/js_array.dart
@@ -58,13 +58,13 @@
 
   checkMutable(reason) {
     if (JS('bool', r'#.immutable$list', this)) {
-      throw new UnsupportedError(reason);
+      throw UnsupportedError(reason);
     }
   }
 
   checkGrowable(reason) {
     if (JS('bool', r'#.fixed$length', this)) {
-      throw new UnsupportedError(reason);
+      throw UnsupportedError(reason);
     }
   }
 
@@ -77,7 +77,7 @@
   E removeAt(@nullCheck int index) {
     checkGrowable('removeAt');
     if (index < 0 || index >= length) {
-      throw new RangeError.value(index);
+      throw RangeError.value(index);
     }
     return JS('-dynamic', r'#.splice(#, 1)[0]', this, index);
   }
@@ -85,7 +85,7 @@
   void insert(@nullCheck int index, E value) {
     checkGrowable('insert');
     if (index < 0 || index > length) {
-      throw new RangeError.value(index);
+      throw RangeError.value(index);
     }
     JS('void', r'#.splice(#, 0, #)', this, index, value);
   }
@@ -161,7 +161,7 @@
       if (!test(element) == removeMatching) {
         retained.add(element);
       }
-      if (this.length != end) throw new ConcurrentModificationError(this);
+      if (this.length != end) throw ConcurrentModificationError(this);
     }
     if (retained.length == end) return;
     this.length = retained.length;
@@ -173,18 +173,18 @@
   }
 
   Iterable<E> where(bool f(E element)) {
-    return new WhereIterable<E>(this, f);
+    return WhereIterable<E>(this, f);
   }
 
   Iterable<T> expand<T>(Iterable<T> f(E element)) {
-    return new ExpandIterable<E, T>(this, f);
+    return ExpandIterable<E, T>(this, f);
   }
 
   void addAll(Iterable<E> collection) {
     int i = this.length;
     checkGrowable('addAll');
     for (E e in collection) {
-      assert(i == this.length || (throw new ConcurrentModificationError(this)));
+      assert(i == this.length || (throw ConcurrentModificationError(this)));
       i++;
       JS('void', r'#.push(#)', this, e);
     }
@@ -201,17 +201,17 @@
       // be replaced by indexing.
       var/*=E*/ element = JS('', '#[#]', this, i);
       f(element);
-      if (this.length != end) throw new ConcurrentModificationError(this);
+      if (this.length != end) throw ConcurrentModificationError(this);
     }
   }
 
   Iterable<T> map<T>(T f(E element)) {
-    return new MappedListIterable<E, T>(this, f);
+    return MappedListIterable<E, T>(this, f);
   }
 
   String join([String separator = ""]) {
     var length = this.length;
-    var list = new List(length);
+    var list = List(length);
     for (int i = 0; i < length; i++) {
       list[i] = "${this[i]}";
     }
@@ -219,19 +219,19 @@
   }
 
   Iterable<E> take(int n) {
-    return new SubListIterable<E>(this, 0, n);
+    return SubListIterable<E>(this, 0, n);
   }
 
   Iterable<E> takeWhile(bool test(E value)) {
-    return new TakeWhileIterable<E>(this, test);
+    return TakeWhileIterable<E>(this, test);
   }
 
   Iterable<E> skip(int n) {
-    return new SubListIterable<E>(this, n, null);
+    return SubListIterable<E>(this, n, null);
   }
 
   Iterable<E> skipWhile(bool test(E value)) {
-    return new SkipWhileIterable<E>(this, test);
+    return SkipWhileIterable<E>(this, test);
   }
 
   E reduce(E combine(E previousValue, E element)) {
@@ -243,7 +243,7 @@
       // be replaced by indexing.
       var/*=E*/ element = JS('', '#[#]', this, i);
       value = combine(value, element);
-      if (length != this.length) throw new ConcurrentModificationError(this);
+      if (length != this.length) throw ConcurrentModificationError(this);
     }
     return value;
   }
@@ -256,7 +256,7 @@
       // be replaced by indexing.
       var/*=E*/ element = JS('', '#[#]', this, i);
       value = combine(value, element);
-      if (this.length != length) throw new ConcurrentModificationError(this);
+      if (this.length != length) throw ConcurrentModificationError(this);
     }
     return value;
   }
@@ -268,7 +268,7 @@
       // be replaced by indexing.
       var/*=E*/ element = JS('', '#[#]', this, i);
       if (test(element)) return element;
-      if (this.length != end) throw new ConcurrentModificationError(this);
+      if (this.length != end) throw ConcurrentModificationError(this);
     }
     if (orElse != null) return orElse();
     throw IterableElementError.noElement();
@@ -282,7 +282,7 @@
       var/*=E*/ element = JS('', '#[#]', this, i);
       if (test(element)) return element;
       if (length != this.length) {
-        throw new ConcurrentModificationError(this);
+        throw ConcurrentModificationError(this);
       }
     }
     if (orElse != null) return orElse();
@@ -305,7 +305,7 @@
         match = element;
       }
       if (length != this.length) {
-        throw new ConcurrentModificationError(this);
+        throw ConcurrentModificationError(this);
       }
     }
     if (matchFound) return match;
@@ -319,7 +319,7 @@
 
   List<E> sublist(@nullCheck int start, [int end]) {
     if (start < 0 || start > length) {
-      throw new RangeError.range(start, 0, length, "start");
+      throw RangeError.range(start, 0, length, "start");
     }
     if (end == null) {
       end = length;
@@ -327,16 +327,16 @@
       @notNull
       var _end = end;
       if (_end < start || _end > length) {
-        throw new RangeError.range(end, start, length, "end");
+        throw RangeError.range(end, start, length, "end");
       }
     }
     if (start == end) return <E>[];
-    return new JSArray<E>.of(JS('', r'#.slice(#, #)', this, start, end));
+    return JSArray<E>.of(JS('', r'#.slice(#, #)', this, start, end));
   }
 
   Iterable<E> getRange(int start, int end) {
     RangeError.checkValidRange(start, end, this.length);
-    return new SubListIterable<E>(this, start, end);
+    return SubListIterable<E>(this, start, end);
   }
 
   E get first {
@@ -448,7 +448,7 @@
       // be replaced by indexing.
       var/*=E*/ element = JS('', '#[#]', this, i);
       if (test(element)) return true;
-      if (this.length != end) throw new ConcurrentModificationError(this);
+      if (this.length != end) throw ConcurrentModificationError(this);
     }
     return false;
   }
@@ -460,12 +460,12 @@
       // be replaced by indexing.
       E element = JS('-dynamic', '#[#]', this, i);
       if (!test(element)) return false;
-      if (this.length != end) throw new ConcurrentModificationError(this);
+      if (this.length != end) throw ConcurrentModificationError(this);
     }
     return true;
   }
 
-  Iterable<E> get reversed => new ReversedListIterable<E>(this);
+  Iterable<E> get reversed => ReversedListIterable<E>(this);
 
   void sort([int compare(E a, E b)]) {
     checkMutable('sort');
@@ -478,7 +478,7 @@
 
   void shuffle([Random random]) {
     checkMutable('shuffle');
-    if (random == null) random = new Random();
+    if (random == null) random = Random();
     int length = this.length;
     while (length > 1) {
       int pos = random.nextInt(length);
@@ -538,15 +538,15 @@
 
   String toString() => ListBase.listToString(this);
 
-  List<E> toList({@nullCheck bool growable: true}) {
+  List<E> toList({@nullCheck bool growable = true}) {
     var list = JS('', '#.slice()', this);
     if (!growable) markFixedList(list);
-    return new JSArray<E>.of(list);
+    return JSArray<E>.of(list);
   }
 
-  Set<E> toSet() => new Set<E>.from(this);
+  Set<E> toSet() => Set<E>.from(this);
 
-  Iterator<E> get iterator => new ArrayIterator<E>(this);
+  Iterator<E> get iterator => ArrayIterator<E>(this);
 
   int get hashCode => identityHashCode(this);
 
@@ -560,7 +560,7 @@
     checkGrowable('set length');
     // TODO(sra): Remove this test and let JavaScript throw an error.
     if (newLength < 0) {
-      throw new RangeError.range(newLength, 0, null, 'newLength');
+      throw RangeError.range(newLength, 0, null, 'newLength');
     }
     // JavaScript with throw a RangeError for numbers that are too big. The
     // message does not contain the value.
@@ -588,20 +588,20 @@
   }
 
   Map<int, E> asMap() {
-    return new ListMapView<E>(this);
+    return ListMapView<E>(this);
   }
 
   Type get runtimeType =>
       dart.wrapType(JS('', '#(#)', dart.getGenericClass(List), E));
 
   Iterable<E> followedBy(Iterable<E> other) =>
-      new FollowedByIterable<E>.firstEfficient(this, other);
+      FollowedByIterable<E>.firstEfficient(this, other);
 
   // TODO(leafp): Restore this functionality once generic methods are enabled
   // in the VM and dart2js.
   // https://github.com/dart-lang/sdk/issues/32463
   Iterable<T> whereType<T>() =>
-      throw new UnimplementedError("whereType is not yet supported");
+      throw UnimplementedError("whereType is not yet supported");
 
   List<E> operator +(List<E> other) {
     int totalLength = this.length + other.length;
@@ -630,12 +630,12 @@
   }
 
   void set first(E element) {
-    if (this.isEmpty) throw new RangeError.index(0, this);
+    if (this.isEmpty) throw RangeError.index(0, this);
     this[0] = element;
   }
 
   void set last(E element) {
-    if (this.isEmpty) throw new RangeError.index(0, this);
+    if (this.isEmpty) throw RangeError.index(0, this);
     this[this.length - 1] = element;
   }
 }
diff --git a/pkg/dev_compiler/tool/input_sdk/private/js_helper.dart b/pkg/dev_compiler/tool/input_sdk/private/js_helper.dart
index 738db86..c9533c2 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/js_helper.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/js_helper.dart
@@ -30,13 +30,13 @@
   const _Patch();
 }
 
-const _Patch patch = const _Patch();
+const _Patch patch = _Patch();
 
 /// Adapts a JS `[Symbol.iterator]` to a Dart `get iterator`.
-/// 
+///
 /// This is the inverse of `JsIterator`, for classes where we can more
 /// efficiently obtain a JS iterator instead of a Dart one.
-/// 
+///
 // TODO(jmesserly): this adapter is to work around
 // https://github.com/dart-lang/sdk/issues/28320
 class DartIterator<E> implements Iterator<E> {
@@ -62,14 +62,13 @@
   @JSExportName('Symbol.iterator')
   _jsIterator() => _initGenerator();
 
-  get iterator => new DartIterator(_initGenerator());
+  get iterator => DartIterator(_initGenerator());
 }
 
 class Primitives {
-
   @NoInline()
   static int _parseIntError(String source, int handleError(String source)) {
-    if (handleError == null) throw new FormatException(source);
+    if (handleError == null) throw FormatException(source);
     return handleError(source);
   }
 
@@ -100,9 +99,10 @@
       }
       return _parseIntError(source, handleError);
     }
-    @notNull var radix = _radix;
+    @notNull
+    var radix = _radix;
     if (radix < 2 || radix > 36) {
-      throw new RangeError.range(radix, 2, 36, 'radix');
+      throw RangeError.range(radix, 2, 36, 'radix');
     }
     if (radix == 10 && decimalMatch != null) {
       // Cannot fail because we know that the digits are all decimal.
@@ -147,12 +147,13 @@
   static double _parseDoubleError(
       String source, double handleError(String source)) {
     if (handleError == null) {
-      throw new FormatException('Invalid double', source);
+      throw FormatException('Invalid double', source);
     }
     return handleError(source);
   }
 
-  static double parseDouble(@nullCheck String source, double handleError(String source)) {
+  static double parseDouble(
+      @nullCheck String source, double handleError(String source)) {
     // Notice that JS parseFloat accepts garbage at the end of the string.
     // Accept only:
     // - [+/-]NaN
@@ -224,9 +225,11 @@
 
   // This is to avoid stack overflows due to very large argument arrays in
   // apply().  It fixes http://dartbug.com/6919
-  @notNull static String _fromCharCodeApply(List<int> array) {
+  @notNull
+  static String _fromCharCodeApply(List<int> array) {
     const kMaxApply = 500;
-    @nullCheck int end = array.length;
+    @nullCheck
+    int end = array.length;
     if (end <= kMaxApply) {
       return JS('String', r'String.fromCharCode.apply(null, #)', array);
     }
@@ -244,7 +247,8 @@
     return result;
   }
 
-  @notNull static String stringFromCodePoints(JSArray<int> codePoints) {
+  @notNull
+  static String stringFromCodePoints(JSArray<int> codePoints) {
     List<int> a = <int>[];
     for (@nullCheck var i in codePoints) {
       if (i <= 0xffff) {
@@ -259,7 +263,8 @@
     return _fromCharCodeApply(a);
   }
 
-  @notNull static String stringFromCharCodes(JSArray<int> charCodes) {
+  @notNull
+  static String stringFromCharCodes(JSArray<int> charCodes) {
     for (@nullCheck var i in charCodes) {
       if (i < 0) throw argumentErrorValue(i);
       if (i > 0xffff) return stringFromCodePoints(charCodes);
@@ -268,7 +273,8 @@
   }
 
   // [start] and [end] are validated.
-  @notNull static String stringFromNativeUint8List(
+  @notNull
+  static String stringFromNativeUint8List(
       NativeUint8List charCodes, @nullCheck int start, @nullCheck int end) {
     const kMaxApply = 500;
     if (end <= kMaxApply && start == 0 && end == charCodes.length) {
@@ -288,7 +294,8 @@
     return result;
   }
 
-  @notNull static String stringFromCharCode(@nullCheck int charCode) {
+  @notNull
+  static String stringFromCharCode(@nullCheck int charCode) {
     if (0 <= charCode) {
       if (charCode <= 0xffff) {
         return JS('String', 'String.fromCharCode(#)', charCode);
@@ -300,7 +307,7 @@
         return JS('String', 'String.fromCharCode(#, #)', high, low);
       }
     }
-    throw new RangeError.range(charCode, 0, 0x10ffff);
+    throw RangeError.range(charCode, 0, 0x10ffff);
   }
 
   static String stringConcatUnchecked(String string1, String string2) {
@@ -351,10 +358,15 @@
     return -JS('int', r'#.getTimezoneOffset()', lazyAsJsDate(receiver));
   }
 
-  static num valueFromDecomposedDate(@nullCheck int years, @nullCheck int month,
-                                     @nullCheck int day, @nullCheck int hours,
-      @nullCheck int minutes, @nullCheck int seconds, @nullCheck int milliseconds,
-                                     @nullCheck bool isUtc) {
+  static num valueFromDecomposedDate(
+      @nullCheck int years,
+      @nullCheck int month,
+      @nullCheck int day,
+      @nullCheck int hours,
+      @nullCheck int minutes,
+      @nullCheck int seconds,
+      @nullCheck int milliseconds,
+      @nullCheck bool isUtc) {
     final int MAX_MILLISECONDS_SINCE_EPOCH = 8640000000000000;
     var jsMonth = month - 1;
     num value;
@@ -479,10 +491,10 @@
   // The following returns the same error that would be thrown by calling
   // [RangeError.checkValidIndex] with no optional parameters provided.
   if (index < 0 || index >= length) {
-    return new RangeError.index(index, indexable, 'index', null, length);
+    return RangeError.index(index, indexable, 'index', null, length);
   }
   // The above should always match, but if it does not, use the following.
-  return new RangeError.value(index, 'index');
+  return RangeError.value(index, 'index');
 }
 
 /**
@@ -492,27 +504,28 @@
 @NoInline()
 Error diagnoseRangeError(int start, int end, int length) {
   if (start == null) {
-    return new ArgumentError.value(start, 'start');
+    return ArgumentError.value(start, 'start');
   }
   if (start < 0 || start > length) {
-    return new RangeError.range(start, 0, length, 'start');
+    return RangeError.range(start, 0, length, 'start');
   }
   if (end != null) {
     if (end < start || end > length) {
-      return new RangeError.range(end, start, length, 'end');
+      return RangeError.range(end, start, length, 'end');
     }
   }
   // The above should always match, but if it does not, use the following.
-  return new ArgumentError.value(end, "end");
+  return ArgumentError.value(end, "end");
 }
 
-@notNull int stringLastIndexOfUnchecked(receiver, element, start) =>
+@notNull
+int stringLastIndexOfUnchecked(receiver, element, start) =>
     JS('int', r'#.lastIndexOf(#, #)', receiver, element, start);
 
 /// 'factory' for constructing ArgumentError.value to keep the call sites small.
 @NoInline()
 ArgumentError argumentErrorValue(object) {
-  return new ArgumentError.value(object);
+  return ArgumentError.value(object);
 }
 
 void throwArgumentErrorValue(value) {
@@ -525,16 +538,16 @@
 }
 
 throwRuntimeError(message) {
-  throw new RuntimeError(message);
+  throw RuntimeError(message);
 }
 
 throwAbstractClassInstantiationError(className) {
-  throw new AbstractClassInstantiationError(className);
+  throw AbstractClassInstantiationError(className);
 }
 
 @NoInline()
 throwConcurrentModificationError(collection) {
-  throw new ConcurrentModificationError(collection);
+  throw ConcurrentModificationError(collection);
 }
 
 class JsNoSuchMethodError extends Error implements NoSuchMethodError {
@@ -641,7 +654,7 @@
  * Called at the end of unaborted switch cases to get the singleton
  * FallThroughError exception that will be thrown.
  */
-getFallThroughError() => new FallThroughErrorImplementation();
+getFallThroughError() => FallThroughErrorImplementation();
 
 /**
  * A metadata annotation describing the types instantiated by a native element.
diff --git a/pkg/dev_compiler/tool/input_sdk/private/js_mirrors.dart b/pkg/dev_compiler/tool/input_sdk/private/js_mirrors.dart
index 270f571..7a61bf2 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/js_mirrors.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/js_mirrors.dart
@@ -19,9 +19,9 @@
 }
 
 Symbol getSymbol(name, library) =>
-    throw new UnimplementedError("MirrorSystem.getSymbol unimplemented");
+    throw UnimplementedError("MirrorSystem.getSymbol unimplemented");
 
-final currentJsMirrorSystem = new JsMirrorSystem();
+final currentJsMirrorSystem = JsMirrorSystem();
 
 final _typeMirror = JS('', 'Symbol("_typeMirror")');
 
@@ -29,9 +29,9 @@
   // TODO(vsm): Consider caching the mirror here.  Unlike the type below,
   // reflectee may be a primitive - i.e., we can't just add an expando.
   if (reflectee is Function) {
-    return new JsClosureMirror._(reflectee);
+    return JsClosureMirror._(reflectee);
   } else {
-    return new JsInstanceMirror._(reflectee);
+    return JsInstanceMirror._(reflectee);
   }
 }
 
@@ -43,7 +43,7 @@
     return JS('', '#.value', property);
   }
   // TODO(vsm): Might not be a class.
-  var mirror = new JsClassMirror._(key);
+  var mirror = JsClassMirror._(key);
   JS('', '#[#] = #', unwrapped, _typeMirror, mirror);
   return mirror;
 }
@@ -87,29 +87,29 @@
 
 Symbol _getSymbolForESSymbol(member) {
   var name = _getNameForESSymbol(member);
-  return new PrivateSymbol(name, member);
+  return PrivateSymbol(name, member);
 }
 
 // The [member] must be either a string (public) or an ES6 symbol (private).
 Symbol _getSymbolForMember(member) {
   if (member is String) {
-    return new Symbol(member);
+    return Symbol(member);
   } else {
     var name = _getNameForESSymbol(member);
-    return new PrivateSymbol(name, member);
+    return PrivateSymbol(name, member);
   }
 }
 
 Map<Symbol, dynamic> _toDartMap(data) {
   if (data == null) return {};
-  var map = new Map<Symbol, dynamic>();
+  var map = Map<Symbol, dynamic>();
   // Note: we recorded a map from fields/methods to their type and metadata.
   // The key is a string name for public members but an ES6 symbol for private
   // ones.  That's works nicely for dynamic operations, but dart:mirrors expects
   // Dart symbols, so we convert here.
   var publicMembers = JS('', 'Object.getOwnPropertyNames(#)', data);
   for (var member in publicMembers) {
-    var symbol = new Symbol(member);
+    var symbol = Symbol(member);
     map[symbol] = JS('', '#[#]', data, member);
   }
 
@@ -124,7 +124,7 @@
 dynamic _runtimeType(obj) => dart.wrapType(dart.getReifiedType(obj));
 
 _unimplemented(Type t, Invocation i) {
-  throw new UnimplementedError('$t.${getName(i.memberName)} unimplemented');
+  throw UnimplementedError('$t.${getName(i.memberName)} unimplemented');
 }
 
 dynamic _toJsMap(Map<Symbol, dynamic> map) {
@@ -253,7 +253,7 @@
           unwrapped);
       _metadata = (fn == null)
           ? const <InstanceMirror>[]
-          : new List<InstanceMirror>.unmodifiable(fn().map((i) => reflect(i)));
+          : List<InstanceMirror>.unmodifiable(fn().map((i) => reflect(i)));
     }
     return _metadata;
   }
@@ -262,31 +262,29 @@
     if (_declarations == null) {
       // Load declarations.
       // TODO(vsm): This is only populating the default constructor right now.
-      _declarations = new Map<Symbol, DeclarationMirror>();
+      _declarations = Map<Symbol, DeclarationMirror>();
       var unwrapped = dart.unwrapType(_cls);
       var constructors = _toDartMap(dart.getConstructors(unwrapped));
       constructors.forEach((symbol, ft) {
         var name = getName(symbol);
-        _declarations[symbol] =
-            new JsMethodMirror._constructor(this, symbol, ft);
+        _declarations[symbol] = JsMethodMirror._constructor(this, symbol, ft);
       });
       if (constructors.isEmpty) {
         // Add a default
         var name = 'new';
         var ft = dart.fnType(dart.unwrapType(_cls), []);
-        var symbol = new Symbol(name);
-        _declarations[symbol] =
-            new JsMethodMirror._constructor(this, symbol, ft);
+        var symbol = Symbol(name);
+        _declarations[symbol] = JsMethodMirror._constructor(this, symbol, ft);
       }
       var fields = _toDartMap(dart.getFields(unwrapped));
       fields.forEach((symbol, t) {
-        _declarations[symbol] = new JsVariableMirror._fromField(symbol, t);
+        _declarations[symbol] = JsVariableMirror._fromField(symbol, t);
       });
       var methods = _toDartMap(dart.getMethods(unwrapped));
       methods.forEach((symbol, ft) {
         var name = getName(symbol);
         _declarations[symbol] =
-            new JsMethodMirror._instanceMethod(this, symbol, ft);
+            JsMethodMirror._instanceMethod(this, symbol, ft);
       });
 
       getterType(type) {
@@ -303,7 +301,7 @@
       var getters = _toDartMap(dart.getGetters(unwrapped));
       getters.forEach((symbol, type) {
         _declarations[symbol] =
-            new JsMethodMirror._instanceMethod(this, symbol, getterType(type));
+            JsMethodMirror._instanceMethod(this, symbol, getterType(type));
       });
 
       setterType(type) {
@@ -321,48 +319,47 @@
       setters.forEach((symbol, type) {
         var name = getName(symbol) + '=';
         // Create a separate symbol for the setter.
-        symbol = new PrivateSymbol(name, _getESSymbol(symbol));
+        symbol = PrivateSymbol(name, _getESSymbol(symbol));
         _declarations[symbol] =
-            new JsMethodMirror._instanceMethod(this, symbol, setterType(type));
+            JsMethodMirror._instanceMethod(this, symbol, setterType(type));
       });
 
       var staticFields = _toDartMap(dart.getStaticFields(unwrapped));
       staticFields.forEach((symbol, t) {
-        _declarations[symbol] = new JsVariableMirror._fromField(symbol, t);
+        _declarations[symbol] = JsVariableMirror._fromField(symbol, t);
       });
       var statics = _toDartMap(dart.getStaticMethods(unwrapped));
       statics.forEach((symbol, ft) {
-        _declarations[symbol] =
-            new JsMethodMirror._staticMethod(this, symbol, ft);
+        _declarations[symbol] = JsMethodMirror._staticMethod(this, symbol, ft);
       });
 
       var staticGetters = _toDartMap(dart.getStaticGetters(unwrapped));
       staticGetters.forEach((symbol, type) {
         _declarations[symbol] =
-            new JsMethodMirror._staticMethod(this, symbol, getterType(type));
+            JsMethodMirror._staticMethod(this, symbol, getterType(type));
       });
 
       var staticSetters = _toDartMap(dart.getStaticSetters(unwrapped));
       staticSetters.forEach((symbol, type) {
         _declarations[symbol] =
-            new JsMethodMirror._staticMethod(this, symbol, setterType(type));
+            JsMethodMirror._staticMethod(this, symbol, setterType(type));
       });
       _declarations =
-          new Map<Symbol, DeclarationMirror>.unmodifiable(_declarations);
+          Map<Symbol, DeclarationMirror>.unmodifiable(_declarations);
     }
     return _declarations;
   }
 
-  JsClassMirror._(Type cls, {bool instantiated: true})
+  JsClassMirror._(Type cls, {bool instantiated = true})
       : _cls = cls,
         _raw = instantiated ? dart.getGenericClass(dart.unwrapType(cls)) : null,
-        simpleName = new Symbol(JS('String', '#.name', dart.unwrapType(cls))) {
+        simpleName = Symbol(JS('String', '#.name', dart.unwrapType(cls))) {
     var typeArgs = dart.getGenericArgs(dart.unwrapType(_cls));
     if (typeArgs == null) {
       _typeArguments = const [];
     } else {
-      _typeArguments = new List.unmodifiable(
-          typeArgs.map((t) => reflectType(dart.wrapType(t))));
+      _typeArguments =
+          List.unmodifiable(typeArgs.map((t) => reflectType(dart.wrapType(t))));
     }
   }
 
@@ -403,7 +400,7 @@
       [Map<Symbol, dynamic> namedArgs]) {
     var name = getName(symbol);
     if (namedArgs != null) {
-      args = new List.from(args);
+      args = List.from(args);
       args.add(_toJsMap(namedArgs));
     }
     var result = JS('', '#.#(...#)', dart.unwrapType(_cls), name, args);
@@ -437,8 +434,7 @@
     if (_originalDeclaration != null) {
       return _originalDeclaration;
     }
-    _originalDeclaration = new JsClassMirror._(
-        dart.wrapType(JS('', '#()', _raw)),
+    _originalDeclaration = JsClassMirror._(dart.wrapType(JS('', '#()', _raw)),
         instantiated: false);
     return _originalDeclaration;
   }
@@ -483,12 +479,12 @@
   final bool isStatic = false;
 
   JsVariableMirror._(Symbol symbol, Type t, List annotations,
-      {this.isFinal: false})
+      {this.isFinal = false})
       : _symbol = symbol,
         _name = getName(symbol),
         type = reflectType(t),
-        metadata = new List<InstanceMirror>.unmodifiable(
-            annotations?.map(reflect) ?? []);
+        metadata =
+            List<InstanceMirror>.unmodifiable(annotations?.map(reflect) ?? []);
 
   JsVariableMirror._fromField(Symbol symbol, fieldInfo)
       : this._(symbol, dart.wrapType(JS('', '#.type', fieldInfo)),
@@ -561,7 +557,7 @@
     // TODO(vsm): Why does generic function type trigger true for List?
     if (ftype is! Function && ftype is List) {
       // Record metadata
-      _metadata = new List<InstanceMirror>.unmodifiable(
+      _metadata = List<InstanceMirror>.unmodifiable(
           ftype.skip(1).map((a) => reflect(a)));
       ftype = ftype[0];
     } else {
@@ -575,14 +571,14 @@
     // TODO(vsm): Add named args.
     List args = ftype.args;
     List opts = ftype.optionals;
-    var params = new List<ParameterMirror>(args.length + opts.length);
+    var params = List<ParameterMirror>(args.length + opts.length);
 
     for (var i = 0; i < args.length; ++i) {
       var type = args[i];
       var metadata = ftype.metadata[i];
       // TODO(vsm): Recover the param name.
-      var param = new JsParameterMirror._(
-          new Symbol(''), dart.wrapType(type), metadata);
+      var param =
+          JsParameterMirror._(Symbol(''), dart.wrapType(type), metadata);
       params[i] = param;
     }
 
@@ -590,12 +586,12 @@
       var type = opts[i];
       var metadata = ftype.metadata[args.length + i];
       // TODO(vsm): Recover the param name.
-      var param = new JsParameterMirror._(
-          new Symbol(''), dart.wrapType(type), metadata);
+      var param =
+          JsParameterMirror._(Symbol(''), dart.wrapType(type), metadata);
       params[i + args.length] = param;
     }
 
-    _params = new List.unmodifiable(params);
+    _params = List.unmodifiable(params);
   }
 
   String toString() => "MethodMirror on '$_name'";
diff --git a/pkg/dev_compiler/tool/input_sdk/private/js_number.dart b/pkg/dev_compiler/tool/input_sdk/private/js_number.dart
index 31a5f5d..f539a10 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/js_number.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/js_number.dart
@@ -75,7 +75,7 @@
       return JS('int', r'# + 0', truncateToDouble()); // Converts -0.0 to +0.0.
     }
     // This is either NaN, Infinity or -Infinity.
-    throw new UnsupportedError(JS("String", '"" + #', this));
+    throw UnsupportedError(JS("String", '"" + #', this));
   }
 
   @notNull
@@ -104,7 +104,7 @@
       return JS('int', r'0 - Math.round(0 - #)', this);
     }
     // This is either NaN, Infinity or -Infinity.
-    throw new UnsupportedError(JS("String", '"" + #', this));
+    throw UnsupportedError(JS("String", '"" + #', this));
   }
 
   @notNull
@@ -141,7 +141,7 @@
   @notNull
   String toStringAsFixed(@notNull int fractionDigits) {
     if (fractionDigits < 0 || fractionDigits > 20) {
-      throw new RangeError.range(fractionDigits, 0, 20, "fractionDigits");
+      throw RangeError.range(fractionDigits, 0, 20, "fractionDigits");
     }
     String result = JS('String', r'#.toFixed(#)', this, fractionDigits);
     if (this == 0 && isNegative) return "-$result";
@@ -155,7 +155,7 @@
       @notNull
       var _fractionDigits = fractionDigits;
       if (_fractionDigits < 0 || _fractionDigits > 20) {
-        throw new RangeError.range(_fractionDigits, 0, 20, "fractionDigits");
+        throw RangeError.range(_fractionDigits, 0, 20, "fractionDigits");
       }
       result = JS('String', r'#.toExponential(#)', this, _fractionDigits);
     } else {
@@ -168,7 +168,7 @@
   @notNull
   String toStringAsPrecision(@nullCheck int precision) {
     if (precision < 1 || precision > 21) {
-      throw new RangeError.range(precision, 1, 21, "precision");
+      throw RangeError.range(precision, 1, 21, "precision");
     }
     String result = JS('String', r'#.toPrecision(#)', this, precision);
     if (this == 0 && isNegative) return "-$result";
@@ -178,7 +178,7 @@
   @notNull
   String toRadixString(@nullCheck int radix) {
     if (radix < 2 || radix > 36) {
-      throw new RangeError.range(radix, 2, 36, "radix");
+      throw RangeError.range(radix, 2, 36, "radix");
     }
     String result = JS('String', r'#.toString(#)', this, radix);
     const int rightParenCode = 0x29;
@@ -196,7 +196,7 @@
         '', r'/^([\da-z]+)(?:\.([\da-z]+))?\(e\+(\d+)\)$/.exec(#)', result);
     if (match == null) {
       // Then we don't know how to handle it at all.
-      throw new UnsupportedError("Unexpected toString result: $result");
+      throw UnsupportedError("Unexpected toString result: $result");
     }
     result = JS('!', '#', match[1]);
     int exponent = JS("!", "+#", match[3]);
@@ -401,8 +401,8 @@
   // Returns pow(this, e) % m.
   @notNull
   int modPow(@nullCheck int e, @nullCheck int m) {
-    if (e < 0) throw new RangeError.range(e, 0, null, "exponent");
-    if (m <= 0) throw new RangeError.range(m, 1, null, "modulus");
+    if (e < 0) throw RangeError.range(e, 0, null, "exponent");
+    if (m <= 0) throw RangeError.range(m, 1, null, "modulus");
     if (e == 0) return 1;
     int b = this;
     if (b < 0 || b > m) {
@@ -479,7 +479,7 @@
       }
     } while (u != 0);
     if (!inv) return s * v;
-    if (v != 1) throw new Exception("Not coprime");
+    if (v != 1) throw Exception("Not coprime");
     if (d < 0) {
       d += x;
       if (d < 0) d += x;
@@ -493,13 +493,13 @@
   // Returns 1/this % m, with m > 0.
   @notNull
   int modInverse(@nullCheck int m) {
-    if (m <= 0) throw new RangeError.range(m, 1, null, "modulus");
+    if (m <= 0) throw RangeError.range(m, 1, null, "modulus");
     if (m == 1) return 0;
     int t = this;
     if ((t < 0) || (t >= m)) t %= m;
     if (t == 1) return 1;
     if ((t == 0) || (t.isEven && m.isEven)) {
-      throw new Exception("Not coprime");
+      throw Exception("Not coprime");
     }
     return _binaryGcd(m, t, true);
   }
diff --git a/pkg/dev_compiler/tool/input_sdk/private/js_string.dart b/pkg/dev_compiler/tool/input_sdk/private/js_string.dart
index 9b57bf3..6f2c382 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/js_string.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/js_string.dart
@@ -20,7 +20,7 @@
     // (JS String.length cannot be null).
     final len = this.length;
     if (index < 0 || index >= len) {
-      throw new RangeError.index(index, this, 'index', null, len);
+      throw RangeError.index(index, this, 'index', null, len);
     }
     return JS('int', r'#.charCodeAt(#)', this, index);
   }
@@ -30,7 +30,7 @@
       [@nullCheck int start = 0]) {
     final len = string.length;
     if (0 > start || start > len) {
-      throw new RangeError.range(start, 0, len);
+      throw RangeError.range(start, 0, len);
     }
     return allMatchesInStringUnchecked(this, string, start);
   }
@@ -38,7 +38,7 @@
   Match matchAsPrefix(@nullCheck String string, [@nullCheck int start = 0]) {
     int stringLength = JS('!', '#.length', string);
     if (start < 0 || start > stringLength) {
-      throw new RangeError.range(start, 0, stringLength);
+      throw RangeError.range(start, 0, stringLength);
     }
     int thisLength = JS('!', '#.length', this);
     if (start + thisLength > stringLength) return null;
@@ -47,7 +47,7 @@
         return null;
       }
     }
-    return new StringMatch(start, string, this);
+    return StringMatch(start, string, this);
   }
 
   @notNull
@@ -97,10 +97,10 @@
   @notNull
   List<String> split(@nullCheck Pattern pattern) {
     if (pattern is String) {
-      return new JSArray.of(JS('', r'#.split(#)', this, pattern));
+      return JSArray.of(JS('', r'#.split(#)', this, pattern));
     } else if (pattern is JSSyntaxRegExp && regExpCaptureCount(pattern) == 0) {
       var re = regExpGetNative(pattern);
-      return new JSArray.of(JS('', r'#.split(#)', this, re));
+      return JSArray.of(JS('', r'#.split(#)', this, re));
     } else {
       return _defaultSplit(pattern);
     }
@@ -150,7 +150,7 @@
     // reference to index.
     int length = JS('int', '#.length', this);
     if (index < 0 || JS('int', '#', index) > length) {
-      throw new RangeError.range(index, 0, this.length);
+      throw RangeError.range(index, 0, this.length);
     }
     if (pattern is String) {
       String other = pattern;
@@ -166,9 +166,9 @@
   String substring(@nullCheck int startIndex, [int _endIndex]) {
     var length = this.length;
     final endIndex = _endIndex ?? length;
-    if (startIndex < 0) throw new RangeError.value(startIndex);
-    if (startIndex > endIndex) throw new RangeError.value(startIndex);
-    if (endIndex > length) throw new RangeError.value(endIndex);
+    if (startIndex < 0) throw RangeError.value(startIndex);
+    if (startIndex > endIndex) throw RangeError.value(startIndex);
+    if (endIndex > length) throw RangeError.value(endIndex);
     return JS('String', r'#.substring(#, #)', this, startIndex, endIndex);
   }
 
@@ -400,15 +400,15 @@
   }
 
   @notNull
-  List<int> get codeUnits => new CodeUnits(this);
+  List<int> get codeUnits => CodeUnits(this);
 
   @notNull
-  Runes get runes => new Runes(this);
+  Runes get runes => Runes(this);
 
   @notNull
   int indexOf(@nullCheck Pattern pattern, [@nullCheck int start = 0]) {
     if (start < 0 || start > this.length) {
-      throw new RangeError.range(start, 0, this.length);
+      throw RangeError.range(start, 0, this.length);
     }
     if (pattern is String) {
       return stringIndexOfStringUnchecked(this, pattern, start);
@@ -430,7 +430,7 @@
     var length = this.length;
     var start = _start ?? length;
     if (start < 0 || start > length) {
-      throw new RangeError.range(start, 0, length);
+      throw RangeError.range(start, 0, length);
     }
     if (pattern is String) {
       String other = pattern;
@@ -448,7 +448,7 @@
   @notNull
   bool contains(@nullCheck Pattern other, [@nullCheck int startIndex = 0]) {
     if (startIndex < 0 || startIndex > this.length) {
-      throw new RangeError.range(startIndex, 0, this.length);
+      throw RangeError.range(startIndex, 0, this.length);
     }
     return stringContainsUnchecked(this, other, startIndex);
   }
diff --git a/pkg/dev_compiler/tool/input_sdk/private/linked_hash_map.dart b/pkg/dev_compiler/tool/input_sdk/private/linked_hash_map.dart
index ea366ca..f5cde5c 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/linked_hash_map.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/linked_hash_map.dart
@@ -20,7 +20,7 @@
     for (var entry in JS('Iterable', '#.entries()', _map)) {
       action(JS('', '#[0]', entry), JS('', '#[1]', entry));
       if (modifications != _modifications) {
-        throw new ConcurrentModificationError(this);
+        throw ConcurrentModificationError(this);
       }
     }
   }
@@ -90,8 +90,8 @@
   @notNull
   bool get isNotEmpty => JS('bool', '#.size != 0', _map);
 
-  Iterable<K> get keys => new _JSMapIterable<K>(this, true);
-  Iterable<V> get values => new _JSMapIterable<V>(this, false);
+  Iterable<K> get keys => _JSMapIterable<K>(this, true);
+  Iterable<V> get values => _JSMapIterable<V>(this, false);
 
   @notNull
   bool containsKey(Object key) {
@@ -272,5 +272,5 @@
   V putIfAbsent(Object key, Object ifAbsent()) => throw _unsupported();
 
   static Error _unsupported() =>
-      new UnsupportedError("Cannot modify unmodifiable map");
+      UnsupportedError("Cannot modify unmodifiable map");
 }
diff --git a/pkg/dev_compiler/tool/input_sdk/private/native_typed_data.dart b/pkg/dev_compiler/tool/input_sdk/private/native_typed_data.dart
index b108a7c..4bc3ff5 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/native_typed_data.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/native_typed_data.dart
@@ -34,69 +34,69 @@
   Type get runtimeType => ByteBuffer;
 
   Uint8List asUint8List([int offsetInBytes = 0, int length]) {
-    return new NativeUint8List.view(this, offsetInBytes, length);
+    return NativeUint8List.view(this, offsetInBytes, length);
   }
 
   Int8List asInt8List([int offsetInBytes = 0, int length]) {
-    return new NativeInt8List.view(this, offsetInBytes, length);
+    return NativeInt8List.view(this, offsetInBytes, length);
   }
 
   Uint8ClampedList asUint8ClampedList([int offsetInBytes = 0, int length]) {
-    return new NativeUint8ClampedList.view(this, offsetInBytes, length);
+    return NativeUint8ClampedList.view(this, offsetInBytes, length);
   }
 
   Uint16List asUint16List([int offsetInBytes = 0, int length]) {
-    return new NativeUint16List.view(this, offsetInBytes, length);
+    return NativeUint16List.view(this, offsetInBytes, length);
   }
 
   Int16List asInt16List([int offsetInBytes = 0, int length]) {
-    return new NativeInt16List.view(this, offsetInBytes, length);
+    return NativeInt16List.view(this, offsetInBytes, length);
   }
 
   Uint32List asUint32List([int offsetInBytes = 0, int length]) {
-    return new NativeUint32List.view(this, offsetInBytes, length);
+    return NativeUint32List.view(this, offsetInBytes, length);
   }
 
   Int32List asInt32List([int offsetInBytes = 0, int length]) {
-    return new NativeInt32List.view(this, offsetInBytes, length);
+    return NativeInt32List.view(this, offsetInBytes, length);
   }
 
   Uint64List asUint64List([int offsetInBytes = 0, int length]) {
-    throw new UnsupportedError("Uint64List not supported by dart2js.");
+    throw UnsupportedError("Uint64List not supported by dart2js.");
   }
 
   Int64List asInt64List([int offsetInBytes = 0, int length]) {
-    throw new UnsupportedError("Int64List not supported by dart2js.");
+    throw UnsupportedError("Int64List not supported by dart2js.");
   }
 
   Int32x4List asInt32x4List([int offsetInBytes = 0, int length]) {
     NativeInt32List storage =
         this.asInt32List(offsetInBytes, length != null ? length * 4 : null);
-    return new NativeInt32x4List._externalStorage(storage);
+    return NativeInt32x4List._externalStorage(storage);
   }
 
   Float32List asFloat32List([int offsetInBytes = 0, int length]) {
-    return new NativeFloat32List.view(this, offsetInBytes, length);
+    return NativeFloat32List.view(this, offsetInBytes, length);
   }
 
   Float64List asFloat64List([int offsetInBytes = 0, int length]) {
-    return new NativeFloat64List.view(this, offsetInBytes, length);
+    return NativeFloat64List.view(this, offsetInBytes, length);
   }
 
   Float32x4List asFloat32x4List([int offsetInBytes = 0, int length]) {
     NativeFloat32List storage =
         this.asFloat32List(offsetInBytes, length != null ? length * 4 : null);
-    return new NativeFloat32x4List._externalStorage(storage);
+    return NativeFloat32x4List._externalStorage(storage);
   }
 
   Float64x2List asFloat64x2List([int offsetInBytes = 0, int length]) {
     NativeFloat64List storage =
         this.asFloat64List(offsetInBytes, length != null ? length * 2 : null);
-    return new NativeFloat64x2List._externalStorage(storage);
+    return NativeFloat64x2List._externalStorage(storage);
   }
 
   ByteData asByteData([int offsetInBytes = 0, int length]) {
-    return new NativeByteData.view(this, offsetInBytes, length);
+    return NativeByteData.view(this, offsetInBytes, length);
   }
 }
 
@@ -114,13 +114,12 @@
    * Creates a [Float32x4List] of the specified length (in elements),
    * all of whose elements are initially zero.
    */
-  NativeFloat32x4List(int length)
-      : _storage = new NativeFloat32List(length * 4);
+  NativeFloat32x4List(int length) : _storage = NativeFloat32List(length * 4);
 
   NativeFloat32x4List._externalStorage(this._storage);
 
   NativeFloat32x4List._slowFromList(List<Float32x4> list)
-      : _storage = new NativeFloat32List(list.length * 4) {
+      : _storage = NativeFloat32List(list.length * 4) {
     for (int i = 0; i < list.length; i++) {
       var e = list[i];
       _storage[(i * 4) + 0] = e.x;
@@ -138,10 +137,10 @@
    */
   factory NativeFloat32x4List.fromList(List<Float32x4> list) {
     if (list is NativeFloat32x4List) {
-      return new NativeFloat32x4List._externalStorage(
-          new NativeFloat32List.fromList(list._storage));
+      return NativeFloat32x4List._externalStorage(
+          NativeFloat32List.fromList(list._storage));
     } else {
-      return new NativeFloat32x4List._slowFromList(list);
+      return NativeFloat32x4List._slowFromList(list);
     }
   }
 
@@ -161,7 +160,7 @@
     double _y = _storage[(index * 4) + 1];
     double _z = _storage[(index * 4) + 2];
     double _w = _storage[(index * 4) + 3];
-    return new NativeFloat32x4._truncated(_x, _y, _z, _w);
+    return NativeFloat32x4._truncated(_x, _y, _z, _w);
   }
 
   void operator []=(int index, Float32x4 value) {
@@ -174,7 +173,7 @@
 
   List<Float32x4> sublist(int start, [int end]) {
     end = _checkValidRange(start, end, this.length);
-    return new NativeFloat32x4List._externalStorage(
+    return NativeFloat32x4List._externalStorage(
         _storage.sublist(start * 4, end * 4));
   }
 }
@@ -193,12 +192,12 @@
    * Creates a [Int32x4List] of the specified length (in elements),
    * all of whose elements are initially zero.
    */
-  NativeInt32x4List(int length) : _storage = new NativeInt32List(length * 4);
+  NativeInt32x4List(int length) : _storage = NativeInt32List(length * 4);
 
   NativeInt32x4List._externalStorage(Int32List storage) : _storage = storage;
 
   NativeInt32x4List._slowFromList(List<Int32x4> list)
-      : _storage = new NativeInt32List(list.length * 4) {
+      : _storage = NativeInt32List(list.length * 4) {
     for (int i = 0; i < list.length; i++) {
       var e = list[i];
       _storage[(i * 4) + 0] = e.x;
@@ -216,10 +215,10 @@
    */
   factory NativeInt32x4List.fromList(List<Int32x4> list) {
     if (list is NativeInt32x4List) {
-      return new NativeInt32x4List._externalStorage(
-          new NativeInt32List.fromList(list._storage));
+      return NativeInt32x4List._externalStorage(
+          NativeInt32List.fromList(list._storage));
     } else {
-      return new NativeInt32x4List._slowFromList(list);
+      return NativeInt32x4List._slowFromList(list);
     }
   }
 
@@ -239,7 +238,7 @@
     int _y = _storage[(index * 4) + 1];
     int _z = _storage[(index * 4) + 2];
     int _w = _storage[(index * 4) + 3];
-    return new NativeInt32x4._truncated(_x, _y, _z, _w);
+    return NativeInt32x4._truncated(_x, _y, _z, _w);
   }
 
   void operator []=(int index, Int32x4 value) {
@@ -252,7 +251,7 @@
 
   List<Int32x4> sublist(int start, [int end]) {
     end = _checkValidRange(start, end, this.length);
-    return new NativeInt32x4List._externalStorage(
+    return NativeInt32x4List._externalStorage(
         _storage.sublist(start * 4, end * 4));
   }
 }
@@ -271,13 +270,12 @@
    * Creates a [Float64x2List] of the specified length (in elements),
    * all of whose elements are initially zero.
    */
-  NativeFloat64x2List(int length)
-      : _storage = new NativeFloat64List(length * 2);
+  NativeFloat64x2List(int length) : _storage = NativeFloat64List(length * 2);
 
   NativeFloat64x2List._externalStorage(this._storage);
 
   NativeFloat64x2List._slowFromList(List<Float64x2> list)
-      : _storage = new NativeFloat64List(list.length * 2) {
+      : _storage = NativeFloat64List(list.length * 2) {
     for (int i = 0; i < list.length; i++) {
       var e = list[i];
       _storage[(i * 2) + 0] = e.x;
@@ -291,10 +289,10 @@
    */
   factory NativeFloat64x2List.fromList(List<Float64x2> list) {
     if (list is NativeFloat64x2List) {
-      return new NativeFloat64x2List._externalStorage(
-          new NativeFloat64List.fromList(list._storage));
+      return NativeFloat64x2List._externalStorage(
+          NativeFloat64List.fromList(list._storage));
     } else {
-      return new NativeFloat64x2List._slowFromList(list);
+      return NativeFloat64x2List._slowFromList(list);
     }
   }
 
@@ -314,7 +312,7 @@
     _checkValidIndex(index, this, this.length);
     double _x = _storage[(index * 2) + 0];
     double _y = _storage[(index * 2) + 1];
-    return new Float64x2(_x, _y);
+    return Float64x2(_x, _y);
   }
 
   void operator []=(int index, Float64x2 value) {
@@ -325,7 +323,7 @@
 
   List<Float64x2> sublist(int start, [int end]) {
     end = _checkValidRange(start, end, this.length);
-    return new NativeFloat64x2List._externalStorage(
+    return NativeFloat64x2List._externalStorage(
         _storage.sublist(start * 2, end * 2));
   }
 }
@@ -361,9 +359,9 @@
 
   void _invalidPosition(int position, int length, String name) {
     if (position is! int) {
-      throw new ArgumentError.value(position, name, 'Invalid list position');
+      throw ArgumentError.value(position, name, 'Invalid list position');
     } else {
-      throw new RangeError.range(position, 0, length, name);
+      throw RangeError.range(position, 0, length, name);
     }
   }
 
@@ -380,7 +378,7 @@
 // because passing unvalidated values to the native constructors can cause
 // conversions or create views.
 int _checkLength(length) {
-  if (length is! int) throw new ArgumentError('Invalid length $length');
+  if (length is! int) throw ArgumentError('Invalid length $length');
   return length;
 }
 
@@ -390,13 +388,13 @@
 // views of the input.
 void _checkViewArguments(buffer, offsetInBytes, length) {
   if (buffer is! NativeByteBuffer) {
-    throw new ArgumentError('Invalid view buffer');
+    throw ArgumentError('Invalid view buffer');
   }
   if (offsetInBytes is! int) {
-    throw new ArgumentError('Invalid view offsetInBytes $offsetInBytes');
+    throw ArgumentError('Invalid view offsetInBytes $offsetInBytes');
   }
   if (length != null && length is! int) {
-    throw new ArgumentError('Invalid view length $length');
+    throw ArgumentError('Invalid view length $length');
   }
 }
 
@@ -404,7 +402,7 @@
 // returns a copy of the list.
 List _ensureNativeList(List list) {
   if (list is JSIndexable) return list;
-  List result = new List(list.length);
+  List result = List(list.length);
   for (int i = 0; i < list.length; i++) {
     result[i] = list[i];
   }
@@ -518,7 +516,7 @@
    * `byteOffset + 8` is greater than the length of this object.
    */
   int getInt64(int byteOffset, [Endian endian = Endian.big]) {
-    throw new UnsupportedError('Int64 accessor not supported by dart2js.');
+    throw UnsupportedError('Int64 accessor not supported by dart2js.');
   }
 
   /**
@@ -573,7 +571,7 @@
    * `byteOffset + 8` is greater than the length of this object.
    */
   int getUint64(int byteOffset, [Endian endian = Endian.big]) {
-    throw new UnsupportedError('Uint64 accessor not supported by dart2js.');
+    throw UnsupportedError('Uint64 accessor not supported by dart2js.');
   }
 
   /**
@@ -663,7 +661,7 @@
    * `byteOffset + 8` is greater than the length of this object.
    */
   void setInt64(int byteOffset, int value, [Endian endian = Endian.big]) {
-    throw new UnsupportedError('Int64 accessor not supported by dart2js.');
+    throw UnsupportedError('Int64 accessor not supported by dart2js.');
   }
 
   /**
@@ -717,7 +715,7 @@
    * `byteOffset + 8` is greater than the length of this object.
    */
   void setUint64(int byteOffset, int value, [Endian endian = Endian.big]) {
-    throw new UnsupportedError('Uint64 accessor not supported by dart2js.');
+    throw UnsupportedError('Uint64 accessor not supported by dart2js.');
   }
 
   /**
@@ -750,14 +748,14 @@
     int targetLength = this.length;
     _checkPosition(start, targetLength, "start");
     _checkPosition(end, targetLength, "end");
-    if (start > end) throw new RangeError.range(start, 0, end);
+    if (start > end) throw RangeError.range(start, 0, end);
     int count = end - start;
 
-    if (skipCount < 0) throw new ArgumentError(skipCount);
+    if (skipCount < 0) throw ArgumentError(skipCount);
 
     int sourceLength = source.length;
     if (sourceLength - skipCount < count) {
-      throw new StateError('Not enough elements');
+      throw StateError('Not enough elements');
     }
 
     if (skipCount != 0 || sourceLength != count) {
@@ -1174,7 +1172,7 @@
   final double z;
   final double w;
 
-  static final NativeFloat32List _list = new NativeFloat32List(4);
+  static final NativeFloat32List _list = NativeFloat32List(4);
   static final Uint32List _uint32view = _list.buffer.asUint32List();
 
   static _truncate(x) {
@@ -1189,10 +1187,10 @@
         this.w = _truncate(w) {
     // We would prefer to check for `double` but in dart2js we can't see the
     // difference anyway.
-    if (x is! num) throw new ArgumentError(x);
-    if (y is! num) throw new ArgumentError(y);
-    if (z is! num) throw new ArgumentError(z);
-    if (w is! num) throw new ArgumentError(w);
+    if (x is! num) throw ArgumentError(x);
+    if (y is! num) throw ArgumentError(y);
+    if (z is! num) throw ArgumentError(z);
+    if (w is! num) throw ArgumentError(w);
   }
 
   NativeFloat32x4.splat(double v) : this(v, v, v, v);
@@ -1204,8 +1202,7 @@
     _uint32view[1] = i.y;
     _uint32view[2] = i.z;
     _uint32view[3] = i.w;
-    return new NativeFloat32x4._truncated(
-        _list[0], _list[1], _list[2], _list[3]);
+    return NativeFloat32x4._truncated(_list[0], _list[1], _list[2], _list[3]);
   }
 
   NativeFloat32x4.fromFloat64x2(Float64x2 v)
@@ -1237,12 +1234,12 @@
     double _y = y + other.y;
     double _z = z + other.z;
     double _w = w + other.w;
-    return new NativeFloat32x4._doubles(_x, _y, _z, _w);
+    return NativeFloat32x4._doubles(_x, _y, _z, _w);
   }
 
   /// Negate operator.
   Float32x4 operator -() {
-    return new NativeFloat32x4._truncated(-x, -y, -z, -w);
+    return NativeFloat32x4._truncated(-x, -y, -z, -w);
   }
 
   /// Subtraction operator.
@@ -1251,7 +1248,7 @@
     double _y = y - other.y;
     double _z = z - other.z;
     double _w = w - other.w;
-    return new NativeFloat32x4._doubles(_x, _y, _z, _w);
+    return NativeFloat32x4._doubles(_x, _y, _z, _w);
   }
 
   /// Multiplication operator.
@@ -1260,7 +1257,7 @@
     double _y = y * other.y;
     double _z = z * other.z;
     double _w = w * other.w;
-    return new NativeFloat32x4._doubles(_x, _y, _z, _w);
+    return NativeFloat32x4._doubles(_x, _y, _z, _w);
   }
 
   /// Division operator.
@@ -1269,7 +1266,7 @@
     double _y = y / other.y;
     double _z = z / other.z;
     double _w = w / other.w;
-    return new NativeFloat32x4._doubles(_x, _y, _z, _w);
+    return NativeFloat32x4._doubles(_x, _y, _z, _w);
   }
 
   /// Relational less than.
@@ -1278,7 +1275,7 @@
     bool _cy = y < other.y;
     bool _cz = z < other.z;
     bool _cw = w < other.w;
-    return new NativeInt32x4._truncated(
+    return NativeInt32x4._truncated(
         _cx ? -1 : 0, _cy ? -1 : 0, _cz ? -1 : 0, _cw ? -1 : 0);
   }
 
@@ -1288,7 +1285,7 @@
     bool _cy = y <= other.y;
     bool _cz = z <= other.z;
     bool _cw = w <= other.w;
-    return new NativeInt32x4._truncated(
+    return NativeInt32x4._truncated(
         _cx ? -1 : 0, _cy ? -1 : 0, _cz ? -1 : 0, _cw ? -1 : 0);
   }
 
@@ -1298,7 +1295,7 @@
     bool _cy = y > other.y;
     bool _cz = z > other.z;
     bool _cw = w > other.w;
-    return new NativeInt32x4._truncated(
+    return NativeInt32x4._truncated(
         _cx ? -1 : 0, _cy ? -1 : 0, _cz ? -1 : 0, _cw ? -1 : 0);
   }
 
@@ -1308,7 +1305,7 @@
     bool _cy = y >= other.y;
     bool _cz = z >= other.z;
     bool _cw = w >= other.w;
-    return new NativeInt32x4._truncated(
+    return NativeInt32x4._truncated(
         _cx ? -1 : 0, _cy ? -1 : 0, _cz ? -1 : 0, _cw ? -1 : 0);
   }
 
@@ -1318,7 +1315,7 @@
     bool _cy = y == other.y;
     bool _cz = z == other.z;
     bool _cw = w == other.w;
-    return new NativeInt32x4._truncated(
+    return NativeInt32x4._truncated(
         _cx ? -1 : 0, _cy ? -1 : 0, _cz ? -1 : 0, _cw ? -1 : 0);
   }
 
@@ -1328,7 +1325,7 @@
     bool _cy = y != other.y;
     bool _cz = z != other.z;
     bool _cw = w != other.w;
-    return new NativeInt32x4._truncated(
+    return NativeInt32x4._truncated(
         _cx ? -1 : 0, _cy ? -1 : 0, _cz ? -1 : 0, _cw ? -1 : 0);
   }
 
@@ -1338,7 +1335,7 @@
     double _y = s * y;
     double _z = s * z;
     double _w = s * w;
-    return new NativeFloat32x4._doubles(_x, _y, _z, _w);
+    return NativeFloat32x4._doubles(_x, _y, _z, _w);
   }
 
   /// Returns the absolute value of this [Float32x4].
@@ -1347,7 +1344,7 @@
     double _y = y.abs();
     double _z = z.abs();
     double _w = w.abs();
-    return new NativeFloat32x4._truncated(_x, _y, _z, _w);
+    return NativeFloat32x4._truncated(_x, _y, _z, _w);
   }
 
   /// Clamps [this] to be in the range [lowerLimit]-[upperLimit].
@@ -1373,7 +1370,7 @@
     _y = _y < _ly ? _ly : _y;
     _z = _z < _lz ? _lz : _z;
     _w = _w < _lw ? _lw : _w;
-    return new NativeFloat32x4._truncated(_x, _y, _z, _w);
+    return NativeFloat32x4._truncated(_x, _y, _z, _w);
   }
 
   /// Extract the sign bit from each lane return them in the first 4 bits.
@@ -1395,7 +1392,7 @@
   /// Shuffle the lane values. [mask] must be one of the 256 shuffle constants.
   Float32x4 shuffle(int mask) {
     if ((mask < 0) || (mask > 255)) {
-      throw new RangeError.range(mask, 0, 255, "mask");
+      throw RangeError.range(mask, 0, 255, "mask");
     }
     _list[0] = x;
     _list[1] = y;
@@ -1406,7 +1403,7 @@
     double _y = _list[(mask >> 2) & 0x3];
     double _z = _list[(mask >> 4) & 0x3];
     double _w = _list[(mask >> 6) & 0x3];
-    return new NativeFloat32x4._truncated(_x, _y, _z, _w);
+    return NativeFloat32x4._truncated(_x, _y, _z, _w);
   }
 
   /// Shuffle the lane values in [this] and [other]. The returned
@@ -1414,7 +1411,7 @@
   /// Uses the same [mask] as [shuffle].
   Float32x4 shuffleMix(Float32x4 other, int mask) {
     if ((mask < 0) || (mask > 255)) {
-      throw new RangeError.range(mask, 0, 255, "mask");
+      throw RangeError.range(mask, 0, 255, "mask");
     }
     _list[0] = x;
     _list[1] = y;
@@ -1429,27 +1426,27 @@
     _list[3] = other.w;
     double _z = _list[(mask >> 4) & 0x3];
     double _w = _list[(mask >> 6) & 0x3];
-    return new NativeFloat32x4._truncated(_x, _y, _z, _w);
+    return NativeFloat32x4._truncated(_x, _y, _z, _w);
   }
 
   /// Copy [this] and replace the [x] lane.
   Float32x4 withX(double newX) {
-    return new NativeFloat32x4._truncated(_truncate(newX), y, z, w);
+    return NativeFloat32x4._truncated(_truncate(newX), y, z, w);
   }
 
   /// Copy [this] and replace the [y] lane.
   Float32x4 withY(double newY) {
-    return new NativeFloat32x4._truncated(x, _truncate(newY), z, w);
+    return NativeFloat32x4._truncated(x, _truncate(newY), z, w);
   }
 
   /// Copy [this] and replace the [z] lane.
   Float32x4 withZ(double newZ) {
-    return new NativeFloat32x4._truncated(x, y, _truncate(newZ), w);
+    return NativeFloat32x4._truncated(x, y, _truncate(newZ), w);
   }
 
   /// Copy [this] and replace the [w] lane.
   Float32x4 withW(double newW) {
-    return new NativeFloat32x4._truncated(x, y, z, _truncate(newW));
+    return NativeFloat32x4._truncated(x, y, z, _truncate(newW));
   }
 
   /// Returns the lane-wise minimum value in [this] or [other].
@@ -1458,7 +1455,7 @@
     double _y = y < other.y ? y : other.y;
     double _z = z < other.z ? z : other.z;
     double _w = w < other.w ? w : other.w;
-    return new NativeFloat32x4._truncated(_x, _y, _z, _w);
+    return NativeFloat32x4._truncated(_x, _y, _z, _w);
   }
 
   /// Returns the lane-wise maximum value in [this] or [other].
@@ -1467,7 +1464,7 @@
     double _y = y > other.y ? y : other.y;
     double _z = z > other.z ? z : other.z;
     double _w = w > other.w ? w : other.w;
-    return new NativeFloat32x4._truncated(_x, _y, _z, _w);
+    return NativeFloat32x4._truncated(_x, _y, _z, _w);
   }
 
   /// Returns the square root of [this].
@@ -1476,7 +1473,7 @@
     double _y = Math.sqrt(y);
     double _z = Math.sqrt(z);
     double _w = Math.sqrt(w);
-    return new NativeFloat32x4._doubles(_x, _y, _z, _w);
+    return NativeFloat32x4._doubles(_x, _y, _z, _w);
   }
 
   /// Returns the reciprocal of [this].
@@ -1485,7 +1482,7 @@
     double _y = 1.0 / y;
     double _z = 1.0 / z;
     double _w = 1.0 / w;
-    return new NativeFloat32x4._doubles(_x, _y, _z, _w);
+    return NativeFloat32x4._doubles(_x, _y, _z, _w);
   }
 
   /// Returns the square root of the reciprocal of [this].
@@ -1494,7 +1491,7 @@
     double _y = Math.sqrt(1.0 / y);
     double _z = Math.sqrt(1.0 / z);
     double _w = Math.sqrt(1.0 / w);
-    return new NativeFloat32x4._doubles(_x, _y, _z, _w);
+    return NativeFloat32x4._doubles(_x, _y, _z, _w);
   }
 }
 
@@ -1509,7 +1506,7 @@
   final int z;
   final int w;
 
-  static final _list = new NativeInt32List(4);
+  static final _list = NativeInt32List(4);
 
   static _truncate(x) {
     _list[0] = x;
@@ -1521,10 +1518,10 @@
         this.y = _truncate(y),
         this.z = _truncate(z),
         this.w = _truncate(w) {
-    if (x != this.x && x is! int) throw new ArgumentError(x);
-    if (y != this.y && y is! int) throw new ArgumentError(y);
-    if (z != this.z && z is! int) throw new ArgumentError(z);
-    if (w != this.w && w is! int) throw new ArgumentError(w);
+    if (x != this.x && x is! int) throw ArgumentError(x);
+    if (y != this.y && y is! int) throw ArgumentError(y);
+    if (z != this.z && z is! int) throw ArgumentError(z);
+    if (w != this.w && w is! int) throw ArgumentError(w);
   }
 
   NativeInt32x4.bool(bool x, bool y, bool z, bool w)
@@ -1541,7 +1538,7 @@
     floatList[2] = f.z;
     floatList[3] = f.w;
     NativeInt32List view = floatList.buffer.asInt32List();
-    return new NativeInt32x4._truncated(view[0], view[1], view[2], view[3]);
+    return NativeInt32x4._truncated(view[0], view[1], view[2], view[3]);
   }
 
   NativeInt32x4._truncated(this.x, this.y, this.z, this.w);
@@ -1552,7 +1549,7 @@
   Int32x4 operator |(Int32x4 other) {
     // Dart2js uses unsigned results for bit-operations.
     // We use "JS" to fall back to the signed versions.
-    return new NativeInt32x4._truncated(
+    return NativeInt32x4._truncated(
         JS("int", "# | #", x, other.x),
         JS("int", "# | #", y, other.y),
         JS("int", "# | #", z, other.z),
@@ -1563,7 +1560,7 @@
   Int32x4 operator &(Int32x4 other) {
     // Dart2js uses unsigned results for bit-operations.
     // We use "JS" to fall back to the signed versions.
-    return new NativeInt32x4._truncated(
+    return NativeInt32x4._truncated(
         JS("int", "# & #", x, other.x),
         JS("int", "# & #", y, other.y),
         JS("int", "# & #", z, other.z),
@@ -1574,7 +1571,7 @@
   Int32x4 operator ^(Int32x4 other) {
     // Dart2js uses unsigned results for bit-operations.
     // We use "JS" to fall back to the signed versions.
-    return new NativeInt32x4._truncated(
+    return NativeInt32x4._truncated(
         JS("int", "# ^ #", x, other.x),
         JS("int", "# ^ #", y, other.y),
         JS("int", "# ^ #", z, other.z),
@@ -1583,7 +1580,7 @@
 
   Int32x4 operator +(Int32x4 other) {
     // Avoid going through the typed array by "| 0" the result.
-    return new NativeInt32x4._truncated(
+    return NativeInt32x4._truncated(
         JS("int", "(# + #) | 0", x, other.x),
         JS("int", "(# + #) | 0", y, other.y),
         JS("int", "(# + #) | 0", z, other.z),
@@ -1592,7 +1589,7 @@
 
   Int32x4 operator -(Int32x4 other) {
     // Avoid going through the typed array by "| 0" the result.
-    return new NativeInt32x4._truncated(
+    return NativeInt32x4._truncated(
         JS("int", "(# - #) | 0", x, other.x),
         JS("int", "(# - #) | 0", y, other.y),
         JS("int", "(# - #) | 0", z, other.z),
@@ -1601,7 +1598,7 @@
 
   Int32x4 operator -() {
     // Avoid going through the typed array by "| 0" the result.
-    return new NativeInt32x4._truncated(
+    return NativeInt32x4._truncated(
         JS("int", "(-#) | 0", x),
         JS("int", "(-#) | 0", y),
         JS("int", "(-#) | 0", z),
@@ -1620,7 +1617,7 @@
   /// Shuffle the lane values. [mask] must be one of the 256 shuffle constants.
   Int32x4 shuffle(int mask) {
     if ((mask < 0) || (mask > 255)) {
-      throw new RangeError.range(mask, 0, 255, "mask");
+      throw RangeError.range(mask, 0, 255, "mask");
     }
     _list[0] = x;
     _list[1] = y;
@@ -1630,7 +1627,7 @@
     int _y = _list[(mask >> 2) & 0x3];
     int _z = _list[(mask >> 4) & 0x3];
     int _w = _list[(mask >> 6) & 0x3];
-    return new NativeInt32x4._truncated(_x, _y, _z, _w);
+    return NativeInt32x4._truncated(_x, _y, _z, _w);
   }
 
   /// Shuffle the lane values in [this] and [other]. The returned
@@ -1638,7 +1635,7 @@
   /// Uses the same [mask] as [shuffle].
   Int32x4 shuffleMix(Int32x4 other, int mask) {
     if ((mask < 0) || (mask > 255)) {
-      throw new RangeError.range(mask, 0, 255, "mask");
+      throw RangeError.range(mask, 0, 255, "mask");
     }
     _list[0] = x;
     _list[1] = y;
@@ -1653,31 +1650,31 @@
     _list[3] = other.w;
     int _z = _list[(mask >> 4) & 0x3];
     int _w = _list[(mask >> 6) & 0x3];
-    return new NativeInt32x4._truncated(_x, _y, _z, _w);
+    return NativeInt32x4._truncated(_x, _y, _z, _w);
   }
 
   /// Returns a new [Int32x4] copied from [this] with a new x value.
   Int32x4 withX(int x) {
     int _x = _truncate(x);
-    return new NativeInt32x4._truncated(_x, y, z, w);
+    return NativeInt32x4._truncated(_x, y, z, w);
   }
 
   /// Returns a new [Int32x4] copied from [this] with a new y value.
   Int32x4 withY(int y) {
     int _y = _truncate(y);
-    return new NativeInt32x4._truncated(x, _y, z, w);
+    return NativeInt32x4._truncated(x, _y, z, w);
   }
 
   /// Returns a new [Int32x4] copied from [this] with a new z value.
   Int32x4 withZ(int z) {
     int _z = _truncate(z);
-    return new NativeInt32x4._truncated(x, y, _z, w);
+    return NativeInt32x4._truncated(x, y, _z, w);
   }
 
   /// Returns a new [Int32x4] copied from [this] with a new w value.
   Int32x4 withW(int w) {
     int _w = _truncate(w);
-    return new NativeInt32x4._truncated(x, y, z, _w);
+    return NativeInt32x4._truncated(x, y, z, _w);
   }
 
   /// Extracted x value. Returns `false` for 0, `true` for any other value.
@@ -1695,25 +1692,25 @@
   /// Returns a new [Int32x4] copied from [this] with a new x value.
   Int32x4 withFlagX(bool flagX) {
     int _x = flagX ? -1 : 0;
-    return new NativeInt32x4._truncated(_x, y, z, w);
+    return NativeInt32x4._truncated(_x, y, z, w);
   }
 
   /// Returns a new [Int32x4] copied from [this] with a new y value.
   Int32x4 withFlagY(bool flagY) {
     int _y = flagY ? -1 : 0;
-    return new NativeInt32x4._truncated(x, _y, z, w);
+    return NativeInt32x4._truncated(x, _y, z, w);
   }
 
   /// Returns a new [Int32x4] copied from [this] with a new z value.
   Int32x4 withFlagZ(bool flagZ) {
     int _z = flagZ ? -1 : 0;
-    return new NativeInt32x4._truncated(x, y, _z, w);
+    return NativeInt32x4._truncated(x, y, _z, w);
   }
 
   /// Returns a new [Int32x4] copied from [this] with a new w value.
   Int32x4 withFlagW(bool flagW) {
     int _w = flagW ? -1 : 0;
-    return new NativeInt32x4._truncated(x, y, z, _w);
+    return NativeInt32x4._truncated(x, y, z, _w);
   }
 
   /// Merge [trueValue] and [falseValue] based on [this]' bit mask:
@@ -1748,7 +1745,7 @@
     intView[1] = _y;
     intView[2] = _z;
     intView[3] = _w;
-    return new NativeFloat32x4._truncated(
+    return NativeFloat32x4._truncated(
         floatList[0], floatList[1], floatList[2], floatList[3]);
   }
 }
@@ -1757,12 +1754,12 @@
   final double x;
   final double y;
 
-  static NativeFloat64List _list = new NativeFloat64List(2);
+  static NativeFloat64List _list = NativeFloat64List(2);
   static NativeUint32List _uint32View = _list.buffer.asUint32List();
 
   NativeFloat64x2(this.x, this.y) {
-    if (x is! num) throw new ArgumentError(x);
-    if (y is! num) throw new ArgumentError(y);
+    if (x is! num) throw ArgumentError(x);
+    if (y is! num) throw ArgumentError(y);
   }
 
   NativeFloat64x2.splat(double v) : this(v, v);
@@ -1778,37 +1775,37 @@
 
   /// Addition operator.
   Float64x2 operator +(Float64x2 other) {
-    return new NativeFloat64x2._doubles(x + other.x, y + other.y);
+    return NativeFloat64x2._doubles(x + other.x, y + other.y);
   }
 
   /// Negate operator.
   Float64x2 operator -() {
-    return new NativeFloat64x2._doubles(-x, -y);
+    return NativeFloat64x2._doubles(-x, -y);
   }
 
   /// Subtraction operator.
   Float64x2 operator -(Float64x2 other) {
-    return new NativeFloat64x2._doubles(x - other.x, y - other.y);
+    return NativeFloat64x2._doubles(x - other.x, y - other.y);
   }
 
   /// Multiplication operator.
   Float64x2 operator *(Float64x2 other) {
-    return new NativeFloat64x2._doubles(x * other.x, y * other.y);
+    return NativeFloat64x2._doubles(x * other.x, y * other.y);
   }
 
   /// Division operator.
   Float64x2 operator /(Float64x2 other) {
-    return new NativeFloat64x2._doubles(x / other.x, y / other.y);
+    return NativeFloat64x2._doubles(x / other.x, y / other.y);
   }
 
   /// Returns a copy of [this] each lane being scaled by [s].
   Float64x2 scale(double s) {
-    return new NativeFloat64x2._doubles(x * s, y * s);
+    return NativeFloat64x2._doubles(x * s, y * s);
   }
 
   /// Returns the absolute value of this [Float64x2].
   Float64x2 abs() {
-    return new NativeFloat64x2._doubles(x.abs(), y.abs());
+    return NativeFloat64x2._doubles(x.abs(), y.abs());
   }
 
   /// Clamps [this] to be in the range [lowerLimit]-[upperLimit].
@@ -1824,7 +1821,7 @@
     _y = _y > _uy ? _uy : _y;
     _x = _x < _lx ? _lx : _x;
     _y = _y < _ly ? _ly : _y;
-    return new NativeFloat64x2._doubles(_x, _y);
+    return NativeFloat64x2._doubles(_x, _y);
   }
 
   /// Extract the sign bits from each lane return them in the first 2 bits.
@@ -1839,31 +1836,31 @@
 
   /// Returns a new [Float64x2] copied from [this] with a new x value.
   Float64x2 withX(double x) {
-    if (x is! num) throw new ArgumentError(x);
-    return new NativeFloat64x2._doubles(x, y);
+    if (x is! num) throw ArgumentError(x);
+    return NativeFloat64x2._doubles(x, y);
   }
 
   /// Returns a new [Float64x2] copied from [this] with a new y value.
   Float64x2 withY(double y) {
-    if (y is! num) throw new ArgumentError(y);
-    return new NativeFloat64x2._doubles(x, y);
+    if (y is! num) throw ArgumentError(y);
+    return NativeFloat64x2._doubles(x, y);
   }
 
   /// Returns the lane-wise minimum value in [this] or [other].
   Float64x2 min(Float64x2 other) {
-    return new NativeFloat64x2._doubles(
+    return NativeFloat64x2._doubles(
         x < other.x ? x : other.x, y < other.y ? y : other.y);
   }
 
   /// Returns the lane-wise maximum value in [this] or [other].
   Float64x2 max(Float64x2 other) {
-    return new NativeFloat64x2._doubles(
+    return NativeFloat64x2._doubles(
         x > other.x ? x : other.x, y > other.y ? y : other.y);
   }
 
   /// Returns the lane-wise square root of [this].
   Float64x2 sqrt() {
-    return new NativeFloat64x2._doubles(Math.sqrt(x), Math.sqrt(y));
+    return NativeFloat64x2._doubles(Math.sqrt(x), Math.sqrt(y));
   }
 }
 
diff --git a/pkg/dev_compiler/tool/input_sdk/private/profile.dart b/pkg/dev_compiler/tool/input_sdk/private/profile.dart
index 8e3dd82..2a8edbe 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/profile.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/profile.dart
@@ -27,7 +27,7 @@
 
 /// If the number of dynamic calls exceeds [_callRecordSampleSize] this list
 /// will represent a random sample of the dynamic calls made.
-List<_CallMethodRecord> _callMethodRecords = new List();
+List<_CallMethodRecord> _callMethodRecords = List();
 
 /// If the number of dynamic calls exceeds [_callRecordSampleSize] this value
 /// will be greater than [_callMethodRecords.length].
@@ -43,7 +43,7 @@
 /// speedup lookup of source map frames when running the profiler.
 /// The number of source map entries looked up makes caching more important
 /// in this case than for typical source map use cases.
-Map<String, String> _frameMappingCache = new Map();
+Map<String, String> _frameMappingCache = Map();
 
 List<List<Object>> getDynamicStats() {
   // Process the accumulated method stats. This may be quite slow as processing
@@ -54,7 +54,7 @@
   // raw number of dynamic calls so that the magnitude of the dynamic call
   // performance hit is clear to users.
 
-  Map<String, _MethodStats> callMethodStats = new Map();
+  Map<String, _MethodStats> callMethodStats = Map();
   if (_callMethodRecords.length > 0) {
     // Ratio between total record count and sampled records count.
     var recordRatio = _totalCallRecords / _callMethodRecords.length;
@@ -71,8 +71,8 @@
 
       var actualTypeName = dart.typeName(record.type);
       callMethodStats
-          .putIfAbsent("$actualTypeName <$src>",
-              () => new _MethodStats(actualTypeName, src))
+          .putIfAbsent(
+              "$actualTypeName <$src>", () => _MethodStats(actualTypeName, src))
           .count += recordRatio;
     }
 
@@ -126,7 +126,7 @@
     if (index >= _callMethodRecords.length) return; // don't sample
   }
   var record =
-      new _CallMethodRecord(JS('', 'new Error()'), dart.getReifiedType(obj));
+      _CallMethodRecord(JS('', 'new Error()'), dart.getReifiedType(obj));
   if (index == -1) {
     _callMethodRecords.add(record);
   } else {
diff --git a/pkg/dev_compiler/tool/input_sdk/private/regexp_helper.dart b/pkg/dev_compiler/tool/input_sdk/private/regexp_helper.dart
index 937a7ff..2d6ff70 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/regexp_helper.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/regexp_helper.dart
@@ -50,7 +50,7 @@
   String toString() => "RegExp/$pattern/";
 
   JSSyntaxRegExp(String source,
-      {bool multiLine: false, bool caseSensitive: true})
+      {bool multiLine = false, bool caseSensitive = true})
       : this.pattern = source,
         this._nativeRegExp =
             makeNative(source, multiLine, caseSensitive, false);
@@ -100,13 +100,13 @@
     // The returned value is the JavaScript exception. Turn it into a
     // Dart exception.
     String errorMessage = JS('String', r'String(#)', regexp);
-    throw new FormatException("Illegal RegExp pattern: $source, $errorMessage");
+    throw FormatException("Illegal RegExp pattern: $source, $errorMessage");
   }
 
   Match firstMatch(@nullCheck String string) {
     List m = JS('JSExtendableArray|Null', r'#.exec(#)', _nativeRegExp, string);
     if (m == null) return null;
-    return new _MatchImplementation(this, new JSArray<String>.of(m));
+    return _MatchImplementation(this, JSArray<String>.of(m));
   }
 
   @notNull
@@ -123,9 +123,9 @@
   Iterable<Match> allMatches(@nullCheck String string,
       [@nullCheck int start = 0]) {
     if (start < 0 || start > string.length) {
-      throw new RangeError.range(start, 0, string.length);
+      throw RangeError.range(start, 0, string.length);
     }
-    return new _AllMatchesIterable(this, string, start);
+    return _AllMatchesIterable(this, string, start);
   }
 
   Match _execGlobal(String string, int start) {
@@ -133,7 +133,7 @@
     JS("void", "#.lastIndex = #", regexp, start);
     List match = JS("JSExtendableArray|Null", "#.exec(#)", regexp, string);
     if (match == null) return null;
-    return new _MatchImplementation(this, new JSArray<String>.of(match));
+    return _MatchImplementation(this, JSArray<String>.of(match));
   }
 
   Match _execAnchored(String string, int start) {
@@ -145,12 +145,12 @@
     // match at the start position.
     if (match[match.length - 1] != null) return null;
     match.length -= 1;
-    return new _MatchImplementation(this, new JSArray<String>.of(match));
+    return _MatchImplementation(this, JSArray<String>.of(match));
   }
 
   Match matchAsPrefix(String string, [int start = 0]) {
     if (start < 0 || start > string.length) {
-      throw new RangeError.range(start, 0, string.length);
+      throw RangeError.range(start, 0, string.length);
     }
     return _execAnchored(string, start);
   }
@@ -194,7 +194,7 @@
 
   _AllMatchesIterable(this._re, this._string, this._start);
 
-  Iterator<Match> get iterator => new _AllMatchesIterator(_re, _string, _start);
+  Iterator<Match> get iterator => _AllMatchesIterator(_re, _string, _start);
 }
 
 class _AllMatchesIterator implements Iterator<Match> {
diff --git a/pkg/dev_compiler/tool/input_sdk/private/string_helper.dart b/pkg/dev_compiler/tool/input_sdk/private/string_helper.dart
index 354716a..41a51d6 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/string_helper.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/string_helper.dart
@@ -33,13 +33,13 @@
 
   String group(int group_) {
     if (group_ != 0) {
-      throw new RangeError.value(group_);
+      throw RangeError.value(group_);
     }
     return pattern;
   }
 
   List<String> groups(List<int> groups_) {
-    List<String> result = new List<String>();
+    List<String> result = List<String>();
     for (int g in groups_) {
       result.add(group(g));
     }
@@ -53,7 +53,7 @@
 
 Iterable<Match> allMatchesInStringUnchecked(
     String pattern, String string, int startIndex) {
-  return new _StringAllMatchesIterable(string, pattern, startIndex);
+  return _StringAllMatchesIterable(string, pattern, startIndex);
 }
 
 class _StringAllMatchesIterable extends Iterable<Match> {
@@ -64,12 +64,12 @@
   _StringAllMatchesIterable(this._input, this._pattern, this._index);
 
   Iterator<Match> get iterator =>
-      new _StringAllMatchesIterator(_input, _pattern, _index);
+      _StringAllMatchesIterator(_input, _pattern, _index);
 
   Match get first {
     int index = stringIndexOfStringUnchecked(_input, _pattern, _index);
     if (index >= 0) {
-      return new StringMatch(index, _input, _pattern);
+      return StringMatch(index, _input, _pattern);
     }
     throw IterableElementError.noElement();
   }
@@ -95,7 +95,7 @@
       return false;
     }
     int end = index + _pattern.length;
-    _current = new StringMatch(index, _input, _pattern);
+    _current = StringMatch(index, _input, _pattern);
     // Empty match, don't start at same location again.
     if (end == _index) end++;
     _index = end;
@@ -152,7 +152,7 @@
       if (receiver == "") {
         return replacement;
       } else {
-        StringBuffer result = new StringBuffer();
+        StringBuffer result = StringBuffer();
         int length = receiver.length;
         result.write(replacement);
         for (int i = 0; i < length; i++) {
@@ -190,7 +190,7 @@
     return stringReplaceAllStringFuncUnchecked(
         receiver, pattern, onMatch, onNonMatch);
   }
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer = StringBuffer();
   int startIndex = 0;
   for (Match match in pattern.allMatches(receiver)) {
     buffer.write(onNonMatch(receiver.substring(startIndex, match.start)));
@@ -205,12 +205,12 @@
 String stringReplaceAllEmptyFuncUnchecked(String receiver,
     String onMatch(Match match), String onNonMatch(String nonMatch)) {
   // Pattern is the empty string.
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer = StringBuffer();
   int length = receiver.length;
   int i = 0;
   buffer.write(onNonMatch(""));
   while (i < length) {
-    buffer.write(onMatch(new StringMatch(i, receiver, "")));
+    buffer.write(onMatch(StringMatch(i, receiver, "")));
     // Special case to avoid splitting a surrogate pair.
     int code = receiver.codeUnitAt(i);
     if ((code & ~0x3FF) == 0xD800 && length > i + 1) {
@@ -226,7 +226,7 @@
     buffer.write(onNonMatch(receiver[i]));
     i++;
   }
-  buffer.write(onMatch(new StringMatch(i, receiver, "")));
+  buffer.write(onMatch(StringMatch(i, receiver, "")));
   buffer.write(onNonMatch(""));
   return buffer.toString();
 }
@@ -239,7 +239,7 @@
     return stringReplaceAllEmptyFuncUnchecked(receiver, onMatch, onNonMatch);
   }
   int length = receiver.length;
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer = StringBuffer();
   int startIndex = 0;
   while (startIndex < length) {
     int position = stringIndexOfStringUnchecked(receiver, pattern, startIndex);
@@ -247,7 +247,7 @@
       break;
     }
     buffer.write(onNonMatch(receiver.substring(startIndex, position)));
-    buffer.write(onMatch(new StringMatch(position, receiver, pattern)));
+    buffer.write(onMatch(StringMatch(position, receiver, pattern)));
     startIndex = position + patternLength;
   }
   buffer.write(onNonMatch(receiver.substring(startIndex)));
diff --git a/pkg/dev_compiler/tool/kernel_sdk.dart b/pkg/dev_compiler/tool/kernel_sdk.dart
index ae5273a..6be14ed 100755
--- a/pkg/dev_compiler/tool/kernel_sdk.dart
+++ b/pkg/dev_compiler/tool/kernel_sdk.dart
@@ -18,7 +18,7 @@
 
 Future main(List<String> args) async {
   // Parse flags.
-  var parser = new ArgParser();
+  var parser = ArgParser();
   var parserOptions = parser.parse(args);
   var rest = parserOptions.rest;
 
@@ -36,8 +36,8 @@
   }
 
   var inputPath = path.absolute('tool/input_sdk');
-  var target = new DevCompilerTarget();
-  var options = new CompilerOptions()
+  var target = DevCompilerTarget();
+  var options = CompilerOptions()
     ..compileSdk = true
     ..packagesFileUri = path.toUri(path.absolute('../../.packages'))
     ..sdkRoot = path.toUri(inputPath)
@@ -47,10 +47,10 @@
   var component = await kernelForComponent(inputs, options);
 
   var outputDir = path.dirname(outputPath);
-  await new Directory(outputDir).create(recursive: true);
+  await Directory(outputDir).create(recursive: true);
   await writeComponentToBinary(component, outputPath);
 
-  var jsModule = new ProgramCompiler(component, declaredVariables: {})
+  var jsModule = ProgramCompiler(component, declaredVariables: {})
       .emitModule(component, [], []);
   var moduleFormats = {
     'amd': ModuleFormat.amd,
@@ -63,9 +63,9 @@
     var format = moduleFormats[name];
     var jsDir = path.join(outputDir, name);
     var jsPath = path.join(jsDir, 'dart_sdk.js');
-    await new Directory(jsDir).create();
+    await Directory(jsDir).create();
     var jsCode = jsProgramToCode(jsModule, format);
-    await new File(jsPath).writeAsString(jsCode.code);
-    await new File('$jsPath.map').writeAsString(json.encode(jsCode.sourceMap));
+    await File(jsPath).writeAsString(jsCode.code);
+    await File('$jsPath.map').writeAsString(json.encode(jsCode.sourceMap));
   }
 }
diff --git a/pkg/dev_compiler/tool/patch_sdk.dart b/pkg/dev_compiler/tool/patch_sdk.dart
index 6032c60..85060f0 100755
--- a/pkg/dev_compiler/tool/patch_sdk.dart
+++ b/pkg/dev_compiler/tool/patch_sdk.dart
@@ -30,7 +30,7 @@
     exit(1);
   }
 
-  var selfModifyTime = new File(self).lastModifiedSync().millisecondsSinceEpoch;
+  var selfModifyTime = File(self).lastModifiedSync().millisecondsSinceEpoch;
 
   var repoDir = argv[0];
   var patchDir = argv[1];
@@ -43,17 +43,17 @@
 
   // Copy libraries.dart, libraries.json and version
   var librariesDart = path.join(patchDir, 'libraries.dart');
-  var libContents = new File(librariesDart).readAsStringSync();
+  var libContents = File(librariesDart).readAsStringSync();
   // TODO(jmesserly): can we remove this?
   _writeSync(path.join(sdkOut, '_internal', 'libraries.dart'), libContents);
   _writeSync(path.join(sdkOut, 'libraries.json'),
-      new File(path.join(patchDir, 'libraries.json')).readAsStringSync());
+      File(path.join(patchDir, 'libraries.json')).readAsStringSync());
   _writeSync(
       path.join(
           sdkOut, '_internal', 'sdk_library_metadata', 'lib', 'libraries.dart'),
       libContents);
   _writeSync(path.join(sdkOut, '..', 'version'),
-      new File(path.join(repoDir, 'tools', 'VERSION')).readAsStringSync());
+      File(path.join(repoDir, 'tools', 'VERSION')).readAsStringSync());
 
   // Parse libraries.dart
   var sdkLibraries = _getSdkLibraries(libContents);
@@ -71,13 +71,13 @@
     if (library.path.contains(INTERNAL_PATH)) {
       libraryIn =
           path.join(privateIn, library.path.replaceAll(INTERNAL_PATH, ''));
-    } else if (new File(libraryOverride).existsSync()) {
+    } else if (File(libraryOverride).existsSync()) {
       libraryIn = libraryOverride;
     } else {
       libraryIn = libraryOut;
     }
 
-    var libraryFile = new File(libraryIn);
+    var libraryFile = File(libraryIn);
     if (libraryFile.existsSync()) {
       var outPaths = <String>[libraryOut];
       var libraryContents = libraryFile.readAsStringSync();
@@ -90,7 +90,7 @@
           var partPath = part.uri.stringValue;
           outPaths.add(path.join(path.dirname(libraryOut), partPath));
 
-          var partFile = new File(path.join(path.dirname(libraryIn), partPath));
+          var partFile = File(path.join(path.dirname(libraryIn), partPath));
           partFiles.add(partFile);
           inputModifyTime = math.max(inputModifyTime,
               partFile.lastModifiedSync().millisecondsSinceEpoch);
@@ -101,7 +101,7 @@
       var patchPath = path.join(
           patchIn, path.basenameWithoutExtension(libraryIn) + '_patch.dart');
 
-      var patchFile = new File(patchPath);
+      var patchFile = File(patchPath);
       bool patchExists = patchFile.existsSync();
       if (patchExists) {
         inputModifyTime = math.max(inputModifyTime,
@@ -116,7 +116,7 @@
       // Compare output modify time with input modify time.
       bool needsUpdate = false;
       for (var outPath in outPaths) {
-        var outFile = new File(outPath);
+        var outFile = File(outPath);
         if (!outFile.existsSync() ||
             outFile.lastModifiedSync().millisecondsSinceEpoch <
                 inputModifyTime) {
@@ -147,10 +147,10 @@
 
 /// Writes a file, creating the directory if needed.
 void _writeSync(String filePath, String contents) {
-  var outDir = new Directory(path.dirname(filePath));
+  var outDir = Directory(path.dirname(filePath));
   if (!outDir.existsSync()) outDir.createSync(recursive: true);
 
-  new File(filePath).writeAsStringSync(contents);
+  File(filePath).writeAsStringSync(contents);
 }
 
 /// Merges dart:* library code with code from *_patch.dart file.
@@ -177,20 +177,20 @@
 
   // Parse the patch first. We'll need to extract bits of this as we go through
   // the other files.
-  var patchFinder = new PatchFinder.parseAndVisit(patchContents);
+  var patchFinder = PatchFinder.parseAndVisit(patchContents);
 
   // Merge `external` declarations with the corresponding `@patch` code.
   bool failed = false;
   for (var partContent in partsContents) {
-    var partEdits = new StringEditBuffer(partContent);
+    var partEdits = StringEditBuffer(partContent);
     var partUnit = parseCompilationUnit(partContent);
-    var patcher = new PatchApplier(partEdits, patchFinder);
+    var patcher = PatchApplier(partEdits, patchFinder);
     partUnit.accept(patcher);
     if (!failed) failed = patcher.patchWasMissing;
     results.add(partEdits);
   }
   if (failed) return null;
-  return new List<String>.from(results.map((e) => e.toString()));
+  return List<String>.from(results.map((e) => e.toString()));
 }
 
 /// Merge `@patch` declarations into `external` declarations.
@@ -395,7 +395,7 @@
   /// Edit the original text, replacing text on the range [begin] and
   /// exclusive [end] with the [replacement] string.
   void replace(int begin, int end, String replacement) {
-    _edits.add(new _StringEdit(begin, end, replacement));
+    _edits.add(_StringEdit(begin, end, replacement));
   }
 
   /// Insert [string] at [offset].
@@ -415,7 +415,7 @@
   /// Throws [UnsupportedError] if the edits were overlapping. If no edits were
   /// made, the original string will be returned.
   String toString() {
-    var sb = new StringBuffer();
+    var sb = StringBuffer();
     if (_edits.length == 0) return original;
 
     // Sort edits by start location.
@@ -424,7 +424,7 @@
     int consumed = 0;
     for (var edit in _edits) {
       if (consumed > edit.begin) {
-        sb = new StringBuffer();
+        sb = StringBuffer();
         sb.write('overlapping edits. Insert at offset ');
         sb.write(edit.begin);
         sb.write(' but have consumed ');
@@ -434,7 +434,7 @@
           sb.write('\n    ');
           sb.write(e);
         }
-        throw new UnsupportedError(sb.toString());
+        throw UnsupportedError(sb.toString());
       }
 
       // Add characters from the original string between this edit and the last
@@ -470,7 +470,10 @@
 }
 
 List<SdkLibrary> _getSdkLibraries(String contents) {
-  var libraryBuilder = new SdkLibrariesReader_LibraryBuilder(true);
+  // TODO(jmesserly): fix SdkLibrariesReader_LibraryBuilder in Analyzer.
+  // It doesn't understand optional new/const in Dart 2. For now, we keep
+  // redundant `const` in tool/input_sdk/libraries.dart as a workaround.
+  var libraryBuilder = SdkLibrariesReader_LibraryBuilder(true);
   parseCompilationUnit(contents).accept(libraryBuilder);
   return libraryBuilder.librariesMap.sdkLibraries;
 }
diff --git a/pkg/dev_compiler/tool/sdk_version_check.dart b/pkg/dev_compiler/tool/sdk_version_check.dart
index 8cab664..4d64c43 100755
--- a/pkg/dev_compiler/tool/sdk_version_check.dart
+++ b/pkg/dev_compiler/tool/sdk_version_check.dart
@@ -13,11 +13,11 @@
     print('for example: sdk_version_check.dart 1.9.0-dev.4.0');
     exit(2);
   }
-  var minVersion = new Version.parse(argv[0]);
+  var minVersion = Version.parse(argv[0]);
 
   var vmStr = Platform.version;
   vmStr = vmStr.substring(0, vmStr.indexOf(' '));
-  var vmVersion = new Version.parse(vmStr);
+  var vmVersion = Version.parse(vmStr);
   if (vmVersion < minVersion) {
     print('Requires VM $minVersion but actual version $vmVersion');
     exit(1);
diff --git a/pkg/dev_compiler/web/main.dart b/pkg/dev_compiler/web/main.dart
index af28187..01fb9ea 100755
--- a/pkg/dev_compiler/web/main.dart
+++ b/pkg/dev_compiler/web/main.dart
@@ -39,8 +39,8 @@
   try {
     // TODO: Remove CommandRunner and args if possible. May run into issues
     // with ArgResults or ArgParsers.
-    var runner = new CommandRunner('dartdevc', 'Dart Development Compiler');
-    runner.addCommand(new WebCompileCommand(messageHandler: messageHandler));
+    var runner = CommandRunner('dartdevc', 'Dart Development Compiler');
+    runner.addCommand(WebCompileCommand(messageHandler: messageHandler));
     _setUpCompilerInBrowser = runner.run(args) as Future<Function>;
   } catch (e, s) {
     _handleError(e, s, args, messageHandler: messageHandler);
diff --git a/pkg/dev_compiler/web/source_map_stack_trace.dart b/pkg/dev_compiler/web/source_map_stack_trace.dart
index 2b3a45c..9dce84a 100644
--- a/pkg/dev_compiler/web/source_map_stack_trace.dart
+++ b/pkg/dev_compiler/web/source_map_stack_trace.dart
@@ -17,13 +17,13 @@
 StackTrace mapStackTrace(Mapping sourceMap, StackTrace stackTrace,
     {List<String> roots}) {
   if (stackTrace is Chain) {
-    return new Chain(stackTrace.traces.map((trace) {
-      return new Trace.from(mapStackTrace(sourceMap, trace, roots: roots));
+    return Chain(stackTrace.traces.map((trace) {
+      return Trace.from(mapStackTrace(sourceMap, trace, roots: roots));
     }));
   }
 
-  var trace = new Trace.from(stackTrace);
-  return new Trace(trace.frames.map((frame) {
+  var trace = Trace.from(stackTrace);
+  return Trace(trace.frames.map((frame) {
     // If there's no line information, there's no way to translate this frame.
     // We could return it as-is, but these lines are usually not useful anyways.
     if (frame.line == null) return null;
@@ -65,7 +65,7 @@
       sourceUrl = 'dart:sdk_internal';
     }
 
-    return new Frame(Uri.parse(sourceUrl), span.start.line + 1,
+    return Frame(Uri.parse(sourceUrl), span.start.line + 1,
         span.start.column + 1, _prettifyMember(frame.member));
   }).where((frame) => frame != null));
 }
diff --git a/pkg/dev_compiler/web/stack_trace_mapper.dart b/pkg/dev_compiler/web/stack_trace_mapper.dart
index a5cdd4d..de9e2b6 100644
--- a/pkg/dev_compiler/web/stack_trace_mapper.dart
+++ b/pkg/dev_compiler/web/stack_trace_mapper.dart
@@ -59,7 +59,7 @@
 /// The unparsed data for the source maps must still be loaded before
 /// LazyMapping is used.
 class LazyMapping extends Mapping {
-  MappingBundle _bundle = new MappingBundle();
+  MappingBundle _bundle = MappingBundle();
   SourceMapProvider _provider;
 
   LazyMapping(this._provider);
@@ -69,7 +69,7 @@
   SourceMapSpan spanFor(int line, int column,
       {Map<String, SourceFile> files, String uri}) {
     if (uri == null) {
-      throw new ArgumentError.notNull('uri');
+      throw ArgumentError.notNull('uri');
     }
 
     if (!_bundle.containsMapping(uri)) {
@@ -101,19 +101,19 @@
   if (_mapping == null) {
     // This should not happen if the user has waited for the ReadyCallback
     // to start the application.
-    throw new StateError('Source maps are not done loading.');
+    throw StateError('Source maps are not done loading.');
   }
-  var trace = new Trace.parse(rawStackTrace);
+  var trace = Trace.parse(rawStackTrace);
   return mapStackTrace(_mapping, trace, roots: roots).toString();
 }
 
 void setSourceMapProvider(SourceMapProvider provider) {
-  _mapping = new LazyMapping(provider);
+  _mapping = LazyMapping(provider);
 }
 
 main() {
   // Register with DDC.
-  dartStackTraceUtility = new DartStackTraceUtility(
+  dartStackTraceUtility = DartStackTraceUtility(
       mapper: allowInterop(mapper),
       setSourceMapProvider: allowInterop(setSourceMapProvider));
 }
diff --git a/pkg/dev_compiler/web/web_command.dart b/pkg/dev_compiler/web/web_command.dart
index eae24da..d57e7a4 100644
--- a/pkg/dev_compiler/web/web_command.dart
+++ b/pkg/dev_compiler/web/web_command.dart
@@ -139,15 +139,15 @@
       List<String> moduleIds) {
     var dartSdkSummaryPath = '/dart-sdk/lib/_internal/web_sdk.sum';
 
-    var resourceProvider = new MemoryResourceProvider()
+    var resourceProvider = MemoryResourceProvider()
       ..newFileWithBytes(dartSdkSummaryPath, sdkBytes);
 
-    var resourceUriResolver = new ResourceUriResolver(resourceProvider);
+    var resourceUriResolver = ResourceUriResolver(resourceProvider);
 
-    var options = new AnalyzerOptions.basic(
+    var options = AnalyzerOptions.basic(
         dartSdkPath: '/dart-sdk', dartSdkSummaryPath: dartSdkSummaryPath);
 
-    var summaryDataStore = new SummaryDataStore(options.summaryPaths,
+    var summaryDataStore = SummaryDataStore(options.summaryPaths,
         resourceProvider: resourceProvider);
     for (var i = 0; i < summaryBytes.length; i++) {
       var bytes = summaryBytes[i];
@@ -156,15 +156,15 @@
       if (bytes.length == 0) continue;
 
       var url = '/${moduleIds[i]}.api.ds';
-      var summaryBundle = new PackageBundle.fromBuffer(bytes);
+      var summaryBundle = PackageBundle.fromBuffer(bytes);
       summaryDataStore.addBundle(url, summaryBundle);
     }
     var summaryResolver =
-        new InSummaryUriResolver(resourceProvider, summaryDataStore);
+        InSummaryUriResolver(resourceProvider, summaryDataStore);
 
     var fileResolvers = [summaryResolver, resourceUriResolver];
 
-    var compiler = new ModuleCompiler(options,
+    var compiler = ModuleCompiler(options,
         analysisRoot: '/web-compile-root',
         fileResolvers: fileResolvers,
         resourceProvider: resourceProvider,
@@ -172,7 +172,7 @@
 
     var context = compiler.context as AnalysisContextImpl;
 
-    var compilerOptions = new CompilerOptions.fromArguments(argResults);
+    var compilerOptions = CompilerOptions.fromArguments(argResults);
 
     var resolveFn = (String url) {
       var packagePrefix = 'package:';
@@ -253,7 +253,7 @@
         if (libraryElement == null) {
           throw "Unable to get library element.";
         }
-        var sb = new StringBuffer(imports);
+        var sb = StringBuffer(imports);
         sb.write('\n');
 
         // TODO(jacobr): we need to add a proper Analyzer flag specifing that
@@ -300,7 +300,7 @@
       }
       resourceProvider.newFile(fileName, sourceCode);
 
-      var unit = new BuildUnit(libraryName, "", [fileName], _moduleForLibrary);
+      var unit = BuildUnit(libraryName, "", [fileName], _moduleForLibrary);
 
       JSModuleFile module = compiler.compile(unit, compilerOptions);
 
@@ -312,7 +312,7 @@
             .code;
       }
 
-      return new CompileResult(
+      return CompileResult(
           code: moduleCode, isValid: module.isValid, errors: module.errors);
     };
 
diff --git a/pkg/front_end/lib/src/api_unstable/summary_worker.dart b/pkg/front_end/lib/src/api_unstable/bazel_worker.dart
similarity index 66%
rename from pkg/front_end/lib/src/api_unstable/summary_worker.dart
rename to pkg/front_end/lib/src/api_unstable/bazel_worker.dart
index 0d4bf9f..d23cab1 100644
--- a/pkg/front_end/lib/src/api_unstable/summary_worker.dart
+++ b/pkg/front_end/lib/src/api_unstable/bazel_worker.dart
@@ -20,12 +20,14 @@
 export '../api_prototype/standard_file_system.dart' show StandardFileSystem;
 export '../fasta/fasta_codes.dart' show FormattedMessage;
 export '../fasta/severity.dart' show Severity;
+import '../fasta/kernel/utils.dart' show serializeComponent;
 
 Future<InitializedCompilerState> initializeCompiler(
     InitializedCompilerState oldState,
     Uri sdkSummary,
     Uri packagesFile,
-    List<Uri> inputSummaries,
+    List<Uri> summaryInputs,
+    List<Uri> linkedInputs,
     Target target,
     FileSystem fileSystem) async {
   // TODO(sigmund): use incremental compiler when it supports our use case.
@@ -36,7 +38,8 @@
   CompilerOptions options = new CompilerOptions()
     ..sdkSummary = sdkSummary
     ..packagesFileUri = packagesFile
-    ..inputSummaries = inputSummaries
+    ..inputSummaries = summaryInputs
+    ..linkedDependencies = linkedInputs
     ..target = target
     ..fileSystem = fileSystem;
 
@@ -46,7 +49,9 @@
 }
 
 Future<List<int>> compile(InitializedCompilerState compilerState,
-    List<Uri> inputs, ProblemHandler problemHandler) async {
+    List<Uri> inputs, ProblemHandler problemHandler,
+    {bool summaryOnly}) async {
+  summaryOnly ??= true;
   CompilerOptions options = compilerState.options;
   options..onProblem = problemHandler;
 
@@ -55,6 +60,24 @@
   processedOpts.inputs.addAll(inputs);
 
   var result = await generateKernel(processedOpts,
-      buildSummary: true, buildComponent: false, truncateSummary: true);
-  return result?.summary;
+      buildSummary: summaryOnly, buildComponent: !summaryOnly);
+
+  var component = result?.component;
+  if (component != null && !summaryOnly) {
+    for (var lib in component.libraries) {
+      if (!inputs.contains(lib.importUri)) {
+        // Excluding the library also means that their canonical names will not
+        // be computed as part of serialization, so we need to do that
+        // preemtively here to avoid errors when serializing references to
+        // elements of these libraries.
+        component.root.getChildFromUri(lib.importUri).bindTo(lib.reference);
+        lib.computeCanonicalNames();
+      }
+    }
+  }
+
+  return summaryOnly
+      ? result?.summary
+      : serializeComponent(result?.component,
+          filter: (library) => inputs.contains(library.importUri));
 }
diff --git a/pkg/front_end/lib/src/base/processed_options.dart b/pkg/front_end/lib/src/base/processed_options.dart
index adb0ca4..550d686 100644
--- a/pkg/front_end/lib/src/base/processed_options.dart
+++ b/pkg/front_end/lib/src/base/processed_options.dart
@@ -16,8 +16,7 @@
 
 import 'package:package_config/packages_file.dart' as package_config;
 
-import 'package:package_config/src/packages_impl.dart'
-    show NonFilePackagesDirectoryPackages, MapPackages;
+import 'package:package_config/src/packages_impl.dart' show MapPackages;
 
 import 'package:source_span/source_span.dart' show SourceSpan, SourceLocation;
 
@@ -492,10 +491,9 @@
   /// the [FileSystem].
   ///
   /// This function first tries to locate a `.packages` file in the `scriptUri`
-  /// directory. If that is not found, it instead checks for the presence of a
-  /// `packages/` directory in the same place.  If that also fails, it starts
-  /// checking parent directories for a `.packages` file, and stops if it finds
-  /// it.  Otherwise it gives up and returns [Packages.noPackages].
+  /// directory. If that is not found, it starts checking parent directories for
+  /// a `.packages` file, and stops if it finds it. Otherwise it gives up and
+  /// returns [Packages.noPackages].
   ///
   /// Note: this is a fork from `package:package_config/discovery.dart` to adapt
   /// it to use [FileSystem]. The logic here is a mix of the logic in the
@@ -504,9 +502,8 @@
   ///    * Like `findPackagesFromFile` resolution searches for parent
   ///    directories
   ///
-  ///    * Like `findPackagesFromNonFile` if we resolve packages as the
-  ///    `packages/` directory, we can't provide a list of packages that are
-  ///    visible.
+  ///    * Unlike package:package_config, it does not look for a `packages/`
+  ///    directory, as that won't be supported in Dart 2.
   Future<Packages> _findPackages(Uri scriptUri) async {
     var dir = scriptUri.resolve('.');
     if (!dir.isAbsolute) {
@@ -527,12 +524,6 @@
     var candidate = await checkInDir(dir);
     if (candidate != null) return createPackagesFromFile(candidate);
 
-    // Check for $cwd/packages/
-    var packagesDir = dir.resolve("packages/");
-    if (await fileSystem.entityForUri(packagesDir).exists()) {
-      return new NonFilePackagesDirectoryPackages(packagesDir);
-    }
-
     // Check for cwd(/..)+/.packages
     var parentDir = dir.resolve('..');
     while (parentDir.path != dir.path) {
diff --git a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
index f430cfc..4cf8c2a 100644
--- a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
@@ -4,12 +4,17 @@
 
 library fasta.named_type_builder;
 
-import '../fasta_codes.dart' show Message, templateTypeArgumentMismatch;
+import '../fasta_codes.dart'
+    show
+        Message,
+        templateMissingExplicitTypeArguments,
+        templateTypeArgumentMismatch;
 
 import 'builder.dart'
     show
         Declaration,
         InvalidTypeBuilder,
+        LibraryBuilder,
         PrefixBuilder,
         QualifiedName,
         Scope,
@@ -34,7 +39,8 @@
   }
 
   @override
-  void resolveIn(Scope scope, int charOffset, Uri fileUri) {
+  void resolveIn(
+      Scope scope, int charOffset, Uri fileUri, LibraryBuilder library) {
     if (declaration != null) return;
     final name = this.name;
     Declaration member;
@@ -48,6 +54,14 @@
     }
     if (member is TypeDeclarationBuilder) {
       declaration = member.origin;
+      if (arguments == null && declaration.typeVariablesCount != 0) {
+        library.addProblem(
+            templateMissingExplicitTypeArguments
+                .withArguments(declaration.typeVariablesCount),
+            charOffset,
+            "$name".length,
+            fileUri);
+      }
       return;
     }
     declaration = buildInvalidType(charOffset, fileUri);
diff --git a/pkg/front_end/lib/src/fasta/builder/prefix_builder.dart b/pkg/front_end/lib/src/fasta/builder/prefix_builder.dart
index 75e269a1..bfd642d 100644
--- a/pkg/front_end/lib/src/fasta/builder/prefix_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/prefix_builder.dart
@@ -18,7 +18,10 @@
   @override
   final int charOffset;
 
-  PrefixBuilder(this.name, this.deferred, this.parent, this.charOffset);
+  final int importIndex;
+
+  PrefixBuilder(
+      this.name, this.deferred, this.parent, this.charOffset, this.importIndex);
 
   Uri get fileUri => parent.fileUri;
 
diff --git a/pkg/front_end/lib/src/fasta/builder/type_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_builder.dart
index 0b2d80a..ee13b6f 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_builder.dart
@@ -10,7 +10,8 @@
 abstract class TypeBuilder {
   const TypeBuilder();
 
-  void resolveIn(Scope scope, int charOffset, Uri fileUri) {}
+  void resolveIn(
+      Scope scope, int charOffset, Uri fileUri, LibraryBuilder library) {}
 
   /// See `UnresolvedType.checkType`.
   void check(int charOffset, Uri fileUri) {}
diff --git a/pkg/front_end/lib/src/fasta/builder/unresolved_type.dart b/pkg/front_end/lib/src/fasta/builder/unresolved_type.dart
index 392e15e..7c5004a 100644
--- a/pkg/front_end/lib/src/fasta/builder/unresolved_type.dart
+++ b/pkg/front_end/lib/src/fasta/builder/unresolved_type.dart
@@ -4,7 +4,7 @@
 
 library fasta.unresolved_type;
 
-import 'builder.dart' show Scope, TypeBuilder;
+import 'builder.dart' show LibraryBuilder, Scope, TypeBuilder;
 
 /// A wrapper around a type that is yet to be resolved.
 class UnresolvedType<T extends TypeBuilder> {
@@ -14,7 +14,8 @@
 
   UnresolvedType(this.builder, this.charOffset, this.fileUri);
 
-  void resolveIn(Scope scope) => builder.resolveIn(scope, charOffset, fileUri);
+  void resolveIn(Scope scope, LibraryBuilder library) =>
+      builder.resolveIn(scope, charOffset, fileUri, library);
 
   /// Performs checks on the type after it's resolved.
   void checkType() => builder.check(charOffset, fileUri);
diff --git a/pkg/front_end/lib/src/fasta/command_line_reporting.dart b/pkg/front_end/lib/src/fasta/command_line_reporting.dart
index c7f93ee..e682431 100644
--- a/pkg/front_end/lib/src/fasta/command_line_reporting.dart
+++ b/pkg/front_end/lib/src/fasta/command_line_reporting.dart
@@ -10,6 +10,10 @@
 
 import 'dart:io' show exitCode;
 
+import 'dart:math' show min;
+
+import 'dart:typed_data' show Uint8List;
+
 import 'package:kernel/ast.dart' show Location;
 
 import 'colors.dart' show green, magenta, red;
@@ -27,6 +31,8 @@
 
 import 'severity.dart' show Severity;
 
+import 'scanner/characters.dart' show $CARET, $SPACE, $TAB;
+
 import 'util/relativize.dart' show relativizeUri;
 
 const bool hideWarnings = false;
@@ -75,8 +81,21 @@
       if (sourceLine == null) {
         sourceLine = "";
       } else if (sourceLine.isNotEmpty) {
-        String indentation = " " * (location.column - 1);
-        String pointer = indentation + ("^" * length);
+        // TODO(askesc): Much more could be done to indent properly in the
+        // presence of all sorts of unicode weirdness.
+        // This handling covers the common case of single-width characters
+        // indented with spaces and/or tabs, using no surrogates.
+        int indentLength = location.column - 1;
+        Uint8List indentation = new Uint8List(indentLength + length)
+          ..fillRange(0, indentLength, $SPACE)
+          ..fillRange(indentLength, indentLength + length, $CARET);
+        int lengthInSourceLine = min(indentation.length, sourceLine.length);
+        for (int i = 0; i < lengthInSourceLine; i++) {
+          if (sourceLine.codeUnitAt(i) == $TAB) {
+            indentation[i] = $TAB;
+          }
+        }
+        String pointer = new String.fromCharCodes(indentation);
         if (pointer.length > sourceLine.length) {
           // Truncate the carets to handle messages that span multiple lines.
           int pointerLength = sourceLine.length;
diff --git a/pkg/front_end/lib/src/fasta/diagnostics.md b/pkg/front_end/lib/src/fasta/diagnostics.md
index d3711ec..1305e52 100644
--- a/pkg/front_end/lib/src/fasta/diagnostics.md
+++ b/pkg/front_end/lib/src/fasta/diagnostics.md
@@ -41,7 +41,9 @@
 
 ## Avoid Composing Messages Programmatically
 
-Composing messages programmatically can make it hard to translate them.
+Composing messages programmatically can make it hard to translate them. A tool that compose messages programmatically also makes it hard for its clients to distinguish the diagnostics.
+
+For example, [messages.yaml](../../../messages.yaml) includes an error code named `Unspecified`. This code is useful when prototyping a new diagnostic, but shouldn't otherwise be used.
 
 ## Keep Message Short
 
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
index 87a1acc..da38ef1 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
@@ -949,6 +949,34 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(
+        String string,
+        String string2,
+        String
+            string3)> templateConstEvalNegativeShift = const Template<
+        Message Function(String string, String string2, String string3)>(
+    messageTemplate:
+        r"""Binary operator '#string' on '#string2' requires non-negative operand, but was '#string3'.""",
+    withArguments: _withArgumentsConstEvalNegativeShift);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String string, String string2, String string3)>
+    codeConstEvalNegativeShift =
+    const Code<Message Function(String string, String string2, String string3)>(
+        "ConstEvalNegativeShift", templateConstEvalNegativeShift,
+        dart2jsCode: "INVALID_CONSTANT_SHIFT");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsConstEvalNegativeShift(
+    String string, String string2, String string3) {
+  return new Message(codeConstEvalNegativeShift,
+      message:
+          """Binary operator '${string}' on '${string2}' requires non-negative operand, but was '${string3}'.""",
+      arguments: {'string': string, 'string2': string2, 'string3': string3});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
         String
             string)> templateConstEvalNonConstantLiteral = const Template<
         Message Function(String string)>(
@@ -971,6 +999,33 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
+        String string,
+        String
+            string2)> templateConstEvalZeroDivisor = const Template<
+        Message Function(String string, String string2)>(
+    messageTemplate:
+        r"""Binary operator '#string' on '#string2' requires non-zero divisor, but divisor was '0'.""",
+    withArguments: _withArgumentsConstEvalZeroDivisor);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String string, String string2)>
+    codeConstEvalZeroDivisor =
+    const Code<Message Function(String string, String string2)>(
+        "ConstEvalZeroDivisor", templateConstEvalZeroDivisor,
+        analyzerCode: "CONST_EVAL_THROWS_IDBZE",
+        dart2jsCode: "INVALID_CONSTANT_DIV");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsConstEvalZeroDivisor(String string, String string2) {
+  return new Message(codeConstEvalZeroDivisor,
+      message:
+          """Binary operator '${string}' on '${string2}' requires non-zero divisor, but divisor was '0'.""",
+      arguments: {'string': string, 'string2': string2});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeConstFactory = messageConstFactory;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2833,6 +2888,60 @@
     message: r"""This is the other inherited member.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
+        String
+            string)> templateInitializeFromDillNotSelfContained = const Template<
+        Message Function(String string)>(
+    messageTemplate:
+        r"""Tried to initialize from a previous compilation (#string), but the file was not self-contained. This might be a bug. The Dart team would greatly appreciate if you would take a moment to report this problem at http://dartbug.com/new.""",
+    withArguments: _withArgumentsInitializeFromDillNotSelfContained);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String string)>
+    codeInitializeFromDillNotSelfContained =
+    const Code<Message Function(String string)>(
+        "InitializeFromDillNotSelfContained",
+        templateInitializeFromDillNotSelfContained,
+        severity: Severity.warning);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsInitializeFromDillNotSelfContained(String string) {
+  return new Message(codeInitializeFromDillNotSelfContained,
+      message:
+          """Tried to initialize from a previous compilation (${string}), but the file was not self-contained. This might be a bug. The Dart team would greatly appreciate if you would take a moment to report this problem at http://dartbug.com/new.""",
+      arguments: {'string': string});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
+        String string,
+        String
+            string2)> templateInitializeFromDillUnknownProblem = const Template<
+        Message Function(String string, String string2)>(
+    messageTemplate:
+        r"""Tried to initialize from a previous compilation (#string), but couldn't. Error message was '#string2'. This might be a bug. The Dart team would greatly appreciate if you would take a moment to report this problem at http://dartbug.com/new.""",
+    withArguments: _withArgumentsInitializeFromDillUnknownProblem);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String string, String string2)>
+    codeInitializeFromDillUnknownProblem =
+    const Code<Message Function(String string, String string2)>(
+        "InitializeFromDillUnknownProblem",
+        templateInitializeFromDillUnknownProblem,
+        severity: Severity.warning);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsInitializeFromDillUnknownProblem(
+    String string, String string2) {
+  return new Message(codeInitializeFromDillUnknownProblem,
+      message:
+          """Tried to initialize from a previous compilation (${string}), but couldn't. Error message was '${string2}'. This might be a bug. The Dart team would greatly appreciate if you would take a moment to report this problem at http://dartbug.com/new.""",
+      arguments: {'string': string, 'string2': string2});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeInitializedVariableInForEach =
     messageInitializedVariableInForEach;
 
@@ -3660,6 +3769,28 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeInvalidCodePoint = messageInvalidCodePoint;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageInvalidCodePoint = const MessageCode(
+    "InvalidCodePoint",
+    analyzerCode: "INVALID_CODE_POINT",
+    dart2jsCode: "*fatal*",
+    message:
+        r"""The escape sequence starting with '\u' isn't a valid code point.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeInvalidHexEscape = messageInvalidHexEscape;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageInvalidHexEscape = const MessageCode(
+    "InvalidHexEscape",
+    analyzerCode: "INVALID_HEX_ESCAPE",
+    dart2jsCode: "*fatal*",
+    message:
+        r"""An escape sequence starting with '\x' must be followed by 2 hexidecimal digits.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeInvalidInitializer = messageInvalidInitializer;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3735,6 +3866,17 @@
     tip: r"""Try replacing 'sync' with 'sync*'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeInvalidUnicodeEscape = messageInvalidUnicodeEscape;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageInvalidUnicodeEscape = const MessageCode(
+    "InvalidUnicodeEscape",
+    analyzerCode: "INVALID_UNICODE_ESCAPE",
+    dart2jsCode: "*fatal*",
+    message:
+        r"""An escape sequence starting with '\u' must be followed by 4 hexidecimal digits or from 1 to 6 digits between '{' and '}'.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeInvalidVoid = messageInvalidVoid;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3958,6 +4100,26 @@
         r"""Try adding the name of the type of the variable or the keyword 'var'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(int count)>
+    templateMissingExplicitTypeArguments =
+    const Template<Message Function(int count)>(
+        messageTemplate: r"""No type arguments provided, #count possible.""",
+        withArguments: _withArgumentsMissingExplicitTypeArguments);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(int count)> codeMissingExplicitTypeArguments =
+    const Code<Message Function(int count)>(
+        "MissingExplicitTypeArguments", templateMissingExplicitTypeArguments,
+        severity: Severity.ignored);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsMissingExplicitTypeArguments(int count) {
+  return new Message(codeMissingExplicitTypeArguments,
+      message: """No type arguments provided, ${count} possible.""",
+      arguments: {'count': count});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMissingExponent = messageMissingExponent;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
diff --git a/pkg/front_end/lib/src/fasta/import.dart b/pkg/front_end/lib/src/fasta/import.dart
index e27b1e0..91165d3 100644
--- a/pkg/front_end/lib/src/fasta/import.dart
+++ b/pkg/front_end/lib/src/fasta/import.dart
@@ -50,9 +50,10 @@
       this.configurations,
       this.charOffset,
       this.prefixCharOffset,
+      int importIndex,
       {this.nativeImportUri})
       : prefixBuilder = createPrefixBuilder(prefix, importer, imported,
-            combinators, deferred, charOffset, prefixCharOffset);
+            combinators, deferred, charOffset, prefixCharOffset, importIndex);
 
   Uri get fileUri => importer.fileUri;
 
@@ -94,7 +95,8 @@
     List<Combinator> combinators,
     bool deferred,
     int charOffset,
-    int prefixCharOffset) {
+    int prefixCharOffset,
+    int importIndex) {
   if (prefix == null) return null;
   LibraryDependency dependency = null;
   if (deferred) {
@@ -103,5 +105,5 @@
       ..fileOffset = charOffset;
   }
   return new KernelPrefixBuilder(
-      prefix, deferred, importer, dependency, prefixCharOffset);
+      prefix, deferred, importer, dependency, prefixCharOffset, importIndex);
 }
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index 2a95602..a1382d0 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -8,53 +8,65 @@
 
 import 'package:kernel/binary/ast_from_binary.dart' show BinaryBuilder;
 
-import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
+import 'package:kernel/binary/ast_from_binary.dart'
+    show BinaryBuilder, CanonicalNameError, InvalidKernelVersionError;
 
-import '../api_prototype/file_system.dart' show FileSystemEntity;
+import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
 
 import 'package:kernel/kernel.dart'
     show
-        Library,
-        Name,
-        ReturnStatement,
-        FunctionNode,
         Class,
-        Expression,
-        DartType,
-        LibraryPart,
         Component,
+        DartType,
+        Expression,
+        FunctionNode,
+        Library,
         LibraryDependency,
-        Source,
+        LibraryPart,
+        Name,
         Procedure,
-        TypeParameter,
-        ProcedureKind;
-
-import '../api_prototype/memory_file_system.dart' show MemoryFileSystem;
-
-import 'hybrid_file_system.dart' show HybridFileSystem;
+        ProcedureKind,
+        ReturnStatement,
+        Source,
+        TreeNode,
+        TypeParameter;
 
 import 'package:kernel/kernel.dart' as kernel show Combinator;
 
+import '../api_prototype/file_system.dart' show FileSystemEntity;
+
 import '../api_prototype/incremental_kernel_generator.dart'
     show IncrementalKernelGenerator, isLegalIdentifier;
 
+import '../api_prototype/memory_file_system.dart' show MemoryFileSystem;
+
 import 'builder/builder.dart' show LibraryBuilder;
 
 import 'builder_graph.dart' show BuilderGraph;
 
+import 'combinator.dart' show Combinator;
+
 import 'compiler_context.dart' show CompilerContext;
 
 import 'dill/dill_library_builder.dart' show DillLibraryBuilder;
 
 import 'dill/dill_target.dart' show DillTarget;
 
+import 'fasta_codes.dart'
+    show
+        templateInitializeFromDillNotSelfContained,
+        templateInitializeFromDillUnknownProblem;
+
+import 'hybrid_file_system.dart' show HybridFileSystem;
+
 import 'kernel/kernel_incremental_target.dart'
     show KernelIncrementalTarget, KernelIncrementalTargetErroneousComponent;
 
-import 'library_graph.dart' show LibraryGraph;
-
 import 'kernel/kernel_library_builder.dart' show KernelLibraryBuilder;
-import 'kernel/kernel_shadow_ast.dart' show ShadowVariableDeclaration;
+
+import 'kernel/kernel_shadow_ast.dart' show VariableDeclarationJudgment;
+
+import 'library_graph.dart' show LibraryGraph;
 
 import 'source/source_library_builder.dart' show SourceLibraryBuilder;
 
@@ -62,8 +74,6 @@
 
 import 'uri_translator.dart' show UriTranslator;
 
-import 'combinator.dart' show Combinator;
-
 class IncrementalCompiler implements IncrementalKernelGenerator {
   final CompilerContext context;
 
@@ -112,6 +122,25 @@
             // We might have loaded x out of y libraries into the component.
             // To avoid any unforeseen problems start over.
             bytesLength = prepareSummary(summaryBytes, uriTranslator, c, data);
+
+            if (e is InvalidKernelVersionError || e is PackageChangedError) {
+              // Don't report any warning.
+            } else if (e is CanonicalNameError) {
+              dillLoadedData.loader.addProblem(
+                  templateInitializeFromDillNotSelfContained
+                      .withArguments(initializeFromDillUri.toString()),
+                  TreeNode.noOffset,
+                  1,
+                  null);
+            } else {
+              // Unknown error: Report problem as such.
+              dillLoadedData.loader.addProblem(
+                  templateInitializeFromDillUnknownProblem.withArguments(
+                      initializeFromDillUri.toString(), "$e"),
+                  TreeNode.noOffset,
+                  1,
+                  null);
+            }
           }
         }
         appendLibraries(data, bytesLength);
@@ -348,7 +377,7 @@
         // We're going to output all we read here so lazy loading it
         // doesn't make sense.
         new BinaryBuilder(initializationBytes, disableLazyReading: true)
-            .readComponent(data.component);
+            .readComponent(data.component, checkCanonicalNames: true);
 
         // Check the any package-urls still point to the same file
         // (e.g. the package still exists and hasn't been updated).
@@ -360,7 +389,7 @@
             // Everything that depends on it should be thrown away.
             // TODO(jensj): Anything that doesn't depend on it can be kept.
             // For now just don't initialize from this dill.
-            throw "Changed package";
+            throw const PackageChangedError();
           }
         }
 
@@ -450,6 +479,7 @@
               dependency.isDeferred,
               -1,
               -1,
+              -1,
               -1);
         }
 
@@ -463,7 +493,7 @@
       FunctionNode parameters = new FunctionNode(null,
           typeParameters: typeDefinitions,
           positionalParameters: definitions.keys
-              .map((name) => new ShadowVariableDeclaration(name, 0))
+              .map((name) => new VariableDeclarationJudgment(name, 0))
               .toList());
 
       debugLibrary.build(userCode.loader.coreLibrary, modifyTarget: false);
@@ -612,6 +642,10 @@
   void recordInvalidatedImportUrisForTesting(List<Uri> uris) {}
 }
 
+class PackageChangedError {
+  const PackageChangedError();
+}
+
 class IncrementalCompilerData {
   bool includeUserLoadedLibraries;
   Procedure userLoadedUriMain;
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index e165386..f4a9d05 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -65,7 +65,8 @@
 
 import '../type_inference/type_inferrer.dart' show TypeInferrer;
 
-import '../type_inference/type_promotion.dart' show TypePromoter;
+import '../type_inference/type_promotion.dart'
+    show TypePromoter, TypePromotionFact, TypePromotionScope;
 
 import 'constness.dart' show Constness;
 
@@ -110,13 +111,15 @@
 
 import 'kernel_builder.dart';
 
+import 'kernel_factory.dart' show KernelFactory;
+
 import 'type_algorithms.dart' show calculateBounds;
 
 // TODO(ahe): Remove this and ensure all nodes have a location.
 const noLocation = null;
 
 abstract class BodyBuilder<Expression, Statement, Arguments>
-    extends ScopeListener<JumpTarget>
+    extends ScopeListener<JumpTarget<Statement>>
     implements ExpressionGeneratorHelper<Expression, Statement, Arguments> {
   // TODO(ahe): Rename [library] to 'part'.
   @override
@@ -159,6 +162,14 @@
   @override
   final TypePromoter typePromoter;
 
+  /// The factory used to construct body expressions, statements, and
+  /// initializers.
+  ///
+  /// TODO(paulberry): when the analyzer's diet parser is in use, this should
+  /// point to the analyzer's factory.  Note that type arguments will have to be
+  /// added to BodyBuilder to make this happen.
+  final KernelFactory factory = new KernelFactory();
+
   /// Only used when [member] is a constructor. It tracks if an implicit super
   /// initializer is needed.
   ///
@@ -283,7 +294,7 @@
 
   @override
   Expression toValue(Object node) {
-    if (node is Generator) {
+    if (node is Generator<Expression, Statement, Arguments>) {
       return node.buildSimpleRead();
     } else if (node is Expression) {
       return node;
@@ -301,7 +312,8 @@
   }
 
   Expression toEffect(Object node) {
-    if (node is Generator) return node.buildForEffect();
+    if (node is Generator<Expression, Statement, Arguments>)
+      return node.buildForEffect();
     return toValue(node);
   }
 
@@ -347,11 +359,11 @@
       switchScope.unclaimedForwardDeclarations
           .forEach((String name, Declaration declaration) {
         if (outerSwitchScope == null) {
-          JumpTarget target = declaration;
-          for (kernel.Statement statement in target.users) {
-            statement.parent.replaceChild(
-                statement,
-                wrapInCompileTimeErrorStatement(statement,
+          JumpTarget<Statement> target = declaration;
+          for (Statement statement in target.users) {
+            toKernelStatement(statement).parent.replaceChild(
+                toKernelStatement(statement),
+                wrapInCompileTimeErrorStatement(toKernelStatement(statement),
                     fasta.templateLabelNotFound.withArguments(name)));
           }
         } else {
@@ -414,7 +426,7 @@
   }
 
   @override
-  JumpTarget createJumpTarget(JumpTargetKind kind, int charOffset) {
+  JumpTarget<Statement> createJumpTarget(JumpTargetKind kind, int charOffset) {
     return new JumpTarget<Statement>(
         kind, functionNestingLevel, member, charOffset);
   }
@@ -429,17 +441,17 @@
   @override
   void endMetadata(Token beginToken, Token periodBeforeName, Token endToken) {
     debugEvent("Metadata");
-    var arguments = pop();
+    Object arguments = pop();
     pushQualifiedReference(beginToken.next, periodBeforeName);
     if (arguments != null) {
       push(arguments);
       buildConstructorReferenceInvocation(
-          beginToken, beginToken.offset, Constness.explicitConst);
+          beginToken.next, beginToken.offset, Constness.explicitConst);
       push(popForValue());
     } else {
       String name = pop();
       pop(); // Type arguments (ignored, already reported by parser).
-      var expression = pop();
+      Object expression = pop();
       if (expression is Identifier) {
         Identifier identifier = expression;
         expression = new UnresolvedNameGenerator(
@@ -447,7 +459,7 @@
       }
       if (name?.isNotEmpty ?? false) {
         Token period = periodBeforeName ?? beginToken.next;
-        Generator generator = expression;
+        Generator<Expression, Statement, Arguments> generator = expression;
         expression = generator.buildPropertyAccess(
             new IncompletePropertyAccessGenerator(
                 this, period.next, new Name(name, library.library)),
@@ -456,7 +468,8 @@
       }
 
       ConstantContext savedConstantContext = pop();
-      if (expression is! StaticAccessGenerator) {
+      if (expression
+          is! StaticAccessGenerator<Expression, Statement, Arguments>) {
         push(wrapInCompileTimeError(
             toValue(expression), fasta.messageExpressionNotMetadata));
       } else {
@@ -492,12 +505,12 @@
   void finishFields() {
     debugEvent("finishFields");
     int count = pop();
-    List<FieldBuilder> fields = <FieldBuilder>[];
+    List<FieldBuilder<Object>> fields = <FieldBuilder<Object>>[];
     for (int i = 0; i < count; i++) {
       Expression initializer = pop();
       Identifier identifier = pop();
       String name = identifier.name;
-      FieldBuilder field;
+      FieldBuilder<Object> field;
       if (classBuilder != null) {
         field = classBuilder[name];
       } else {
@@ -514,14 +527,15 @@
         field.initializer = initializer;
         _typeInferrer.inferFieldInitializer(
             this,
+            factory,
             field.hasTypeInferredFromInitializer ? null : field.builtType,
             toKernelExpression(initializer));
       }
     }
     pop(); // Type.
-    List annotations = pop();
+    List<Object> annotations = pop();
     if (annotations != null) {
-      _typeInferrer.inferMetadata(this, annotations);
+      _typeInferrer.inferMetadata(this, factory, annotations);
       Field field = fields.first.target;
       // The first (and often only field) will not get a clone.
       annotations.forEach((annotation) => field.addAnnotation(annotation));
@@ -555,7 +569,7 @@
   }
 
   void prepareInitializers() {
-    ProcedureBuilder member = this.member;
+    ProcedureBuilder<TypeBuilder> member = this.member;
     scope = member.computeFormalParameterInitializerScope(scope);
     if (member is KernelConstructorBuilder) {
       if (member.isConst &&
@@ -624,19 +638,15 @@
     debugEvent("endInitializer");
     assert(!inInitializer);
     final member = this.member;
-    var node = pop();
+    Object node = pop();
     Initializer initializer;
     if (node is Initializer) {
       initializer = node;
-    } else if (node is Generator) {
+    } else if (node is Generator<Expression, Statement, Arguments>) {
       initializer = node.buildFieldInitializer(initializedFields);
     } else if (node is ConstructorInvocation) {
       initializer = buildSuperInitializer(
-          false,
-          node.target,
-          node.arguments as dynamic, // TODO(ahe): Remove this cast when
-          // buildSuperInitializer is moved to [Forest].
-          token.charOffset);
+          false, node.target, unchecked(node.arguments), token.charOffset);
     } else {
       Expression value = toValue(node);
       if (node is! Throw) {
@@ -645,7 +655,7 @@
       }
       initializer = buildInvalidInitializer(node, token.charOffset);
     }
-    _typeInferrer.inferInitializer(this, initializer);
+    _typeInferrer.inferInitializer(this, factory, initializer);
     if (member is KernelConstructorBuilder && !member.isExternal) {
       member.addInitializer(initializer, _typeInferrer);
     } else {
@@ -665,7 +675,7 @@
 
   @override
   void finishFunction(
-      List annotations,
+      List<Object> annotations,
       FormalParameters<Expression, Statement, Arguments> formals,
       AsyncMarker asyncModifier,
       kernel.Statement body) {
@@ -674,7 +684,7 @@
 
     KernelFunctionBuilder builder = member;
     if (formals?.optional != null) {
-      Iterator<FormalParameterBuilder> formalBuilders =
+      Iterator<FormalParameterBuilder<TypeBuilder>> formalBuilders =
           builder.formals.skip(formals.required.length).iterator;
       for (VariableDeclaration parameter in formals.optional.formals) {
         bool hasMore = formalBuilders.moveNext();
@@ -687,12 +697,12 @@
         realParameter.initializer = toKernelExpression(initializer)
           ..parent = realParameter;
         _typeInferrer.inferParameterInitializer(
-            this, toKernelExpression(initializer), realParameter.type);
+            this, factory, toKernelExpression(initializer), realParameter.type);
       }
     }
 
     _typeInferrer.inferFunctionBody(
-        this, _computeReturnTypeContext(member), asyncModifier, body);
+        this, factory, _computeReturnTypeContext(member), asyncModifier, body);
     if (builder.kind == ProcedureKind.Setter) {
       bool oneParameter = formals != null &&
           formals.required.length == 1 &&
@@ -732,7 +742,7 @@
       }
     }
     Member target = builder.target;
-    _typeInferrer.inferMetadata(this, annotations);
+    _typeInferrer.inferMetadata(this, factory, annotations);
     for (Expression annotation in annotations ?? const []) {
       target.addAnnotation(toKernelExpression(annotation));
     }
@@ -749,7 +759,7 @@
   @override
   List<kernel.Expression> finishMetadata() {
     List<kernel.Expression> expressions = pop();
-    _typeInferrer.inferMetadata(this, expressions);
+    _typeInferrer.inferMetadata(this, factory, expressions);
     return expressions;
   }
 
@@ -782,11 +792,11 @@
               .withLocation(uri, eof.charOffset, eof.length));
     }
 
-    ShadowReturnStatement fakeReturn =
-        new ShadowReturnStatement(toKernelExpression(expression));
+    ReturnJudgment fakeReturn =
+        new ReturnJudgment(toKernelExpression(expression));
 
     _typeInferrer.inferFunctionBody(
-        this, const DynamicType(), AsyncMarker.Sync, fakeReturn);
+        this, factory, const DynamicType(), AsyncMarker.Sync, fakeReturn);
 
     return toExpression(fakeReturn.expression);
   }
@@ -857,22 +867,23 @@
   @override
   void endArguments(int count, Token beginToken, Token endToken) {
     debugEvent("Arguments");
-    List<dynamic> arguments =
-        new List<dynamic>.filled(count, null, growable: true);
+    List<Object> arguments =
+        new List<Object>.filled(count, null, growable: true);
     popList(count, arguments);
     int firstNamedArgumentIndex = arguments.length;
     for (int i = 0; i < arguments.length; i++) {
-      var node = arguments[i];
+      Object node = arguments[i];
       if (node is NamedExpression) {
         firstNamedArgumentIndex =
             i < firstNamedArgumentIndex ? i : firstNamedArgumentIndex;
       } else {
-        arguments[i] = toValue(node);
+        Expression argument = toValue(node);
+        arguments[i] = argument;
         if (i > firstNamedArgumentIndex) {
           arguments[i] = new NamedExpression(
               "#$i",
               toKernelExpression(deprecated_buildCompileTimeError(
-                  "Expected named argument.", arguments[i].fileOffset)))
+                  "Expected named argument.", forest.readOffset(argument))))
             ..fileOffset = beginToken.charOffset;
         }
       }
@@ -898,7 +909,7 @@
         for (NamedExpression expression in named) {
           if (seenNames.containsKey(expression.name)) {
             hasProblem = true;
-            var prevNamedExpression = seenNames[expression.name];
+            NamedExpression prevNamedExpression = seenNames[expression.name];
             prevNamedExpression.value = toKernelExpression(
                 deprecated_buildCompileTimeError(
                     "Duplicated named argument '${expression.name}'.",
@@ -962,7 +973,7 @@
 
   @override
   finishSend(Object receiver, Arguments arguments, int charOffset) {
-    if (receiver is Generator) {
+    if (receiver is Generator<Expression, Statement, Arguments>) {
       return receiver.doInvocation(charOffset, arguments);
     } else {
       return buildMethodInvocation(
@@ -981,7 +992,7 @@
           this, token, expression.variable));
       expression.extend();
     } else {
-      VariableDeclaration variable = new ShadowVariableDeclaration.forValue(
+      VariableDeclaration variable = new VariableDeclarationJudgment.forValue(
           toKernelExpression(expression), functionNestingLevel);
       push(new ShadowCascadeExpression(variable));
       push(new VariableUseGenerator<Expression, Statement, Arguments>(
@@ -1035,7 +1046,7 @@
     if (optional("??", token)) return doIfNull(token);
     if (optional("?.", token)) return doIfNotNull(token);
     Expression argument = popForValue();
-    var receiver = pop();
+    Object receiver = pop();
     bool isSuper = false;
     if (receiver is ThisAccessGenerator && receiver.isSuper) {
       ThisAccessGenerator thisAccessorReceiver = receiver;
@@ -1097,7 +1108,7 @@
 
   /// Handle `a?.b(...)`.
   void doIfNotNull(Token token) {
-    var send = pop();
+    Object send = pop();
     if (send is IncompleteSendGenerator) {
       push(send.withReceiver(pop(), token.charOffset, isNullAware: true));
     } else {
@@ -1110,9 +1121,12 @@
   }
 
   void doDotOrCascadeExpression(Token token) {
-    var send = pop();
+    Object send = pop();
     if (send is IncompleteSendGenerator) {
       Object receiver = optional(".", token) ? pop() : popForValue();
+      if (receiver is TypeUseGenerator<dynamic, dynamic, dynamic>) {
+        _typeInferrer.storeTypeUse(receiver);
+      }
       push(send.withReceiver(receiver, token.charOffset));
     } else {
       pop();
@@ -1317,15 +1331,16 @@
     /// Performs a similar lookup to [lookupConstructor], but using a slower
     /// implementation.
     Constructor lookupConstructorWithPatches(Name name, bool isSuper) {
-      ClassBuilder builder = classBuilder.origin;
+      ClassBuilder<TypeBuilder, Object> builder = classBuilder.origin;
 
-      ClassBuilder getSuperclass(ClassBuilder builder) {
+      ClassBuilder<TypeBuilder, Object> getSuperclass(
+          ClassBuilder<TypeBuilder, Object> builder) {
         // This way of computing the superclass is slower than using the kernel
         // objects directly.
-        var supertype = builder.supertype;
-        if (supertype is NamedTypeBuilder) {
-          var builder = supertype.declaration;
-          if (builder is ClassBuilder) return builder;
+        Object supertype = builder.supertype;
+        if (supertype is NamedTypeBuilder<TypeBuilder, Object>) {
+          Object builder = supertype.declaration;
+          if (builder is ClassBuilder<TypeBuilder, Object>) return builder;
         }
         return null;
       }
@@ -1446,14 +1461,15 @@
       // [ProcedureBuilder.computeFormalParameterInitializerScope]. If that
       // wasn't the case, we could always use [VariableUseGenerator].
       if (declaration.isFinal) {
-        var fact = typePromoter.getFactForAccess(
+        Object fact = typePromoter.getFactForAccess(
             declaration.target, functionNestingLevel);
-        var scope = typePromoter.currentScope;
+        Object scope = typePromoter.currentScope;
         return new ReadOnlyAccessGenerator<Expression, Statement, Arguments>(
             this,
             token,
-            toExpression(new ShadowVariableGet(declaration.target, fact, scope)
-              ..fileOffset = charOffset),
+            toExpression(
+                new VariableGetJudgment(declaration.target, fact, scope)
+                  ..fileOffset = charOffset),
             name);
       } else {
         return new VariableUseGenerator<Expression, Statement, Arguments>(
@@ -1501,6 +1517,7 @@
             "You might try moving the constant to the deferred library, "
             "or removing 'deferred' from the import.");
       }
+      _typeInferrer.storePrefix(token, declaration);
       return declaration;
     } else if (declaration is LoadLibraryBuilder) {
       return new LoadLibraryGenerator<Expression, Statement, Arguments>(
@@ -1539,7 +1556,7 @@
   void handleQualified(Token period) {
     debugEvent("Qualified");
     Identifier name = pop();
-    var receiver = pop();
+    Object receiver = pop();
     push([receiver, name]);
   }
 
@@ -1560,10 +1577,10 @@
     debugEvent("endLiteralString");
     if (interpolationCount == 0) {
       Token token = pop();
-      String value = unescapeString(token.lexeme);
+      String value = unescapeString(token.lexeme, token, this);
       push(forest.literalString(value, token));
     } else {
-      var count = 1 + interpolationCount * 2;
+      Object count = 1 + interpolationCount * 2;
       List<Object> parts =
           popList(count, new List<Object>.filled(count, null, growable: true));
       Token first = parts.first;
@@ -1572,16 +1589,17 @@
       List<Expression> expressions = <Expression>[];
       // Contains more than just \' or \".
       if (first.lexeme.length > 1) {
-        String value = unescapeFirstStringPart(first.lexeme, quote);
+        String value =
+            unescapeFirstStringPart(first.lexeme, quote, first, this);
         if (value.isNotEmpty) {
           expressions.add(forest.literalString(value, first));
         }
       }
       for (int i = 1; i < parts.length - 1; i++) {
-        var part = parts[i];
+        Object part = parts[i];
         if (part is Token) {
           if (part.lexeme.length != 0) {
-            String value = unescape(part.lexeme, quote);
+            String value = unescape(part.lexeme, quote, part, this);
             expressions.add(forest.literalString(value, part));
           }
         } else {
@@ -1590,7 +1608,7 @@
       }
       // Contains more than just \' or \".
       if (last.lexeme.length > 1) {
-        String value = unescapeLastStringPart(last.lexeme, quote);
+        String value = unescapeLastStringPart(last.lexeme, quote, last, this);
         if (value.isNotEmpty) {
           expressions.add(forest.literalString(value, last));
         }
@@ -1730,7 +1748,7 @@
     bool isConst = (currentLocalVariableModifiers & constMask) != 0;
     bool isFinal = (currentLocalVariableModifiers & finalMask) != 0;
     assert(isConst == (constantContext == ConstantContext.inferred));
-    push(new ShadowVariableDeclaration(identifier.name, functionNestingLevel,
+    push(new VariableDeclarationJudgment(identifier.name, functionNestingLevel,
         initializer: toKernelExpression(initializer),
         type: currentLocalVariableType,
         isFinal: isFinal,
@@ -1833,8 +1851,8 @@
   void handleAssignmentExpression(Token token) {
     debugEvent("AssignmentExpression");
     Expression value = popForValue();
-    var generator = pop();
-    if (generator is! Generator) {
+    Object generator = pop();
+    if (generator is! Generator<Expression, Statement, Arguments>) {
       push(buildCompileTimeError(fasta.messageNotAnLvalue,
           offsetForToken(token), lengthForToken(token)));
     } else {
@@ -1845,8 +1863,8 @@
 
   @override
   void enterLoop(int charOffset) {
-    if (peek() is LabelTarget) {
-      LabelTarget target = peek();
+    if (peek() is LabelTarget<Statement>) {
+      LabelTarget<Statement> target = peek();
       enterBreakTarget(charOffset, target.breakTarget);
       enterContinueTarget(charOffset, target.continueTarget);
     } else {
@@ -1865,25 +1883,25 @@
   }
 
   List<VariableDeclaration> buildVariableDeclarations(variableOrExpression) {
-    if (variableOrExpression is Generator) {
+    if (variableOrExpression is Generator<Expression, Statement, Arguments>) {
       variableOrExpression = variableOrExpression.buildForEffect();
     }
     if (variableOrExpression is VariableDeclaration) {
       return <VariableDeclaration>[variableOrExpression];
     } else if (variableOrExpression is Expression) {
-      VariableDeclaration variable = new ShadowVariableDeclaration.forEffect(
+      VariableDeclaration variable = new VariableDeclarationJudgment.forEffect(
           toKernelExpression(variableOrExpression), functionNestingLevel);
       return <VariableDeclaration>[variable];
     } else if (variableOrExpression is ExpressionStatement) {
-      VariableDeclaration variable = new ShadowVariableDeclaration.forEffect(
+      VariableDeclaration variable = new VariableDeclarationJudgment.forEffect(
           variableOrExpression.expression, functionNestingLevel);
       return <VariableDeclaration>[variable];
     } else if (forest.isVariablesDeclaration(variableOrExpression)) {
       return forest
           .variablesDeclarationExtractDeclarations(variableOrExpression);
-    } else if (variableOrExpression is List) {
+    } else if (variableOrExpression is List<Object>) {
       List<VariableDeclaration> variables = <VariableDeclaration>[];
-      for (var v in variableOrExpression) {
+      for (Object v in variableOrExpression) {
         variables.addAll(buildVariableDeclarations(v));
       }
       return variables;
@@ -1900,7 +1918,7 @@
     Statement body = popStatement();
     List<Expression> updates = popListForEffect(updateExpressionCount);
     Statement conditionStatement = popStatement();
-    dynamic variableOrExpression = pop();
+    Object variableOrExpression = pop();
     List<VariableDeclaration> variables =
         buildVariableDeclarations(variableOrExpression);
     if (variables == null) {
@@ -1908,8 +1926,8 @@
           forKeyword.charOffset, uri);
     }
     exitLocalScope();
-    JumpTarget continueTarget = exitContinueTarget();
-    JumpTarget breakTarget = exitBreakTarget();
+    JumpTarget<Statement> continueTarget = exitContinueTarget();
+    JumpTarget<Statement> breakTarget = exitBreakTarget();
     if (continueTarget.hasUsers) {
       body = forest.syntheticLabeledStatement(body);
       continueTarget.resolveContinues(forest, body);
@@ -2006,7 +2024,7 @@
   void handleLiteralMap(
       int count, Token leftBrace, Token constKeyword, Token rightBrace) {
     debugEvent("LiteralMap");
-    List entries = forest.mapEntryList(count);
+    List<Object> entries = forest.mapEntryList(count);
     popList(count, entries);
     Object typeArguments = pop();
     DartType keyType;
@@ -2080,13 +2098,14 @@
     // TODO(ahe): The scope is wrong for return types of generic functions.
     debugEvent("Type");
     List<DartType> arguments = pop();
-    dynamic name = pop();
-    if (name is List) {
-      if (name.length != 2) {
-        unexpected("${name.length}", "2", beginToken.charOffset, uri);
+    Object name = pop();
+    if (name is List<Object>) {
+      List<Object> list = name;
+      if (list.length != 2) {
+        unexpected("${list.length}", "2", beginToken.charOffset, uri);
       }
-      var prefix = name[0];
-      Identifier suffix = name[1];
+      Object prefix = list[0];
+      Identifier suffix = list[1];
       if (prefix is PrefixBuilder) {
         name = scopeLookup(prefix.exportScope, suffix.name, beginToken,
             isQualified: true, prefix: prefix);
@@ -2102,7 +2121,7 @@
         return;
       }
     }
-    if (name is Generator) {
+    if (name is Generator<Expression, Statement, Arguments>) {
       push(name.buildTypeWithBuiltArguments(arguments));
     } else if (name is TypeBuilder) {
       push(name.build(library));
@@ -2122,7 +2141,7 @@
     debugEvent("beginFunctionType");
   }
 
-  void enterFunctionTypeScope(List typeVariables) {
+  void enterFunctionTypeScope(List<Object> typeVariables) {
     debugEvent("enterFunctionTypeScope");
     enterLocalScope(null,
         scope.createNestedScope("function-type scope", isModifiable: true));
@@ -2264,7 +2283,7 @@
     if (!inCatchClause &&
         functionNestingLevel == 0 &&
         memberKind != MemberKind.GeneralizedFunctionType) {
-      ProcedureBuilder member = this.member;
+      ProcedureBuilder<TypeBuilder> member = this.member;
       KernelFormalParameterBuilder formal = member.getFormal(name.name);
       if (formal == null) {
         internalProblem(
@@ -2277,7 +2296,8 @@
         variable.initializer = name.initializer;
       }
     } else {
-      variable = new ShadowVariableDeclaration(name?.name, functionNestingLevel,
+      variable = new VariableDeclarationJudgment(
+          name?.name, functionNestingLevel,
           type: type,
           initializer: name?.initializer,
           isFinal: isFinal,
@@ -2289,7 +2309,8 @@
     }
     if (annotations != null) {
       if (functionNestingLevel == 0) {
-        _typeInferrer.inferMetadata(this, toKernelExpressionList(annotations));
+        _typeInferrer.inferMetadata(
+            this, factory, toKernelExpressionList(annotations));
       }
       for (Expression annotation in annotations) {
         variable.addAnnotation(toKernelExpression(annotation));
@@ -2305,7 +2326,7 @@
     FormalParameterKind kind = optional("{", beginToken)
         ? FormalParameterKind.optionalNamed
         : FormalParameterKind.optionalPositional;
-    var variables =
+    Object variables =
         new List<VariableDeclaration>.filled(count, null, growable: true);
     popList(count, variables);
     push(new OptionalFormals(kind, variables));
@@ -2341,7 +2362,7 @@
   @override
   void endFormalParameterDefaultValueExpression() {
     debugEvent("FormalParameterDefaultValueExpression");
-    var defaultValueExpression = pop();
+    Object defaultValueExpression = pop();
     constantContext = pop();
     push(defaultValueExpression);
   }
@@ -2378,8 +2399,9 @@
     List<VariableDeclaration> variables =
         new List<VariableDeclaration>.filled(count, null, growable: true);
     popList(count, variables);
-    var formals = new FormalParameters<Expression, Statement, Arguments>(
-        variables, optional, beginToken.charOffset);
+    FormalParameters<Expression, Statement, Arguments> formals =
+        new FormalParameters<Expression, Statement, Arguments>(
+            variables, optional, beginToken.charOffset);
     constantContext = pop();
     push(formals);
     if ((inCatchClause || functionNestingLevel != 0) &&
@@ -2470,7 +2492,7 @@
       Token openSquareBracket, Token closeSquareBracket) {
     debugEvent("IndexedExpression");
     Expression index = popForValue();
-    var receiver = pop();
+    Object receiver = pop();
     if (receiver is ThisAccessGenerator && receiver.isSuper) {
       push(new SuperIndexedAccessGenerator<Expression, Statement, Arguments>(
           this,
@@ -2487,31 +2509,31 @@
   @override
   void handleUnaryPrefixExpression(Token token) {
     debugEvent("UnaryPrefixExpression");
-    var receiver = pop();
+    Object receiver = pop();
     if (optional("!", token)) {
       push(forest.notExpression(toValue(receiver), token));
     } else {
       String operator = token.stringValue;
+      Expression receiverValue;
       if (optional("-", token)) {
         operator = "unary-";
 
         if (receiver
             is LargeIntAccessGenerator<Expression, Statement, Arguments>) {
-          int value =
-              int.parse("-" + receiver.token.lexeme, onError: (_) => null);
+          int value = int.tryParse("-" + receiver.token.lexeme);
           if (value != null) {
-            push(forest.literalInt(value, token));
-            return;
+            receiverValue = forest.literalInt(value, token);
           }
         }
       }
       bool isSuper = false;
-      Expression receiverValue;
-      if (receiver is ThisAccessGenerator && receiver.isSuper) {
-        isSuper = true;
-        receiverValue = forest.thisExpression(receiver.token);
-      } else {
-        receiverValue = toValue(receiver);
+      if (receiverValue == null) {
+        if (receiver is ThisAccessGenerator && receiver.isSuper) {
+          isSuper = true;
+          receiverValue = forest.thisExpression(receiver.token);
+        } else {
+          receiverValue = toValue(receiver);
+        }
       }
       push(buildMethodInvocation(receiverValue, new Name(operator),
           forest.argumentsEmpty(noLocation), token.charOffset,
@@ -2531,8 +2553,8 @@
   @override
   void handleUnaryPrefixAssignmentExpression(Token token) {
     debugEvent("UnaryPrefixAssignmentExpression");
-    var generator = pop();
-    if (generator is Generator) {
+    Object generator = pop();
+    if (generator is Generator<Expression, Statement, Arguments>) {
       push(generator.buildPrefixIncrement(incrementOperator(token),
           offset: token.charOffset));
     } else {
@@ -2544,8 +2566,8 @@
   @override
   void handleUnaryPostfixAssignmentExpression(Token token) {
     debugEvent("UnaryPostfixAssignmentExpression");
-    var generator = pop();
-    if (generator is Generator) {
+    Object generator = pop();
+    if (generator is Generator<Expression, Statement, Arguments>) {
       push(new DelayedPostfixIncrement(
           this, token, generator, incrementOperator(token), null));
     } else {
@@ -2598,10 +2620,11 @@
     Identifier suffix = popIfNotNull(periodBeforeName);
     Identifier identifier;
     List<DartType> typeArguments = pop();
-    dynamic type = pop();
-    if (type is List) {
-      var prefix = type[0];
-      identifier = type[1];
+    Object type = pop();
+    if (type is List<Object>) {
+      List<Object> list = type;
+      Object prefix = list[0];
+      identifier = list[1];
       if (prefix is PrefixBuilder) {
         type = scopeLookup(
             prefix.exportScope, identifier.name, identifier.token,
@@ -2609,7 +2632,7 @@
         identifier = null;
       } else if (prefix is TypeUseGenerator<Expression, Statement, Arguments>) {
         type = prefix;
-      } else if (prefix is Generator) {
+      } else if (prefix is Generator<Expression, Statement, Arguments>) {
         String name = suffix == null
             ? "${prefix.plainNameForRead}.${identifier.name}"
             : "${prefix.plainNameForRead}.${identifier.name}.$suffix";
@@ -2711,7 +2734,7 @@
               forest.argumentsPositional(arguments).length)
           .withLocation(uri, offset, noLength);
     }
-    List named = forest.argumentsNamed(arguments);
+    List<Object> named = forest.argumentsNamed(arguments);
     if (named.isNotEmpty) {
       Set<String> names =
           new Set.from(function.namedParameters.map((a) => a.name));
@@ -2724,7 +2747,7 @@
       }
     }
 
-    List types = forest.argumentsTypeArguments(arguments);
+    List<Object> types = forest.argumentsTypeArguments(arguments);
     if (typeParameters.length != types.length) {
       // TODO(paulberry): Report error in this case as well,
       // after https://github.com/dart-lang/sdk/issues/32130 is fixed.
@@ -2754,7 +2777,7 @@
               forest.argumentsPositional(arguments).length)
           .withLocation(uri, offset, noLength);
     }
-    List named = forest.argumentsNamed(arguments);
+    List<Object> named = forest.argumentsNamed(arguments);
     if (named.isNotEmpty) {
       Set<String> names =
           new Set.from(function.namedParameters.map((a) => a.name));
@@ -2804,7 +2827,7 @@
   @override
   void endConstLiteral(Token token) {
     debugEvent("endConstLiteral");
-    var literal = pop();
+    Object literal = pop();
     constantContext = pop();
     push(literal);
   }
@@ -2822,7 +2845,7 @@
     String name = pop();
     List<DartType> typeArguments = pop();
 
-    var type = pop();
+    Object type = pop();
     PrefixBuilder deferredPrefix;
     int checkOffset;
     if (type is DeferredAccessGenerator<Expression, Statement, Arguments>) {
@@ -2835,6 +2858,7 @@
 
     if (type is TypeUseGenerator<Expression, Statement, Arguments>) {
       TypeUseGenerator<Expression, Statement, Arguments> generator = type;
+      _typeInferrer.storeTypeUse(generator);
       if (generator.prefix != null) {
         nameToken = nameToken.next.next;
       }
@@ -2842,7 +2866,7 @@
     }
 
     ConstantContext savedConstantContext = pop();
-    if (type is TypeDeclarationBuilder) {
+    if (type is TypeDeclarationBuilder<TypeBuilder, Object>) {
       Expression expression = buildConstructorInvocation(
           type, nameToken, arguments, name, typeArguments, offset, constness);
       push(deferredPrefix != null
@@ -2867,7 +2891,7 @@
 
   @override
   Expression buildConstructorInvocation(
-      TypeDeclarationBuilder type,
+      TypeDeclarationBuilder<TypeBuilder, Object> type,
       Token nameToken,
       Arguments arguments,
       String name,
@@ -2885,8 +2909,8 @@
     }
 
     String errorName;
-    if (type is ClassBuilder) {
-      if (type is EnumBuilder) {
+    if (type is ClassBuilder<TypeBuilder, Object>) {
+      if (type is EnumBuilder<TypeBuilder, Object>) {
         return deprecated_buildCompileTimeError(
             "An enum class can't be instantiated.", nameToken.charOffset);
       }
@@ -3006,7 +3030,7 @@
     debugEvent("NamedArgument");
     Expression value = popForValue();
     Identifier identifier = pop();
-    push(new NamedExpression(identifier.name, toKernelExpression(value))
+    push(new NamedExpressionJudgment(identifier.name, toKernelExpression(value))
       ..fileOffset = offsetForToken(identifier.token));
   }
 
@@ -3014,7 +3038,7 @@
   void endFunctionName(Token beginToken, Token token) {
     debugEvent("FunctionName");
     Identifier name = pop();
-    VariableDeclaration variable = new ShadowVariableDeclaration(
+    VariableDeclaration variable = new VariableDeclarationJudgment(
         name.name, functionNestingLevel,
         isFinal: true, isLocalFunction: true)
       ..fileOffset = offsetForToken(name.token);
@@ -3044,7 +3068,7 @@
     functionNestingLevel--;
     inCatchBlock = pop();
     switchScope = pop();
-    List typeVariables = pop();
+    List<Object> typeVariables = pop();
     exitLocalScope();
     push(typeVariables ?? NullValue.TypeVariables);
   }
@@ -3058,7 +3082,7 @@
   @override
   void beginNamedFunctionExpression(Token token) {
     debugEvent("beginNamedFunctionExpression");
-    List typeVariables = pop();
+    List<Object> typeVariables = pop();
     // Create an additional scope in which the named function expression is
     // declared.
     enterLocalScope("named function");
@@ -3077,9 +3101,9 @@
     AsyncMarker asyncModifier = pop();
     exitLocalScope();
     FormalParameters<Expression, Statement, Arguments> formals = pop();
-    var declaration = pop();
-    var returnType = pop();
-    var hasImplicitReturnType = returnType == null;
+    Object declaration = pop();
+    Object returnType = pop();
+    Object hasImplicitReturnType = returnType == null;
     returnType ??= const DynamicType();
     exitFunction();
     List<TypeParameter> typeParameters = typeVariableBuildersToKernel(pop());
@@ -3118,12 +3142,12 @@
           // This must have been a compile-time error.
           assert(isErroneousNode(toKernelExpression(oldInitializer)));
 
-          push(new Let(
+          push(new ShadowSyntheticExpression(new Let(
               new VariableDeclaration.forValue(
                   toKernelExpression(oldInitializer))
                 ..fileOffset = forest.readOffset(expression),
               toKernelExpression(expression))
-            ..fileOffset = forest.readOffset(expression));
+            ..fileOffset = forest.readOffset(expression)));
         } else {
           push(expression);
         }
@@ -3197,8 +3221,8 @@
     debugEvent("DoWhileStatement");
     Expression condition = popForValue();
     Statement body = popStatement();
-    JumpTarget continueTarget = exitContinueTarget();
-    JumpTarget breakTarget = exitBreakTarget();
+    JumpTarget<Statement> continueTarget = exitContinueTarget();
+    JumpTarget<Statement> breakTarget = exitBreakTarget();
     if (continueTarget.hasUsers) {
       body = forest.syntheticLabeledStatement(body);
       continueTarget.resolveContinues(forest, body);
@@ -3231,14 +3255,14 @@
     debugEvent("ForIn");
     Statement body = popStatement();
     Expression expression = popForValue();
-    var lvalue = pop();
+    Object lvalue = pop();
     exitLocalScope();
-    JumpTarget continueTarget = exitContinueTarget();
-    JumpTarget breakTarget = exitBreakTarget();
+    JumpTarget<Statement> continueTarget = exitContinueTarget();
+    JumpTarget<Statement> breakTarget = exitBreakTarget();
     kernel.Statement kernelBody = toKernelStatement(body);
     if (continueTarget.hasUsers) {
-      kernelBody = new ShadowLabeledStatement(kernelBody);
-      continueTarget.resolveContinues(forest, kernelBody);
+      kernelBody = new LabeledStatementJudgment(kernelBody);
+      continueTarget.resolveContinues(forest, toStatement(kernelBody));
     }
     VariableDeclaration variable;
     bool declaresVariable = false;
@@ -3250,7 +3274,7 @@
         deprecated_addCompileTimeError(
             variable.fileOffset, "A for-in loop-variable can't be 'const'.");
       }
-    } else if (lvalue is Generator) {
+    } else if (lvalue is Generator<Expression, Statement, Arguments>) {
       /// We are in this case, where `lvalue` isn't a [VariableDeclaration]:
       ///
       ///     for (lvalue in expression) body
@@ -3262,13 +3286,14 @@
       ///       body;
       ///     }
       variable =
-          new ShadowVariableDeclaration.forValue(null, functionNestingLevel);
-      var fact = typePromoter.getFactForAccess(variable, functionNestingLevel);
-      var scope = typePromoter.currentScope;
-      syntheticAssignment = lvalue.buildAssignment(
-          new ShadowVariableGet(variable, fact, scope)
-            ..fileOffset = inKeyword.offset,
-          voidContext: true);
+          new VariableDeclarationJudgment.forValue(null, functionNestingLevel);
+      TypePromotionFact fact =
+          typePromoter.getFactForAccess(variable, functionNestingLevel);
+      TypePromotionScope scope = typePromoter.currentScope;
+      syntheticAssignment = toKernelExpression(lvalue.buildAssignment(
+          toExpression(new VariableGetJudgment(variable, fact, scope)
+            ..fileOffset = inKeyword.offset),
+          voidContext: true));
       kernelBody = combineStatements(
           new ShadowLoopAssignmentStatement(syntheticAssignment), kernelBody);
     } else {
@@ -3290,8 +3315,8 @@
       ..fileOffset = awaitToken?.charOffset ?? forToken.charOffset
       ..bodyOffset = kernelBody.fileOffset;
     if (breakTarget.hasUsers) {
-      result = new ShadowLabeledStatement(result);
-      breakTarget.resolveBreaks(forest, result);
+      result = new LabeledStatementJudgment(result);
+      breakTarget.resolveBreaks(forest, toStatement(result));
     }
     exitLoopOrSwitch(toStatement(result));
   }
@@ -3310,7 +3335,7 @@
         new List<Object>.filled(labelCount, null, growable: true);
     popList(labelCount, labels);
     enterLocalScope(null, scope.createNestedLabelScope());
-    LabelTarget target = new LabelTarget<Statement>(
+    LabelTarget<Statement> target = new LabelTarget<Statement>(
         labels, member, functionNestingLevel, token.charOffset);
     for (Object label in labels) {
       scope.declareLabel(forest.getLabelName(label), target);
@@ -3322,7 +3347,7 @@
   void endLabeledStatement(int labelCount) {
     debugEvent("LabeledStatement");
     Statement statement = popStatement();
-    LabelTarget target = pop();
+    LabelTarget<Statement> target = pop();
     exitLocalScope();
     if (target.breakTarget.hasUsers) {
       if (statement is! LabeledStatement) {
@@ -3363,8 +3388,8 @@
     debugEvent("WhileStatement");
     Statement body = popStatement();
     Expression condition = popForValue();
-    JumpTarget continueTarget = exitContinueTarget();
-    JumpTarget breakTarget = exitBreakTarget();
+    JumpTarget<Statement> continueTarget = exitContinueTarget();
+    JumpTarget<Statement> breakTarget = exitBreakTarget();
     if (continueTarget.hasUsers) {
       body = forest.syntheticLabeledStatement(body);
       continueTarget.resolveContinues(forest, body);
@@ -3436,13 +3461,13 @@
   @override
   void beginSwitchCase(int labelCount, int expressionCount, Token firstToken) {
     debugEvent("beginSwitchCase");
-    var count = labelCount + expressionCount;
+    Object count = labelCount + expressionCount;
     List<Object> labelsAndExpressions =
         popList(count, new List<Object>.filled(count, null, growable: true));
     List<Object> labels = <Object>[];
     List<Expression> expressions = <Expression>[];
     if (labelsAndExpressions != null) {
-      for (var labelOrExpression in labelsAndExpressions) {
+      for (Object labelOrExpression in labelsAndExpressions) {
         if (forest.isLabel(labelOrExpression)) {
           labels.add(labelOrExpression);
         } else {
@@ -3504,7 +3529,7 @@
     debugEvent("SwitchStatement");
 
     List<SwitchCase> cases = pop();
-    JumpTarget target = exitBreakTarget();
+    JumpTarget<Statement> target = exitBreakTarget();
     exitSwitchScope();
     exitLocalScope();
     Expression expression = popForValue();
@@ -3512,8 +3537,8 @@
         new ShadowSwitchStatement(toKernelExpression(expression), cases)
           ..fileOffset = switchKeyword.charOffset;
     if (target.hasUsers) {
-      result = new ShadowLabeledStatement(result);
-      target.resolveBreaks(forest, result);
+      result = new LabeledStatementJudgment(result);
+      target.resolveBreaks(forest, toStatement(result));
     }
     exitLoopOrSwitch(toStatement(result));
   }
@@ -3527,7 +3552,8 @@
       List<Object> labels = pop();
       SwitchCase current = cases[i] = pop();
       for (Object label in labels) {
-        JumpTarget target = switchScope.lookupLabel(forest.getLabelName(label));
+        JumpTarget<Statement> target =
+            switchScope.lookupLabel(forest.getLabelName(label));
         if (target != null) {
           target.resolveGotos(forest, current);
         }
@@ -3572,7 +3598,7 @@
   void handleBreakStatement(
       bool hasTarget, Token breakKeyword, Token endToken) {
     debugEvent("BreakStatement");
-    var target = breakTarget;
+    JumpTarget<Statement> target = breakTarget;
     Identifier identifier;
     String name;
     if (hasTarget) {
@@ -3585,7 +3611,7 @@
           deprecated_buildCompileTimeErrorStatement(
               "No target of break.", breakKeyword.charOffset));
     } else if (target == null ||
-        target is! JumpTarget ||
+        target is! JumpTarget<Statement> ||
         !target.isBreakTarget) {
       push(compileTimeErrorInLoopOrSwitch =
           deprecated_buildCompileTimeErrorStatement(
@@ -3607,20 +3633,21 @@
   void handleContinueStatement(
       bool hasTarget, Token continueKeyword, Token endToken) {
     debugEvent("ContinueStatement");
-    var target = continueTarget;
+    JumpTarget<Statement> target = continueTarget;
     Identifier identifier;
     String name;
     if (hasTarget) {
       identifier = pop();
       name = identifier.name;
-      target = scope.lookupLabel(identifier.name);
-      if (target != null && target is! JumpTarget) {
+      Declaration namedTarget = scope.lookupLabel(identifier.name);
+      if (namedTarget != null && namedTarget is! JumpTarget<Statement>) {
         push(compileTimeErrorInLoopOrSwitch =
             deprecated_buildCompileTimeErrorStatement(
                 "Target of continue must be a label.",
                 continueKeyword.charOffset));
         return;
       }
+      target = namedTarget;
       if (target == null) {
         if (switchScope == null) {
           push(deprecated_buildCompileTimeErrorStatement(
@@ -3632,10 +3659,9 @@
       }
       if (target.isGotoTarget &&
           target.functionNestingLevel == functionNestingLevel) {
-        ContinueSwitchStatement statement =
-            new ShadowContinueSwitchStatement(null)
-              ..fileOffset = continueKeyword.charOffset;
-        target.addGoto(statement);
+        ContinueSwitchStatement statement = new ContinueSwitchJudgment(null)
+          ..fileOffset = continueKeyword.charOffset;
+        target.addGoto(toStatement(statement));
         push(statement);
         return;
       }
@@ -3680,8 +3706,8 @@
     // TODO(dmitryas):  Move the resolution to the appropriate place once
     // [ClassMemberParser] is not used to build the type variables for the local
     // function.  See the comment above.
-    for (UnresolvedType t in library.types) {
-      t.resolveIn(scope);
+    for (UnresolvedType<TypeBuilder> t in library.types) {
+      t.resolveIn(scope, library);
     }
     library.types.clear();
   }
@@ -3708,6 +3734,7 @@
     KernelTypeVariableBuilder variable;
     Object inScope = scopeLookup(scope, name.name, token);
     if (inScope is TypeUseGenerator<Expression, Statement, Arguments>) {
+      _typeInferrer.storeTypeUse(inScope);
       variable = inScope.declaration;
     } else {
       // Something went wrong when pre-parsing the type variables.
@@ -3717,7 +3744,8 @@
     }
     variable.parameter.bound = bound;
     if (annotations != null) {
-      _typeInferrer.inferMetadata(this, toKernelExpressionList(annotations));
+      _typeInferrer.inferMetadata(
+          this, factory, toKernelExpressionList(annotations));
       for (Expression annotation in annotations) {
         variable.parameter.addAnnotation(toKernelExpression(annotation));
       }
@@ -3741,8 +3769,8 @@
             library.loader.target.objectClassBuilder);
         for (int i = 0; i < typeVariables.length; ++i) {
           typeVariables[i].defaultType = calculatedBounds[i];
-          typeVariables[i].defaultType.resolveIn(
-              scope, typeVariables[i].charOffset, typeVariables[i].fileUri);
+          typeVariables[i].defaultType.resolveIn(scope,
+              typeVariables[i].charOffset, typeVariables[i].fileUri, library);
           typeVariables[i].finish(
               library,
               library.loader.target.objectClassBuilder,
@@ -3761,7 +3789,8 @@
     push(typeVariables ?? NullValue.TypeVariables);
   }
 
-  List<TypeParameter> typeVariableBuildersToKernel(List typeVariableBuilders) {
+  List<TypeParameter> typeVariableBuildersToKernel(
+      List<Object> typeVariableBuilders) {
     if (typeVariableBuilders == null) return null;
     List<TypeParameter> typeParameters = new List<TypeParameter>.filled(
         typeVariableBuilders.length, null,
@@ -3832,7 +3861,7 @@
       {List<LocatedMessage> context}) {
     // TODO(askesc): Produce explicit error expression wrapping the original.
     // See [issue 29717](https://github.com/dart-lang/sdk/issues/29717)
-    return toExpression(new Let(
+    return toExpression(new ShadowSyntheticExpression(new Let(
         new VariableDeclaration.forValue(toKernelExpression(
             buildCompileTimeError(
                 message.messageObject, message.charOffset, message.length,
@@ -3844,7 +3873,7 @@
             toKernelExpression(storeOffset(
                 forest.literalNull(null), forest.readOffset(expression))))
           ..fileOffset = forest.readOffset(expression))
-      ..fileOffset = forest.readOffset(expression));
+      ..fileOffset = forest.readOffset(expression)));
   }
 
   Expression buildFallThroughError(int charOffset) {
@@ -4143,7 +4172,7 @@
       }
 
       receiver = toExpression(
-          new ShadowSuperPropertyGet(name, target)..fileOffset = offset);
+          new SuperPropertyGetJudgment(name, target)..fileOffset = offset);
       return toExpression(new ShadowMethodInvocation(
           toKernelExpression(receiver),
           callName,
@@ -4210,13 +4239,14 @@
 
   @override
   StaticGet makeStaticGet(Member readTarget, Token token) {
-    return new ShadowStaticGet(readTarget)..fileOffset = offsetForToken(token);
+    return new StaticGetJudgment(readTarget)
+      ..fileOffset = offsetForToken(token);
   }
 
   @override
   Expression wrapInDeferredCheck(
       Expression expression, KernelPrefixBuilder prefix, int charOffset) {
-    var check = new VariableDeclaration.forValue(
+    Object check = new VariableDeclaration.forValue(
         toKernelExpression(forest.checkLibraryIsLoaded(prefix.dependency)))
       ..fileOffset = charOffset;
     return toExpression(
@@ -4226,33 +4256,33 @@
   // TODO(ahe): Remove this method once Forest API is complete.
   @override
   T storeOffset<T>(T object, int offset) {
-    TreeNode node = object as dynamic;
+    TreeNode node = unchecked(object);
     node.fileOffset = offset;
     return object;
   }
 
   // TODO(ahe): Remove this method once Forest API is complete.
   kernel.Expression toKernelExpression(Expression expression) {
-    return expression as dynamic;
+    return unchecked(expression);
   }
 
   // TODO(ahe): Remove this method once Forest API is complete.
   Expression toExpression(kernel.Expression expression) {
-    return expression as dynamic;
+    return unchecked(expression);
   }
 
   List<kernel.Expression> toKernelExpressionList(List<Expression> expressions) {
-    return expressions as dynamic;
+    return unchecked(expressions);
   }
 
   // TODO(ahe): Remove this method once Forest API is complete.
   kernel.Statement toKernelStatement(Statement statement) {
-    return statement as dynamic;
+    return unchecked(statement);
   }
 
   // TODO(ahe): Remove this method once Forest API is complete.
   Statement toStatement(kernel.Statement statement) {
-    return statement as dynamic;
+    return unchecked(statement);
   }
 
   /// TODO(ahe): This method is temporarily implemented by subclasses. Once type
@@ -4338,7 +4368,7 @@
   }
 
   void resolveBreaks(
-      Forest<dynamic, Statement, dynamic, dynamic> forest, Statement target) {
+      Forest<Object, Statement, Object, Object> forest, Statement target) {
     assert(isBreakTarget);
     for (Statement user in users) {
       forest.resolveBreak(target, user);
@@ -4347,7 +4377,7 @@
   }
 
   void resolveContinues(
-      Forest<dynamic, Statement, dynamic, dynamic> forest, Statement target) {
+      Forest<Object, Statement, Object, Object> forest, Statement target) {
     assert(isContinueTarget);
     for (Statement user in users) {
       forest.resolveContinue(target, user);
@@ -4356,7 +4386,7 @@
   }
 
   void resolveGotos(
-      Forest<dynamic, Statement, dynamic, dynamic> forest, Object target) {
+      Forest<Object, Statement, Object, Object> forest, Object target) {
     assert(isGotoTarget);
     for (Statement user in users) {
       forest.resolveContinueInSwitch(target, user);
@@ -4375,9 +4405,9 @@
   @override
   final MemberBuilder parent;
 
-  final JumpTarget breakTarget;
+  final JumpTarget<Statement> breakTarget;
 
-  final JumpTarget continueTarget;
+  final JumpTarget<Statement> continueTarget;
 
   final int functionNestingLevel;
 
@@ -4419,17 +4449,17 @@
   }
 
   void resolveBreaks(
-      Forest<dynamic, Statement, dynamic, dynamic> forest, Statement target) {
+      Forest<Object, Statement, Object, Object> forest, Statement target) {
     breakTarget.resolveBreaks(forest, target);
   }
 
   void resolveContinues(
-      Forest<dynamic, Statement, dynamic, dynamic> forest, Statement target) {
+      Forest<Object, Statement, Object, Object> forest, Statement target) {
     continueTarget.resolveContinues(forest, target);
   }
 
   void resolveGotos(
-      Forest<dynamic, Statement, dynamic, dynamic> forest, Object target) {
+      Forest<Object, Statement, Object, Object> forest, Object target) {
     unsupported("resolveGotos", charOffset, fileUri);
   }
 
@@ -4497,7 +4527,7 @@
   }
 
   Scope computeFormalParameterScope(Scope parent, Declaration declaration,
-      ExpressionGeneratorHelper<dynamic, dynamic, Arguments> helper) {
+      ExpressionGeneratorHelper<Expression, Statement, Arguments> helper) {
     if (required.length == 0 && optional == null) return parent;
     Map<String, Declaration> local = <String, Declaration>{};
 
@@ -4553,7 +4583,7 @@
     return node.fullNameForErrors;
   } else if (node is ThisAccessGenerator) {
     return node.isSuper ? "super" : "this";
-  } else if (node is Generator) {
+  } else if (node is Generator<Object, Object, Object>) {
     return node.plainNameForRead;
   } else {
     return unhandled("${node.runtimeType}", "getNodeName", -1, null);
@@ -4580,3 +4610,6 @@
         asyncToken.charOffset, null);
   }
 }
+
+// TODO(ahe): Remove this method when all AST nodes have moved to [Forest].
+dynamic unchecked(Object o) => o;
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
index a7228a9..24aedf5 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -15,6 +15,7 @@
         messageInvalidInitializer,
         templateDeferredTypeAnnotation,
         templateIntegerLiteralIsOutOfRange,
+        templateMissingExplicitTypeArguments,
         templateNotAType,
         templateUnresolvedPrefixInTypeAnnotation;
 
@@ -602,6 +603,10 @@
 
   TypeDeclarationBuilder get declaration;
 
+  /// The offset at which the [declaration] is referenced by this generator,
+  /// or `-1` if the reference is implicit.
+  int get declarationReferenceOffset;
+
   @override
   String get debugName => "TypeUseGenerator";
 
@@ -632,6 +637,12 @@
         // as a recovery node once the IR can represent it (Issue #29840).
         arguments = null;
       }
+    } else if (declaration.typeVariablesCount != 0) {
+      helper.addProblem(
+          templateMissingExplicitTypeArguments
+              .withArguments(declaration.typeVariablesCount),
+          offsetForToken(token),
+          lengthForToken(token));
     }
 
     DartType type;
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
index 5351b10..3589b1c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
@@ -22,7 +22,7 @@
 
 import 'forest.dart' show Forest;
 
-import 'kernel_builder.dart' show PrefixBuilder;
+import 'kernel_builder.dart' show KernelTypeBuilder, PrefixBuilder;
 
 import 'kernel_ast_api.dart'
     show
@@ -130,7 +130,7 @@
       Member interfaceTarget});
 
   Expression buildConstructorInvocation(
-      TypeDeclarationBuilder type,
+      TypeDeclarationBuilder<KernelTypeBuilder, DartType> type,
       Token nameToken,
       Arguments arguments,
       String name,
diff --git a/pkg/front_end/lib/src/fasta/kernel/factory.dart b/pkg/front_end/lib/src/fasta/kernel/factory.dart
new file mode 100644
index 0000000..0300a2a
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/kernel/factory.dart
@@ -0,0 +1,345 @@
+// Copyright (c) 2018, 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:front_end/src/scanner/token.dart' show Token;
+
+import 'package:kernel/ast.dart' show Catch, DartType, FunctionType, Node;
+
+import 'package:kernel/type_algebra.dart' show Substitution;
+
+import 'kernel_shadow_ast.dart'
+    show ExpressionJudgment, InitializerJudgment, StatementJudgment;
+
+/// Abstract base class for factories that can construct trees of expressions,
+/// statements, initializers, and literal types based on tokens, inferred types,
+/// and invocation targets.
+abstract class Factory<Expression, Statement, Initializer, Type> {
+  Expression asExpression(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      Expression expression,
+      Token asOperator,
+      Type literalType,
+      DartType inferredType);
+
+  Initializer assertInitializer(
+      InitializerJudgment judgment,
+      int fileOffset,
+      Token assertKeyword,
+      Token leftParenthesis,
+      Expression condition,
+      Token comma,
+      Expression message,
+      Token rightParenthesis);
+
+  Statement assertStatement(
+      StatementJudgment judgment,
+      int fileOffset,
+      Token assertKeyword,
+      Token leftParenthesis,
+      Expression condition,
+      Token comma,
+      Expression message,
+      Token rightParenthesis,
+      Token semicolon);
+
+  Expression awaitExpression(ExpressionJudgment judgment, int fileOffset,
+      Token awaitKeyword, Expression expression, DartType inferredType);
+
+  Statement block(StatementJudgment judgment, int fileOffset, Token leftBracket,
+      List<Statement> statements, Token rightBracket);
+
+  Expression boolLiteral(ExpressionJudgment judgment, int fileOffset,
+      Token literal, bool value, DartType inferredType);
+
+  Statement breakStatement(StatementJudgment judgment, int fileOffset,
+      Token breakKeyword, Expression label, Token semicolon);
+
+  Expression cascadeExpression(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType);
+
+  Object catchStatement(
+      Catch judgment,
+      int fileOffset,
+      Token onKeyword,
+      Type type,
+      Token catchKeyword,
+      Token leftParenthesis,
+      Token exceptionParameter,
+      Token comma,
+      Token stackTraceParameter,
+      Token rightParenthesis,
+      Statement body,
+      DartType guardType,
+      int exceptionOffset,
+      DartType exceptionType,
+      int stackTraceOffset,
+      DartType stackTraceType);
+
+  Expression conditionalExpression(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      Expression condition,
+      Token question,
+      Expression thenExpression,
+      Token colon,
+      Expression elseExpression,
+      DartType inferredType);
+
+  Expression constructorInvocation(ExpressionJudgment judgment, int fileOffset,
+      Node expressionTarget, DartType inferredType);
+
+  Statement continueStatement(StatementJudgment judgment, int fileOffset,
+      Token continueKeyword, Expression label, Token semicolon);
+
+  Statement continueSwitchStatement(StatementJudgment judgment, int fileOffset,
+      Token continueKeyword, Expression label, Token semicolon);
+
+  Expression deferredCheck(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType);
+
+  Statement doStatement(
+      StatementJudgment judgment,
+      int fileOffset,
+      Token doKeyword,
+      Statement body,
+      Token whileKeyword,
+      Token leftParenthesis,
+      Expression condition,
+      Token rightParenthesis,
+      Token semicolon);
+
+  Expression doubleLiteral(ExpressionJudgment judgment, int fileOffset,
+      Token literal, double value, DartType inferredType);
+
+  Statement expressionStatement(StatementJudgment judgment, int fileOffset,
+      Expression expression, Token semicolon);
+
+  Initializer fieldInitializer(
+      InitializerJudgment judgment, int fileOffset, Node initializerField);
+
+  Statement forInStatement(
+      StatementJudgment judgment,
+      int fileOffset,
+      int variableOffset,
+      DartType variableType,
+      int writeOffset,
+      DartType writeVariableType,
+      int writeVariableDeclarationOffset,
+      Node writeTarget);
+
+  Statement forStatement(StatementJudgment judgment, int fileOffset);
+
+  Statement functionDeclaration(
+      StatementJudgment judgment, int fileOffset, FunctionType inferredType);
+
+  Expression functionExpression(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType);
+
+  Expression ifNull(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      Expression leftOperand,
+      Token operator,
+      Expression rightOperand,
+      DartType inferredType);
+
+  Statement ifStatement(
+      StatementJudgment judgment,
+      int fileOffset,
+      Token ifKeyword,
+      Token leftParenthesis,
+      Expression condition,
+      Token rightParenthesis,
+      Statement thenStatement,
+      Token elseKeyword,
+      Statement elseStatement);
+
+  Expression indexAssign(ExpressionJudgment judgment, int fileOffset,
+      Node writeMember, Node combiner, DartType inferredType);
+
+  Expression intLiteral(ExpressionJudgment judgment, int fileOffset,
+      Token literal, num value, DartType inferredType);
+
+  Initializer invalidInitializer(InitializerJudgment judgment, int fileOffset);
+
+  Expression isExpression(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      Expression expression,
+      Token isOperator,
+      Type literalType,
+      DartType testedType,
+      DartType inferredType);
+
+  Expression isNotExpression(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      Expression expression,
+      Token isOperator,
+      Token notOperator,
+      Type literalType,
+      DartType testedType,
+      DartType inferredType);
+
+  Statement labeledStatement(StatementJudgment judgment, int fileOffset);
+
+  Expression listLiteral(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType);
+
+  Expression logicalExpression(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      Expression leftOperand,
+      Token operator,
+      Expression rightOperand,
+      DartType inferredType);
+
+  Expression mapLiteral(
+      ExpressionJudgment judgment, int fileOffset, DartType typeContext);
+
+  Expression methodInvocation(
+      ExpressionJudgment judgment,
+      int resultOffset,
+      List<DartType> argumentsTypes,
+      bool isImplicitCall,
+      Node interfaceMember,
+      FunctionType calleeType,
+      Substitution substitution,
+      DartType inferredType);
+
+  Expression methodInvocationCall(
+      ExpressionJudgment judgment,
+      int resultOffset,
+      List<DartType> argumentsTypes,
+      bool isImplicitCall,
+      FunctionType calleeType,
+      Substitution substitution,
+      DartType inferredType);
+
+  Expression namedFunctionExpression(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType);
+
+  Expression not(ExpressionJudgment judgment, int fileOffset, Token operator,
+      Expression operand, DartType inferredType);
+
+  Expression nullLiteral(ExpressionJudgment judgment, int fileOffset,
+      Token literal, bool isSynthetic, DartType inferredType);
+
+  Expression propertyAssign(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      Node writeMember,
+      DartType writeContext,
+      Node combiner,
+      DartType inferredType);
+
+  Expression propertyGet(ExpressionJudgment judgment, int fileOffset,
+      Node member, DartType inferredType);
+
+  Expression propertyGetCall(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType);
+
+  Expression propertySet(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType);
+
+  Initializer redirectingInitializer(
+      InitializerJudgment judgment, int fileOffset, Node initializerTarget);
+
+  Expression rethrow_(ExpressionJudgment judgment, int fileOffset,
+      Token rethrowKeyword, DartType inferredType);
+
+  Statement returnStatement(StatementJudgment judgment, int fileOffset,
+      Token returnKeyword, Expression expression, Token semicolon);
+
+  Expression staticAssign(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      Node writeMember,
+      DartType writeContext,
+      Node combiner,
+      DartType inferredType);
+
+  Expression staticGet(ExpressionJudgment judgment, int fileOffset,
+      Node expressionTarget, DartType inferredType);
+
+  Expression staticInvocation(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      Node expressionTarget,
+      List<DartType> expressionArgumentsTypes,
+      FunctionType calleeType,
+      Substitution substitution,
+      DartType inferredType);
+
+  Expression stringConcatenation(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType);
+
+  Expression stringLiteral(ExpressionJudgment judgment, int fileOffset,
+      Token literal, String value, DartType inferredType);
+
+  Initializer superInitializer(InitializerJudgment judgment, int fileOffset);
+
+  Statement switchStatement(StatementJudgment judgment, int fileOffset);
+
+  Expression symbolLiteral(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      Token poundSign,
+      List<Token> components,
+      String value,
+      DartType inferredType);
+
+  Expression thisExpression(ExpressionJudgment judgment, int fileOffset,
+      Token thisKeyword, DartType inferredType);
+
+  Expression throw_(ExpressionJudgment judgment, int fileOffset,
+      Token throwKeyword, Expression expression, DartType inferredType);
+
+  Statement tryCatch(StatementJudgment judgment, int fileOffset);
+
+  Statement tryFinally(StatementJudgment judgment, int fileOffset);
+
+  Expression typeLiteral(ExpressionJudgment judgment, int fileOffset,
+      Node expressionType, DartType inferredType);
+
+  Expression variableAssign(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      DartType writeContext,
+      int writeVariableDeclarationOffset,
+      Node combiner,
+      DartType inferredType);
+
+  Statement variableDeclaration(StatementJudgment judgment, int fileOffset,
+      DartType statementType, DartType inferredType);
+
+  Expression variableGet(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      bool isInCascade,
+      int expressionVariableDeclarationOffset,
+      DartType inferredType);
+
+  Expression variableSet(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType);
+
+  Statement whileStatement(
+      StatementJudgment judgment,
+      int fileOffset,
+      Token whileKeyword,
+      Token leftParenthesis,
+      Expression condition,
+      Token rightParenthesis,
+      Statement body);
+
+  Statement yieldStatement(StatementJudgment judgment, int fileOffset,
+      Token yieldKeyword, Token star, Expression expression, Token semicolon);
+
+  /// TODO(paulberry): this isn't really shaped properly for a factory class.
+  void storePrefixInfo(int fileOffset, int prefixImportIndex);
+
+  /// TODO(paulberry): this isn't really shaped properly for a factory class.
+  void storeClassReference(int fileOffset, Node reference, DartType rawType);
+}
diff --git a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
index 1700191..ee066cd 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
@@ -66,44 +66,46 @@
 
 import 'kernel_shadow_ast.dart'
     show
-        ShadowArguments,
-        ShadowAsExpression,
-        ShadowAssertInitializer,
-        ShadowAssertStatement,
-        ShadowAwaitExpression,
-        ShadowBlock,
-        ShadowBoolLiteral,
-        ShadowBreakStatement,
-        ShadowCheckLibraryIsLoaded,
-        ShadowConditionalExpression,
-        ShadowDoStatement,
-        ShadowDoubleLiteral,
+        ArgumentsJudgment,
+        AsJudgment,
+        AssertInitializerJudgment,
+        AssertStatementJudgment,
+        AwaitJudgment,
+        BlockJudgment,
+        BoolJudgment,
+        BreakJudgment,
+        CheckLibraryIsLoadedJudgment,
+        ConditionalJudgment,
+        ContinueJudgment,
+        DoJudgment,
+        DoubleJudgment,
+        EmptyStatementJudgment,
+        IntJudgment,
+        IsJudgment,
+        IsNotJudgment,
+        LabeledStatementJudgment,
+        LoadLibraryJudgment,
+        NullJudgment,
         ShadowExpressionStatement,
         ShadowForStatement,
-        ShadowIfStatement,
-        ShadowIntLiteral,
-        ShadowIsExpression,
-        ShadowIsNotExpression,
-        ShadowLabeledStatement,
+        IfJudgment,
         ShadowListLiteral,
-        ShadowLoadLibrary,
         ShadowLogicalExpression,
         ShadowMapLiteral,
         ShadowNot,
-        ShadowNullLiteral,
         ShadowRethrow,
-        ShadowReturnStatement,
+        ReturnJudgment,
         ShadowStringConcatenation,
         ShadowStringLiteral,
         ShadowSymbolLiteral,
         ShadowSyntheticExpression,
-        ShadowThisExpression,
-        ShadowThrow,
         ShadowTryCatch,
         ShadowTryFinally,
-        ShadowTypeLiteral,
         ShadowWhileStatement,
-        ShadowYieldStatement;
+        YieldJudgment,
+        ThisJudgment,
+        ThrowJudgment,
+        TypeLiteralJudgment;
 
 import 'forest.dart'
     show
@@ -120,14 +122,14 @@
   const Fangorn();
 
   @override
-  ShadowArguments arguments(List<Expression> positional, Token token,
+  ArgumentsJudgment arguments(List<Expression> positional, Token token,
       {List<DartType> types, List<NamedExpression> named}) {
-    return new ShadowArguments(positional, types: types, named: named)
+    return new ArgumentsJudgment(positional, types: types, named: named)
       ..fileOffset = offsetForToken(token);
   }
 
   @override
-  ShadowArguments argumentsEmpty(Token token) {
+  ArgumentsJudgment argumentsEmpty(Token token) {
     return arguments(<Expression>[], token);
   }
 
@@ -148,25 +150,25 @@
 
   @override
   void argumentsSetTypeArguments(Arguments arguments, List<DartType> types) {
-    ShadowArguments.setNonInferrableArgumentTypes(arguments, types);
+    ArgumentsJudgment.setNonInferrableArgumentTypes(arguments, types);
   }
 
   @override
   ShadowStringLiteral asLiteralString(Expression value) => value;
 
   @override
-  ShadowBoolLiteral literalBool(bool value, Token token) {
-    return new ShadowBoolLiteral(value)..fileOffset = offsetForToken(token);
+  BoolJudgment literalBool(bool value, Token token) {
+    return new BoolJudgment(value)..fileOffset = offsetForToken(token);
   }
 
   @override
-  ShadowDoubleLiteral literalDouble(double value, Token token) {
-    return new ShadowDoubleLiteral(value)..fileOffset = offsetForToken(token);
+  DoubleJudgment literalDouble(double value, Token token) {
+    return new DoubleJudgment(value)..fileOffset = offsetForToken(token);
   }
 
   @override
-  ShadowIntLiteral literalInt(int value, Token token) {
-    return new ShadowIntLiteral(value)..fileOffset = offsetForToken(token);
+  IntJudgment literalInt(int value, Token token) {
+    return new IntJudgment(value)..fileOffset = offsetForToken(token);
   }
 
   @override
@@ -203,8 +205,8 @@
   }
 
   @override
-  ShadowNullLiteral literalNull(Token token) {
-    return new ShadowNullLiteral()..fileOffset = offsetForToken(token);
+  NullJudgment literalNull(Token token) {
+    return new NullJudgment()..fileOffset = offsetForToken(token);
   }
 
   @override
@@ -223,8 +225,8 @@
   }
 
   @override
-  ShadowTypeLiteral literalType(DartType type, Token token) {
-    return new ShadowTypeLiteral(type)..fileOffset = offsetForToken(token);
+  TypeLiteralJudgment literalType(DartType type, Token token) {
+    return new TypeLiteralJudgment(type)..fileOffset = offsetForToken(token);
   }
 
   @override
@@ -248,18 +250,17 @@
 
   @override
   Expression loadLibrary(LibraryDependency dependency) {
-    return new ShadowLoadLibrary(dependency);
+    return new LoadLibraryJudgment(dependency);
   }
 
   @override
   Expression checkLibraryIsLoaded(LibraryDependency dependency) {
-    return new ShadowCheckLibraryIsLoaded(dependency);
+    return new CheckLibraryIsLoadedJudgment(dependency);
   }
 
   @override
   Expression asExpression(Expression expression, covariant type, Token token) {
-    return new ShadowAsExpression(expression, type)
-      ..fileOffset = offsetForToken(token);
+    return new AsJudgment(expression, type)..fileOffset = offsetForToken(token);
   }
 
   @override
@@ -269,7 +270,7 @@
       Expression condition,
       Token comma,
       Expression message) {
-    return new ShadowAssertInitializer(assertStatement(
+    return new AssertInitializerJudgment(assertStatement(
         assertKeyword, leftParenthesis, condition, comma, message, null));
   }
 
@@ -309,7 +310,7 @@
         endOffset = conditionLastToken.offset + conditionLastToken.length;
       }
     }
-    return new ShadowAssertStatement(condition,
+    return new AssertStatementJudgment(condition,
         conditionStartOffset: startOffset,
         conditionEndOffset: endOffset,
         message: message);
@@ -317,8 +318,7 @@
 
   @override
   Expression awaitExpression(Expression operand, Token token) {
-    return new ShadowAwaitExpression(operand)
-      ..fileOffset = offsetForToken(token);
+    return new AwaitJudgment(operand)..fileOffset = offsetForToken(token);
   }
 
   @override
@@ -334,13 +334,13 @@
         copy.add(statement);
       }
     }
-    return new ShadowBlock(copy ?? statements)
+    return new BlockJudgment(copy ?? statements)
       ..fileOffset = offsetForToken(openBrace);
   }
 
   @override
   Statement breakStatement(Token breakKeyword, Object label, Token semicolon) {
-    return new ShadowBreakStatement(null)..fileOffset = breakKeyword.charOffset;
+    return new BreakJudgment(null)..fileOffset = breakKeyword.charOffset;
   }
 
   @override
@@ -361,23 +361,20 @@
   @override
   Expression conditionalExpression(Expression condition, Token question,
       Expression thenExpression, Token colon, Expression elseExpression) {
-    return new ShadowConditionalExpression(
-        condition, thenExpression, elseExpression)
+    return new ConditionalJudgment(condition, thenExpression, elseExpression)
       ..fileOffset = offsetForToken(question);
   }
 
   @override
   Statement continueStatement(
       Token continueKeyword, Object label, Token semicolon) {
-    return new ShadowBreakStatement(null)
-      ..fileOffset = continueKeyword.charOffset;
+    return new ContinueJudgment(null)..fileOffset = continueKeyword.charOffset;
   }
 
   @override
   Statement doStatement(Token doKeyword, Statement body, Token whileKeyword,
       Expression condition, Token semicolon) {
-    return new ShadowDoStatement(body, condition)
-      ..fileOffset = doKeyword.charOffset;
+    return new DoJudgment(body, condition)..fileOffset = doKeyword.charOffset;
   }
 
   Statement expressionStatement(Expression expression, Token semicolon) {
@@ -386,7 +383,7 @@
 
   @override
   Statement emptyStatement(Token semicolon) {
-    return new EmptyStatement();
+    return new EmptyStatementJudgment();
   }
 
   @override
@@ -408,7 +405,7 @@
   @override
   Statement ifStatement(Token ifKeyword, Expression condition,
       Statement thenStatement, Token elseKeyword, Statement elseStatement) {
-    return new ShadowIfStatement(condition, thenStatement, elseStatement)
+    return new IfJudgment(condition, thenStatement, elseStatement)
       ..fileOffset = ifKeyword.charOffset;
   }
 
@@ -417,9 +414,9 @@
       Expression operand, isOperator, Token notOperator, covariant type) {
     int offset = offsetForToken(isOperator);
     if (notOperator != null) {
-      return new ShadowIsNotExpression(operand, type, offset);
+      return new IsNotJudgment(operand, type, offset);
     }
-    return new ShadowIsExpression(operand, type)..fileOffset = offset;
+    return new IsJudgment(operand, type)..fileOffset = offset;
   }
 
   @override
@@ -460,7 +457,7 @@
   @override
   Statement returnStatement(
       Token returnKeyword, Expression expression, Token semicolon) {
-    return new ShadowReturnStatement(expression)
+    return new ReturnJudgment(expression)
       ..fileOffset = returnKeyword.charOffset;
   }
 
@@ -473,17 +470,17 @@
 
   @override
   Statement syntheticLabeledStatement(Statement statement) {
-    return new ShadowLabeledStatement(statement);
+    return new LabeledStatementJudgment(statement);
   }
 
   @override
   Expression thisExpression(Token token) {
-    return new ShadowThisExpression()..fileOffset = offsetForToken(token);
+    return new ThisJudgment()..fileOffset = offsetForToken(token);
   }
 
   @override
   Expression throwExpression(Token throwKeyword, Expression expression) {
-    return new ShadowThrow(expression)
+    return new ThrowJudgment(expression)
       ..fileOffset = offsetForToken(throwKeyword);
   }
 
@@ -515,10 +512,10 @@
   @override
   Statement wrapVariables(Statement statement) {
     if (statement is _VariablesDeclaration) {
-      return new ShadowBlock(statement.declarations)
+      return new BlockJudgment(statement.declarations)
         ..fileOffset = statement.fileOffset;
     } else if (statement is VariableDeclaration) {
-      return new ShadowBlock(<Statement>[statement])
+      return new BlockJudgment(<Statement>[statement])
         ..fileOffset = statement.fileOffset;
     } else {
       return statement;
@@ -535,7 +532,7 @@
   @override
   Statement yieldStatement(
       Token yieldKeyword, Token star, Expression expression, Token semicolon) {
-    return new ShadowYieldStatement(expression, isYieldStar: star != null)
+    return new YieldJudgment(expression, isYieldStar: star != null)
       ..fileOffset = yieldKeyword.charOffset;
   }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
index 33906b3..c331eb7 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
@@ -64,13 +64,13 @@
 
 export 'kernel_shadow_ast.dart'
     show
-        ShadowAssertInitializer,
-        ShadowAssertStatement,
-        ShadowBreakStatement,
+        AssertInitializerJudgment,
+        AssertStatementJudgment,
+        BreakJudgment,
         ShadowCascadeExpression,
         ShadowComplexAssignment,
         ShadowConstructorInvocation,
-        ShadowContinueSwitchStatement,
+        ContinueSwitchJudgment,
         ShadowDeferredCheck,
         ShadowExpressionStatement,
         ShadowFactoryConstructorInvocation,
@@ -79,30 +79,31 @@
         ShadowFunctionDeclaration,
         ShadowFunctionExpression,
         ShadowIfNullExpression,
-        ShadowIfStatement,
+        IfJudgment,
         ShadowIllegalAssignment,
         ShadowIndexAssign,
         ShadowInvalidInitializer,
-        ShadowLabeledStatement,
+        LabeledStatementJudgment,
         ShadowLogicalExpression,
         ShadowLoopAssignmentStatement,
         ShadowMethodInvocation,
         ShadowNamedFunctionExpression,
         ShadowNullAwareMethodInvocation,
-        ShadowNullAwarePropertyGet,
+        NullAwarePropertyGetJudgment,
         ShadowPropertyAssign,
-        ShadowPropertyGet,
+        PropertyGetJudgment,
         ShadowRedirectingInitializer,
-        ShadowReturnStatement,
+        ReturnJudgment,
         ShadowStaticAssignment,
-        ShadowStaticGet,
+        StaticGetJudgment,
         ShadowStaticInvocation,
         ShadowSuperInitializer,
         ShadowSuperMethodInvocation,
-        ShadowSuperPropertyGet,
+        SuperPropertyGetJudgment,
         ShadowSwitchStatement,
         ShadowSyntheticExpression,
-        ShadowVariableAssignment,
-        ShadowVariableDeclaration,
-        ShadowVariableGet,
-        ShadowYieldStatement;
+        VariableAssignmentJudgment,
+        VariableDeclarationJudgment,
+        VariableGetJudgment,
+        YieldJudgment,
+        NamedExpressionJudgment;
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
index 1cb2acc..930a322 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
@@ -385,13 +385,10 @@
     }
   }
 
-  // TODO(dmitryas): Find a better place for this routine.
-  static bool hasUserDefinedNoSuchMethod(
-      Class klass, ClassHierarchy hierarchy) {
+  bool hasUserDefinedNoSuchMethod(
+      Class klass, ClassHierarchy hierarchy, Class objectClass) {
     Member noSuchMethod = hierarchy.getDispatchTarget(klass, noSuchMethodName);
-    // `Object` doesn't have a superclass reference.
-    return noSuchMethod != null &&
-        noSuchMethod.enclosingClass.superclass != null;
+    return noSuchMethod != null && noSuchMethod.enclosingClass != objectClass;
   }
 
   void transformProcedureToNoSuchMethodForwarder(
@@ -435,59 +432,52 @@
     cloned.parent = cls;
   }
 
-  void addNoSuchMethodForwarders(
+  /// Adds noSuchMethod forwarding stubs to this class. Returns `true` if the
+  /// class was modified.
+  bool addNoSuchMethodForwarders(
       KernelTarget target, ClassHierarchy hierarchy) {
-    if (!hasUserDefinedNoSuchMethod(cls, hierarchy)) {
-      return;
+    if (cls.isAbstract ||
+        !hasUserDefinedNoSuchMethod(cls, hierarchy, target.objectClass)) {
+      return false;
     }
 
     Set<Name> existingForwardersNames = new Set<Name>();
     Set<Name> existingSetterForwardersNames = new Set<Name>();
-    if (cls.superclass != null &&
-        hasUserDefinedNoSuchMethod(cls.superclass, hierarchy)) {
-      List<Member> concrete = hierarchy.getDispatchTargets(cls.superclass);
-      for (Member member in hierarchy.getInterfaceMembers(cls.superclass)) {
+    Class leastConcreteSuperclass = cls.superclass;
+    while (
+        leastConcreteSuperclass != null && leastConcreteSuperclass.isAbstract) {
+      leastConcreteSuperclass = leastConcreteSuperclass.superclass;
+    }
+    if (leastConcreteSuperclass != null &&
+        hasUserDefinedNoSuchMethod(
+            leastConcreteSuperclass, hierarchy, target.objectClass)) {
+      List<Member> concrete =
+          hierarchy.getDispatchTargets(leastConcreteSuperclass);
+      for (Member member
+          in hierarchy.getInterfaceMembers(leastConcreteSuperclass)) {
         if (ClassHierarchy.findMemberByName(concrete, member.name) == null) {
           existingForwardersNames.add(member.name);
         }
       }
 
       List<Member> concreteSetters =
-          hierarchy.getDispatchTargets(cls.superclass, setters: true);
-      for (Member member
-          in hierarchy.getInterfaceMembers(cls.superclass, setters: true)) {
+          hierarchy.getDispatchTargets(leastConcreteSuperclass, setters: true);
+      for (Member member in hierarchy
+          .getInterfaceMembers(leastConcreteSuperclass, setters: true)) {
         if (ClassHierarchy.findMemberByName(concreteSetters, member.name) ==
             null) {
           existingSetterForwardersNames.add(member.name);
         }
       }
     }
-    if (cls.mixedInClass != null &&
-        hasUserDefinedNoSuchMethod(cls.mixedInClass, hierarchy)) {
-      List<Member> concrete = hierarchy.getDispatchTargets(cls.mixedInClass);
-      for (Member member in hierarchy.getInterfaceMembers(cls.mixedInClass)) {
-        if (ClassHierarchy.findMemberByName(concrete, member.name) == null) {
-          existingForwardersNames.add(member.name);
-        }
-      }
-
-      List<Member> concreteSetters =
-          hierarchy.getDispatchTargets(cls.superclass, setters: true);
-      for (Member member
-          in hierarchy.getInterfaceMembers(cls.superclass, setters: true)) {
-        if (ClassHierarchy.findMemberByName(concreteSetters, member.name) ==
-            null) {
-          existingSetterForwardersNames.add(member.name);
-        }
-      }
-    }
-
-    List<Member> concrete = hierarchy.getDispatchTargets(cls);
-    List<Member> declared = hierarchy.getDeclaredMembers(cls);
 
     Member noSuchMethod = ClassHierarchy.findMemberByName(
         hierarchy.getInterfaceMembers(cls), noSuchMethodName);
 
+    List<Member> concrete = hierarchy.getDispatchTargets(cls);
+    List<Member> declared = hierarchy.getDeclaredMembers(cls);
+
+    bool changed = false;
     for (Member member in hierarchy.getInterfaceMembers(cls)) {
       if (member is Procedure &&
           ClassHierarchy.findMemberByName(concrete, member.name) == null &&
@@ -500,6 +490,7 @@
               noSuchMethod, target, member, hierarchy);
         }
         existingForwardersNames.add(member.name);
+        changed = true;
       }
     }
 
@@ -521,8 +512,11 @@
               noSuchMethod, target, member, hierarchy);
         }
         existingSetterForwardersNames.add(member.name);
+        changed = true;
       }
     }
+
+    return changed;
   }
 
   Uri _getMemberUri(Member member) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart
index 5c4c3d9..0964665 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart
@@ -230,10 +230,12 @@
   @override
   Class build(KernelLibraryBuilder libraryBuilder, LibraryBuilder coreLibrary) {
     cls.isEnum = true;
-    intType.resolveIn(coreLibrary.scope, charOffset, fileUri);
-    stringType.resolveIn(coreLibrary.scope, charOffset, fileUri);
-    objectType.resolveIn(coreLibrary.scope, charOffset, fileUri);
-    listType.resolveIn(coreLibrary.scope, charOffset, fileUri);
+    intType.resolveIn(coreLibrary.scope, charOffset, fileUri, libraryBuilder);
+    stringType.resolveIn(
+        coreLibrary.scope, charOffset, fileUri, libraryBuilder);
+    objectType.resolveIn(
+        coreLibrary.scope, charOffset, fileUri, libraryBuilder);
+    listType.resolveIn(coreLibrary.scope, charOffset, fileUri, libraryBuilder);
 
     KernelFieldBuilder indexFieldBuilder = this["index"];
     Field indexField = indexFieldBuilder.build(libraryBuilder);
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
index de2683d..51f22e3 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
@@ -78,15 +78,16 @@
         ShadowIllegalAssignment,
         ShadowIndexAssign,
         ShadowMethodInvocation,
-        ShadowNullAwarePropertyGet,
+        NullAwarePropertyGetJudgment,
         ShadowPropertyAssign,
-        ShadowPropertyGet,
+        PropertyGetJudgment,
         ShadowStaticAssignment,
         ShadowSuperMethodInvocation,
-        ShadowSuperPropertyGet,
-        ShadowVariableAssignment,
-        ShadowVariableDeclaration,
-        ShadowVariableGet,
+        SuperPropertyGetJudgment,
+        VariableAssignmentJudgment,
+        ShadowSyntheticExpression,
+        VariableDeclarationJudgment,
+        VariableGetJudgment,
         StaticSet,
         SuperMethodInvocation,
         SuperPropertySet,
@@ -205,7 +206,7 @@
         offset: offset);
     complexAssignment?.combiner = combiner;
     complexAssignment?.isPostIncDec = true;
-    var dummy = new ShadowVariableDeclaration.forValue(
+    var dummy = new VariableDeclarationJudgment.forValue(
         _makeWrite(combiner, true, complexAssignment),
         helper.functionNestingLevel);
     return _finish(
@@ -278,7 +279,7 @@
     var fact = helper.typePromoter
         .getFactForAccess(variable, helper.functionNestingLevel);
     var scope = helper.typePromoter.currentScope;
-    var read = new ShadowVariableGet(variable, fact, scope)
+    var read = new VariableGetJudgment(variable, fact, scope)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.read = read;
     return read;
@@ -305,7 +306,7 @@
 
   @override
   ShadowComplexAssignment startComplexAssignment(Expression rhs) =>
-      new ShadowVariableAssignment(rhs);
+      new VariableAssignmentJudgment(rhs);
 
   @override
   void printOn(StringSink sink) {
@@ -372,8 +373,9 @@
   }
 
   @override
-  Expression _makeSimpleRead() => new ShadowPropertyGet(receiver, name, getter)
-    ..fileOffset = offsetForToken(token);
+  Expression _makeSimpleRead() =>
+      new PropertyGetJudgment(receiver, name, getter)
+        ..fileOffset = offsetForToken(token);
 
   @override
   Expression _makeSimpleWrite(Expression value, bool voidContext,
@@ -386,7 +388,7 @@
 
   @override
   Expression _makeRead(ShadowComplexAssignment complexAssignment) {
-    var read = new ShadowPropertyGet(receiverAccess(), name, getter)
+    var read = new PropertyGetJudgment(receiverAccess(), name, getter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.read = read;
     return read;
@@ -432,8 +434,9 @@
     if (getter == null) {
       helper.warnUnresolvedGet(name, offsetForToken(token));
     }
-    var read = new ShadowPropertyGet(forest.thisExpression(token), name, getter)
-      ..fileOffset = offsetForToken(token);
+    var read =
+        new PropertyGetJudgment(forest.thisExpression(token), name, getter)
+          ..fileOffset = offsetForToken(token);
     complexAssignment?.read = read;
     return read;
   }
@@ -515,7 +518,7 @@
 
   @override
   Expression _makeRead(ShadowComplexAssignment complexAssignment) {
-    var read = new ShadowPropertyGet(receiverAccess(), name, getter)
+    var read = new PropertyGetJudgment(receiverAccess(), name, getter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.read = read;
     return read;
@@ -549,7 +552,7 @@
       kernelPropertyAssign.desugared = body;
       return kernelPropertyAssign;
     } else {
-      return new ShadowNullAwarePropertyGet(receiver, nullAwareGuard)
+      return new NullAwarePropertyGetJudgment(receiver, nullAwareGuard)
         ..fileOffset = offset;
     }
   }
@@ -606,7 +609,7 @@
       helper.warnUnresolvedGet(name, offsetForToken(token), isSuper: true);
     }
     // TODO(ahe): Use [DirectPropertyGet] when possible.
-    var read = new ShadowSuperPropertyGet(name, getter)
+    var read = new SuperPropertyGetJudgment(name, getter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.read = read;
     return read;
@@ -765,7 +768,7 @@
         interfaceTarget: setter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.write = write;
-    var dummy = new ShadowVariableDeclaration.forValue(
+    var dummy = new VariableDeclarationJudgment.forValue(
         write, helper.functionNestingLevel);
     return makeLet(
         valueVariable, makeLet(dummy, new VariableGet(valueVariable)));
@@ -1238,6 +1241,7 @@
 
   /// The offset at which the [declaration] is referenced by this generator,
   /// or `-1` if the reference is implicit.
+  @override
   final int declarationReferenceOffset;
 
   @override
@@ -1260,9 +1264,9 @@
         KernelInvalidTypeBuilder declaration = this.declaration;
         helper.addProblemErrorIfConst(
             declaration.message.messageObject, offset, token.length);
-        super.expression =
+        super.expression = new ShadowSyntheticExpression(
             new Throw(forest.literalString(declaration.message.message, token))
-              ..fileOffset = offset;
+              ..fileOffset = offset);
       } else {
         super.expression = forest.literalType(
             buildTypeWithBuiltArguments(null, nonInstanceAccessIsError: true),
@@ -1488,7 +1492,7 @@
 
   @override
   Expression buildSimpleRead() {
-    return new ShadowPropertyGet(receiver, name)
+    return new PropertyGetJudgment(receiver, name)
       ..fileOffset = offsetForToken(token);
   }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_factory.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_factory.dart
new file mode 100644
index 0000000..46e49f1
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_factory.dart
@@ -0,0 +1,547 @@
+// Copyright (c) 2018, 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:front_end/src/scanner/token.dart' show Token;
+
+import 'package:kernel/ast.dart'
+    show
+        Catch,
+        DartType,
+        Expression,
+        FunctionType,
+        Initializer,
+        Node,
+        Statement;
+
+import 'package:kernel/type_algebra.dart' show Substitution;
+
+import 'factory.dart' show Factory;
+
+import 'kernel_shadow_ast.dart'
+    show ExpressionJudgment, InitializerJudgment, StatementJudgment;
+
+/// Implementation of [Factory] that builds source code into a kernel
+/// representation.
+class KernelFactory
+    implements Factory<Expression, Statement, Initializer, void> {
+  @override
+  Expression asExpression(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      Expression expression,
+      Token asOperator,
+      void literalType,
+      DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Initializer assertInitializer(
+      InitializerJudgment judgment,
+      int fileOffset,
+      Token assertKeyword,
+      Token leftParenthesis,
+      Expression condition,
+      Token comma,
+      Expression message,
+      Token rightParenthesis) {
+    return judgment;
+  }
+
+  @override
+  Statement assertStatement(
+      StatementJudgment judgment,
+      int fileOffset,
+      Token assertKeyword,
+      Token leftParenthesis,
+      Expression condition,
+      Token comma,
+      Expression message,
+      Token rightParenthesis,
+      Token semicolon) {
+    return judgment;
+  }
+
+  @override
+  Expression awaitExpression(ExpressionJudgment judgment, int fileOffset,
+      Token awaitKeyword, Expression expression, DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Statement block(StatementJudgment judgment, int fileOffset, Token leftBracket,
+      List<Statement> statements, Token rightBracket) {
+    return judgment;
+  }
+
+  @override
+  Expression boolLiteral(ExpressionJudgment judgment, int fileOffset,
+      Token literal, bool value, DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Statement breakStatement(StatementJudgment judgment, int fileOffset,
+      Token breakKeyword, Expression label, Token semicolon) {
+    return judgment;
+  }
+
+  @override
+  Expression cascadeExpression(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Object catchStatement(
+      Catch judgment,
+      int fileOffset,
+      Token onKeyword,
+      void type,
+      Token catchKeyword,
+      Token leftParenthesis,
+      Token exceptionParameter,
+      Token comma,
+      Token stackTraceParameter,
+      Token rightParenthesis,
+      Statement body,
+      DartType guardType,
+      int exceptionOffset,
+      DartType exceptionType,
+      int stackTraceOffset,
+      DartType stackTraceType) {
+    return judgment;
+  }
+
+  @override
+  Expression conditionalExpression(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      Expression condition,
+      Token question,
+      Expression thenExpression,
+      Token colon,
+      Expression elseExpression,
+      DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Expression constructorInvocation(ExpressionJudgment judgment, int fileOffset,
+      Node expressionTarget, DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Statement continueStatement(StatementJudgment judgment, int fileOffset,
+      Token continueKeyword, Expression label, Token semicolon) {
+    return judgment;
+  }
+
+  @override
+  Statement continueSwitchStatement(StatementJudgment judgment, int fileOffset,
+      Token continueKeyword, Expression label, Token semicolon) {
+    return judgment;
+  }
+
+  @override
+  Expression deferredCheck(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Statement doStatement(
+      StatementJudgment judgment,
+      int fileOffset,
+      Token doKeyword,
+      Statement body,
+      Token whileKeyword,
+      Token leftParenthesis,
+      Expression condition,
+      Token rightParenthesis,
+      Token semicolon) {
+    return judgment;
+  }
+
+  @override
+  Expression doubleLiteral(ExpressionJudgment judgment, int fileOffset,
+      Token literal, double value, DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Statement expressionStatement(StatementJudgment judgment, int fileOffset,
+      Expression expression, Token semicolon) {
+    return judgment;
+  }
+
+  @override
+  Initializer fieldInitializer(
+      InitializerJudgment judgment, int fileOffset, Node initializerField) {
+    return judgment;
+  }
+
+  @override
+  Statement forInStatement(
+      StatementJudgment judgment,
+      int fileOffset,
+      int variableOffset,
+      DartType variableType,
+      int writeOffset,
+      DartType writeVariableType,
+      int writeVariableDeclarationOffset,
+      Node writeTarget) {
+    return judgment;
+  }
+
+  @override
+  Statement forStatement(StatementJudgment judgment, int fileOffset) {
+    return judgment;
+  }
+
+  @override
+  Statement functionDeclaration(
+      StatementJudgment judgment, int fileOffset, FunctionType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Expression functionExpression(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Expression ifNull(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      Expression leftOperand,
+      Token operator,
+      Expression rightOperand,
+      DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Statement ifStatement(
+      StatementJudgment judgment,
+      int fileOffset,
+      Token ifKeyword,
+      Token leftParenthesis,
+      Expression condition,
+      Token rightParenthesis,
+      Statement thenStatement,
+      Token elseKeyword,
+      Statement elseStatement) {
+    return judgment;
+  }
+
+  @override
+  Expression indexAssign(ExpressionJudgment judgment, int fileOffset,
+      Node writeMember, Node combiner, DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Expression intLiteral(ExpressionJudgment judgment, int fileOffset,
+      Token literal, num value, DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Initializer invalidInitializer(InitializerJudgment judgment, int fileOffset) {
+    return judgment;
+  }
+
+  @override
+  Expression isExpression(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      Expression expression,
+      Token isOperator,
+      void literalType,
+      DartType testedType,
+      DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Expression isNotExpression(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      Expression expression,
+      Token isOperator,
+      Token notOperator,
+      void literalType,
+      DartType testedType,
+      DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Statement labeledStatement(StatementJudgment judgment, int fileOffset) {
+    return judgment;
+  }
+
+  @override
+  Expression listLiteral(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Expression logicalExpression(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      Expression leftOperand,
+      Token operator,
+      Expression rightOperand,
+      DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Expression mapLiteral(
+      ExpressionJudgment judgment, int fileOffset, DartType typeContext) {
+    return judgment;
+  }
+
+  @override
+  Expression methodInvocation(
+      ExpressionJudgment judgment,
+      int resultOffset,
+      List<DartType> argumentsTypes,
+      bool isImplicitCall,
+      Node interfaceMember,
+      FunctionType calleeType,
+      Substitution substitution,
+      DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Expression methodInvocationCall(
+      ExpressionJudgment judgment,
+      int resultOffset,
+      List<DartType> argumentsTypes,
+      bool isImplicitCall,
+      FunctionType calleeType,
+      Substitution substitution,
+      DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Expression namedFunctionExpression(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Expression not(ExpressionJudgment judgment, int fileOffset, Token operator,
+      Expression operand, DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Expression nullLiteral(ExpressionJudgment judgment, int fileOffset,
+      Token literal, bool isSynthetic, DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Expression propertyAssign(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      Node writeMember,
+      DartType writeContext,
+      Node combiner,
+      DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Expression propertyGet(ExpressionJudgment judgment, int fileOffset,
+      Node member, DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Expression propertyGetCall(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Expression propertySet(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Initializer redirectingInitializer(
+      InitializerJudgment judgment, int fileOffset, Node initializerTarget) {
+    return judgment;
+  }
+
+  @override
+  Expression rethrow_(ExpressionJudgment judgment, int fileOffset,
+      Token rethrowKeyword, DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Statement returnStatement(StatementJudgment judgment, int fileOffset,
+      Token returnKeyword, Expression expression, Token semicolon) {
+    return judgment;
+  }
+
+  @override
+  Expression staticAssign(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      Node writeMember,
+      DartType writeContext,
+      Node combiner,
+      DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Expression staticGet(ExpressionJudgment judgment, int fileOffset,
+      Node expressionTarget, DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Expression staticInvocation(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      Node expressionTarget,
+      List<DartType> expressionArgumentsTypes,
+      FunctionType calleeType,
+      Substitution substitution,
+      DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  void storeClassReference(int fileOffset, Node reference, DartType rawType) {}
+
+  @override
+  void storePrefixInfo(int fileOffset, int prefixImportIndex) {}
+
+  @override
+  Expression stringConcatenation(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Expression stringLiteral(ExpressionJudgment judgment, int fileOffset,
+      Token literal, String value, DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Initializer superInitializer(InitializerJudgment judgment, int fileOffset) {
+    return judgment;
+  }
+
+  @override
+  Statement switchStatement(StatementJudgment judgment, int fileOffset) {
+    return judgment;
+  }
+
+  @override
+  Expression symbolLiteral(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      Token poundSign,
+      List<Token> components,
+      String value,
+      DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Expression thisExpression(ExpressionJudgment judgment, int fileOffset,
+      Token thisKeyword, DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Expression throw_(ExpressionJudgment judgment, int fileOffset,
+      Token throwKeyword, Expression expression, DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Statement tryCatch(StatementJudgment judgment, int fileOffset) {
+    return judgment;
+  }
+
+  @override
+  Statement tryFinally(StatementJudgment judgment, int fileOffset) {
+    return judgment;
+  }
+
+  @override
+  Expression typeLiteral(ExpressionJudgment judgment, int fileOffset,
+      Node expressionType, DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Expression variableAssign(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      DartType writeContext,
+      int writeVariableDeclarationOffset,
+      Node combiner,
+      DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Statement variableDeclaration(StatementJudgment judgment, int fileOffset,
+      DartType statementType, DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Expression variableGet(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      bool isInCascade,
+      int expressionVariableDeclarationOffset,
+      DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Expression variableSet(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType) {
+    return judgment;
+  }
+
+  @override
+  Statement whileStatement(
+      StatementJudgment judgment,
+      int fileOffset,
+      Token whileKeyword,
+      Token leftParenthesis,
+      Expression condition,
+      Token rightParenthesis,
+      Statement body) {
+    return judgment;
+  }
+
+  @override
+  Statement yieldStatement(StatementJudgment judgment, int fileOffset,
+      Token yieldKeyword, Token star, Expression expression, Token semicolon) {
+    return judgment;
+  }
+}
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart
index c74aa4b..519886d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart
@@ -5,7 +5,7 @@
 library fasta.kernel_field_builder;
 
 import 'package:kernel/ast.dart'
-    show DartType, Expression, Field, Name, NullLiteral;
+    show DartType, Expression, Field, Name, Node, NullLiteral;
 
 import '../../base/instrumentation.dart'
     show Instrumentation, InstrumentationValueForType;
@@ -16,6 +16,9 @@
 
 import '../problems.dart' show internalProblem;
 
+import '../type_inference/type_inference_listener.dart'
+    show TypeInferenceListener;
+
 import 'kernel_body_builder.dart' show KernelBodyBuilder;
 
 import 'kernel_builder.dart'
@@ -87,8 +90,10 @@
   @override
   void prepareTopLevelInference() {
     if (!isEligibleForInference) return;
+    var listener = new TypeInferenceListener<int, int, Node, int>();
     var typeInferrer = library.loader.typeInferenceEngine
-        .createTopLevelTypeInferrer(field.enclosingClass?.thisType, field);
+        .createTopLevelTypeInferrer(
+            listener, field.enclosingClass?.thisType, field);
     if (hasInitializer) {
       initializer = new KernelBodyBuilder.forField(this, typeInferrer)
           .parseFieldInitializer(initializerTokenForInference);
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_formal_parameter_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_formal_parameter_builder.dart
index 752a461..c6ca4d9 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_formal_parameter_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_formal_parameter_builder.dart
@@ -5,7 +5,7 @@
 library fasta.kernel_formal_parameter_builder;
 
 import 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart'
-    show ShadowVariableDeclaration;
+    show VariableDeclarationJudgment;
 
 import '../modifier.dart' show finalMask;
 
@@ -21,7 +21,7 @@
 
 class KernelFormalParameterBuilder
     extends FormalParameterBuilder<KernelTypeBuilder> {
-  ShadowVariableDeclaration declaration;
+  VariableDeclarationJudgment declaration;
   final int charOffset;
 
   KernelFormalParameterBuilder(
@@ -35,11 +35,11 @@
       : super(metadata, modifiers, type, name, hasThis, compilationUnit,
             charOffset);
 
-  ShadowVariableDeclaration get target => declaration;
+  VariableDeclarationJudgment get target => declaration;
 
-  ShadowVariableDeclaration build(SourceLibraryBuilder library) {
+  VariableDeclarationJudgment build(SourceLibraryBuilder library) {
     if (declaration == null) {
-      declaration = new ShadowVariableDeclaration(name, 0,
+      declaration = new VariableDeclarationJudgment(name, 0,
           type: type?.build(library),
           isFinal: isFinal,
           isConst: isConst,
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_prefix_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_prefix_builder.dart
index 5c8aa36..72b33f2 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_prefix_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_prefix_builder.dart
@@ -16,8 +16,8 @@
   LoadLibraryBuilder loadLibraryBuilder;
 
   KernelPrefixBuilder(String name, bool deferred, LibraryBuilder parent,
-      this.dependency, int charOffset)
-      : super(name, deferred, parent, charOffset) {
+      this.dependency, int charOffset, int importIndex)
+      : super(name, deferred, parent, charOffset, importIndex) {
     if (deferred) {
       loadLibraryBuilder =
           new LoadLibraryBuilder(parent, dependency, charOffset);
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart
index c78baa0..b09e032 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart
@@ -74,7 +74,8 @@
         TypeVariableBuilder,
         isRedirectingGenerativeConstructorImplementation;
 
-import 'kernel_shadow_ast.dart' show ShadowProcedure, ShadowVariableDeclaration;
+import 'kernel_shadow_ast.dart'
+    show ShadowProcedure, VariableDeclarationJudgment;
 
 import 'redirecting_factory_body.dart' show RedirectingFactoryBody;
 
@@ -169,7 +170,7 @@
       // Do this after building the parameters, since the diet listener
       // assumes that parameters are built, even if illegal in number.
       VariableDeclaration parameter =
-          new ShadowVariableDeclaration("#synthetic", 0);
+          new VariableDeclarationJudgment("#synthetic", 0);
       result.positionalParameters.clear();
       result.positionalParameters.add(parameter);
       parameter.parent = result;
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
index 36ec248..73dee2a 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
@@ -20,6 +20,8 @@
 
 import 'dart:core' hide MapEntry;
 
+import 'package:kernel/ast.dart' as kernel show Expression, Initializer;
+
 import 'package:kernel/ast.dart' hide InvalidExpression, InvalidInitializer;
 
 import 'package:kernel/clone.dart' show CloneVisitor;
@@ -59,6 +61,9 @@
 import '../type_inference/type_inferrer.dart'
     show TypeInferrer, TypeInferrerDisabled, TypeInferrerImpl;
 
+import '../type_inference/type_inference_listener.dart'
+    show TypeInferenceListener;
+
 import '../type_inference/type_promotion.dart'
     show TypePromoter, TypePromoterImpl, TypePromotionFact, TypePromotionScope;
 
@@ -71,6 +76,8 @@
 
 import 'body_builder.dart' show combineStatements;
 
+import 'factory.dart' show Factory;
+
 import 'kernel_expression_generator.dart' show makeLet;
 
 /// Indicates whether type inference involving conditional expressions should
@@ -94,7 +101,7 @@
 }
 
 List<DartType> getExplicitTypeArguments(Arguments arguments) {
-  if (arguments is ShadowArguments) {
+  if (arguments is ArgumentsJudgment) {
     return arguments._hasExplicitTypeArguments ? arguments.types : null;
   } else {
     // This code path should only be taken in situations where there are no
@@ -123,119 +130,191 @@
 }
 
 /// Concrete shadow object representing a set of invocation arguments.
-class ShadowArguments extends Arguments {
+class ArgumentsJudgment extends Arguments {
   bool _hasExplicitTypeArguments;
 
-  ShadowArguments(List<Expression> positional,
+  List<ExpressionJudgment> get positionalJudgments => positional.cast();
+
+  List<NamedExpressionJudgment> get namedJudgments => named.cast();
+
+  ArgumentsJudgment(List<Expression> positional,
       {List<DartType> types, List<NamedExpression> named})
       : _hasExplicitTypeArguments = types != null && types.isNotEmpty,
         super(positional, types: types, named: named);
 
   static void setNonInferrableArgumentTypes(
-      ShadowArguments arguments, List<DartType> types) {
+      ArgumentsJudgment arguments, List<DartType> types) {
     arguments.types.clear();
     arguments.types.addAll(types);
     arguments._hasExplicitTypeArguments = true;
   }
 
-  static void removeNonInferrableArgumentTypes(ShadowArguments arguments) {
+  static void removeNonInferrableArgumentTypes(ArgumentsJudgment arguments) {
     arguments.types.clear();
     arguments._hasExplicitTypeArguments = false;
   }
 }
 
 /// Shadow object for [AsExpression].
-class ShadowAsExpression extends AsExpression implements ShadowExpression {
-  ShadowAsExpression(Expression operand, DartType type) : super(operand, type);
+class AsJudgment extends AsExpression implements ExpressionJudgment {
+  DartType inferredType;
+
+  AsJudgment(Expression operand, DartType type) : super(operand, type);
+
+  ExpressionJudgment get judgment => operand;
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.inferExpression(operand, const UnknownType(), false);
-    return type;
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.asExpressionEnter(fileOffset, typeContext);
+    inferrer.inferExpression(factory, judgment, const UnknownType(), false);
+    inferredType = type;
+    inferrer.listener.asExpressionExit(fileOffset, inferredType);
+    return inferredType;
   }
 }
 
 /// Concrete shadow object representing an assert initializer in kernel form.
-class ShadowAssertInitializer extends AssertInitializer
-    implements ShadowInitializer {
-  ShadowAssertInitializer(AssertStatement statement) : super(statement);
+class AssertInitializerJudgment extends AssertInitializer
+    implements InitializerJudgment {
+  AssertInitializerJudgment(AssertStatement statement) : super(statement);
+
+  AssertStatementJudgment get judgment => statement;
 
   @override
-  void _inferInitializer(ShadowTypeInferrer inferrer) {
-    inferrer.inferStatement(statement);
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
+    inferrer.listener.assertInitializerEnter(fileOffset);
+    inferrer.inferStatement(factory, judgment);
+    inferrer.listener.assertInitializerExit(fileOffset);
   }
 }
 
 /// Concrete shadow object representing an assertion statement in kernel form.
-class ShadowAssertStatement extends AssertStatement implements ShadowStatement {
-  ShadowAssertStatement(Expression condition,
+class AssertStatementJudgment extends AssertStatement
+    implements StatementJudgment {
+  AssertStatementJudgment(Expression condition,
       {Expression message, int conditionStartOffset, int conditionEndOffset})
       : super(condition,
             message: message,
             conditionStartOffset: conditionStartOffset,
             conditionEndOffset: conditionEndOffset);
 
+  ExpressionJudgment get conditionJudgment => condition;
+
+  ExpressionJudgment get messageJudgment => message;
+
   @override
-  void _inferStatement(ShadowTypeInferrer inferrer) {
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
+    inferrer.listener.assertStatementEnter(fileOffset);
+    var conditionJudgment = this.conditionJudgment;
+    var messageJudgment = this.messageJudgment;
     var expectedType = inferrer.coreTypes.boolClass.rawType;
-    var actualType =
-        inferrer.inferExpression(condition, expectedType, !inferrer.isTopLevel);
-    inferrer.ensureAssignable(
-        expectedType, actualType, condition, condition.fileOffset);
-    if (message != null) {
-      inferrer.inferExpression(message, const UnknownType(), false);
+    inferrer.inferExpression(
+        factory, conditionJudgment, expectedType, !inferrer.isTopLevel);
+    inferrer.ensureAssignable(expectedType, conditionJudgment.inferredType,
+        conditionJudgment, conditionJudgment.fileOffset);
+    if (messageJudgment != null) {
+      inferrer.inferExpression(
+          factory, messageJudgment, const UnknownType(), false);
     }
+    inferrer.listener.assertStatementExit(fileOffset);
   }
 }
 
 /// Shadow object for [AwaitExpression].
-class ShadowAwaitExpression extends AwaitExpression
-    implements ShadowExpression {
-  ShadowAwaitExpression(Expression operand) : super(operand);
+class AwaitJudgment extends AwaitExpression implements ExpressionJudgment {
+  DartType inferredType;
+
+  AwaitJudgment(Expression operand) : super(operand);
+
+  ExpressionJudgment get judgment => operand;
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.awaitExpressionEnter(fileOffset, typeContext);
     if (!inferrer.typeSchemaEnvironment.isEmptyContext(typeContext)) {
       typeContext = inferrer.wrapFutureOrType(typeContext);
     }
-    var inferredType = inferrer.inferExpression(operand, typeContext, true);
-    return inferrer.typeSchemaEnvironment.unfutureType(inferredType);
+    var judgment = this.judgment;
+    inferrer.inferExpression(factory, judgment, typeContext, true);
+    inferredType =
+        inferrer.typeSchemaEnvironment.unfutureType(judgment.inferredType);
+    inferrer.listener.awaitExpressionExit(fileOffset, inferredType);
+    return inferredType;
   }
 }
 
 /// Concrete shadow object representing a statement block in kernel form.
-class ShadowBlock extends Block implements ShadowStatement {
-  ShadowBlock(List<Statement> statements) : super(statements);
+class BlockJudgment extends Block implements StatementJudgment {
+  BlockJudgment(List<Statement> statements) : super(statements);
+
+  List<Statement> get judgments => statements;
 
   @override
-  void _inferStatement(ShadowTypeInferrer inferrer) {
-    for (var statement in statements) {
-      inferrer.inferStatement(statement);
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
+    inferrer.listener.blockEnter(fileOffset);
+    for (var judgment in judgments) {
+      inferrer.inferStatement(factory, judgment);
     }
+    inferrer.listener.blockExit(fileOffset);
   }
 }
 
 /// Concrete shadow object representing a boolean literal in kernel form.
-class ShadowBoolLiteral extends BoolLiteral implements ShadowExpression {
-  ShadowBoolLiteral(bool value) : super(value);
+class BoolJudgment extends BoolLiteral implements ExpressionJudgment {
+  DartType inferredType;
+
+  BoolJudgment(bool value) : super(value);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    return inferrer.coreTypes.boolClass.rawType;
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.boolLiteralEnter(fileOffset, typeContext);
+    inferredType = inferrer.coreTypes.boolClass.rawType;
+    inferrer.listener.boolLiteralExit(fileOffset, inferredType);
+    return inferredType;
   }
 }
 
-/// Concrete shadow object representing a break or continue statement in kernel
-/// form.
-class ShadowBreakStatement extends BreakStatement implements ShadowStatement {
-  ShadowBreakStatement(LabeledStatement target) : super(target);
+/// Concrete shadow object representing a break statement in kernel form.
+class BreakJudgment extends BreakStatement implements StatementJudgment {
+  BreakJudgment(LabeledStatement target) : super(target);
 
   @override
-  void _inferStatement(ShadowTypeInferrer inferrer) {
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
     // No inference needs to be done.
   }
 }
 
+/// Concrete shadow object representing a continue statement in kernel form.
+class ContinueJudgment extends BreakStatement implements StatementJudgment {
+  ContinueJudgment(LabeledStatement target) : super(target);
+
+  @override
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
+    inferrer.listener.breakStatementEnter(fileOffset);
+    // No inference needs to be done.
+    inferrer.listener.breakStatementExit(fileOffset);
+  }
+}
+
 /// Concrete shadow object representing a cascade expression.
 ///
 /// A cascade expression of the form `a..b()..c()` is represented as the kernel
@@ -254,7 +333,9 @@
 /// call [finalize] with an expression representing the expression after the
 /// `..`.  If a further `..` follows that expression, the caller should call
 /// [extend] followed by [finalize] for each subsequent cascade.
-class ShadowCascadeExpression extends Let implements ShadowExpression {
+class ShadowCascadeExpression extends Let implements ExpressionJudgment {
+  DartType inferredType;
+
   /// Pointer to the last "let" expression in the cascade.
   Let nextCascade;
 
@@ -262,7 +343,7 @@
   /// variable.  Caller is responsible for ensuring that [variable]'s
   /// initializer is the expression preceding the first `..` of the cascade
   /// expression.
-  ShadowCascadeExpression(ShadowVariableDeclaration variable)
+  ShadowCascadeExpression(VariableDeclarationJudgment variable)
       : super(
             variable,
             makeLet(new VariableDeclaration.forValue(new _UnfinishedCascade()),
@@ -290,19 +371,24 @@
   }
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    var lhsType =
-        inferrer.inferExpression(variable.initializer, typeContext, true);
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.cascadeExpressionEnter(fileOffset, typeContext);
+    var lhsType = inferrer.inferExpression(
+        factory, variable.initializer, typeContext, true);
     if (inferrer.strongMode) {
       variable.type = lhsType;
     }
     Let section = body;
     while (true) {
       inferrer.inferExpression(
-          section.variable.initializer, const UnknownType(), false);
+          factory, section.variable.initializer, const UnknownType(), false);
       if (section.body is! Let) break;
       section = section.body;
     }
+    inferrer.listener.cascadeExpressionExit(fileOffset, lhsType);
     return lhsType;
   }
 }
@@ -427,8 +513,12 @@
   DartType _getWriteType(ShadowTypeInferrer inferrer) => unhandled(
       '$runtimeType', 'ShadowComplexAssignment._getWriteType', -1, null);
 
-  _ComplexAssignmentInferenceResult _inferRhs(
-      ShadowTypeInferrer inferrer, DartType readType, DartType writeContext) {
+  _ComplexAssignmentInferenceResult
+      _inferRhs<Expression, Statement, Initializer, Type>(
+          ShadowTypeInferrer inferrer,
+          Factory<Expression, Statement, Initializer, Type> factory,
+          DartType readType,
+          DartType writeContext) {
     assert(writeContext != null);
     var writeOffset = write == null ? -1 : write.fileOffset;
     Procedure combinerMember;
@@ -453,7 +543,8 @@
         assert(identical(combiner.arguments.positional.first, rhs));
         // Analyzer uses a null context for the RHS here.
         // TODO(paulberry): improve on this.
-        rhsType = inferrer.inferExpression(rhs, const UnknownType(), true);
+        rhsType =
+            inferrer.inferExpression(factory, rhs, const UnknownType(), true);
         // Do not use rhs after this point because it may be a Shadow node
         // that has been replaced in the tree with its desugaring.
         var expectedType = getPositionalParameterType(combinerType, 0);
@@ -484,7 +575,7 @@
       _storeLetType(inferrer, replacedCombiner, combinedType);
     } else {
       var rhsType = inferrer.inferExpression(
-          rhs, writeContext ?? const UnknownType(), true);
+          factory, rhs, writeContext ?? const UnknownType(), true);
       var replacedRhs =
           inferrer.ensureAssignable(writeContext, rhsType, rhs, writeOffset);
       _storeLetType(inferrer, replacedRhs ?? rhs, rhsType);
@@ -537,10 +628,12 @@
     return parts;
   }
 
-  DartType _inferReceiver(ShadowTypeInferrer inferrer) {
+  DartType _inferReceiver<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
     if (receiver != null) {
-      var receiverType =
-          inferrer.inferExpression(receiver, const UnknownType(), true);
+      var receiverType = inferrer.inferExpression(
+          factory, receiver, const UnknownType(), true);
       _storeLetType(inferrer, receiver, receiverType);
       return receiverType;
     } else if (isSuper) {
@@ -554,37 +647,54 @@
 
 /// Concrete shadow object representing a conditional expression in kernel form.
 /// Shadow object for [ConditionalExpression].
-class ShadowConditionalExpression extends ConditionalExpression
-    implements ShadowExpression {
-  ShadowConditionalExpression(
+class ConditionalJudgment extends ConditionalExpression
+    implements ExpressionJudgment {
+  DartType inferredType;
+
+  ExpressionJudgment get conditionJudgment => condition;
+
+  ExpressionJudgment get thenJudgment => then;
+
+  ExpressionJudgment get otherwiseJudgment => otherwise;
+
+  ConditionalJudgment(
       Expression condition, Expression then, Expression otherwise)
       : super(condition, then, otherwise, null);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.conditionalExpressionEnter(fileOffset, typeContext);
+    var conditionJudgment = this.conditionJudgment;
+    var thenJudgment = this.thenJudgment;
+    var otherwiseJudgment = this.otherwiseJudgment;
     var expectedType = inferrer.coreTypes.boolClass.rawType;
-    var conditionType =
-        inferrer.inferExpression(condition, expectedType, !inferrer.isTopLevel);
-    inferrer.ensureAssignable(
-        expectedType, conditionType, condition, condition.fileOffset);
-    DartType thenType = inferrer.inferExpression(then, typeContext, true);
+    inferrer.inferExpression(
+        factory, conditionJudgment, expectedType, !inferrer.isTopLevel);
+    inferrer.ensureAssignable(expectedType, conditionJudgment.inferredType,
+        condition, condition.fileOffset);
+    inferrer.inferExpression(factory, thenJudgment, typeContext, true);
     bool useLub = _forceLub || typeContext == null;
-    DartType otherwiseType =
-        inferrer.inferExpression(otherwise, typeContext, useLub);
-    DartType type = useLub
-        ? inferrer.typeSchemaEnvironment
-            .getLeastUpperBound(thenType, otherwiseType)
+    inferrer.inferExpression(factory, otherwiseJudgment, typeContext, useLub);
+    inferredType = useLub
+        ? inferrer.typeSchemaEnvironment.getLeastUpperBound(
+            thenJudgment.inferredType, otherwiseJudgment.inferredType)
         : greatestClosure(inferrer.coreTypes, typeContext);
     if (inferrer.strongMode) {
-      staticType = type;
+      staticType = inferredType;
     }
-    return type;
+    inferrer.listener.conditionalExpressionExit(fileOffset, inferredType);
+    return inferredType;
   }
 }
 
 /// Shadow object for [ConstructorInvocation].
 class ShadowConstructorInvocation extends ConstructorInvocation
-    implements ShadowExpression {
+    implements ExpressionJudgment {
+  DartType inferredType;
+
   final Member _initialTarget;
 
   /// If the constructor invocation points to a redirected constructor, the type
@@ -609,7 +719,11 @@
       : super(target, arguments, isConst: isConst);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.constructorInvocationEnter(fileOffset, typeContext);
     var library = inferrer.engine.beingInferred[target];
     if (library != null) {
       // There is a cyclic dependency where inferring the types of the
@@ -641,6 +755,7 @@
       inferrer.engine.beingInferred.remove(target);
     }
     var inferredType = inferrer.inferInvocation(
+        factory,
         typeContext,
         fileOffset,
         _initialTarget.function.functionType,
@@ -656,6 +771,8 @@
           fileOffset,
           noLength);
     }
+    inferrer.listener
+        .constructorInvocationExit(fileOffset, target, inferredType);
 
     if (isRedirected(this)) {
       InterfaceType returnType = inferredType;
@@ -696,78 +813,129 @@
 
 /// Concrete shadow object representing a continue statement from a switch
 /// statement, in kernel form.
-class ShadowContinueSwitchStatement extends ContinueSwitchStatement
-    implements ShadowStatement {
-  ShadowContinueSwitchStatement(SwitchCase target) : super(target);
+class ContinueSwitchJudgment extends ContinueSwitchStatement
+    implements StatementJudgment {
+  ContinueSwitchJudgment(SwitchCase target) : super(target);
 
   @override
-  void _inferStatement(ShadowTypeInferrer inferrer) {
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
+    inferrer.listener.continueSwitchStatementEnter(fileOffset);
     // No inference needs to be done.
+    inferrer.listener.continueSwitchStatementExit(fileOffset);
   }
 }
 
 /// Shadow object representing a deferred check in kernel form.
-class ShadowDeferredCheck extends Let implements ShadowExpression {
+class ShadowDeferredCheck extends Let implements ExpressionJudgment {
+  DartType inferredType;
+
   ShadowDeferredCheck(VariableDeclaration variable, Expression body)
       : super(variable, body);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.deferredCheckEnter(fileOffset, typeContext);
     // Since the variable is not used in the body we don't need to type infer
     // it.  We can just type infer the body.
-    return inferrer.inferExpression(body, typeContext, true);
+    var inferredType =
+        inferrer.inferExpression(factory, body, typeContext, true);
+    inferrer.listener.deferredCheckExit(fileOffset, inferredType);
+    return inferredType;
   }
 }
 
 /// Concrete shadow object representing a do loop in kernel form.
-class ShadowDoStatement extends DoStatement implements ShadowStatement {
-  ShadowDoStatement(Statement body, Expression condition)
-      : super(body, condition);
+class DoJudgment extends DoStatement implements StatementJudgment {
+  DoJudgment(Statement body, Expression condition) : super(body, condition);
+
+  StatementJudgment get bodyJudgment => body;
+
+  ExpressionJudgment get conditionJudgment => condition;
 
   @override
-  void _inferStatement(ShadowTypeInferrer inferrer) {
-    inferrer.inferStatement(body);
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
+    inferrer.listener.doStatementEnter(fileOffset);
+    var conditionJudgment = this.conditionJudgment;
+    inferrer.inferStatement(factory, bodyJudgment);
     var boolType = inferrer.coreTypes.boolClass.rawType;
-    var actualType =
-        inferrer.inferExpression(condition, boolType, !inferrer.isTopLevel);
-    inferrer.ensureAssignable(
-        boolType, actualType, condition, condition.fileOffset);
+    inferrer.inferExpression(
+        factory, conditionJudgment, boolType, !inferrer.isTopLevel);
+    inferrer.ensureAssignable(boolType, conditionJudgment.inferredType,
+        condition, condition.fileOffset);
+    inferrer.listener.doStatementExit(fileOffset);
   }
 }
 
 /// Concrete shadow object representing a double literal in kernel form.
-class ShadowDoubleLiteral extends DoubleLiteral implements ShadowExpression {
-  ShadowDoubleLiteral(double value) : super(value);
+class DoubleJudgment extends DoubleLiteral implements ExpressionJudgment {
+  DartType inferredType;
+
+  DoubleJudgment(double value) : super(value);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    return inferrer.coreTypes.doubleClass.rawType;
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.doubleLiteralEnter(fileOffset, typeContext);
+    inferredType = inferrer.coreTypes.doubleClass.rawType;
+    inferrer.listener.doubleLiteralExit(fileOffset, inferredType);
+    return inferredType;
   }
 }
 
 /// Common base class for shadow objects representing expressions in kernel
 /// form.
-abstract class ShadowExpression implements Expression {
+abstract class ExpressionJudgment implements Expression {
+  DartType inferredType;
+
   /// Calls back to [inferrer] to perform type inference for whatever concrete
-  /// type of [ShadowExpression] this is.
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext);
+  /// type of [ExpressionJudgment] this is.
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext);
+}
+
+/// Concrete shadow object representing an empty statement in kernel form.
+class EmptyStatementJudgment extends EmptyStatement
+    implements StatementJudgment {
+  @override
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
+    // No inference needs to be done.
+  }
 }
 
 /// Concrete shadow object representing an expression statement in kernel form.
 class ShadowExpressionStatement extends ExpressionStatement
-    implements ShadowStatement {
+    implements StatementJudgment {
   ShadowExpressionStatement(Expression expression) : super(expression);
 
   @override
-  void _inferStatement(ShadowTypeInferrer inferrer) {
-    inferrer.inferExpression(expression, const UnknownType(), false);
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
+    inferrer.listener.expressionStatementEnter(fileOffset);
+    inferrer.inferExpression(factory, expression, const UnknownType(), false);
+    inferrer.listener.expressionStatementExit(fileOffset);
   }
 }
 
 /// Shadow object for [StaticInvocation] when the procedure being invoked is a
 /// factory constructor.
 class ShadowFactoryConstructorInvocation extends StaticInvocation
-    implements ShadowExpression {
+    implements ExpressionJudgment {
+  DartType inferredType;
+
   final Member _initialTarget;
 
   /// If the factory invocation points to a redirected factory, the type
@@ -792,13 +960,20 @@
       : super(target, arguments, isConst: isConst);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.constructorInvocationEnter(fileOffset, typeContext);
     var inferredType = inferrer.inferInvocation(
+        factory,
         typeContext,
         fileOffset,
         _initialTarget.function.functionType,
         computeConstructorReturnType(_initialTarget),
         arguments);
+    inferrer.listener
+        .constructorInvocationExit(fileOffset, target, inferredType);
 
     if (isRedirected(this)) {
       InterfaceType returnType = inferredType;
@@ -868,18 +1043,23 @@
 
 /// Concrete shadow object representing a field initializer in kernel form.
 class ShadowFieldInitializer extends FieldInitializer
-    implements ShadowInitializer {
+    implements InitializerJudgment {
   ShadowFieldInitializer(Field field, Expression value) : super(field, value);
 
   @override
-  void _inferInitializer(ShadowTypeInferrer inferrer) {
-    var initializerType = inferrer.inferExpression(value, field.type, true);
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
+    inferrer.listener.fieldInitializerEnter(fileOffset, field);
+    var initializerType =
+        inferrer.inferExpression(factory, value, field.type, true);
     inferrer.ensureAssignable(field.type, initializerType, value, fileOffset);
+    inferrer.listener.fieldInitializerExit(fileOffset);
   }
 }
 
 /// Concrete shadow object representing a for-in loop in kernel form.
-class ShadowForInStatement extends ForInStatement implements ShadowStatement {
+class ShadowForInStatement extends ForInStatement implements StatementJudgment {
   final bool _declaresVariable;
 
   final ShadowSyntheticExpression _syntheticAssignment;
@@ -890,15 +1070,18 @@
       : super(variable, iterable, body, isAsync: isAsync);
 
   @override
-  void _inferStatement(ShadowTypeInferrer inferrer) {
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
     var iterableClass = isAsync
         ? inferrer.coreTypes.streamClass
         : inferrer.coreTypes.iterableClass;
     DartType context;
     bool typeNeeded = false;
     bool typeChecksNeeded = !inferrer.isTopLevel;
-    ShadowVariableDeclaration variable;
+    VariableDeclarationJudgment variable;
     var syntheticAssignment = _syntheticAssignment;
+    kernel.Expression syntheticWrite;
     DartType syntheticWriteType;
     if (_declaresVariable) {
       variable = this.variable;
@@ -909,14 +1092,48 @@
         context = variable.type;
       }
     } else if (syntheticAssignment is ShadowComplexAssignment) {
+      syntheticWrite = syntheticAssignment.write;
       syntheticWriteType =
           context = syntheticAssignment._getWriteType(inferrer);
     } else {
       context = const UnknownType();
     }
     context = inferrer.wrapType(context, iterableClass);
-    var inferredExpressionType = inferrer.resolveTypeParameter(inferrer
-        .inferExpression(iterable, context, typeNeeded || typeChecksNeeded));
+    if (syntheticWrite is VariableSet) {
+      inferrer.listener.forInStatementEnter(
+          fileOffset,
+          variable?.fileOffset,
+          syntheticWrite.fileOffset,
+          syntheticWrite.variable.type,
+          syntheticWrite.variable.fileOffset,
+          null);
+    } else if (syntheticWrite is PropertySet) {
+      inferrer.listener.forInStatementEnter(
+          fileOffset,
+          variable?.fileOffset,
+          syntheticWrite.fileOffset,
+          syntheticWrite.interfaceTarget?.setterType,
+          null,
+          syntheticWrite.interfaceTarget);
+    } else if (syntheticWrite is StaticSet) {
+      inferrer.listener.forInStatementEnter(
+          fileOffset,
+          variable?.fileOffset,
+          syntheticWrite.fileOffset,
+          syntheticWrite.target.setterType,
+          null,
+          syntheticWrite.target);
+    } else if (syntheticWrite == null ||
+        syntheticWrite is ShadowSyntheticExpression) {
+      inferrer.listener.forInStatementEnter(
+          fileOffset, variable?.fileOffset, null, null, null, null);
+    } else {
+      throw new UnimplementedError(
+          '(${syntheticWrite.runtimeType}) $syntheticWrite');
+    }
+    var inferredExpressionType = inferrer.resolveTypeParameter(
+        inferrer.inferExpression(
+            factory, iterable, context, typeNeeded || typeChecksNeeded));
     inferrer.ensureAssignable(
         inferrer.wrapType(const DynamicType(), iterableClass),
         inferredExpressionType,
@@ -941,9 +1158,9 @@
         this.variable.type = inferredType;
       }
     }
-    inferrer.inferStatement(body);
+    inferrer.inferStatement(factory, body);
     if (_declaresVariable) {
-      inferrer.inferMetadataKeepingHelper(variable.annotations);
+      inferrer.inferMetadataKeepingHelper(factory, variable.annotations);
       var tempVar =
           new VariableDeclaration(null, type: inferredType, isFinal: true);
       var variableGet = new VariableGet(tempVar)
@@ -969,52 +1186,65 @@
       }
       syntheticAssignment._replaceWithDesugared();
     }
+    inferrer.listener
+        .forInStatementExit(fileOffset, variable != null, variable?.type);
   }
 }
 
 /// Concrete shadow object representing a classic for loop in kernel form.
-class ShadowForStatement extends ForStatement implements ShadowStatement {
+class ShadowForStatement extends ForStatement implements StatementJudgment {
   ShadowForStatement(List<VariableDeclaration> variables, Expression condition,
       List<Expression> updates, Statement body)
       : super(variables, condition, updates, body);
 
   @override
-  void _inferStatement(ShadowTypeInferrer inferrer) {
-    variables.forEach(inferrer.inferStatement);
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
+    inferrer.listener.forStatementEnter(fileOffset);
+    for (var variable in variables) {
+      inferrer.inferStatement(factory, variable);
+    }
     if (condition != null) {
       var expectedType = inferrer.coreTypes.boolClass.rawType;
       var conditionType = inferrer.inferExpression(
-          condition, expectedType, !inferrer.isTopLevel);
+          factory, condition, expectedType, !inferrer.isTopLevel);
       inferrer.ensureAssignable(
           expectedType, conditionType, condition, condition.fileOffset);
     }
     for (var update in updates) {
-      inferrer.inferExpression(update, const UnknownType(), false);
+      inferrer.inferExpression(factory, update, const UnknownType(), false);
     }
-    inferrer.inferStatement(body);
+    inferrer.inferStatement(factory, body);
+    inferrer.listener.forStatementExit(fileOffset);
   }
 }
 
 /// Concrete shadow object representing a local function declaration in kernel
 /// form.
 class ShadowFunctionDeclaration extends FunctionDeclaration
-    implements ShadowStatement {
+    implements StatementJudgment {
   bool _hasImplicitReturnType = false;
 
   ShadowFunctionDeclaration(VariableDeclaration variable, FunctionNode function)
       : super(variable, function);
 
   @override
-  void _inferStatement(ShadowTypeInferrer inferrer) {
-    inferrer.inferMetadataKeepingHelper(variable.annotations);
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
+    inferrer.listener.functionDeclarationEnter(fileOffset);
+    inferrer.inferMetadataKeepingHelper(factory, variable.annotations);
     inferrer.inferLocalFunction(
+        factory,
         function,
         null,
         fileOffset,
         _hasImplicitReturnType
             ? (inferrer.strongMode ? null : const DynamicType())
             : function.returnType);
-    variable.type = function.functionType;
+    var inferredType = variable.type = function.functionType;
+    inferrer.listener.functionDeclarationExit(fileOffset, inferredType);
   }
 
   static void setHasImplicitReturnType(
@@ -1025,12 +1255,21 @@
 
 /// Concrete shadow object representing a function expression in kernel form.
 class ShadowFunctionExpression extends FunctionExpression
-    implements ShadowExpression {
+    implements ExpressionJudgment {
+  DartType inferredType;
+
   ShadowFunctionExpression(FunctionNode function) : super(function);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    return inferrer.inferLocalFunction(function, typeContext, fileOffset, null);
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.functionExpressionEnter(fileOffset, typeContext);
+    var inferredType = inferrer.inferLocalFunction(
+        factory, function, typeContext, fileOffset, null);
+    inferrer.listener.functionExpressionExit(fileOffset, inferredType);
+    return inferredType;
   }
 }
 
@@ -1040,7 +1279,9 @@
 /// expression:
 ///
 ///     let v = a in v == null ? b : v
-class ShadowIfNullExpression extends Let implements ShadowExpression {
+class ShadowIfNullExpression extends Let implements ExpressionJudgment {
+  DartType inferredType;
+
   ShadowIfNullExpression(VariableDeclaration variable, Expression body)
       : super(variable, body);
 
@@ -1054,19 +1295,24 @@
   Expression get _rhs => body.then;
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.ifNullEnter(fileOffset, typeContext);
     // To infer `e0 ?? e1` in context K:
     // - Infer e0 in context K to get T0
-    var lhsType = inferrer.inferExpression(_lhs, typeContext, true);
+    var lhsType = inferrer.inferExpression(factory, _lhs, typeContext, true);
     if (inferrer.strongMode) {
       variable.type = lhsType;
     }
+    inferrer.listener.ifNullBeforeRhs(fileOffset);
     // - Let J = T0 if K is `?` else K.
     // - Infer e1 in context J to get T1
     bool useLub = _forceLub || typeContext is UnknownType;
     var rhsType = typeContext is UnknownType
-        ? inferrer.inferExpression(_rhs, lhsType, true)
-        : inferrer.inferExpression(_rhs, typeContext, _forceLub);
+        ? inferrer.inferExpression(factory, _rhs, lhsType, true)
+        : inferrer.inferExpression(factory, _rhs, typeContext, _forceLub);
     // - Let T = greatest closure of K with respect to `?` if K is not `_`, else
     //   UP(t0, t1)
     // - Then the inferred type is T.
@@ -1076,24 +1322,38 @@
     if (inferrer.strongMode) {
       body.staticType = inferredType;
     }
+    inferrer.listener.ifNullExit(fileOffset, inferredType);
     return inferredType;
   }
 }
 
 /// Concrete shadow object representing an if statement in kernel form.
-class ShadowIfStatement extends IfStatement implements ShadowStatement {
-  ShadowIfStatement(Expression condition, Statement then, Statement otherwise)
+class IfJudgment extends IfStatement implements StatementJudgment {
+  IfJudgment(Expression condition, Statement then, Statement otherwise)
       : super(condition, then, otherwise);
 
+  ExpressionJudgment get conditionJudgment => condition;
+
+  StatementJudgment get thenJudgment => then;
+
+  StatementJudgment get otherwiseJudgment => otherwise;
+
   @override
-  void _inferStatement(ShadowTypeInferrer inferrer) {
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
+    inferrer.listener.ifStatementEnter(fileOffset);
+    var conditionJudgment = this.conditionJudgment;
     var expectedType = inferrer.coreTypes.boolClass.rawType;
-    var conditionType =
-        inferrer.inferExpression(condition, expectedType, !inferrer.isTopLevel);
-    inferrer.ensureAssignable(
-        expectedType, conditionType, condition, condition.fileOffset);
-    inferrer.inferStatement(then);
-    if (otherwise != null) inferrer.inferStatement(otherwise);
+    inferrer.inferExpression(
+        factory, conditionJudgment, expectedType, !inferrer.isTopLevel);
+    inferrer.ensureAssignable(expectedType, conditionJudgment.inferredType,
+        condition, condition.fileOffset);
+    inferrer.inferStatement(factory, thenJudgment);
+    if (otherwiseJudgment != null) {
+      inferrer.inferStatement(factory, otherwiseJudgment);
+    }
+    inferrer.listener.ifStatementExit(fileOffset);
   }
 }
 
@@ -1108,9 +1368,12 @@
   }
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
     if (write != null) {
-      inferrer.inferExpression(write, const UnknownType(), false);
+      inferrer.inferExpression(factory, write, const UnknownType(), false);
     }
     _replaceWithDesugared();
     return const DynamicType();
@@ -1147,8 +1410,13 @@
   }
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    var receiverType = _inferReceiver(inferrer);
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.indexAssignEnter(desugared.fileOffset, typeContext);
+    var receiverType = _inferReceiver(inferrer, factory);
+    inferrer.listener.indexAssignAfterReceiver(write.fileOffset, typeContext);
     var writeMember = inferrer.findMethodInvocationMember(receiverType, write);
     // To replicate analyzer behavior, we base type inference on the write
     // member.  TODO(paulberry): would it be better to use the read member
@@ -1165,7 +1433,8 @@
       expectedIndexTypeForWrite = calleeType.positionalParameters[0];
       writeContext = calleeType.positionalParameters[1];
     }
-    var indexType = inferrer.inferExpression(index, indexContext, true);
+    var indexType =
+        inferrer.inferExpression(factory, index, indexContext, true);
     _storeLetType(inferrer, index, indexType);
     if (writeContext is! UnknownType) {
       inferrer.ensureAssignable(
@@ -1200,7 +1469,9 @@
           read.fileOffset);
       _storeLetType(inferrer, replacedRead, readType);
     }
-    var inferredResult = _inferRhs(inferrer, readType, writeContext);
+    var inferredResult = _inferRhs(inferrer, factory, readType, writeContext);
+    inferrer.listener.indexAssignExit(write.fileOffset, writeMember,
+        inferredResult.combiner, inferredResult.type);
     _replaceWithDesugared();
     return inferredResult.type;
   }
@@ -1208,70 +1479,118 @@
 
 /// Common base class for shadow objects representing initializers in kernel
 /// form.
-abstract class ShadowInitializer implements Initializer {
-  /// Performs type inference for whatever concrete type of [ShadowInitializer]
+abstract class InitializerJudgment implements Initializer {
+  /// Performs type inference for whatever concrete type of [InitializerJudgment]
   /// this is.
-  void _inferInitializer(ShadowTypeInferrer inferrer);
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory);
 }
 
 /// Concrete shadow object representing an integer literal in kernel form.
-class ShadowIntLiteral extends IntLiteral implements ShadowExpression {
-  ShadowIntLiteral(int value) : super(value);
+class IntJudgment extends IntLiteral implements ExpressionJudgment {
+  DartType inferredType;
+
+  IntJudgment(int value) : super(value);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    return inferrer.coreTypes.intClass.rawType;
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.intLiteralEnter(fileOffset, typeContext);
+    inferredType = inferrer.coreTypes.intClass.rawType;
+    inferrer.listener.intLiteralExit(fileOffset, inferredType);
+    return inferredType;
   }
 }
 
 /// Concrete shadow object representing an invalid initializer in kernel form.
 class ShadowInvalidInitializer extends LocalInitializer
-    implements ShadowInitializer {
+    implements InitializerJudgment {
   ShadowInvalidInitializer(VariableDeclaration variable) : super(variable);
 
   @override
-  void _inferInitializer(ShadowTypeInferrer inferrer) {
-    inferrer.inferExpression(variable.initializer, const UnknownType(), false);
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
+    inferrer.listener.invalidInitializerEnter(fileOffset);
+    inferrer.inferExpression(
+        factory, variable.initializer, const UnknownType(), false);
+    inferrer.listener.invalidInitializerExit(fileOffset);
   }
 }
 
 /// Concrete shadow object representing a non-inverted "is" test in kernel form.
-class ShadowIsExpression extends IsExpression implements ShadowExpression {
-  ShadowIsExpression(Expression operand, DartType type) : super(operand, type);
+class IsJudgment extends IsExpression implements ExpressionJudgment {
+  DartType inferredType;
+
+  ExpressionJudgment get judgment => operand;
+
+  IsJudgment(Expression operand, DartType type) : super(operand, type);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.inferExpression(operand, const UnknownType(), false);
-    return inferrer.coreTypes.boolClass.rawType;
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.isExpressionEnter(fileOffset, typeContext);
+    inferrer.inferExpression(factory, judgment, const UnknownType(), false);
+    inferredType = inferrer.coreTypes.boolClass.rawType;
+    inferrer.listener.isExpressionExit(fileOffset, type, inferredType);
+    return inferredType;
   }
 }
 
 /// Concrete shadow object representing an inverted "is" test in kernel form.
-class ShadowIsNotExpression extends Not implements ShadowExpression {
-  ShadowIsNotExpression(Expression operand, DartType type, int charOffset)
+class IsNotJudgment extends Not implements ExpressionJudgment {
+  DartType inferredType;
+
+  @override
+  IsExpression get operand => super.operand;
+
+  ExpressionJudgment get judgment => operand.operand;
+
+  IsNotJudgment(Expression operand, DartType type, int charOffset)
       : super(new IsExpression(operand, type)..fileOffset = charOffset);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
     IsExpression isExpression = this.operand;
-    inferrer.inferExpression(isExpression.operand, const UnknownType(), false);
-    return inferrer.coreTypes.boolClass.rawType;
+
+    inferrer.listener.isNotExpressionEnter(fileOffset, typeContext);
+    inferrer.inferExpression(factory, judgment, const UnknownType(), false);
+    inferredType = inferrer.coreTypes.boolClass.rawType;
+    inferrer.listener
+        .isNotExpressionExit(fileOffset, isExpression.type, inferredType);
+    return inferredType;
   }
 }
 
 /// Concrete shadow object representing a labeled statement in kernel form.
-class ShadowLabeledStatement extends LabeledStatement
-    implements ShadowStatement {
-  ShadowLabeledStatement(Statement body) : super(body);
+class LabeledStatementJudgment extends LabeledStatement
+    implements StatementJudgment {
+  LabeledStatementJudgment(Statement body) : super(body);
+
+  StatementJudgment get judgment => body;
 
   @override
-  void _inferStatement(ShadowTypeInferrer inferrer) {
-    inferrer.inferStatement(body);
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
+    inferrer.listener.labeledStatementEnter(fileOffset);
+    inferrer.inferStatement(factory, judgment);
+    inferrer.listener.labeledStatementExit(fileOffset);
   }
 }
 
 /// Concrete shadow object representing a list literal in kernel form.
-class ShadowListLiteral extends ListLiteral implements ShadowExpression {
+class ShadowListLiteral extends ListLiteral implements ExpressionJudgment {
+  DartType inferredType;
+
   final DartType _declaredTypeArgument;
 
   ShadowListLiteral(List<Expression> expressions,
@@ -1282,7 +1601,11 @@
             isConst: isConst);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.listLiteralEnter(fileOffset, typeContext);
     var listClass = inferrer.coreTypes.listClass;
     var listType = listClass.thisType;
     List<DartType> inferredTypes;
@@ -1306,7 +1629,7 @@
     }
     if (inferenceNeeded || typeChecksNeeded) {
       for (var expression in expressions) {
-        var expressionType = inferrer.inferExpression(expression,
+        var expressionType = inferrer.inferExpression(factory, expression,
             inferredTypeArgument, inferenceNeeded || typeChecksNeeded);
         if (inferenceNeeded) {
           formalTypes.add(listType.typeArguments[0]);
@@ -1333,26 +1656,37 @@
             expressions[i].fileOffset);
       }
     }
-    return new InterfaceType(listClass, [inferredTypeArgument]);
+    var inferredType = new InterfaceType(listClass, [inferredTypeArgument]);
+    inferrer.listener.listLiteralExit(fileOffset, inferredType);
+    return inferredType;
   }
 }
 
 /// Shadow object for [LogicalExpression].
 class ShadowLogicalExpression extends LogicalExpression
-    implements ShadowExpression {
+    implements ExpressionJudgment {
+  DartType inferredType;
+
   ShadowLogicalExpression(Expression left, String operator, Expression right)
       : super(left, operator, right);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.logicalExpressionEnter(fileOffset, typeContext);
     var boolType = inferrer.coreTypes.boolClass.rawType;
     var leftType =
-        inferrer.inferExpression(left, boolType, !inferrer.isTopLevel);
-    var rightType =
-        inferrer.inferExpression(right, boolType, !inferrer.isTopLevel);
+        inferrer.inferExpression(factory, left, boolType, !inferrer.isTopLevel);
+    inferrer.listener.logicalExpressionBeforeRhs(fileOffset);
+    var rightType = inferrer.inferExpression(
+        factory, right, boolType, !inferrer.isTopLevel);
     inferrer.ensureAssignable(boolType, leftType, left, left.fileOffset);
     inferrer.ensureAssignable(boolType, rightType, right, right.fileOffset);
-    return boolType;
+    var inferredType = boolType;
+    inferrer.listener.logicalExpressionExit(fileOffset, inferredType);
+    return inferredType;
   }
 }
 
@@ -1362,15 +1696,19 @@
 /// elsewhere, so it is desugared into a for-in loop that assigns to the
 /// variable at the top of the loop body.
 class ShadowLoopAssignmentStatement extends ExpressionStatement
-    implements ShadowStatement {
+    implements StatementJudgment {
   ShadowLoopAssignmentStatement(Expression expression) : super(expression);
 
   @override
-  void _inferStatement(ShadowTypeInferrer inferrer) {}
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {}
 }
 
 /// Shadow object for [MapLiteral].
-class ShadowMapLiteral extends MapLiteral implements ShadowExpression {
+class ShadowMapLiteral extends MapLiteral implements ExpressionJudgment {
+  DartType inferredType;
+
   final DartType _declaredKeyType;
   final DartType _declaredValueType;
 
@@ -1384,7 +1722,11 @@
             isConst: isConst);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.mapLiteralEnter(fileOffset, typeContext);
     var mapClass = inferrer.coreTypes.mapClass;
     var mapType = mapClass.thisType;
     List<DartType> inferredTypes;
@@ -1412,10 +1754,10 @@
     }
     if (inferenceNeeded || typeChecksNeeded) {
       for (var entry in entries) {
-        var keyType = inferrer.inferExpression(
-            entry.key, inferredKeyType, inferenceNeeded || typeChecksNeeded);
-        var valueType = inferrer.inferExpression(entry.value, inferredValueType,
-            inferenceNeeded || typeChecksNeeded);
+        var keyType = inferrer.inferExpression(factory, entry.key,
+            inferredKeyType, inferenceNeeded || typeChecksNeeded);
+        var valueType = inferrer.inferExpression(factory, entry.value,
+            inferredValueType, inferenceNeeded || typeChecksNeeded);
         if (inferenceNeeded) {
           formalTypes.addAll(mapType.typeArguments);
         }
@@ -1453,7 +1795,10 @@
             valueType, actualTypes[2 * i + 1], value, value.fileOffset);
       }
     }
-    return new InterfaceType(mapClass, [inferredKeyType, inferredValueType]);
+    var inferredType =
+        new InterfaceType(mapClass, [inferredKeyType, inferredValueType]);
+    inferrer.listener.mapLiteralExit(fileOffset, inferredType);
+    return inferredType;
   }
 }
 
@@ -1480,7 +1825,9 @@
 
 /// Shadow object for [MethodInvocation].
 class ShadowMethodInvocation extends MethodInvocation
-    implements ShadowExpression {
+    implements ExpressionJudgment {
+  DartType inferredType;
+
   /// Indicates whether this method invocation is a call to a `call` method
   /// resulting from the invocation of a function expression.
   final bool _isImplicitCall;
@@ -1491,9 +1838,12 @@
         super(receiver, name, arguments, interfaceTarget);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
     return inferrer.inferMethodInvocation(
-        this, receiver, fileOffset, _isImplicitCall, typeContext,
+        factory, this, receiver, fileOffset, _isImplicitCall, typeContext,
         desugaredInvocation: this);
   }
 }
@@ -1507,31 +1857,46 @@
 /// kernel expression:
 ///
 ///     let f = () { ... } in f
-class ShadowNamedFunctionExpression extends Let implements ShadowExpression {
+class ShadowNamedFunctionExpression extends Let implements ExpressionJudgment {
+  DartType inferredType;
+
   ShadowNamedFunctionExpression(VariableDeclaration variable)
       : super(variable, new VariableGet(variable));
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    var inferredType =
-        inferrer.inferExpression(variable.initializer, typeContext, true);
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.namedFunctionExpressionEnter(fileOffset, typeContext);
+    var inferredType = inferrer.inferExpression(
+        factory, variable.initializer, typeContext, true);
     if (inferrer.strongMode) variable.type = inferredType;
+    inferrer.listener.namedFunctionExpressionExit(fileOffset, inferredType);
     return inferredType;
   }
 }
 
 /// Shadow object for [Not].
-class ShadowNot extends Not implements ShadowExpression {
+class ShadowNot extends Not implements ExpressionJudgment {
+  DartType inferredType;
+
   ShadowNot(Expression operand) : super(operand);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.notEnter(fileOffset, typeContext);
     // First infer the receiver so we can look up the method that was invoked.
     var boolType = inferrer.coreTypes.boolClass.rawType;
-    var actualType =
-        inferrer.inferExpression(operand, boolType, !inferrer.isTopLevel);
+    var actualType = inferrer.inferExpression(
+        factory, operand, boolType, !inferrer.isTopLevel);
     inferrer.ensureAssignable(boolType, actualType, operand, fileOffset);
-    return boolType;
+    DartType inferredType = boolType;
+    inferrer.listener.notExit(fileOffset, inferredType);
+    return inferredType;
   }
 }
 
@@ -1541,7 +1906,10 @@
 /// expression:
 ///
 ///     let v = a in v == null ? null : v.b(...)
-class ShadowNullAwareMethodInvocation extends Let implements ShadowExpression {
+class ShadowNullAwareMethodInvocation extends Let
+    implements ExpressionJudgment {
+  DartType inferredType;
+
   ShadowNullAwareMethodInvocation(VariableDeclaration variable, Expression body)
       : super(variable, body);
 
@@ -1551,9 +1919,12 @@
   MethodInvocation get _desugaredInvocation => body.otherwise;
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
     var inferredType = inferrer.inferMethodInvocation(
-        this, variable.initializer, fileOffset, false, typeContext,
+        factory, this, variable.initializer, fileOffset, false, typeContext,
         receiverVariable: variable, desugaredInvocation: _desugaredInvocation);
     if (inferrer.strongMode) {
       body.staticType = inferredType;
@@ -1568,8 +1939,10 @@
 /// expression:
 ///
 ///     let v = a in v == null ? null : v.b
-class ShadowNullAwarePropertyGet extends Let implements ShadowExpression {
-  ShadowNullAwarePropertyGet(
+class NullAwarePropertyGetJudgment extends Let implements ExpressionJudgment {
+  DartType inferredType;
+
+  NullAwarePropertyGetJudgment(
       VariableDeclaration variable, ConditionalExpression body)
       : super(variable, body);
 
@@ -1578,10 +1951,15 @@
 
   PropertyGet get _desugaredGet => body.otherwise;
 
+  ExpressionJudgment get receiverJudgment => variable.initializer;
+
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    var inferredType = inferrer.inferPropertyGet(
-        this, variable.initializer, fileOffset, typeContext,
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.inferPropertyGet(
+        factory, this, receiverJudgment, fileOffset, typeContext,
         receiverVariable: variable, desugaredGet: _desugaredGet);
     if (inferrer.strongMode) {
       body.staticType = inferredType;
@@ -1591,10 +1969,19 @@
 }
 
 /// Concrete shadow object representing a null literal in kernel form.
-class ShadowNullLiteral extends NullLiteral implements ShadowExpression {
+class NullJudgment extends NullLiteral implements ExpressionJudgment {
+  DartType inferredType;
+
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    return inferrer.coreTypes.nullClass.rawType;
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.nullLiteralEnter(fileOffset, typeContext);
+    inferredType = inferrer.coreTypes.nullClass.rawType;
+    inferrer.listener
+        .nullLiteralExit(fileOffset, fileOffset == -1, inferredType);
+    return inferredType;
   }
 }
 
@@ -1660,9 +2047,13 @@
   }
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    var receiverType = _inferReceiver(inferrer);
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    var receiverType = _inferReceiver(inferrer, factory);
 
+    inferrer.listener.propertyAssignEnter(write.fileOffset, typeContext);
     DartType readType;
     if (read != null) {
       var readMember =
@@ -1680,38 +2071,55 @@
     // member.  TODO(paulberry): would it be better to use the read member when
     // doing compound assignment?
     var writeContext = inferrer.getSetterType(writeMember, receiverType);
-    var inferredResult = _inferRhs(inferrer, readType, writeContext);
+    var inferredResult = _inferRhs(inferrer, factory, readType, writeContext);
     if (inferrer.strongMode) nullAwareGuard?.staticType = inferredResult.type;
+    inferrer.listener.propertyAssignExit(
+        write.fileOffset,
+        inferrer.getRealTarget(writeMember),
+        writeContext,
+        inferredResult.combiner,
+        inferredResult.type);
     _replaceWithDesugared();
     return inferredResult.type;
   }
 }
 
 /// Shadow object for [PropertyGet].
-class ShadowPropertyGet extends PropertyGet implements ShadowExpression {
-  ShadowPropertyGet(Expression receiver, Name name, [Member interfaceTarget])
+class PropertyGetJudgment extends PropertyGet implements ExpressionJudgment {
+  DartType inferredType;
+
+  PropertyGetJudgment(Expression receiver, Name name, [Member interfaceTarget])
       : super(receiver, name, interfaceTarget);
 
-  ShadowPropertyGet.byReference(
+  PropertyGetJudgment.byReference(
       Expression receiver, Name name, Reference interfaceTargetReference)
       : super.byReference(receiver, name, interfaceTargetReference);
 
+  ExpressionJudgment get receiverJudgment => receiver;
+
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    return inferrer.inferPropertyGet(this, receiver, fileOffset, typeContext,
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.inferPropertyGet(
+        factory, this, receiverJudgment, fileOffset, typeContext,
         desugaredGet: this);
+    return inferredType;
   }
 }
 
 /// Concrete shadow object representing a redirecting initializer in kernel
 /// form.
 class ShadowRedirectingInitializer extends RedirectingInitializer
-    implements ShadowInitializer {
+    implements InitializerJudgment {
   ShadowRedirectingInitializer(Constructor target, Arguments arguments)
       : super(target, arguments);
 
   @override
-  _inferInitializer(ShadowTypeInferrer inferrer) {
+  infer<Expression, Statement, Initializer, Type>(ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
+    inferrer.listener.redirectingInitializerEnter(fileOffset, target);
     List<TypeParameter> classTypeParameters =
         target.enclosingClass.typeParameters;
     List<DartType> typeArguments =
@@ -1719,51 +2127,73 @@
     for (int i = 0; i < typeArguments.length; i++) {
       typeArguments[i] = new TypeParameterType(classTypeParameters[i]);
     }
-    ShadowArguments.setNonInferrableArgumentTypes(arguments, typeArguments);
-    inferrer.inferInvocation(null, fileOffset, target.function.functionType,
-        target.enclosingClass.thisType, arguments,
+    ArgumentsJudgment.setNonInferrableArgumentTypes(arguments, typeArguments);
+    inferrer.inferInvocation(factory, null, fileOffset,
+        target.function.functionType, target.enclosingClass.thisType, arguments,
         skipTypeArgumentInference: true);
-    ShadowArguments.removeNonInferrableArgumentTypes(arguments);
+    ArgumentsJudgment.removeNonInferrableArgumentTypes(arguments);
+    inferrer.listener.redirectingInitializerExit(fileOffset);
   }
 }
 
 /// Shadow object for [Rethrow].
-class ShadowRethrow extends Rethrow implements ShadowExpression {
+class ShadowRethrow extends Rethrow implements ExpressionJudgment {
+  DartType inferredType;
+
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    return const BottomType();
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.rethrowEnter(fileOffset, typeContext);
+    var inferredType = const BottomType();
+    inferrer.listener.rethrowExit(fileOffset, inferredType);
+    return inferredType;
   }
 }
 
 /// Concrete shadow object representing a return statement in kernel form.
-class ShadowReturnStatement extends ReturnStatement implements ShadowStatement {
-  ShadowReturnStatement([Expression expression]) : super(expression);
+class ReturnJudgment extends ReturnStatement implements StatementJudgment {
+  ReturnJudgment([Expression expression]) : super(expression);
+
+  ExpressionJudgment get judgment => expression;
 
   @override
-  void _inferStatement(ShadowTypeInferrer inferrer) {
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
+    inferrer.listener.returnStatementEnter(fileOffset);
+    var judgment = this.judgment;
     var closureContext = inferrer.closureContext;
     var typeContext = !closureContext.isGenerator
         ? closureContext.returnOrYieldContext
         : const UnknownType();
-    var inferredType = expression != null
-        ? inferrer.inferExpression(expression, typeContext, true)
-        : const VoidType();
+    DartType inferredType;
+    if (expression != null) {
+      inferrer.inferExpression(factory, judgment, typeContext, true);
+      inferredType = judgment.inferredType;
+    } else {
+      inferredType = const VoidType();
+    }
     // Analyzer treats bare `return` statements as having no effect on the
     // inferred type of the closure.  TODO(paulberry): is this what we want
     // for Fasta?
-    if (expression != null) {
+    if (judgment != null) {
       closureContext.handleReturn(
           inferrer, inferredType, expression, fileOffset);
     }
+    inferrer.listener.returnStatementExit(fileOffset);
   }
 }
 
 /// Common base class for shadow objects representing statements in kernel
 /// form.
-abstract class ShadowStatement extends Statement {
+abstract class StatementJudgment extends Statement {
   /// Calls back to [inferrer] to perform type inference for whatever concrete
-  /// type of [ShadowStatement] this is.
-  void _inferStatement(ShadowTypeInferrer inferrer);
+  /// type of [StatementJudgment] this is.
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> statement);
 }
 
 /// Concrete shadow object representing an assignment to a static variable.
@@ -1777,7 +2207,11 @@
   }
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.staticAssignEnter(this.write?.fileOffset, typeContext);
     DartType readType = const DynamicType(); // Only used in error recovery
     var read = this.read;
     if (read is StaticGet) {
@@ -1795,7 +2229,9 @@
         writeMember.inferenceNode = null;
       }
     }
-    var inferredResult = _inferRhs(inferrer, readType, writeContext);
+    var inferredResult = _inferRhs(inferrer, factory, readType, writeContext);
+    inferrer.listener.staticAssignExit(write?.fileOffset, writeMember,
+        writeContext, inferredResult.combiner, inferredResult.type);
     _replaceWithDesugared();
     return inferredResult.type;
   }
@@ -1803,11 +2239,17 @@
 
 /// Concrete shadow object representing a read of a static variable in kernel
 /// form.
-class ShadowStaticGet extends StaticGet implements ShadowExpression {
-  ShadowStaticGet(Member target) : super(target);
+class StaticGetJudgment extends StaticGet implements ExpressionJudgment {
+  DartType inferredType;
+
+  StaticGetJudgment(Member target) : super(target);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.staticGetEnter(fileOffset, typeContext);
     var target = this.target;
     if (target is ShadowField && target.inferenceNode != null) {
       target.inferenceNode.resolve();
@@ -1817,63 +2259,101 @@
     if (target is Procedure && target.kind == ProcedureKind.Method) {
       type = inferrer.instantiateTearOff(type, typeContext, this);
     }
-    return type;
+    inferredType = type;
+    inferrer.listener.staticGetExit(fileOffset, target, inferredType);
+    return inferredType;
   }
 }
 
 /// Shadow object for [StaticInvocation].
 class ShadowStaticInvocation extends StaticInvocation
-    implements ShadowExpression {
+    implements ExpressionJudgment {
+  DartType inferredType;
+
   ShadowStaticInvocation(Procedure target, Arguments arguments,
       {bool isConst: false})
       : super(target, arguments, isConst: isConst);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.staticInvocationEnter(
+        this.fileOffset, arguments.fileOffset, typeContext);
     var calleeType = target.function.functionType;
-    return inferrer.inferInvocation(
-        typeContext, fileOffset, calleeType, calleeType.returnType, arguments);
+    var inferredType = inferrer.inferInvocation(factory, typeContext,
+        fileOffset, calleeType, calleeType.returnType, arguments);
+    inferrer.listener.staticInvocationExit(
+        fileOffset,
+        target,
+        arguments.types,
+        inferrer.lastCalleeType,
+        inferrer.lastInferredSubstitution,
+        inferredType);
+    return inferredType;
   }
 }
 
 /// Concrete shadow object representing a string concatenation in kernel form.
 class ShadowStringConcatenation extends StringConcatenation
-    implements ShadowExpression {
+    implements ExpressionJudgment {
+  DartType inferredType;
+
   ShadowStringConcatenation(List<Expression> expressions) : super(expressions);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.stringConcatenationEnter(fileOffset, typeContext);
     if (!inferrer.isTopLevel) {
-      for (Expression expression in expressions) {
-        inferrer.inferExpression(expression, const UnknownType(), false);
+      for (kernel.Expression expression in expressions) {
+        inferrer.inferExpression(
+            factory, expression, const UnknownType(), false);
       }
     }
-    return inferrer.coreTypes.stringClass.rawType;
+    var inferredType = inferrer.coreTypes.stringClass.rawType;
+    inferrer.listener.stringConcatenationExit(fileOffset, inferredType);
+    return inferredType;
   }
 }
 
 /// Concrete shadow object representing a string literal in kernel form.
-class ShadowStringLiteral extends StringLiteral implements ShadowExpression {
+class ShadowStringLiteral extends StringLiteral implements ExpressionJudgment {
+  DartType inferredType;
+
   ShadowStringLiteral(String value) : super(value);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    return inferrer.coreTypes.stringClass.rawType;
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.stringLiteralEnter(fileOffset, typeContext);
+    var inferredType = inferrer.coreTypes.stringClass.rawType;
+    inferrer.listener.stringLiteralExit(fileOffset, inferredType);
+    return inferredType;
   }
 }
 
 /// Concrete shadow object representing a super initializer in kernel form.
 class ShadowSuperInitializer extends SuperInitializer
-    implements ShadowInitializer {
+    implements InitializerJudgment {
   ShadowSuperInitializer(Constructor target, Arguments arguments)
       : super(target, arguments);
 
   @override
-  void _inferInitializer(ShadowTypeInferrer inferrer) {
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
+    inferrer.listener.superInitializerEnter(fileOffset);
     var substitution = Substitution.fromSupertype(inferrer.classHierarchy
         .getClassAsInstanceOf(
             inferrer.thisType.classNode, target.enclosingClass));
     inferrer.inferInvocation(
+        factory,
         null,
         fileOffset,
         substitution
@@ -1881,24 +2361,30 @@
         inferrer.thisType,
         arguments,
         skipTypeArgumentInference: true);
+    inferrer.listener.superInitializerExit(fileOffset);
   }
 }
 
 /// Shadow object for [SuperMethodInvocation].
 class ShadowSuperMethodInvocation extends SuperMethodInvocation
-    implements ShadowExpression {
+    implements ExpressionJudgment {
+  DartType inferredType;
+
   ShadowSuperMethodInvocation(Name name, Arguments arguments,
       [Procedure interfaceTarget])
       : super(name, arguments, interfaceTarget);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
     if (interfaceTarget != null) {
       inferrer.instrumentation?.record(inferrer.uri, fileOffset, 'target',
           new InstrumentationValueForMember(interfaceTarget));
     }
     return inferrer.inferMethodInvocation(
-        this, null, fileOffset, false, typeContext,
+        factory, this, null, fileOffset, false, typeContext,
         interfaceMember: interfaceTarget,
         methodName: name,
         arguments: arguments);
@@ -1906,47 +2392,67 @@
 }
 
 /// Shadow object for [SuperPropertyGet].
-class ShadowSuperPropertyGet extends SuperPropertyGet
-    implements ShadowExpression {
-  ShadowSuperPropertyGet(Name name, [Member interfaceTarget])
+class SuperPropertyGetJudgment extends SuperPropertyGet
+    implements ExpressionJudgment {
+  DartType inferredType;
+
+  SuperPropertyGetJudgment(Name name, [Member interfaceTarget])
       : super(name, interfaceTarget);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
     if (interfaceTarget != null) {
       inferrer.instrumentation?.record(inferrer.uri, fileOffset, 'target',
           new InstrumentationValueForMember(interfaceTarget));
     }
-    return inferrer.inferPropertyGet(this, null, fileOffset, typeContext,
+    inferrer.inferPropertyGet(factory, this, null, fileOffset, typeContext,
         interfaceMember: interfaceTarget, propertyName: name);
+    return inferredType;
   }
 }
 
 /// Concrete shadow object representing a switch statement in kernel form.
-class ShadowSwitchStatement extends SwitchStatement implements ShadowStatement {
+class ShadowSwitchStatement extends SwitchStatement
+    implements StatementJudgment {
   ShadowSwitchStatement(Expression expression, List<SwitchCase> cases)
       : super(expression, cases);
 
   @override
-  void _inferStatement(ShadowTypeInferrer inferrer) {
-    var expressionType =
-        inferrer.inferExpression(expression, const UnknownType(), true);
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
+    inferrer.listener.switchStatementEnter(fileOffset);
+    var expressionType = inferrer.inferExpression(
+        factory, expression, const UnknownType(), true);
     for (var switchCase in cases) {
       for (var caseExpression in switchCase.expressions) {
-        inferrer.inferExpression(caseExpression, expressionType, false);
+        inferrer.inferExpression(
+            factory, caseExpression, expressionType, false);
       }
-      inferrer.inferStatement(switchCase.body);
+      inferrer.inferStatement(factory, switchCase.body);
     }
+    inferrer.listener.switchStatementExit(fileOffset);
   }
 }
 
 /// Shadow object for [SymbolLiteral].
-class ShadowSymbolLiteral extends SymbolLiteral implements ShadowExpression {
+class ShadowSymbolLiteral extends SymbolLiteral implements ExpressionJudgment {
+  DartType inferredType;
+
   ShadowSymbolLiteral(String value) : super(value);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    return inferrer.coreTypes.symbolClass.rawType;
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.symbolLiteralEnter(fileOffset, typeContext);
+    var inferredType = inferrer.coreTypes.symbolClass.rawType;
+    inferrer.listener.symbolLiteralExit(fileOffset, inferredType);
+    return inferredType;
   }
 }
 
@@ -1955,7 +2461,9 @@
 ///
 /// These expressions are removed by type inference and replaced with their
 /// desugared equivalents.
-class ShadowSyntheticExpression extends Let implements ShadowExpression {
+class ShadowSyntheticExpression extends Let implements ExpressionJudgment {
+  DartType inferredType;
+
   ShadowSyntheticExpression(Expression desugared)
       : super(new VariableDeclaration('_', initializer: new NullLiteral()),
             desugared);
@@ -1969,7 +2477,10 @@
   }
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
     _replaceWithDesugared();
     return const DynamicType();
   }
@@ -2013,47 +2524,79 @@
   }
 }
 
-/// Shadow object for [ThisExpression].
-class ShadowThisExpression extends ThisExpression implements ShadowExpression {
+class ThisJudgment extends ThisExpression implements ExpressionJudgment {
+  DartType inferredType;
+
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    return (inferrer.thisType ?? const DynamicType());
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.thisExpressionEnter(fileOffset, typeContext);
+    inferredType = inferrer.thisType ?? const DynamicType();
+    inferrer.listener.thisExpressionExit(fileOffset, inferredType);
+    return inferredType;
   }
 }
 
-/// Shadow object for [Throw].
-class ShadowThrow extends Throw implements ShadowExpression {
-  ShadowThrow(Expression expression) : super(expression);
+class ThrowJudgment extends Throw implements ExpressionJudgment {
+  DartType inferredType;
+
+  ExpressionJudgment get judgment => expression;
+
+  ThrowJudgment(Expression expression) : super(expression);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.inferExpression(expression, const UnknownType(), false);
-    return const BottomType();
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.throwEnter(fileOffset, typeContext);
+    inferrer.inferExpression(factory, judgment, const UnknownType(), false);
+    inferredType = const BottomType();
+    inferrer.listener.throwExit(fileOffset, inferredType);
+    return inferredType;
   }
 }
 
 /// Concrete shadow object representing a try-catch block in kernel form.
-class ShadowTryCatch extends TryCatch implements ShadowStatement {
+class ShadowTryCatch extends TryCatch implements StatementJudgment {
   ShadowTryCatch(Statement body, List<Catch> catches) : super(body, catches);
 
   @override
-  void _inferStatement(ShadowTypeInferrer inferrer) {
-    inferrer.inferStatement(body);
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
+    inferrer.listener.tryCatchEnter(fileOffset);
+    inferrer.inferStatement(factory, body);
     for (var catch_ in catches) {
-      inferrer.inferStatement(catch_.body);
+      inferrer.listener.catchStatementEnter(
+          catch_.fileOffset,
+          catch_.guard,
+          catch_.exception?.fileOffset,
+          catch_.exception?.type,
+          catch_.stackTrace?.fileOffset,
+          catch_.stackTrace?.type);
+      inferrer.inferStatement(factory, catch_.body);
+      inferrer.listener.catchStatementExit(catch_.fileOffset);
     }
+    inferrer.listener.tryCatchExit(fileOffset);
   }
 }
 
 /// Concrete shadow object representing a try-finally block in kernel form.
-class ShadowTryFinally extends TryFinally implements ShadowStatement {
+class ShadowTryFinally extends TryFinally implements StatementJudgment {
   ShadowTryFinally(Statement body, Statement finalizer)
       : super(body, finalizer);
 
   @override
-  void _inferStatement(ShadowTypeInferrer inferrer) {
-    inferrer.inferStatement(body);
-    inferrer.inferStatement(finalizer);
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
+    inferrer.listener.tryFinallyEnter(fileOffset);
+    inferrer.inferStatement(factory, body);
+    inferrer.inferStatement(factory, finalizer);
+    inferrer.listener.tryFinallyExit(fileOffset);
   }
 }
 
@@ -2069,15 +2612,21 @@
 
   @override
   ShadowTypeInferrer createLocalTypeInferrer(
-      Uri uri, InterfaceType thisType, SourceLibraryBuilder library) {
-    return new ShadowTypeInferrer._(this, uri, false, thisType, library);
+      Uri uri,
+      TypeInferenceListener<int, int, Node, int> listener,
+      InterfaceType thisType,
+      SourceLibraryBuilder library) {
+    return new ShadowTypeInferrer._(
+        this, uri, listener, false, thisType, library);
   }
 
   @override
   ShadowTypeInferrer createTopLevelTypeInferrer(
-      InterfaceType thisType, ShadowField field) {
-    return field._typeInferrer =
-        new ShadowTypeInferrer._(this, field.fileUri, true, thisType, null);
+      TypeInferenceListener<int, int, Node, int> listener,
+      InterfaceType thisType,
+      ShadowField field) {
+    return field._typeInferrer = new ShadowTypeInferrer._(
+        this, field.fileUri, listener, true, thisType, null);
   }
 
   @override
@@ -2092,10 +2641,15 @@
   @override
   final typePromoter;
 
-  ShadowTypeInferrer._(ShadowTypeInferenceEngine engine, Uri uri, bool topLevel,
-      InterfaceType thisType, SourceLibraryBuilder library)
+  ShadowTypeInferrer._(
+      ShadowTypeInferenceEngine engine,
+      Uri uri,
+      TypeInferenceListener<int, int, Node, int> listener,
+      bool topLevel,
+      InterfaceType thisType,
+      SourceLibraryBuilder library)
       : typePromoter = new ShadowTypePromoter(engine.typeSchemaEnvironment),
-        super(engine, uri, topLevel, thisType, library);
+        super(engine, uri, listener, topLevel, thisType, library);
 
   @override
   Expression getFieldInitializer(ShadowField field) {
@@ -2103,8 +2657,11 @@
   }
 
   @override
-  DartType inferExpression(
-      Expression expression, DartType typeContext, bool typeNeeded) {
+  DartType inferExpression<Expression, Statement, Initializer, Type>(
+      Factory<Expression, Statement, Initializer, Type> factory,
+      kernel.Expression expression,
+      DartType typeContext,
+      bool typeNeeded) {
     // `null` should never be used as the type context.  An instance of
     // `UnknownType` should be used instead.
     assert(typeContext != null);
@@ -2123,13 +2680,14 @@
     // those subexpressions.
     if (!typeNeeded && isTopLevel) return null;
 
-    if (expression is ShadowExpression) {
+    if (expression is ExpressionJudgment) {
       // Use polymorphic dispatch on [KernelExpression] to perform whatever kind
       // of type inference is correct for this kind of statement.
       // TODO(paulberry): experiment to see if dynamic dispatch would be better,
       // so that the type hierarchy will be simpler (which may speed up "is"
       // checks).
-      return expression._inferExpression(this, typeContext);
+      return expression.inferredType =
+          expression.infer(this, factory, typeContext);
     } else {
       // Encountered an expression type for which type inference is not yet
       // implemented, so just infer dynamic for now.
@@ -2140,38 +2698,47 @@
   }
 
   @override
-  DartType inferFieldTopLevel(ShadowField field, bool typeNeeded) {
+  DartType inferFieldTopLevel<Expression, Statement, Initializer, Type>(
+      Factory<Expression, Statement, Initializer, Type> factory,
+      ShadowField field,
+      bool typeNeeded) {
     if (field.initializer == null) return const DynamicType();
-    return inferExpression(field.initializer, const UnknownType(), typeNeeded);
+    return inferExpression(
+        factory, field.initializer, const UnknownType(), typeNeeded);
   }
 
   @override
-  void inferInitializer(InferenceHelper helper, Initializer initializer) {
-    assert(initializer is ShadowInitializer);
+  void inferInitializer<Expression, Statement, Initializer, Type>(
+      InferenceHelper helper,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      kernel.Initializer initializer) {
+    assert(initializer is InitializerJudgment);
     this.helper = helper;
     // Use polymorphic dispatch on [KernelInitializer] to perform whatever
     // kind of type inference is correct for this kind of initializer.
     // TODO(paulberry): experiment to see if dynamic dispatch would be better,
     // so that the type hierarchy will be simpler (which may speed up "is"
     // checks).
-    ShadowInitializer kernelInitializer = initializer;
-    kernelInitializer._inferInitializer(this);
+    InitializerJudgment kernelInitializer = initializer;
+    kernelInitializer.infer(this, factory);
     this.helper = null;
   }
 
   @override
-  void inferStatement(Statement statement) {
+  void inferStatement<Expression, Statement, Initializer, Type>(
+      Factory<Expression, Statement, Initializer, Type> factory,
+      Statement statement) {
     // For full (non-top level) inference, we need access to the
     // ExpressionGeneratorHelper so that we can perform error recovery.
     if (!isTopLevel) assert(helper != null);
 
-    if (statement is ShadowStatement) {
+    if (statement is StatementJudgment) {
       // Use polymorphic dispatch on [KernelStatement] to perform whatever kind
       // of type inference is correct for this kind of statement.
       // TODO(paulberry): experiment to see if dynamic dispatch would be better,
       // so that the type hierarchy will be simpler (which may speed up "is"
       // checks).
-      return statement._inferStatement(this);
+      return statement.infer(this, factory);
     } else {
       // Encountered a statement type for which type inference is not yet
       // implemented, so just skip it for now.
@@ -2181,13 +2748,20 @@
   }
 }
 
-/// Shadow object for [TypeLiteral].
-class ShadowTypeLiteral extends TypeLiteral implements ShadowExpression {
-  ShadowTypeLiteral(DartType type) : super(type);
+class TypeLiteralJudgment extends TypeLiteral implements ExpressionJudgment {
+  DartType inferredType;
+
+  TypeLiteralJudgment(DartType type) : super(type);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    return inferrer.coreTypes.typeClass.rawType;
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.typeLiteralEnter(fileOffset, typeContext);
+    inferredType = inferrer.coreTypes.typeClass.rawType;
+    inferrer.listener.typeLiteralExit(fileOffset, type, inferredType);
+    return inferredType;
   }
 }
 
@@ -2199,7 +2773,7 @@
 
   @override
   int getVariableFunctionNestingLevel(VariableDeclaration variable) {
-    if (variable is ShadowVariableDeclaration) {
+    if (variable is VariableDeclarationJudgment) {
       return variable._functionNestingLevel;
     } else {
       // Hack to deal with the fact that BodyBuilder still creates raw
@@ -2212,8 +2786,8 @@
 
   @override
   bool isPromotionCandidate(VariableDeclaration variable) {
-    assert(variable is ShadowVariableDeclaration);
-    ShadowVariableDeclaration kernelVariableDeclaration = variable;
+    assert(variable is VariableDeclarationJudgment);
+    VariableDeclarationJudgment kernelVariableDeclaration = variable;
     return !kernelVariableDeclaration._isLocalFunction;
   }
 
@@ -2224,7 +2798,7 @@
 
   @override
   void setVariableMutatedAnywhere(VariableDeclaration variable) {
-    if (variable is ShadowVariableDeclaration) {
+    if (variable is VariableDeclarationJudgment) {
       variable._mutatedAnywhere = true;
     } else {
       // Hack to deal with the fact that BodyBuilder still creates raw
@@ -2236,7 +2810,7 @@
 
   @override
   void setVariableMutatedInClosure(VariableDeclaration variable) {
-    if (variable is ShadowVariableDeclaration) {
+    if (variable is VariableDeclarationJudgment) {
       variable._mutatedInClosure = true;
     } else {
       // Hack to deal with the fact that BodyBuilder still creates raw
@@ -2248,7 +2822,7 @@
 
   @override
   bool wasVariableMutatedAnywhere(VariableDeclaration variable) {
-    if (variable is ShadowVariableDeclaration) {
+    if (variable is VariableDeclarationJudgment) {
       return variable._mutatedAnywhere;
     } else {
       // Hack to deal with the fact that BodyBuilder still creates raw
@@ -2260,9 +2834,8 @@
   }
 }
 
-/// Concrete shadow object representing an assignment to a local variable.
-class ShadowVariableAssignment extends ShadowComplexAssignment {
-  ShadowVariableAssignment(Expression rhs) : super(rhs);
+class VariableAssignmentJudgment extends ShadowComplexAssignment {
+  VariableAssignmentJudgment(Expression rhs) : super(rhs);
 
   @override
   DartType _getWriteType(ShadowTypeInferrer inferrer) {
@@ -2271,7 +2844,11 @@
   }
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    inferrer.listener.variableAssignEnter(this.write.fileOffset, typeContext);
     DartType readType;
     var read = this.read;
     if (read is VariableGet) {
@@ -2285,15 +2862,21 @@
         _storeLetType(inferrer, read, writeContext);
       }
     }
-    var inferredResult = _inferRhs(inferrer, readType, writeContext);
+    var inferredResult = _inferRhs(inferrer, factory, readType, writeContext);
+    inferrer.listener.variableAssignExit(
+        write.fileOffset,
+        writeContext,
+        write is VariableSet ? write.variable.fileOffset : null,
+        inferredResult.combiner,
+        inferredResult.type);
     _replaceWithDesugared();
-    return inferredResult.type;
+    return inferredType = inferredResult.type;
   }
 }
 
 /// Concrete shadow object representing a variable declaration in kernel form.
-class ShadowVariableDeclaration extends VariableDeclaration
-    implements ShadowStatement {
+class VariableDeclarationJudgment extends VariableDeclaration
+    implements StatementJudgment {
   final bool _implicitlyTyped;
 
   final int _functionNestingLevel;
@@ -2304,7 +2887,7 @@
 
   final bool _isLocalFunction;
 
-  ShadowVariableDeclaration(String name, this._functionNestingLevel,
+  VariableDeclarationJudgment(String name, this._functionNestingLevel,
       {Expression initializer,
       DartType type,
       bool isFinal: false,
@@ -2322,46 +2905,57 @@
             isFieldFormal: isFieldFormal,
             isCovariant: isCovariant);
 
-  ShadowVariableDeclaration.forEffect(
+  VariableDeclarationJudgment.forEffect(
       Expression initializer, this._functionNestingLevel)
       : _implicitlyTyped = false,
         _isLocalFunction = false,
         super.forValue(initializer);
 
-  ShadowVariableDeclaration.forValue(
+  VariableDeclarationJudgment.forValue(
       Expression initializer, this._functionNestingLevel)
       : _implicitlyTyped = true,
         _isLocalFunction = false,
         super.forValue(initializer);
 
-  @override
-  void _inferStatement(ShadowTypeInferrer inferrer) {
-    inferrer.inferMetadataKeepingHelper(annotations);
+  List<Expression> get annotationJudgments => annotations;
 
-    // After the inference was done on the annotations, we may clone them for
-    // this instance of VariableDeclaration in order to avoid having the same
-    // annotation node for two VariableDeclaration nodes in a situation like
-    // the following:
-    //
-    //     class Foo { const Foo(List<String> list); }
-    //
-    //     @Foo(const [])
-    //     var x, y;
-    CloneVisitor cloner = new CloneVisitor();
-    for (int i = 0; i < annotations.length; ++i) {
-      Expression annotation = annotations[i];
-      if (annotation.parent != this) {
-        annotations[i] = cloner.clone(annotation);
-        annotations[i].parent = this;
+  ExpressionJudgment get initializerJudgment => initializer;
+
+  @override
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
+    inferrer.listener.variableDeclarationEnter(fileOffset);
+    if (annotationJudgments.isNotEmpty) {
+      inferrer.inferMetadataKeepingHelper(factory, annotationJudgments);
+
+      // After the inference was done on the annotations, we may clone them for
+      // this instance of VariableDeclaration in order to avoid having the same
+      // annotation node for two VariableDeclaration nodes in a situation like
+      // the following:
+      //
+      //     class Foo { const Foo(List<String> list); }
+      //
+      //     @Foo(const [])
+      //     var x, y;
+      CloneVisitor cloner = new CloneVisitor();
+      for (int i = 0; i < annotations.length; ++i) {
+        kernel.Expression annotation = annotations[i];
+        if (annotation.parent != this) {
+          annotations[i] = cloner.clone(annotation);
+          annotations[i].parent = this;
+        }
       }
     }
 
+    var initializerJudgment = this.initializerJudgment;
     var declaredType = _implicitlyTyped ? const UnknownType() : type;
     DartType inferredType;
     DartType initializerType;
-    if (initializer != null) {
-      initializerType = inferrer.inferExpression(
-          initializer, declaredType, !inferrer.isTopLevel || _implicitlyTyped);
+    if (initializerJudgment != null) {
+      inferrer.inferExpression(factory, initializerJudgment, declaredType,
+          !inferrer.isTopLevel || _implicitlyTyped);
+      initializerType = initializerJudgment.inferredType;
       inferredType = inferrer.inferDeclarationType(initializerType);
     } else {
       inferredType = const DynamicType();
@@ -2378,40 +2972,61 @@
         initializer = replacedInitializer;
       }
     }
+    inferrer.listener.variableDeclarationExit(
+        fileOffset, type, _implicitlyTyped ? inferredType : type);
   }
 
-  /// Determine whether the given [ShadowVariableDeclaration] had an implicit
+  /// Determine whether the given [VariableDeclarationJudgment] had an implicit
   /// type.
   ///
   /// This is static to avoid introducing a method that would be visible to
   /// the kernel.
-  static bool isImplicitlyTyped(ShadowVariableDeclaration variable) =>
+  static bool isImplicitlyTyped(VariableDeclarationJudgment variable) =>
       variable._implicitlyTyped;
 
-  /// Determines whether the given [ShadowVariableDeclaration] represents a
+  /// Determines whether the given [VariableDeclarationJudgment] represents a
   /// local function.
   ///
   /// This is static to avoid introducing a method that would be visible to the
   /// kernel.
-  static bool isLocalFunction(ShadowVariableDeclaration variable) =>
+  static bool isLocalFunction(VariableDeclarationJudgment variable) =>
       variable._isLocalFunction;
 }
 
 /// Concrete shadow object representing a read from a variable in kernel form.
-class ShadowVariableGet extends VariableGet implements ShadowExpression {
+class VariableGetJudgment extends VariableGet implements ExpressionJudgment {
+  DartType inferredType;
+
   final TypePromotionFact _fact;
 
   final TypePromotionScope _scope;
 
-  ShadowVariableGet(VariableDeclaration variable, this._fact, this._scope)
+  VariableGetJudgment(VariableDeclaration variable, this._fact, this._scope)
       : super(variable);
 
+  /// Return `true` if the given [variable] declaration occurs in a let
+  /// expression that is, or is part of, a cascade expression.
+  bool _isInCascade() {
+    TreeNode ancestor = variable.parent;
+    while (ancestor is Let) {
+      if (ancestor is ShadowCascadeExpression) {
+        return true;
+      }
+      ancestor = ancestor.parent;
+    }
+    return false;
+  }
+
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    var variable = this.variable as ShadowVariableDeclaration;
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    VariableDeclarationJudgment variable = this.variable;
     bool mutatedInClosure = variable._mutatedInClosure;
     DartType declaredOrInferredType = variable.type;
 
+    inferrer.listener.variableGetEnter(fileOffset, typeContext);
     DartType promotedType = inferrer.typePromoter
         .computePromotedType(_fact, _scope, mutatedInClosure);
     if (promotedType != null) {
@@ -2423,35 +3038,47 @@
     if (variable._isLocalFunction) {
       type = inferrer.instantiateTearOff(type, typeContext, this);
     }
-    return type;
+    inferredType = type;
+    inferrer.listener.variableGetExit(
+        fileOffset, _isInCascade(), variable.fileOffset, inferredType);
+    return inferredType;
   }
 }
 
 /// Concrete shadow object representing a while loop in kernel form.
-class ShadowWhileStatement extends WhileStatement implements ShadowStatement {
+class ShadowWhileStatement extends WhileStatement implements StatementJudgment {
   ShadowWhileStatement(Expression condition, Statement body)
       : super(condition, body);
 
   @override
-  void _inferStatement(ShadowTypeInferrer inferrer) {
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
+    inferrer.listener.whileStatementEnter(fileOffset);
     var expectedType = inferrer.coreTypes.boolClass.rawType;
-    var actualType =
-        inferrer.inferExpression(condition, expectedType, !inferrer.isTopLevel);
+    var actualType = inferrer.inferExpression(
+        factory, condition, expectedType, !inferrer.isTopLevel);
     inferrer.ensureAssignable(
         expectedType, actualType, condition, condition.fileOffset);
-    inferrer.inferStatement(body);
+    inferrer.inferStatement(factory, body);
+    inferrer.listener.whileStatementExit(fileOffset);
   }
 }
 
 /// Concrete shadow object representing a yield statement in kernel form.
-class ShadowYieldStatement extends YieldStatement implements ShadowStatement {
-  ShadowYieldStatement(Expression expression, {bool isYieldStar: false})
+class YieldJudgment extends YieldStatement implements StatementJudgment {
+  YieldJudgment(Expression expression, {bool isYieldStar: false})
       : super(expression, isYieldStar: isYieldStar);
 
+  ExpressionJudgment get judgment => expression;
+
   @override
-  void _inferStatement(ShadowTypeInferrer inferrer) {
+  void infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory) {
+    inferrer.listener.yieldStatementEnter(fileOffset);
+    var judgment = this.judgment;
     var closureContext = inferrer.closureContext;
-    DartType inferredType;
     if (closureContext.isGenerator) {
       var typeContext = closureContext.returnOrYieldContext;
       if (isYieldStar && typeContext != null) {
@@ -2461,37 +3088,55 @@
                 ? inferrer.coreTypes.streamClass
                 : inferrer.coreTypes.iterableClass);
       }
-      inferredType = inferrer.inferExpression(expression, typeContext, true);
+      inferrer.inferExpression(factory, judgment, typeContext, true);
     } else {
-      inferredType =
-          inferrer.inferExpression(expression, const UnknownType(), true);
+      inferrer.inferExpression(factory, judgment, const UnknownType(), true);
     }
     closureContext.handleYield(
-        inferrer, isYieldStar, inferredType, expression, fileOffset);
+        inferrer, isYieldStar, judgment.inferredType, expression, fileOffset);
+    inferrer.listener.yieldStatementExit(fileOffset);
   }
 }
 
 /// Concrete shadow object representing a deferred load library call.
-class ShadowLoadLibrary extends LoadLibrary implements ShadowExpression {
-  ShadowLoadLibrary(LibraryDependency import) : super(import);
+class LoadLibraryJudgment extends LoadLibrary implements ExpressionJudgment {
+  DartType inferredType;
+
+  LoadLibraryJudgment(LibraryDependency import) : super(import);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    return super.getStaticType(inferrer.typeSchemaEnvironment);
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    return inferredType =
+        inferrer.typeSchemaEnvironment.futureType(const DynamicType());
   }
 }
 
 /// Concrete shadow object representing a deferred library-is-loaded check.
-class ShadowCheckLibraryIsLoaded extends CheckLibraryIsLoaded
-    implements ShadowExpression {
-  ShadowCheckLibraryIsLoaded(LibraryDependency import) : super(import);
+class CheckLibraryIsLoadedJudgment extends CheckLibraryIsLoaded
+    implements ExpressionJudgment {
+  DartType inferredType;
+
+  CheckLibraryIsLoadedJudgment(LibraryDependency import) : super(import);
 
   @override
-  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    return super.getStaticType(inferrer.typeSchemaEnvironment);
+  DartType infer<Expression, Statement, Initializer, Type>(
+      ShadowTypeInferrer inferrer,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext) {
+    return inferredType = inferrer.typeSchemaEnvironment.objectType;
   }
 }
 
+/// Concrete shadow object representing a named expression.
+class NamedExpressionJudgment extends NamedExpression {
+  NamedExpressionJudgment(String name, Expression value) : super(name, value);
+
+  ExpressionJudgment get judgment => value;
+}
+
 /// The result of inference for a RHS of an assignment.
 class _ComplexAssignmentInferenceResult {
   /// The resolved combiner [Procedure], e.g. `operator+` for `a += 2`, or
diff --git a/pkg/front_end/lib/src/fasta/kernel/toplevel_inference_factory.dart b/pkg/front_end/lib/src/fasta/kernel/toplevel_inference_factory.dart
new file mode 100644
index 0000000..54bc2a2
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/kernel/toplevel_inference_factory.dart
@@ -0,0 +1,412 @@
+// Copyright (c) 2018, 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:front_end/src/scanner/token.dart' show Token;
+
+import 'package:kernel/ast.dart' show Catch, DartType, FunctionType, Node;
+
+import 'package:kernel/type_algebra.dart' show Substitution;
+
+import 'factory.dart' show Factory;
+
+import 'kernel_shadow_ast.dart'
+    show ExpressionJudgment, InitializerJudgment, StatementJudgment;
+
+/// Implementation of [Factory] for use during top level type inference, when
+/// no representation of the code semantics needs to be created (only the type
+/// needs to be inferred).
+class ToplevelInferenceFactory implements Factory<void, void, void, void> {
+  const ToplevelInferenceFactory();
+
+  @override
+  void asExpression(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      void expression,
+      Token asOperator,
+      void literalType,
+      DartType inferredType) {}
+
+  @override
+  void assertInitializer(
+      InitializerJudgment judgment,
+      int fileOffset,
+      Token assertKeyword,
+      Token leftParenthesis,
+      void condition,
+      Token comma,
+      void message,
+      Token rightParenthesis) {}
+
+  @override
+  void assertStatement(
+      StatementJudgment judgment,
+      int fileOffset,
+      Token assertKeyword,
+      Token leftParenthesis,
+      void condition,
+      Token comma,
+      void message,
+      Token rightParenthesis,
+      Token semicolon) {}
+
+  @override
+  void awaitExpression(ExpressionJudgment judgment, int fileOffset,
+      Token awaitKeyword, void expression, DartType inferredType) {}
+
+  @override
+  void block(StatementJudgment judgment, int fileOffset, Token leftBracket,
+      void statements, Token rightBracket) {}
+
+  @override
+  void boolLiteral(ExpressionJudgment judgment, int fileOffset, Token literal,
+      bool value, DartType inferredType) {}
+
+  @override
+  void breakStatement(StatementJudgment judgment, int fileOffset,
+      Token breakKeyword, void label, Token semicolon) {}
+
+  @override
+  void cascadeExpression(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType) {}
+
+  @override
+  Object catchStatement(
+      Catch judgment,
+      int fileOffset,
+      Token onKeyword,
+      void type,
+      Token catchKeyword,
+      Token leftParenthesis,
+      Token exceptionParameter,
+      Token comma,
+      Token stackTraceParameter,
+      Token rightParenthesis,
+      void body,
+      DartType guardType,
+      int exceptionOffset,
+      DartType exceptionType,
+      int stackTraceOffset,
+      DartType stackTraceType) {
+    return judgment;
+  }
+
+  @override
+  void conditionalExpression(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      void condition,
+      Token question,
+      void thenExpression,
+      Token colon,
+      void elseExpression,
+      DartType inferredType) {}
+
+  @override
+  void constructorInvocation(ExpressionJudgment judgment, int fileOffset,
+      Node expressionTarget, DartType inferredType) {}
+
+  @override
+  void continueStatement(StatementJudgment judgment, int fileOffset,
+      Token continueKeyword, void label, Token semicolon) {}
+
+  @override
+  void continueSwitchStatement(StatementJudgment judgment, int fileOffset,
+      Token continueKeyword, void label, Token semicolon) {}
+
+  @override
+  void deferredCheck(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType) {}
+
+  @override
+  void doStatement(
+      StatementJudgment judgment,
+      int fileOffset,
+      Token doKeyword,
+      void body,
+      Token whileKeyword,
+      Token leftParenthesis,
+      void condition,
+      Token rightParenthesis,
+      Token semicolon) {}
+
+  @override
+  void doubleLiteral(ExpressionJudgment judgment, int fileOffset, Token literal,
+      double value, DartType inferredType) {}
+
+  @override
+  void expressionStatement(StatementJudgment judgment, int fileOffset,
+      void expression, Token semicolon) {}
+
+  @override
+  void fieldInitializer(
+      InitializerJudgment judgment, int fileOffset, Node initializerField) {}
+
+  @override
+  void forInStatement(
+      StatementJudgment judgment,
+      int fileOffset,
+      int variableOffset,
+      DartType variableType,
+      int writeOffset,
+      DartType writeVariableType,
+      int writeVariableDeclarationOffset,
+      Node writeTarget) {}
+
+  @override
+  void forStatement(StatementJudgment judgment, int fileOffset) {}
+
+  @override
+  void functionDeclaration(
+      StatementJudgment judgment, int fileOffset, FunctionType inferredType) {}
+
+  @override
+  void functionExpression(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType) {}
+
+  @override
+  void ifNull(ExpressionJudgment judgment, int fileOffset, void leftOperand,
+      Token operator, void rightOperand, DartType inferredType) {}
+
+  @override
+  void ifStatement(
+      StatementJudgment judgment,
+      int fileOffset,
+      Token ifKeyword,
+      Token leftParenthesis,
+      void condition,
+      Token rightParenthesis,
+      void thenStatement,
+      Token elseKeyword,
+      void elseStatement) {}
+
+  @override
+  void indexAssign(ExpressionJudgment judgment, int fileOffset,
+      Node writeMember, Node combiner, DartType inferredType) {}
+
+  @override
+  void intLiteral(ExpressionJudgment judgment, int fileOffset, Token literal,
+      num value, DartType inferredType) {}
+
+  @override
+  void invalidInitializer(InitializerJudgment judgment, int fileOffset) {}
+
+  @override
+  void isExpression(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      void expression,
+      Token isOperator,
+      void literalType,
+      DartType testedType,
+      DartType inferredType) {}
+
+  @override
+  void isNotExpression(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      void expression,
+      Token isOperator,
+      Token notOperator,
+      void literalType,
+      DartType testedType,
+      DartType inferredType) {}
+
+  @override
+  void labeledStatement(StatementJudgment judgment, int fileOffset) {}
+
+  @override
+  void listLiteral(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType) {}
+
+  @override
+  void logicalExpression(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      void leftOperand,
+      Token operator,
+      void rightOperand,
+      DartType inferredType) {}
+
+  @override
+  void mapLiteral(
+      ExpressionJudgment judgment, int fileOffset, DartType typeContext) {}
+
+  @override
+  void methodInvocation(
+      ExpressionJudgment judgment,
+      int resultOffset,
+      List<DartType> argumentsTypes,
+      bool isImplicitCall,
+      Node interfaceMember,
+      FunctionType calleeType,
+      Substitution substitution,
+      DartType inferredType) {}
+
+  @override
+  void methodInvocationCall(
+      ExpressionJudgment judgment,
+      int resultOffset,
+      List<DartType> argumentsTypes,
+      bool isImplicitCall,
+      FunctionType calleeType,
+      Substitution substitution,
+      DartType inferredType) {}
+
+  @override
+  void namedFunctionExpression(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType) {}
+
+  @override
+  void not(ExpressionJudgment judgment, int fileOffset, Token operator,
+      void operand, DartType inferredType) {}
+
+  @override
+  void nullLiteral(ExpressionJudgment judgment, int fileOffset, Token literal,
+      bool isSynthetic, DartType inferredType) {}
+
+  @override
+  void propertyAssign(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      Node writeMember,
+      DartType writeContext,
+      Node combiner,
+      DartType inferredType) {}
+
+  @override
+  void propertyGet(ExpressionJudgment judgment, int fileOffset, Node member,
+      DartType inferredType) {}
+
+  @override
+  void propertyGetCall(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType) {}
+
+  @override
+  void propertySet(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType) {}
+
+  @override
+  void redirectingInitializer(
+      InitializerJudgment judgment, int fileOffset, Node initializerTarget) {}
+
+  @override
+  void rethrow_(ExpressionJudgment judgment, int fileOffset,
+      Token rethrowKeyword, DartType inferredType) {}
+
+  @override
+  void returnStatement(StatementJudgment judgment, int fileOffset,
+      Token returnKeyword, void expression, Token semicolon) {}
+
+  @override
+  void staticAssign(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      Node writeMember,
+      DartType writeContext,
+      Node combiner,
+      DartType inferredType) {}
+
+  @override
+  void staticGet(ExpressionJudgment judgment, int fileOffset,
+      Node expressionTarget, DartType inferredType) {}
+
+  @override
+  void staticInvocation(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      Node expressionTarget,
+      List<DartType> expressionArgumentsTypes,
+      FunctionType calleeType,
+      Substitution substitution,
+      DartType inferredType) {}
+
+  @override
+  void storeClassReference(int fileOffset, Node reference, DartType rawType) {}
+
+  @override
+  void storePrefixInfo(int fileOffset, int prefixImportIndex) {}
+
+  @override
+  void stringConcatenation(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType) {}
+
+  @override
+  void stringLiteral(ExpressionJudgment judgment, int fileOffset, Token literal,
+      String value, DartType inferredType) {}
+
+  @override
+  void superInitializer(InitializerJudgment judgment, int fileOffset) {}
+
+  @override
+  void switchStatement(StatementJudgment judgment, int fileOffset) {}
+
+  @override
+  void symbolLiteral(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      Token poundSign,
+      List<Token> components,
+      String value,
+      DartType inferredType) {}
+
+  @override
+  void thisExpression(ExpressionJudgment judgment, int fileOffset,
+      Token thisKeyword, DartType inferredType) {}
+
+  @override
+  void throw_(ExpressionJudgment judgment, int fileOffset, Token throwKeyword,
+      void expression, DartType inferredType) {}
+
+  @override
+  void tryCatch(StatementJudgment judgment, int fileOffset) {}
+
+  @override
+  void tryFinally(StatementJudgment judgment, int fileOffset) {}
+
+  @override
+  void typeLiteral(ExpressionJudgment judgment, int fileOffset,
+      Node expressionType, DartType inferredType) {}
+
+  @override
+  void variableAssign(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      DartType writeContext,
+      int writeVariableDeclarationOffset,
+      Node combiner,
+      DartType inferredType) {}
+
+  @override
+  void variableDeclaration(StatementJudgment judgment, int fileOffset,
+      DartType statementType, DartType inferredType) {}
+
+  @override
+  void variableGet(
+      ExpressionJudgment judgment,
+      int fileOffset,
+      bool isInCascade,
+      int expressionVariableDeclarationOffset,
+      DartType inferredType) {}
+
+  @override
+  void variableSet(
+      ExpressionJudgment judgment, int fileOffset, DartType inferredType) {}
+
+  @override
+  void whileStatement(
+      StatementJudgment judgment,
+      int fileOffset,
+      Token whileKeyword,
+      Token leftParenthesis,
+      void condition,
+      Token rightParenthesis,
+      void body) {}
+
+  @override
+  void yieldStatement(StatementJudgment judgment, int fileOffset,
+      Token yieldKeyword, Token star, void expression, Token semicolon) {}
+}
+
+const toplevelInferenceFactory = const ToplevelInferenceFactory();
diff --git a/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart b/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
index 9e8809f..0abc7d3 100644
--- a/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
+++ b/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
@@ -1249,6 +1249,12 @@
   }
 
   @override
+  void handleUnescapeError(
+      Message message, Token location, int offset, int length) {
+    listener?.handleUnescapeError(message, location, offset, length);
+  }
+
+  @override
   void handleStringPart(Token token) {
     listener?.handleStringPart(token);
   }
diff --git a/pkg/front_end/lib/src/fasta/parser/listener.dart b/pkg/front_end/lib/src/fasta/parser/listener.dart
index 8e26b03..dba1f6c 100644
--- a/pkg/front_end/lib/src/fasta/parser/listener.dart
+++ b/pkg/front_end/lib/src/fasta/parser/listener.dart
@@ -9,6 +9,8 @@
 import '../fasta_codes.dart'
     show Message, messageNativeClauseShouldBeAnnotation;
 
+import '../quote.dart' show UnescapeErrorListener;
+
 import 'assert.dart' show Assert;
 
 import 'formal_parameter_kind.dart' show FormalParameterKind;
@@ -30,7 +32,7 @@
 ///
 /// Events starting with `handle` are used when isn't possible to have a begin
 /// event.
-class Listener {
+class Listener implements UnescapeErrorListener {
   final List<ParserError> recoverableErrors = <ParserError>[];
 
   Uri get uri => null;
@@ -1232,6 +1234,12 @@
         .add(new ParserError.fromTokens(startToken, endToken, message));
   }
 
+  @override
+  void handleUnescapeError(
+      Message message, Token location, int stringOffset, int length) {
+    handleRecoverableError(message, location, location);
+  }
+
   /// Signals to the listener that the previous statement contained a semantic
   /// error (described by the given [message]). This method can also be called
   /// after [handleExpressionFunctionBody], in which case it signals that the
diff --git a/pkg/front_end/lib/src/fasta/parser/parser.dart b/pkg/front_end/lib/src/fasta/parser/parser.dart
index 8937d33..f70d408 100644
--- a/pkg/front_end/lib/src/fasta/parser/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser/parser.dart
@@ -1189,6 +1189,12 @@
             // Scanner has already reported a missing `)` error,
             // but placed the `)` in the wrong location, so move it.
             token = rewriter.moveSynthetic(token, begin.endGroup);
+          } else if (next.kind == IDENTIFIER_TOKEN &&
+              next.next.kind == IDENTIFIER_TOKEN) {
+            // Looks like a missing comma
+            Token comma = new SyntheticToken(TokenType.COMMA, next.charOffset);
+            token = rewriter.insertTokenAfter(token, comma).next;
+            continue;
           } else {
             reportRecoverableError(
                 next, fasta.templateExpectedButGot.withArguments(')'));
@@ -2961,7 +2967,8 @@
         }
         // Fall through to continue parsing `get` or `set` as an identifier.
       } else if (identical(value, 'factory')) {
-        if (next.next.isIdentifier) {
+        Token next2 = next.next;
+        if (next2.isIdentifier || next2.isModifier) {
           token = parseFactoryMethod(token, beforeStart, externalToken,
               staticToken ?? covariantToken, varFinalOrConst);
           listener.endMember();
@@ -3819,10 +3826,9 @@
   }
 
   Token parseExpressionWithoutCascade(Token token) {
-    Token result = optional('throw', token.next)
+    return optional('throw', token.next)
         ? parseThrowExpression(token, false)
         : parsePrecedenceExpression(token, ASSIGNMENT_PRECEDENCE, false);
-    return result;
   }
 
   Token parseConditionalExpressionRest(Token token) {
@@ -3868,7 +3874,10 @@
         } else if (identical(tokenLevel, ASSIGNMENT_PRECEDENCE)) {
           // Right associative, so we recurse at the same precedence
           // level.
-          token = parsePrecedenceExpression(token.next, level, allowCascades);
+          Token next = token.next;
+          token = optional('throw', next.next)
+              ? parseThrowExpression(next, false)
+              : parsePrecedenceExpression(next, level, allowCascades);
           listener.handleAssignmentExpression(operator);
         } else if (identical(tokenLevel, POSTFIX_PRECEDENCE)) {
           if ((identical(type, TokenType.PLUS_PLUS)) ||
@@ -3949,7 +3958,7 @@
     Token mark;
     do {
       mark = token;
-      if (optional('.', next)) {
+      if (optional('.', next) || optional('?.', next)) {
         Token period = next;
         token = parseSend(next, IdentifierContext.expressionContinuation);
         next = token.next;
diff --git a/pkg/front_end/lib/src/fasta/quote.dart b/pkg/front_end/lib/src/fasta/quote.dart
index ac3eaa7..682419f 100644
--- a/pkg/front_end/lib/src/fasta/quote.dart
+++ b/pkg/front_end/lib/src/fasta/quote.dart
@@ -4,10 +4,10 @@
 
 library fasta.quote;
 
-import 'deprecated_problems.dart' show deprecated_inputError;
-
 import 'problems.dart' show unhandled;
 
+import 'fasta_codes.dart' as fasta;
+
 import 'scanner/characters.dart'
     show
         $BACKSLASH,
@@ -121,36 +121,43 @@
   return unhandled("$quote", "lastQuoteLength", -1, null);
 }
 
-String unescapeFirstStringPart(String first, Quote quote) {
-  return unescape(first.substring(firstQuoteLength(first, quote)), quote);
+String unescapeFirstStringPart(String first, Quote quote, Object location,
+    UnescapeErrorListener listener) {
+  return unescape(first.substring(firstQuoteLength(first, quote)), quote,
+      location, listener);
 }
 
-String unescapeLastStringPart(String last, Quote quote) {
-  return unescape(
-      last.substring(0, last.length - lastQuoteLength(quote)), quote);
+String unescapeLastStringPart(
+    String last, Quote quote, Object location, UnescapeErrorListener listener) {
+  return unescape(last.substring(0, last.length - lastQuoteLength(quote)),
+      quote, location, listener);
 }
 
-String unescapeString(String string) {
+String unescapeString(
+    String string, Object location, UnescapeErrorListener listener) {
   Quote quote = analyzeQuote(string);
   return unescape(
       string.substring(firstQuoteLength(string, quote),
           string.length - lastQuoteLength(quote)),
-      quote);
+      quote,
+      location,
+      listener);
 }
 
-String unescape(String string, Quote quote) {
+String unescape(String string, Quote quote, Object location,
+    UnescapeErrorListener listener) {
   switch (quote) {
     case Quote.Single:
     case Quote.Double:
       return !string.contains("\\")
           ? string
-          : unescapeCodeUnits(string.codeUnits, false);
+          : unescapeCodeUnits(string.codeUnits, false, location, listener);
 
     case Quote.MultiLineSingle:
     case Quote.MultiLineDouble:
       return !string.contains("\\") && !string.contains("\r")
           ? string
-          : unescapeCodeUnits(string.codeUnits, false);
+          : unescapeCodeUnits(string.codeUnits, false, location, listener);
 
     case Quote.RawSingle:
     case Quote.RawDouble:
@@ -160,26 +167,18 @@
     case Quote.RawMultiLineDouble:
       return !string.contains("\r")
           ? string
-          : unescapeCodeUnits(string.codeUnits, true);
+          : unescapeCodeUnits(string.codeUnits, true, location, listener);
   }
   return unhandled("$quote", "unescape", -1, null);
 }
 
-const String incompleteSequence = "Incomplete escape sequence.";
-
-const String invalidCharacter = "Invalid character in escape sequence.";
-
-const String invalidCodePoint = "Invalid code point.";
-
 // Note: based on
 // [StringValidator.validateString](pkg/compiler/lib/src/string_validator.dart).
-String unescapeCodeUnits(List<int> codeUnits, bool isRaw) {
+String unescapeCodeUnits(List<int> codeUnits, bool isRaw, Object location,
+    UnescapeErrorListener listener) {
   // Can't use Uint8List or Uint16List here, the code units may be larger.
   List<int> result = new List<int>(codeUnits.length);
   int resultOffset = 0;
-  error(int offset, String message) {
-    deprecated_inputError(null, null, message);
-  }
 
   for (int i = 0; i < codeUnits.length; i++) {
     int code = codeUnits[i];
@@ -189,7 +188,11 @@
       }
       code = $LF;
     } else if (!isRaw && code == $BACKSLASH) {
-      if (codeUnits.length == ++i) return error(i, incompleteSequence);
+      if (codeUnits.length == ++i) {
+        listener.handleUnescapeError(
+            fasta.messageInvalidUnicodeEscape, location, i, 1);
+        return new String.fromCharCodes(codeUnits);
+      }
       code = codeUnits[i];
 
       /// `\n` for newline, equivalent to `\x0A`.
@@ -214,43 +217,86 @@
         code = $VTAB;
       } else if (code == $x) {
         // Expect exactly 2 hex digits.
-        if (codeUnits.length <= i + 2) return error(i, incompleteSequence);
+        int begin = i;
+        if (codeUnits.length <= i + 2) {
+          listener.handleUnescapeError(fasta.messageInvalidHexEscape, location,
+              begin, codeUnits.length + 1 - begin);
+          return new String.fromCharCodes(codeUnits);
+        }
         code = 0;
         for (int j = 0; j < 2; j++) {
           int digit = codeUnits[++i];
-          if (!isHexDigit(digit)) return error(i, invalidCharacter);
+          if (!isHexDigit(digit)) {
+            listener.handleUnescapeError(
+                fasta.messageInvalidHexEscape, location, begin, i + 1 - begin);
+            return new String.fromCharCodes(codeUnits);
+          }
           code = (code << 4) + hexDigitValue(digit);
         }
       } else if (code == $u) {
-        if (codeUnits.length == i + 1) return error(i, incompleteSequence);
+        int begin = i;
+        if (codeUnits.length == i + 1) {
+          listener.handleUnescapeError(fasta.messageInvalidUnicodeEscape,
+              location, begin, codeUnits.length + 1 - begin);
+          return new String.fromCharCodes(codeUnits);
+        }
         code = codeUnits[i + 1];
         if (code == $OPEN_CURLY_BRACKET) {
           // Expect 1-6 hex digits followed by '}'.
-          if (codeUnits.length == ++i) return error(i, incompleteSequence);
+          if (codeUnits.length == ++i) {
+            listener.handleUnescapeError(fasta.messageInvalidUnicodeEscape,
+                location, begin, i + 1 - begin);
+            return new String.fromCharCodes(codeUnits);
+          }
           code = 0;
           for (int j = 0; j < 7; j++) {
-            if (codeUnits.length == ++i) return error(i, incompleteSequence);
+            if (codeUnits.length == ++i) {
+              listener.handleUnescapeError(fasta.messageInvalidUnicodeEscape,
+                  location, begin, i + 1 - begin);
+              return new String.fromCharCodes(codeUnits);
+            }
             int digit = codeUnits[i];
             if (j != 0 && digit == $CLOSE_CURLY_BRACKET) break;
-            if (!isHexDigit(digit)) return error(i, invalidCharacter);
+            if (!isHexDigit(digit)) {
+              listener.handleUnescapeError(fasta.messageInvalidUnicodeEscape,
+                  location, begin, i + 2 - begin);
+              return new String.fromCharCodes(codeUnits);
+            }
             code = (code << 4) + hexDigitValue(digit);
           }
         } else {
           // Expect exactly 4 hex digits.
-          if (codeUnits.length <= i + 4) return error(i, incompleteSequence);
+          if (codeUnits.length <= i + 4) {
+            listener.handleUnescapeError(fasta.messageInvalidUnicodeEscape,
+                location, begin, codeUnits.length + 1 - begin);
+            return new String.fromCharCodes(codeUnits);
+          }
           code = 0;
           for (int j = 0; j < 4; j++) {
             int digit = codeUnits[++i];
-            if (!isHexDigit(digit)) return error(i, invalidCharacter);
+            if (!isHexDigit(digit)) {
+              listener.handleUnescapeError(fasta.messageInvalidUnicodeEscape,
+                  location, begin, i + 1 - begin);
+              return new String.fromCharCodes(codeUnits);
+            }
             code = (code << 4) + hexDigitValue(digit);
           }
         }
+        if (code > 0x10FFFF) {
+          listener.handleUnescapeError(
+              fasta.messageInvalidCodePoint, location, begin, i + 1 - begin);
+          return new String.fromCharCodes(codeUnits);
+        }
       } else {
         // Nothing, escaped character is passed through;
       }
-      if (code > 0x10FFFF) return error(i, invalidCodePoint);
     }
     result[resultOffset++] = code;
   }
   return new String.fromCharCodes(result, 0, resultOffset);
 }
+
+abstract class UnescapeErrorListener {
+  void handleUnescapeError(
+      fasta.Message message, covariant location, int offset, int length);
+}
diff --git a/pkg/front_end/lib/src/fasta/rewrite_severity.dart b/pkg/front_end/lib/src/fasta/rewrite_severity.dart
index 5238c7d..0455195 100644
--- a/pkg/front_end/lib/src/fasta/rewrite_severity.dart
+++ b/pkg/front_end/lib/src/fasta/rewrite_severity.dart
@@ -8,36 +8,119 @@
 
 Severity rewriteSeverity(
     Severity severity, msg.Code<Object> code, Uri fileUri) {
-  if (severity == Severity.ignored &&
-      fileUri.path.contains("/pkg/front_end/lib/src/fasta/")) {
-    String path = fileUri.path;
-    if (code == msg.codeUseOfDeprecatedIdentifier) {
-      // TODO(ahe): Remove the exceptions below.
-      // We plan to remove all uses of deprecated identifiers from Fasta. The
-      // strategy is to remove files from the list below one by one. To get
-      // started on cleaning up a given file, simply remove it from the list
-      // below and compile Fasta with itself to get a list of remaining call
-      // sites.
-      if (path.endsWith("/command_line_reporting.dart")) return severity;
-      if (path.endsWith("/deprecated_problems.dart")) return severity;
-      if (path.endsWith("/kernel/body_builder.dart")) return severity;
-      if (path.endsWith("/kernel/expression_generator.dart")) return severity;
-      if (path.endsWith("/kernel/kernel_expression_generator.dart"))
+  if (severity != Severity.ignored) return severity;
+  String path = fileUri.path;
+  const String fastaPath = "/pkg/front_end/lib/src/fasta/";
+  int index = path.indexOf(fastaPath);
+  if (index == -1) return severity;
+  if (code == msg.codeUseOfDeprecatedIdentifier) {
+    // TODO(ahe): Remove the exceptions below.
+    // We plan to remove all uses of deprecated identifiers from Fasta. The
+    // strategy is to remove files from the list below one by one. To get
+    // started on cleaning up a given file, simply remove it from the list
+    // below and compile Fasta with itself to get a list of remaining call
+    // sites.
+    switch (path.substring(fastaPath.length + index)) {
+      case "command_line_reporting.dart":
+      case "deprecated_problems.dart":
+      case "kernel/body_builder.dart":
+      case "kernel/expression_generator.dart":
+      case "kernel/kernel_expression_generator.dart":
+      case "kernel/kernel_expression_generator_impl.dart":
+      case "kernel/kernel_procedure_builder.dart":
+      case "kernel/kernel_target.dart":
+      case "kernel/kernel_type_variable_builder.dart":
+      case "quote.dart":
+      case "source/diet_listener.dart":
+      case "source/source_library_builder.dart":
+      case "source/source_loader.dart":
+      case "source/stack_listener.dart":
         return severity;
-      if (path.endsWith("/kernel/kernel_expression_generator_impl.dart"))
-        return severity;
-      if (path.endsWith("/kernel/kernel_procedure_builder.dart"))
-        return severity;
-      if (path.endsWith("/kernel/kernel_target.dart")) return severity;
-      if (path.endsWith("/kernel/kernel_type_variable_builder.dart"))
-        return severity;
-      if (path.endsWith("/quote.dart")) return severity;
-      if (path.endsWith("/source/diet_listener.dart")) return severity;
-      if (path.endsWith("/source/source_library_builder.dart")) return severity;
-      if (path.endsWith("/source/source_loader.dart")) return severity;
-      if (path.endsWith("/source/stack_listener.dart")) return severity;
     }
-    return Severity.error;
+  } else if (code == msg.codeMissingExplicitTypeArguments) {
+    // TODO(ahe): Remove the exceptions below.
+    // We're not sure if we want to require that all types have explicit type
+    // arguments in Fasta. Regardles, the strategy is to remove files from the
+    // list below one by one. To get started on cleaning up a given file,
+    // simply remove it from the list below and compile Fasta with itself to
+    // get a list of remaining call sites.
+    switch (path.substring(fastaPath.length + index)) {
+      case "builder/builtin_type_builder.dart":
+      case "builder/class_builder.dart":
+      case "builder/constructor_reference_builder.dart":
+      case "builder/dynamic_type_builder.dart":
+      case "builder/field_builder.dart":
+      case "builder/formal_parameter_builder.dart":
+      case "builder/function_type_alias_builder.dart":
+      case "builder/function_type_builder.dart":
+      case "builder/library_builder.dart":
+      case "builder/member_builder.dart":
+      case "builder/metadata_builder.dart":
+      case "builder/mixin_application_builder.dart":
+      case "builder/named_type_builder.dart":
+      case "builder/prefix_builder.dart":
+      case "builder/procedure_builder.dart":
+      case "builder/type_builder.dart":
+      case "builder/type_declaration_builder.dart":
+      case "builder/type_variable_builder.dart":
+      case "builder/unresolved_type.dart":
+      case "builder/void_type_builder.dart":
+      case "builder_graph.dart":
+      case "compiler_context.dart":
+      case "dill/dill_class_builder.dart":
+      case "dill/dill_library_builder.dart":
+      case "dill/dill_loader.dart":
+      case "dill/dill_target.dart":
+      case "dill/dill_typedef_builder.dart":
+      case "export.dart":
+      case "fasta_codes.dart":
+      case "import.dart":
+      case "incremental_compiler.dart":
+      case "kernel/expression_generator.dart":
+      case "kernel/expression_generator_helper.dart":
+      case "kernel/fangorn.dart":
+      case "kernel/forest.dart":
+      case "kernel/kernel_class_builder.dart":
+      case "kernel/kernel_enum_builder.dart":
+      case "kernel/kernel_expression_generator.dart":
+      case "kernel/kernel_expression_generator_impl.dart":
+      case "kernel/kernel_field_builder.dart":
+      case "kernel/kernel_formal_parameter_builder.dart":
+      case "kernel/kernel_function_type_alias_builder.dart":
+      case "kernel/kernel_function_type_builder.dart":
+      case "kernel/kernel_invalid_type_builder.dart":
+      case "kernel/kernel_library_builder.dart":
+      case "kernel/kernel_mixin_application_builder.dart":
+      case "kernel/kernel_named_type_builder.dart":
+      case "kernel/kernel_prefix_builder.dart":
+      case "kernel/kernel_procedure_builder.dart":
+      case "kernel/kernel_shadow_ast.dart":
+      case "kernel/kernel_target.dart":
+      case "kernel/kernel_type_builder.dart":
+      case "kernel/kernel_type_variable_builder.dart":
+      case "kernel/load_library_builder.dart":
+      case "kernel/metadata_collector.dart":
+      case "kernel/type_algorithms.dart":
+      case "kernel/verifier.dart":
+      case "loader.dart":
+      case "scanner/error_token.dart":
+      case "scanner/recover.dart":
+      case "scope.dart":
+      case "source/diet_listener.dart":
+      case "source/outline_builder.dart":
+      case "source/source_class_builder.dart":
+      case "source/source_library_builder.dart":
+      case "source/source_loader.dart":
+      case "source/stack_listener.dart":
+      case "target_implementation.dart":
+      case "type_inference/interface_resolver.dart":
+      case "type_inference/type_inference_engine.dart":
+      case "type_inference/type_inferrer.dart":
+      case "type_inference/type_schema.dart":
+      case "util/link.dart":
+      case "util/link_implementation.dart":
+        return severity;
+    }
   }
-  return severity;
+  return Severity.error;
 }
diff --git a/pkg/front_end/lib/src/fasta/source/diet_listener.dart b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
index eeef8b1..516a6b6 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -14,6 +14,7 @@
         Library,
         LibraryDependency,
         LibraryPart,
+        Node,
         Typedef;
 
 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
@@ -40,6 +41,9 @@
 
 import '../type_inference/type_inference_engine.dart' show TypeInferenceEngine;
 
+import '../type_inference/type_inference_listener.dart'
+    show TypeInferenceListener;
+
 import 'source_library_builder.dart' show SourceLibraryBuilder;
 
 import 'stack_listener.dart' show NullValue, StackListener;
@@ -391,7 +395,8 @@
     // Native imports must be skipped because they aren't assigned corresponding
     // LibraryDependency nodes.
     Token importUriToken = importKeyword.next;
-    String importUri = unescapeString(importUriToken.lexeme);
+    String importUri =
+        unescapeString(importUriToken.lexeme, importUriToken, this);
     if (importUri.startsWith("dart-ext:")) return;
 
     Library libraryNode = library.target;
@@ -527,13 +532,16 @@
 
   StackListener createListener(
       ModifierBuilder builder, Scope memberScope, bool isInstanceMember,
-      [Scope formalParameterScope]) {
+      [Scope formalParameterScope,
+      TypeInferenceListener<int, int, Node, int> listener]) {
+    listener ??= new TypeInferenceListener<int, int, Node, int>();
     // Note: we set thisType regardless of whether we are building a static
     // member, since that provides better error recovery.
     InterfaceType thisType = currentClass?.target?.thisType;
     var typeInferrer = library.disableTypeInference
         ? typeInferenceEngine.createDisabledTypeInferrer()
-        : typeInferenceEngine.createLocalTypeInferrer(uri, thisType, library);
+        : typeInferenceEngine.createLocalTypeInferrer(
+            uri, listener, thisType, library);
     ConstantContext constantContext = builder.isConstructor && builder.isConst
         ? ConstantContext.inferred
         : ConstantContext.none;
diff --git a/pkg/front_end/lib/src/fasta/source/directive_listener.dart b/pkg/front_end/lib/src/fasta/source/directive_listener.dart
index 71babc5..dca1e4b 100644
--- a/pkg/front_end/lib/src/fasta/source/directive_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/directive_listener.dart
@@ -54,7 +54,7 @@
   @override
   void beginLiteralString(Token token) {
     if (_combinators != null || _inPart) {
-      _uri = unescapeString(token.lexeme);
+      _uri = unescapeString(token.lexeme, token, this);
     }
   }
 
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index e65dcf6..f0e69b9 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -96,6 +96,7 @@
   final bool stringExpectedAfterNative;
   bool inConstructor = false;
   bool inConstructorName = false;
+  int importIndex = 0;
 
   String nativeMethodName;
 
@@ -219,8 +220,17 @@
     int uriOffset = popCharOffset();
     String uri = pop(); // For a conditional import, this is the default URI.
     List<MetadataBuilder> metadata = pop();
-    library.addImport(metadata, uri, configurations, prefix, combinators,
-        isDeferred, importKeyword.charOffset, prefixOffset, uriOffset);
+    library.addImport(
+        metadata,
+        uri,
+        configurations,
+        prefix,
+        combinators,
+        isDeferred,
+        importKeyword.charOffset,
+        prefixOffset,
+        uriOffset,
+        importIndex++);
     checkEmpty(importKeyword.charOffset);
   }
 
@@ -316,7 +326,7 @@
     debugEvent("endLiteralString");
     if (interpolationCount == 0) {
       Token token = pop();
-      push(unescapeString(token.lexeme));
+      push(unescapeString(token.lexeme, token, this));
       push(token.charOffset);
     } else {
       Token beginToken = pop();
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 9b5db36..d6e591c 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -279,7 +279,8 @@
       bool deferred,
       int charOffset,
       int prefixCharOffset,
-      int uriOffset) {
+      int uriOffset,
+      int importIndex) {
     if (configurations != null) {
       for (Configuration config in configurations) {
         if (lookupImportCondition(config.dottedName) == config.condition) {
@@ -308,7 +309,7 @@
     }
 
     imports.add(new Import(this, builder, deferred, prefix, combinators,
-        configurations, charOffset, prefixCharOffset,
+        configurations, charOffset, prefixCharOffset, importIndex,
         nativeImportUri: builder == null ? resolvedUri : null));
   }
 
@@ -712,7 +713,7 @@
   int resolveTypes() {
     int typeCount = types.length;
     for (UnresolvedType<T> t in types) {
-      t.resolveIn(scope);
+      t.resolveIn(scope, this);
       if (loader.target.strongMode) {
         t.checkType();
       } else {
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index 1a037f4..5221c08 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -715,11 +715,15 @@
   void addNoSuchMethodForwarders(List<SourceClassBuilder> sourceClasses) {
     if (!target.backendTarget.enableNoSuchMethodForwarders) return;
 
+    List<Class> changedClasses = new List<Class>();
     for (SourceClassBuilder builder in sourceClasses) {
       if (builder.library.loader == this) {
-        builder.addNoSuchMethodForwarders(target, hierarchy);
+        if (builder.addNoSuchMethodForwarders(target, hierarchy)) {
+          changedClasses.add(builder.target);
+        }
       }
     }
+    hierarchy.applyMemberChanges(changedClasses, findDescendants: true);
     ticker.logMs("Added noSuchMethod forwarders");
   }
 
diff --git a/pkg/front_end/lib/src/fasta/source/stack_listener.dart b/pkg/front_end/lib/src/fasta/source/stack_listener.dart
index dd5fc5d..262dfe2 100644
--- a/pkg/front_end/lib/src/fasta/source/stack_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/stack_listener.dart
@@ -297,7 +297,7 @@
     debugEvent("endLiteralString");
     if (interpolationCount == 0) {
       Token token = pop();
-      push(unescapeString(token.lexeme));
+      push(unescapeString(token.lexeme, token, this));
     } else {
       unimplemented("string interpolation", endToken.charOffset, uri);
     }
@@ -356,6 +356,12 @@
     throw deprecated_inputError(uri, token.charOffset, message.message);
   }
 
+  @override
+  void handleUnescapeError(
+      Message message, Token token, int stringOffset, int length) {
+    addCompileTimeError(message, token.charOffset + stringOffset, length);
+  }
+
   void addCompileTimeError(Message message, int charOffset, int length);
 }
 
diff --git a/pkg/front_end/lib/src/fasta/type_inference/interface_resolver.dart b/pkg/front_end/lib/src/fasta/type_inference/interface_resolver.dart
index 9b4bf82..0fc6eb5 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/interface_resolver.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/interface_resolver.dart
@@ -49,7 +49,7 @@
         ShadowField,
         ShadowMember,
         ShadowProcedure,
-        ShadowVariableDeclaration;
+        VariableDeclarationJudgment;
 
 import '../messages.dart'
     show
@@ -773,7 +773,7 @@
     }
     var positionalParameters = method.function.positionalParameters;
     for (int i = 0; i < positionalParameters.length; ++i) {
-      if (ShadowVariableDeclaration
+      if (VariableDeclarationJudgment
           .isImplicitlyTyped(positionalParameters[i])) {
         // Note that if the parameter is not present in the overridden method,
         // getPositionalParameterType treats it as dynamic.  This is consistent
@@ -800,7 +800,7 @@
     }
     var namedParameters = method.function.namedParameters;
     for (int i = 0; i < namedParameters.length; i++) {
-      if (ShadowVariableDeclaration.isImplicitlyTyped(namedParameters[i])) {
+      if (VariableDeclarationJudgment.isImplicitlyTyped(namedParameters[i])) {
         var name = namedParameters[i].name;
         namedParameters[i].type = matchTypes(
             overriddenTypes.map((type) => getNamedParameterType(type, name)),
@@ -1264,10 +1264,10 @@
     }
     var function = procedure.function;
     for (var parameter in function.positionalParameters) {
-      if (ShadowVariableDeclaration.isImplicitlyTyped(parameter)) return true;
+      if (VariableDeclarationJudgment.isImplicitlyTyped(parameter)) return true;
     }
     for (var parameter in function.namedParameters) {
-      if (ShadowVariableDeclaration.isImplicitlyTyped(parameter)) return true;
+      if (VariableDeclarationJudgment.isImplicitlyTyped(parameter)) return true;
     }
     return false;
   }
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart
index 300dd31..23402c5 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart
@@ -9,17 +9,24 @@
         FunctionType,
         InterfaceType,
         NamedType,
+        Procedure,
         TypeParameter,
         TypeParameterType,
         VoidType;
 
-import 'package:kernel/type_algebra.dart' show substitute;
+import 'package:kernel/type_algebra.dart' show substitute, Substitution;
 
 import 'type_schema.dart' show UnknownType;
 
 import 'type_schema_environment.dart'
     show TypeConstraint, TypeSchemaEnvironment, substituteTypeParams;
 
+import '../names.dart' show callName;
+
+import 'type_schema.dart';
+
+import 'type_schema_environment.dart';
+
 /// Creates a collection of [TypeConstraint]s corresponding to type parameters,
 /// based on an attempt to make one type schema a subtype of another.
 class TypeConstraintGatherer {
@@ -101,8 +108,10 @@
         supertype.positionalParameters.length) {
       return false;
     }
-    if (subtype.typeParameters.isNotEmpty ||
-        supertype.typeParameters.isNotEmpty) {
+    if (subtype.typeParameters.length != supertype.typeParameters.length) {
+      return false;
+    }
+    if (subtype.typeParameters.isNotEmpty) {
       var subtypeSubstitution = <TypeParameter, DartType>{};
       var supertypeSubstitution = <TypeParameter, DartType>{};
       var freshTypeVariables = <TypeParameter>[];
@@ -299,30 +308,37 @@
     if (subtype is InterfaceType && supertype is InterfaceType) {
       return _isInterfaceSubtypeMatch(subtype, supertype);
     }
-    // A type `P` is a subtype match for `Function` with respect to `L` under no
-    // constraints:
-    // - If `P` implements a call method.
-    // - Or if `P` is a function type.
-    // TODO(paulberry): implement this case.
+    if (subtype is FunctionType) {
+      if (supertype is InterfaceType) {
+        return identical(
+                supertype.classNode, environment.coreTypes.functionClass) ||
+            identical(supertype.classNode, environment.coreTypes.objectClass);
+      } else if (supertype is FunctionType) {
+        return _isFunctionSubtypeMatch(subtype, supertype);
+      }
+    }
     // A type `P` is a subtype match for a type `Q` with respect to `L` under
     // constraints `C`:
     // - If `P` is an interface type which implements a call method of type `F`,
     //   and `F` is a subtype match for a type `Q` with respect to `L` under
     //   constraints `C`.
-    // TODO(paulberry): implement this case.
-    if (subtype is FunctionType) {
-      if (supertype is InterfaceType) {
-        if (identical(
-                supertype.classNode, environment.coreTypes.functionClass) ||
-            identical(supertype.classNode, environment.coreTypes.objectClass)) {
-          return true;
-        } else {
-          return false;
+    if (subtype is InterfaceType) {
+      var callMember =
+          environment.hierarchy.getInterfaceMember(subtype.classNode, callName);
+      if (callMember is Procedure && !callMember.isGetter) {
+        var callType = callMember.getterType;
+        if (callType != null) {
+          callType =
+              Substitution.fromInterfaceType(subtype).substituteType(callType);
+          // TODO(kmillikin): The subtype check will fail if the type of a
+          // generic call method is a subtype of a non-generic function type.
+          // For example, if `T call<T>(T arg)` is a subtype of `S->S` for some
+          // S.  However, explicitly tearing off that call method will work and
+          // insert an explicit instantiation, so the implicit tear off should
+          // work as well.  Figure out how to support this case.
+          return _isSubtypeMatch(callType, supertype);
         }
       }
-      if (supertype is FunctionType) {
-        return _isFunctionSubtypeMatch(subtype, supertype);
-      }
     }
     return false;
   }
@@ -346,13 +362,12 @@
       Map<TypeParameter, DartType> substitution1,
       Map<TypeParameter, DartType> substitution2,
       List<TypeParameter> freshTypeVariables) {
-    int count = params1.length;
-    if (count != params2.length) return false;
+    assert(params1.length == params2.length);
     // TODO(paulberry): in imitation of analyzer, we're checking the bounds as
     // we build up the substitutions.  But I don't think that's correct--I think
     // we should build up both substitutions completely before checking any
     // bounds.  See dartbug.com/29629.
-    for (int i = 0; i < count; i++) {
+    for (int i = 0; i < params1.length; ++i) {
       TypeParameter pFresh = new TypeParameter(params2[i].name);
       freshTypeVariables.add(pFresh);
       DartType variableFresh = new TypeParameterType(pFresh);
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
index 9fe590f..8338668 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
@@ -10,6 +10,7 @@
         DynamicType,
         FunctionType,
         InterfaceType,
+        Node,
         TypeParameter,
         TypeParameterType,
         TypedefType,
@@ -23,10 +24,14 @@
 
 import '../kernel/kernel_shadow_ast.dart';
 
+import '../kernel/toplevel_inference_factory.dart';
+
 import '../messages.dart' show noLength, templateCantInferTypeDueToCircularity;
 
 import '../source/source_library_builder.dart';
 
+import 'type_inference_listener.dart' show TypeInferenceListener;
+
 import 'type_inferrer.dart';
 
 import 'type_schema_environment.dart';
@@ -52,8 +57,8 @@
       // typeInferrer to be null.  If this happens, just skip type inference for
       // this field.
       if (typeInferrer != null) {
-        var inferredType = typeInferrer
-            .inferDeclarationType(typeInferrer.inferFieldTopLevel(field, true));
+        var inferredType = typeInferrer.inferDeclarationType(typeInferrer
+            .inferFieldTopLevel(toplevelInferenceFactory, field, true));
         if (isCircular) {
           // Report the appropriate error.
           _library.addCompileTimeError(
@@ -236,12 +241,17 @@
   /// Creates a type inferrer for use inside of a method body declared in a file
   /// with the given [uri].
   TypeInferrer createLocalTypeInferrer(
-      Uri uri, InterfaceType thisType, SourceLibraryBuilder library);
+      Uri uri,
+      TypeInferenceListener<int, int, Node, int> listener,
+      InterfaceType thisType,
+      SourceLibraryBuilder library);
 
   /// Creates a [TypeInferrer] object which is ready to perform type inference
   /// on the given [field].
   TypeInferrer createTopLevelTypeInferrer(
-      InterfaceType thisType, ShadowField field);
+      TypeInferenceListener<int, int, Node, int> listener,
+      InterfaceType thisType,
+      ShadowField field);
 
   /// Retrieve the [TypeInferrer] for the given [field], which was created by
   /// a previous call to [createTopLevelTypeInferrer].
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart
new file mode 100644
index 0000000..28ea849
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart
@@ -0,0 +1,481 @@
+// Copyright (c) 2018, 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.md file.
+
+import 'package:kernel/ast.dart' show DartType, FunctionType;
+
+import 'package:kernel/type_algebra.dart' show Substitution;
+
+/// Base class for [TypeInferenceListener] that defines the API for debugging.
+///
+/// By default no debug info is printed.  To enable debug printing, mix in
+/// [TypeInferenceDebugging].
+class TypeInferenceBase<Location> {
+  void genericExpressionEnter(
+      String expressionType, Location location, DartType typeContext) {}
+
+  void genericExpressionExit(
+      String expressionType, Location location, DartType inferredType) {}
+
+  void genericInitializerEnter(String initializerType, Location location) {}
+
+  void genericInitializerExit(String initializerType, Location location) {}
+
+  void genericStatementEnter(String statementType, Location location) {}
+
+  void genericStatementExit(String statementType, Location location) {}
+}
+
+/// Callback interface used by [TypeInferrer] to report the results of type
+/// inference to a client.
+///
+/// The interface is structured as a set of enter/exit methods.  The enter
+/// methods are called as the inferrer recurses down through the AST, and the
+/// exit methods are called on the way back up.  The enter methods take a
+/// [DartType] argument representing the downwards inference context; the exit
+/// methods take [DartType] argument representing the final inferred type.
+///
+/// The default implementation (in this base class) does nothing, however it can
+/// be used to debug type inference by uncommenting the
+/// "with TypeInferenceDebugging" clause below.
+class TypeInferenceListener<Location, Declaration, Reference, PrefixInfo>
+    extends TypeInferenceBase<Location> {
+  void asExpressionEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("asExpression", location, typeContext);
+
+  void asExpressionExit(Location location, DartType inferredType) =>
+      genericExpressionExit("asExpression", location, inferredType);
+
+  void assertInitializerEnter(Location location) =>
+      genericInitializerEnter("assertInitializer", location);
+
+  void assertInitializerExit(Location location) =>
+      genericInitializerExit("assertInitializer", location);
+
+  void assertStatementEnter(Location location) =>
+      genericStatementEnter('assertStatement', location);
+
+  void assertStatementExit(Location location) =>
+      genericStatementExit('assertStatement', location);
+
+  void awaitExpressionEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("awaitExpression", location, typeContext);
+
+  void awaitExpressionExit(Location location, DartType inferredType) =>
+      genericExpressionExit("awaitExpression", location, inferredType);
+
+  void blockEnter(Location location) =>
+      genericStatementEnter('block', location);
+
+  void blockExit(Location location) => genericStatementExit('block', location);
+
+  void boolLiteralEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("boolLiteral", location, typeContext);
+
+  void boolLiteralExit(Location location, DartType inferredType) =>
+      genericExpressionExit("boolLiteral", location, inferredType);
+
+  void breakStatementEnter(Location location) =>
+      genericStatementEnter('breakStatement', location);
+
+  void breakStatementExit(Location location) =>
+      genericStatementExit('breakStatement', location);
+
+  void cascadeExpressionEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("cascade", location, typeContext);
+
+  void cascadeExpressionExit(Location location, DartType inferredType) =>
+      genericExpressionExit("cascade", location, inferredType);
+
+  void catchStatementEnter(
+      Location location,
+      DartType guardType,
+      Location exceptionLocation,
+      DartType exceptionType,
+      Location stackTraceLocation,
+      DartType stackTraceType) {}
+
+  void catchStatementExit(Location location) {}
+
+  void conditionalExpressionEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("conditionalExpression", location, typeContext);
+
+  void conditionalExpressionExit(Location location, DartType inferredType) =>
+      genericExpressionExit("conditionalExpression", location, inferredType);
+
+  void constructorInvocationEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("constructorInvocation", location, typeContext);
+
+  void constructorInvocationExit(Location location, Reference expressionTarget,
+          DartType inferredType) =>
+      genericExpressionExit("constructorInvocation", location, inferredType);
+
+  void continueSwitchStatementEnter(Location location) =>
+      genericStatementEnter('continueSwitchStatement', location);
+
+  void continueSwitchStatementExit(Location location) =>
+      genericStatementExit('continueSwitchStatement', location);
+
+  void deferredCheckEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("deferredCheck", location, typeContext);
+
+  void deferredCheckExit(Location location, DartType inferredType) =>
+      genericExpressionExit("deferredCheck", location, inferredType);
+
+  void doStatementEnter(Location location) =>
+      genericStatementEnter("doStatement", location);
+
+  void doStatementExit(Location location) =>
+      genericStatementExit("doStatement", location);
+
+  void doubleLiteralEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("doubleLiteral", location, typeContext);
+
+  void doubleLiteralExit(Location location, DartType inferredType) =>
+      genericExpressionExit("doubleLiteral", location, inferredType);
+
+  void dryRunEnter(Location location) =>
+      genericExpressionEnter("dryRun", location, null);
+
+  void dryRunExit(Location location) =>
+      genericExpressionExit("dryRun", location, null);
+
+  void expressionStatementEnter(Location location) =>
+      genericStatementEnter('expressionStatement', location);
+
+  void expressionStatementExit(Location location) =>
+      genericStatementExit('expressionStatement', location);
+
+  void fieldInitializerEnter(Location location, Reference initializerField) =>
+      genericInitializerEnter("fieldInitializer", location);
+
+  void fieldInitializerExit(Location location) =>
+      genericInitializerExit("fieldInitializer", location);
+
+  void forInStatementEnter(
+          Location location,
+          Location variableLocation,
+          Location writeLocation,
+          DartType writeVariableType,
+          Declaration writeVariable,
+          Reference writeTarget) =>
+      genericStatementEnter('forInStatement', location);
+
+  void forInStatementExit(
+          Location location, bool variablePresent, DartType variableType) =>
+      genericStatementExit('forInStatement', location);
+
+  void forStatementEnter(Location location) =>
+      genericStatementEnter('forStatement', location);
+
+  void forStatementExit(Location location) =>
+      genericStatementExit('forStatement', location);
+
+  void functionDeclarationEnter(Location location) =>
+      genericStatementEnter('functionDeclaration', location);
+
+  void functionDeclarationExit(Location location, FunctionType inferredType) =>
+      genericStatementExit('functionDeclaration', location);
+
+  void functionExpressionEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("functionExpression", location, typeContext);
+
+  void functionExpressionExit(Location location, DartType inferredType) =>
+      genericExpressionExit("functionExpression", location, inferredType);
+
+  void ifNullBeforeRhs(Location location) {}
+
+  void ifNullEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter('ifNull', location, typeContext);
+
+  void ifNullExit(Location location, DartType inferredType) =>
+      genericExpressionExit('ifNull', location, inferredType);
+
+  void ifStatementEnter(Location location) =>
+      genericStatementEnter('ifStatement', location);
+
+  void ifStatementExit(Location location) =>
+      genericStatementExit('ifStatement', location);
+
+  void indexAssignAfterReceiver(Location location, DartType typeContext) {}
+
+  void indexAssignEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("indexAssign", location, typeContext);
+
+  void indexAssignExit(Location location, Reference writeMember,
+          Reference combiner, DartType inferredType) =>
+      genericExpressionExit("indexAssign", location, inferredType);
+
+  void intLiteralEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("intLiteral", location, typeContext);
+
+  void intLiteralExit(Location location, DartType inferredType) =>
+      genericExpressionExit("intLiteral", location, inferredType);
+
+  void invalidInitializerEnter(Location location) =>
+      genericInitializerEnter("invalidInitializer", location);
+
+  void invalidInitializerExit(Location location) =>
+      genericInitializerExit("invalidInitializer", location);
+
+  void isExpressionEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("isExpression", location, typeContext);
+
+  void isExpressionExit(
+          Location location, DartType testedType, DartType inferredType) =>
+      genericExpressionExit("isExpression", location, inferredType);
+
+  void isNotExpressionEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("isNotExpression", location, typeContext);
+
+  void isNotExpressionExit(
+          Location location, DartType type, DartType inferredType) =>
+      genericExpressionExit("isNotExpression", location, inferredType);
+
+  void labeledStatementEnter(Location location) =>
+      genericStatementEnter('labeledStatement', location);
+
+  void labeledStatementExit(Location location) =>
+      genericStatementExit('labeledStatement', location);
+
+  void listLiteralEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("listLiteral", location, typeContext);
+
+  void listLiteralExit(Location location, DartType inferredType) =>
+      genericExpressionExit("listLiteral", location, inferredType);
+
+  void logicalExpressionBeforeRhs(Location location) {}
+
+  void logicalExpressionEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("logicalExpression", location, typeContext);
+
+  void logicalExpressionExit(Location location, DartType inferredType) =>
+      genericExpressionExit("logicalExpression", location, inferredType);
+
+  void mapLiteralEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("mapLiteral", location, typeContext);
+
+  void mapLiteralExit(Location location, DartType typeContext) =>
+      genericExpressionExit("mapLiteral", location, typeContext);
+
+  void methodInvocationBeforeArgs(Location location, bool isImplicitCall) {}
+
+  void methodInvocationEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("methodInvocation", location, typeContext);
+
+  void methodInvocationExit(
+          Location resultOffset,
+          List<DartType> argumentsTypes,
+          bool isImplicitCall,
+          Reference interfaceMember,
+          FunctionType calleeType,
+          Substitution substitution,
+          DartType inferredType) =>
+      genericExpressionExit("methodInvocation", resultOffset, inferredType);
+
+  void methodInvocationExitCall(
+          Location resultOffset,
+          List<DartType> argumentsTypes,
+          bool isImplicitCall,
+          FunctionType calleeType,
+          Substitution substitution,
+          DartType inferredType) =>
+      genericExpressionExit("methodInvocation", resultOffset, inferredType);
+
+  void namedFunctionExpressionEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("namedFunctionExpression", location, typeContext);
+
+  void namedFunctionExpressionExit(Location location, DartType inferredType) =>
+      genericExpressionExit("namedFunctionExpression", location, inferredType);
+
+  void notEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("not", location, typeContext);
+
+  void notExit(Location location, DartType inferredType) =>
+      genericExpressionExit("not", location, inferredType);
+
+  void nullLiteralEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("nullLiteral", location, typeContext);
+
+  void nullLiteralExit(
+          Location location, bool isSynthetic, DartType inferredType) =>
+      genericExpressionExit("nullLiteral", location, inferredType);
+
+  void propertyAssignEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("propertyAssign", location, typeContext);
+
+  void propertyAssignExit(Location location, Reference writeMember,
+          DartType writeContext, Reference combiner, DartType inferredType) =>
+      genericExpressionExit("propertyAssign", location, inferredType);
+
+  void propertyGetEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("propertyGet", location, typeContext);
+
+  void propertyGetExit(
+          Location location, Reference member, DartType inferredType) =>
+      genericExpressionExit("propertyGet", location, inferredType);
+
+  void propertyGetExitCall(Location location, DartType inferredType) =>
+      genericExpressionExit("propertyGet", location, inferredType);
+
+  void propertySetEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("propertySet", location, typeContext);
+
+  void propertySetExit(Location location, DartType inferredType) =>
+      genericExpressionExit("propertySet", location, inferredType);
+
+  void redirectingInitializerEnter(
+          Location location, Reference initializerTarget) =>
+      genericInitializerEnter("redirectingInitializer", location);
+
+  void redirectingInitializerExit(Location location) =>
+      genericInitializerExit("redirectingInitializer", location);
+
+  void rethrowEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter('rethrow', location, typeContext);
+
+  void rethrowExit(Location location, DartType inferredType) =>
+      genericExpressionExit('rethrow', location, inferredType);
+
+  void returnStatementEnter(Location location) =>
+      genericStatementEnter('returnStatement', location);
+
+  void returnStatementExit(Location location) =>
+      genericStatementExit('returnStatement', location);
+
+  void staticAssignEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("staticAssign", location, typeContext);
+
+  void staticAssignExit(Location location, Reference writeMember,
+          DartType writeContext, Reference combiner, DartType inferredType) =>
+      genericExpressionExit("staticAssign", location, inferredType);
+
+  void staticGetEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("staticGet", location, typeContext);
+
+  void staticGetExit(Location location, Reference expressionTarget,
+          DartType inferredType) =>
+      genericExpressionExit("staticGet", location, inferredType);
+
+  void staticInvocationEnter(Location location,
+          Location expressionArgumentsLocation, DartType typeContext) =>
+      genericExpressionEnter("staticInvocation", location, typeContext);
+
+  void staticInvocationExit(
+          Location location,
+          Reference expressionTarget,
+          List<DartType> expressionArgumentsTypes,
+          FunctionType calleeType,
+          Substitution substitution,
+          DartType inferredType) =>
+      genericExpressionExit("staticInvocation", location, inferredType);
+
+  void stringConcatenationEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("stringConcatenation", location, typeContext);
+
+  void stringConcatenationExit(Location location, DartType inferredType) =>
+      genericExpressionExit("stringConcatenation", location, inferredType);
+
+  void stringLiteralEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("StringLiteral", location, typeContext);
+
+  void stringLiteralExit(Location location, DartType inferredType) =>
+      genericExpressionExit("StringLiteral", location, inferredType);
+
+  void superInitializerEnter(Location location) =>
+      genericInitializerEnter("superInitializer", location);
+
+  void superInitializerExit(Location location) =>
+      genericInitializerExit("superInitializer", location);
+
+  void switchStatementEnter(Location location) =>
+      genericStatementEnter('switchStatement', location);
+
+  void switchStatementExit(Location location) =>
+      genericStatementExit('switchStatement', location);
+
+  void symbolLiteralEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("symbolLiteral", location, typeContext);
+
+  void symbolLiteralExit(Location location, DartType inferredType) =>
+      genericExpressionExit("symbolLiteral", location, inferredType);
+
+  void thisExpressionEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("thisExpression", location, typeContext);
+
+  void thisExpressionExit(Location location, DartType inferredType) =>
+      genericExpressionExit("thisExpression", location, inferredType);
+
+  void throwEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter('throw', location, typeContext);
+
+  void throwExit(Location location, DartType inferredType) =>
+      genericExpressionExit('throw', location, inferredType);
+
+  void tryCatchEnter(Location location) =>
+      genericStatementEnter('tryCatch', location);
+
+  void tryCatchExit(Location location) =>
+      genericStatementExit('tryCatch', location);
+
+  void tryFinallyEnter(Location location) =>
+      genericStatementEnter('tryFinally', location);
+
+  void tryFinallyExit(Location location) =>
+      genericStatementExit('tryFinally', location);
+
+  void typeLiteralEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("typeLiteral", location, typeContext);
+
+  void typeLiteralExit(
+          Location location, Reference expressionType, DartType inferredType) =>
+      genericExpressionExit("typeLiteral", location, inferredType);
+
+  void variableAssignEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("variableAssign", location, typeContext);
+
+  void variableAssignExit(
+          Location location,
+          DartType writeContext,
+          Declaration writeVariable,
+          Reference combiner,
+          DartType inferredType) =>
+      genericExpressionExit("variableAssign", location, inferredType);
+
+  void variableDeclarationEnter(Location location) =>
+      genericStatementEnter('variableDeclaration', location);
+
+  void variableDeclarationExit(
+          Location location, DartType statementType, DartType inferredType) =>
+      genericStatementExit('variableDeclaration', location);
+
+  void variableGetEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("variableGet", location, typeContext);
+
+  void variableGetExit(Location location, bool isInCascade,
+          Declaration expressionVariable, DartType inferredType) =>
+      genericExpressionExit("variableGet", location, inferredType);
+
+  void variableSetEnter(Location location, DartType typeContext) =>
+      genericExpressionEnter("variableSet", location, typeContext);
+
+  void variableSetExit(Location location, DartType inferredType) =>
+      genericExpressionExit("variableSet", location, inferredType);
+
+  void whileStatementEnter(Location location) =>
+      genericStatementEnter("whileStatement", location);
+
+  void whileStatementExit(Location location) =>
+      genericStatementExit("whileStatement", location);
+
+  void yieldStatementEnter(Location location) =>
+      genericStatementEnter('yieldStatement', location);
+
+  void yieldStatementExit(Location location) =>
+      genericStatementExit('yieldStatement', location);
+
+  void storePrefixInfo(Location location, PrefixInfo prefixInfo) {}
+
+  void storeClassReference(
+      Location location, Reference reference, DartType rawType) {}
+}
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index e9b987e..95e550b 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE.md file.
 
+import 'package:kernel/ast.dart' as kernel;
+
 import 'package:kernel/ast.dart'
     show
         Arguments,
@@ -18,7 +20,6 @@
         FunctionExpression,
         FunctionNode,
         FunctionType,
-        Initializer,
         Instantiation,
         InterfaceType,
         InvocationExpression,
@@ -28,12 +29,12 @@
         Member,
         MethodInvocation,
         Name,
+        Node,
         NullLiteral,
         Procedure,
         ProcedureKind,
         PropertyGet,
         PropertySet,
-        Statement,
         StaticGet,
         SuperMethodInvocation,
         SuperPropertyGet,
@@ -60,19 +61,39 @@
         InstrumentationValueForType,
         InstrumentationValueForTypeArgs;
 
+import '../../scanner/token.dart' show Token;
+
+import '../builder/class_builder.dart' show ClassBuilder;
+
+import '../builder/function_type_alias_builder.dart'
+    show FunctionTypeAliasBuilder;
+
+import '../builder/invalid_type_builder.dart' show InvalidTypeBuilder;
+
+import '../builder/prefix_builder.dart' show PrefixBuilder;
+
+import '../builder/type_builder.dart' show TypeBuilder;
+
+import '../builder/type_variable_builder.dart' show TypeVariableBuilder;
+
 import '../fasta_codes.dart';
 
+import '../kernel/expression_generator.dart' show TypeUseGenerator;
+
+import '../kernel/factory.dart' show Factory;
+
 import '../kernel/kernel_expression_generator.dart' show buildIsNull;
 
 import '../kernel/kernel_shadow_ast.dart'
     show
-        getExplicitTypeArguments,
+        ExpressionJudgment,
         ShadowClass,
         ShadowConstructorInvocation,
         ShadowField,
         ShadowMember,
-        ShadowNullLiteral,
-        ShadowVariableDeclaration;
+        NullJudgment,
+        VariableDeclarationJudgment,
+        getExplicitTypeArguments;
 
 import '../names.dart' show callName;
 
@@ -91,6 +112,8 @@
 import 'type_inference_engine.dart'
     show IncludesTypeParametersCovariantly, TypeInferenceEngine;
 
+import 'type_inference_listener.dart' show TypeInferenceListener;
+
 import 'type_promotion.dart' show TypePromoter, TypePromoterDisabled;
 
 import 'type_schema.dart' show isKnown, UnknownType;
@@ -323,27 +346,49 @@
   Uri get uri;
 
   /// Performs full type inference on the given field initializer.
-  void inferFieldInitializer(
-      InferenceHelper helper, DartType declaredType, Expression initializer);
+  void inferFieldInitializer<Expression, Statement, Initializer, Type>(
+      InferenceHelper helper,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType declaredType,
+      kernel.Expression initializer);
 
   /// Performs type inference on the given function body.
-  void inferFunctionBody(InferenceHelper helper, DartType returnType,
-      AsyncMarker asyncMarker, Statement body);
+  void inferFunctionBody<Expression, Statement, Initializer, Type>(
+      InferenceHelper helper,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType returnType,
+      AsyncMarker asyncMarker,
+      Statement body);
 
   /// Performs type inference on the given constructor initializer.
-  void inferInitializer(InferenceHelper helper, Initializer initializer);
+  void inferInitializer<Expression, Statement, Initializer, Type>(
+      InferenceHelper helper,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      kernel.Initializer initializer);
 
   /// Performs type inference on the given metadata annotations.
-  void inferMetadata(InferenceHelper helper, List<Expression> annotations);
+  void inferMetadata<Expression, Statement, Initializer, Type>(
+      InferenceHelper helper,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      List<kernel.Expression> annotations);
 
   /// Performs type inference on the given metadata annotations keeping the
   /// existing helper if possible.
-  void inferMetadataKeepingHelper(List<Expression> annotations);
+  void inferMetadataKeepingHelper<Expression, Statement, Initializer, Type>(
+      Factory<Expression, Statement, Initializer, Type> factory,
+      List<kernel.Expression> annotations);
 
   /// Performs type inference on the given function parameter initializer
   /// expression.
-  void inferParameterInitializer(
-      InferenceHelper helper, Expression initializer, DartType declaredType);
+  void inferParameterInitializer<Expression, Statement, Initializer, Type>(
+      InferenceHelper helper,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      kernel.Expression initializer,
+      DartType declaredType);
+
+  void storePrefix(Token token, PrefixBuilder prefix);
+
+  void storeTypeUse(TypeUseGenerator generator);
 }
 
 /// Implementation of [TypeInferrer] which doesn't do any type inference.
@@ -363,25 +408,49 @@
   Uri get uri => null;
 
   @override
-  void inferFieldInitializer(
-      InferenceHelper helper, DartType declaredType, Expression initializer) {}
+  void inferFieldInitializer<Expression, Statement, Initializer, Type>(
+      InferenceHelper helper,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType declaredType,
+      kernel.Expression initializer) {}
 
   @override
-  void inferFunctionBody(InferenceHelper helper, DartType returnType,
-      AsyncMarker asyncMarker, Statement body) {}
+  void inferFunctionBody<Expression, Statement, Initializer, Type>(
+      InferenceHelper helper,
+      Factory<Expression, Statement, Initializer, Type> statementFactory,
+      DartType returnType,
+      AsyncMarker asyncMarker,
+      Statement body) {}
 
   @override
-  void inferInitializer(InferenceHelper helper, Initializer initializer) {}
+  void inferInitializer<Expression, Statement, Initializer, Type>(
+      InferenceHelper helper,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      kernel.Initializer initializer) {}
 
   @override
-  void inferMetadata(InferenceHelper helper, List<Expression> annotations) {}
+  void inferMetadata<Expression, Statement, Initializer, Type>(
+      InferenceHelper helper,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      List<kernel.Expression> annotations) {}
 
   @override
-  void inferMetadataKeepingHelper(List<Expression> annotations) {}
+  void inferMetadataKeepingHelper<Expression, Statement, Initializer, Type>(
+      Factory<Expression, Statement, Initializer, Type> factory,
+      List<kernel.Expression> annotations) {}
 
   @override
-  void inferParameterInitializer(
-      InferenceHelper helper, Expression initializer, DartType declaredType) {}
+  void inferParameterInitializer<Expression, Statement, Initializer, Type>(
+      InferenceHelper helper,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      kernel.Expression initializer,
+      DartType declaredType) {}
+
+  @override
+  void storePrefix(Token token, PrefixBuilder prefix) {}
+
+  @override
+  void storeTypeUse(TypeUseGenerator generator) {}
 }
 
 /// Derived class containing generic implementations of [TypeInferrer].
@@ -415,6 +484,8 @@
 
   final TypeSchemaEnvironment typeSchemaEnvironment;
 
+  final TypeInferenceListener<int, int, Node, int> listener;
+
   final InterfaceType thisType;
 
   final SourceLibraryBuilder library;
@@ -433,8 +504,8 @@
   /// if the last invocation didn't require any inference.
   FunctionType lastCalleeType;
 
-  TypeInferrerImpl(
-      this.engine, this.uri, bool topLevel, this.thisType, this.library)
+  TypeInferrerImpl(this.engine, this.uri, this.listener, bool topLevel,
+      this.thisType, this.library)
       : coreTypes = engine.coreTypes,
         strongMode = engine.strongMode,
         classHierarchy = engine.classHierarchy,
@@ -799,6 +870,15 @@
   /// initializer.
   Expression getFieldInitializer(ShadowField field);
 
+  /// If the [member] is a forwarding stub, return the target it forwards to.
+  /// Otherwise return the given [member].
+  Member getRealTarget(Member member) {
+    if (member is Procedure && member.isForwardingStub) {
+      return member.forwardingStubInterfaceTarget;
+    }
+    return member;
+  }
+
   DartType getSetterType(Object interfaceMember, DartType receiverType) {
     if (interfaceMember is FunctionType) {
       return interfaceMember;
@@ -960,16 +1040,22 @@
   ///
   /// Derived classes should override this method with logic that dispatches on
   /// the expression type and calls the appropriate specialized "infer" method.
-  DartType inferExpression(
-      Expression expression, DartType typeContext, bool typeNeeded);
+  DartType inferExpression<Expression, Statement, Initializer, Type>(
+      Factory<Expression, Statement, Initializer, Type> factory,
+      kernel.Expression expression,
+      DartType typeContext,
+      bool typeNeeded);
 
   @override
-  void inferFieldInitializer(
-      InferenceHelper helper, DartType declaredType, Expression initializer) {
+  void inferFieldInitializer<Expression, Statement, Initializer, Type>(
+      InferenceHelper helper,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType declaredType,
+      kernel.Expression initializer) {
     assert(closureContext == null);
     this.helper = helper;
-    var actualType = inferExpression(
-        initializer, declaredType ?? const UnknownType(), declaredType != null);
+    var actualType = inferExpression(factory, initializer,
+        declaredType ?? const UnknownType(), declaredType != null);
     if (declaredType != null) {
       ensureAssignable(
           declaredType, actualType, initializer, initializer.fileOffset);
@@ -981,24 +1067,36 @@
   ///
   /// Derived classes should provide an implementation that calls
   /// [inferExpression] for the given [field]'s initializer expression.
-  DartType inferFieldTopLevel(ShadowField field, bool typeNeeded);
+  DartType inferFieldTopLevel<Expression, Statement, Initializer, Type>(
+      Factory<Expression, Statement, Initializer, Type> factory,
+      ShadowField field,
+      bool typeNeeded);
 
   @override
-  void inferFunctionBody(InferenceHelper helper, DartType returnType,
-      AsyncMarker asyncMarker, Statement body) {
+  void inferFunctionBody<Expression, Statement, Initializer, Type>(
+      InferenceHelper helper,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType returnType,
+      AsyncMarker asyncMarker,
+      Statement body) {
     assert(closureContext == null);
     this.helper = helper;
     closureContext =
         new ClosureContext(this, asyncMarker, returnType, false, true);
-    inferStatement(body);
+    inferStatement(factory, body);
     closureContext = null;
     this.helper = null;
   }
 
   /// Performs the type inference steps that are shared by all kinds of
   /// invocations (constructors, instance methods, and static methods).
-  DartType inferInvocation(DartType typeContext, int offset,
-      FunctionType calleeType, DartType returnType, Arguments arguments,
+  DartType inferInvocation<Expression, Statement, Initializer, Type>(
+      Factory<Expression, Statement, Initializer, Type> factory,
+      DartType typeContext,
+      int offset,
+      FunctionType calleeType,
+      DartType returnType,
+      Arguments arguments,
       {bool isOverloadedArithmeticOperator: false,
       DartType receiverType,
       bool skipTypeArgumentInference: false,
@@ -1067,6 +1165,7 @@
           ? substitution.substituteType(formalType)
           : formalType;
       var expressionType = inferExpression(
+          factory,
           expression,
           inferredFormalType,
           inferenceNeeded ||
@@ -1128,8 +1227,12 @@
     return inferredType;
   }
 
-  DartType inferLocalFunction(FunctionNode function, DartType typeContext,
-      int fileOffset, DartType returnContext) {
+  DartType inferLocalFunction<Expression, Statement, Initializer, Type>(
+      Factory<Expression, Statement, Initializer, Type> factory,
+      FunctionNode function,
+      DartType typeContext,
+      int fileOffset,
+      DartType returnContext) {
     bool hasImplicitReturnType = false;
     if (returnContext == null) {
       hasImplicitReturnType = true;
@@ -1139,21 +1242,22 @@
       var positionalParameters = function.positionalParameters;
       for (var i = 0; i < positionalParameters.length; i++) {
         var parameter = positionalParameters[i];
-        inferMetadataKeepingHelper(parameter.annotations);
+        inferMetadataKeepingHelper(factory, parameter.annotations);
         if (i >= function.requiredParameterCount &&
             parameter.initializer == null) {
-          parameter.initializer = new ShadowNullLiteral()..parent = parameter;
+          parameter.initializer = new NullJudgment()..parent = parameter;
         }
         if (parameter.initializer != null) {
-          inferExpression(parameter.initializer, parameter.type, false);
+          inferExpression(
+              factory, parameter.initializer, parameter.type, false);
         }
       }
       for (var parameter in function.namedParameters) {
-        inferMetadataKeepingHelper(parameter.annotations);
+        inferMetadataKeepingHelper(factory, parameter.annotations);
         if (parameter.initializer == null) {
-          parameter.initializer = new ShadowNullLiteral()..parent = parameter;
+          parameter.initializer = new NullJudgment()..parent = parameter;
         }
-        inferExpression(parameter.initializer, parameter.type, false);
+        inferExpression(factory, parameter.initializer, parameter.type, false);
       }
     }
 
@@ -1215,8 +1319,8 @@
     // Otherwise, if `Qi` is not `_`, let `Ri` be the greatest closure of
     // `Qi[T/S]` with respect to `?`.  Otherwise, let `Ri` be `dynamic`.
     for (int i = 0; i < formals.length; i++) {
-      ShadowVariableDeclaration formal = formals[i];
-      if (ShadowVariableDeclaration.isImplicitlyTyped(formal)) {
+      VariableDeclarationJudgment formal = formals[i];
+      if (VariableDeclarationJudgment.isImplicitlyTyped(formal)) {
         DartType inferredType;
         if (formalTypesFromContext[i] == coreTypes.nullClass.rawType) {
           inferredType = coreTypes.objectClass.rawType;
@@ -1249,7 +1353,7 @@
         needToSetReturnType,
         needImplicitDowncasts);
     this.closureContext = closureContext;
-    inferStatement(function.body);
+    inferStatement(factory, function.body);
 
     // If the closure is declared with `async*` or `sync*`, let `M` be the
     // least upper bound of the types of the `yield` expressions in `B’`, or
@@ -1277,16 +1381,21 @@
   }
 
   @override
-  void inferMetadata(InferenceHelper helper, List<Expression> annotations) {
+  void inferMetadata<Expression, Statement, Initializer, Type>(
+      InferenceHelper helper,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      List<kernel.Expression> annotations) {
     if (annotations != null) {
       this.helper = helper;
-      inferMetadataKeepingHelper(annotations);
+      inferMetadataKeepingHelper(factory, annotations);
       this.helper = null;
     }
   }
 
   @override
-  void inferMetadataKeepingHelper(List<Expression> annotations) {
+  void inferMetadataKeepingHelper<Expression, Statement, Initializer, Type>(
+      Factory<Expression, Statement, Initializer, Type> factory,
+      List<kernel.Expression> annotations) {
     if (annotations != null) {
       // Place annotations in a temporary list literal so that they will have a
       // parent.  This is necessary in case any of the annotations need to get
@@ -1294,7 +1403,7 @@
       var parents = annotations.map((e) => e.parent).toList();
       new ListLiteral(annotations);
       for (var annotation in annotations) {
-        inferExpression(annotation, const UnknownType(), false);
+        inferExpression(factory, annotation, const UnknownType(), false);
       }
       for (int i = 0; i < annotations.length; ++i) {
         annotations[i].parent = parents[i];
@@ -1304,17 +1413,24 @@
 
   /// Performs the core type inference algorithm for method invocations (this
   /// handles both null-aware and non-null-aware method invocations).
-  DartType inferMethodInvocation(Expression expression, Expression receiver,
-      int fileOffset, bool isImplicitCall, DartType typeContext,
+  DartType inferMethodInvocation<Expression, Statement, Initializer, Type>(
+      Factory<Expression, Statement, Initializer, Type> factory,
+      kernel.Expression expression,
+      kernel.Expression receiver,
+      int fileOffset,
+      bool isImplicitCall,
+      DartType typeContext,
       {VariableDeclaration receiverVariable,
       MethodInvocation desugaredInvocation,
       Object interfaceMember,
       Name methodName,
       Arguments arguments}) {
+    listener.methodInvocationEnter(expression.fileOffset, typeContext);
     // First infer the receiver so we can look up the method that was invoked.
     var receiverType = receiver == null
         ? thisType
-        : inferExpression(receiver, const UnknownType(), true);
+        : inferExpression(factory, receiver, const UnknownType(), true);
+    listener.methodInvocationBeforeArgs(expression.fileOffset, isImplicitCall);
     if (strongMode) {
       receiverVariable?.type = receiverType;
     }
@@ -1333,8 +1449,8 @@
         getCalleeFunctionType(interfaceMember, receiverType, !isImplicitCall);
     var checkKind = preCheckInvocationContravariance(receiver, receiverType,
         interfaceMember, desugaredInvocation, arguments, expression);
-    var inferredType = inferInvocation(
-        typeContext, fileOffset, calleeType, calleeType.returnType, arguments,
+    var inferredType = inferInvocation(factory, typeContext, fileOffset,
+        calleeType, calleeType.returnType, arguments,
         isOverloadedArithmeticOperator: isOverloadedArithmeticOperator,
         receiverType: receiverType);
     if (methodName.name == '==') {
@@ -1342,29 +1458,52 @@
     }
     handleInvocationContravariance(checkKind, desugaredInvocation, arguments,
         expression, inferredType, calleeType, fileOffset);
-    if (!identical(interfaceMember, 'call') &&
-        strongMode &&
-        isImplicitCall &&
-        interfaceMember != null &&
-        !(interfaceMember is Procedure &&
-            interfaceMember.kind == ProcedureKind.Method) &&
-        receiverType is! DynamicType &&
-        receiverType != typeSchemaEnvironment.rawFunctionType) {
-      var parent = expression.parent;
-      var errorNode = helper.wrapInCompileTimeError(expression,
-          templateImplicitCallOfNonMethod.withArguments(receiverType));
-      parent?.replaceChild(expression, errorNode);
+    int resultOffset = arguments.fileOffset != -1
+        ? arguments.fileOffset
+        : expression.fileOffset;
+    if (identical(interfaceMember, 'call')) {
+      listener.methodInvocationExitCall(
+          resultOffset,
+          arguments.types,
+          isImplicitCall,
+          lastCalleeType,
+          lastInferredSubstitution,
+          inferredType);
+    } else {
+      if (strongMode &&
+          isImplicitCall &&
+          interfaceMember != null &&
+          !(interfaceMember is Procedure &&
+              interfaceMember.kind == ProcedureKind.Method) &&
+          receiverType is! DynamicType &&
+          receiverType != typeSchemaEnvironment.rawFunctionType) {
+        var parent = expression.parent;
+        var errorNode = helper.wrapInCompileTimeError(expression,
+            templateImplicitCallOfNonMethod.withArguments(receiverType));
+        parent?.replaceChild(expression, errorNode);
+      }
+      listener.methodInvocationExit(
+          resultOffset,
+          arguments.types,
+          isImplicitCall,
+          getRealTarget(interfaceMember),
+          lastCalleeType,
+          lastInferredSubstitution,
+          inferredType);
     }
     return inferredType;
   }
 
   @override
-  void inferParameterInitializer(
-      InferenceHelper helper, Expression initializer, DartType declaredType) {
+  void inferParameterInitializer<Expression, Statement, Initializer, Type>(
+      InferenceHelper helper,
+      Factory<Expression, Statement, Initializer, Type> factory,
+      kernel.Expression initializer,
+      DartType declaredType) {
     assert(closureContext == null);
     this.helper = helper;
     assert(declaredType != null);
-    var actualType = inferExpression(initializer, declaredType, true);
+    var actualType = inferExpression(factory, initializer, declaredType, true);
     ensureAssignable(
         declaredType, actualType, initializer, initializer.fileOffset);
     this.helper = null;
@@ -1372,16 +1511,25 @@
 
   /// Performs the core type inference algorithm for property gets (this handles
   /// both null-aware and non-null-aware property gets).
-  DartType inferPropertyGet(Expression expression, Expression receiver,
-      int fileOffset, DartType typeContext,
+  void inferPropertyGet<Expression, Statement, Initializer, Type>(
+      Factory<Expression, Statement, Initializer, Type> factory,
+      ExpressionJudgment expression,
+      ExpressionJudgment receiver,
+      int fileOffset,
+      DartType typeContext,
       {VariableDeclaration receiverVariable,
       PropertyGet desugaredGet,
       Object interfaceMember,
       Name propertyName}) {
+    listener.propertyGetEnter(expression.fileOffset, typeContext);
     // First infer the receiver so we can look up the getter that was invoked.
-    var receiverType = receiver == null
-        ? thisType
-        : inferExpression(receiver, const UnknownType(), true);
+    DartType receiverType;
+    if (receiver == null) {
+      receiverType = thisType;
+    } else {
+      inferExpression(factory, receiver, const UnknownType(), true);
+      receiverType = receiver.inferredType;
+    }
     if (strongMode) {
       receiverVariable?.type = receiverType;
     }
@@ -1408,7 +1556,13 @@
       inferredType =
           instantiateTearOff(inferredType, typeContext, replacedExpression);
     }
-    return inferredType;
+    if (identical(interfaceMember, 'call')) {
+      listener.propertyGetExitCall(expression.fileOffset, inferredType);
+    } else {
+      listener.propertyGetExit(
+          expression.fileOffset, interfaceMember, inferredType);
+    }
+    expression.inferredType = inferredType;
   }
 
   /// Modifies a type as appropriate when inferring a closure return type.
@@ -1425,7 +1579,9 @@
   ///
   /// Derived classes should override this method with logic that dispatches on
   /// the statement type and calls the appropriate specialized "infer" method.
-  void inferStatement(Statement statement);
+  void inferStatement<Expression, Statement, Initializer, Type>(
+      Factory<Expression, Statement, Initializer, Type> factory,
+      Statement statement);
 
   /// Performs the type inference steps necessary to instantiate a tear-off
   /// (if necessary).
@@ -1542,6 +1698,30 @@
     }
   }
 
+  @override
+  void storePrefix(Token token, PrefixBuilder prefix) {
+    listener.storePrefixInfo(token.offset, prefix.importIndex);
+  }
+
+  @override
+  void storeTypeUse(TypeUseGenerator generator) {
+    var declaration = generator.declaration;
+    if (declaration is ClassBuilder<TypeBuilder, InterfaceType>) {
+      Class class_ = declaration.target;
+      listener.storeClassReference(
+          generator.declarationReferenceOffset, class_, class_.rawType);
+    } else if (declaration is TypeVariableBuilder<TypeBuilder, DartType>) {
+      // TODO(paulberry): handle this case.
+    } else if (declaration is FunctionTypeAliasBuilder<TypeBuilder, DartType>) {
+      // TODO(paulberry): handle this case.
+    } else if (declaration is InvalidTypeBuilder<TypeBuilder, DartType>) {
+      // TODO(paulberry): handle this case.
+    } else {
+      throw new UnimplementedError(
+          'TODO(paulberry): ${declaration.runtimeType}');
+    }
+  }
+
   DartType wrapFutureOrType(DartType type) {
     if (type is InterfaceType &&
         identical(type.classNode, coreTypes.futureOrClass)) {
@@ -1630,8 +1810,8 @@
     }
     if (expression is VariableGet) {
       var variable = expression.variable;
-      if (variable is ShadowVariableDeclaration &&
-          ShadowVariableDeclaration.isLocalFunction(variable)) {
+      if (variable is VariableDeclarationJudgment &&
+          VariableDeclarationJudgment.isLocalFunction(variable)) {
         return templateInvalidCastLocalFunction;
       }
     }
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 8c56c40..7820263 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -80,8 +80,11 @@
 ConstEvalInvalidStringInterpolationOperand/example: Fail
 ConstEvalInvalidType/analyzerCode: Fail # CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH / CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH / CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH / ...
 ConstEvalInvalidType/example: Fail
+ConstEvalNegativeShift/analyzerCode: Fail # http://dartbug.com/33481
+ConstEvalNegativeShift/example: Fail
 ConstEvalNonConstantLiteral/dart2jsCode: Fail
 ConstEvalNonConstantLiteral/example: Fail
+ConstEvalZeroDivisor/example: Fail
 ConstFieldWithoutInitializer/example: Fail
 ConstructorNotFound/analyzerCode: Fail
 ConstructorNotFound/example: Fail
@@ -221,7 +224,6 @@
 InvalidInitializer/analyzerCode: Fail
 InvalidInitializer/example: Fail
 InvalidInlineFunctionType/analyzerCode: Fail
-InvalidInlineFunctionType/declaration: Fail
 InvalidPackageUri/analyzerCode: Fail
 InvalidPackageUri/example: Fail
 InvalidVoid/analyzerCode: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 534bfdf..7292c04 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -64,6 +64,9 @@
 # `#lexeme` a token. The token's `lexeme` property is used.
 #
 # `#string`, `#string2`, `#string3`: strings (that aren't names).
+#    Note: as a rule of thumb, avoid using the `#string` keys. In particular,
+#    do not use them for composing error messages, see [diagnostics.md](
+#    lib/src/fasta/diagnostics.md#avoid-composing-messages-programmatically).
 #
 # `#type`, #type2`: Kernel types.
 #
@@ -99,6 +102,15 @@
 ConstEvalInvalidBinaryOperandType:
   template: "Binary operator '#string' on '#constant' requires operand of type '#type', but was of type '#type2'."
 
+ConstEvalZeroDivisor:
+  template: "Binary operator '#string' on '#string2' requires non-zero divisor, but divisor was '0'."
+  dart2jsCode: INVALID_CONSTANT_DIV
+  analyzerCode: CONST_EVAL_THROWS_IDBZE
+
+ConstEvalNegativeShift:
+  template: "Binary operator '#string' on '#string2' requires non-negative operand, but was '#string3'."
+  dart2jsCode: INVALID_CONSTANT_SHIFT
+
 ConstEvalInvalidMethodInvocation:
   template: "The method '#string' can't be invoked on '#constant' within a const context."
   analyzerCode: UNDEFINED_OPERATOR
@@ -766,6 +778,32 @@
   analyzerCode: STACK_OVERFLOW
   dart2jsCode: GENERIC
 
+InvalidCodePoint:
+  template: "The escape sequence starting with '\\u' isn't a valid code point."
+  analyzerCode: INVALID_CODE_POINT
+  dart2jsCode: "*fatal*"
+  expression:
+    - "'\\u{110000}'"
+
+InvalidHexEscape:
+  template: "An escape sequence starting with '\\x' must be followed by 2 hexidecimal digits."
+  analyzerCode: INVALID_HEX_ESCAPE
+  dart2jsCode: "*fatal*"
+  expression:
+    - "'\\x0'"
+    - "'\\x0y'"
+
+InvalidUnicodeEscape:
+  template: "An escape sequence starting with '\\u' must be followed by 4 hexidecimal digits or from 1 to 6 digits between '{' and '}'."
+  analyzerCode: INVALID_UNICODE_ESCAPE
+  dart2jsCode: "*fatal*"
+  expression:
+    - "'\\u'"
+    - "'\\u0F'"
+    - "'\\u{'"
+    - "'\\u{03'"
+    - "'\\u{0Z}'"
+
 UnexpectedDollarInString:
   template: "A '$' has special meaning inside a string, and must be followed by an identifier or an expression in curly braces ({})."
   tip: "Try adding a backslash (\\) to escape the '$'."
@@ -858,6 +896,9 @@
   template: "Incomplete token."
   dart2jsCode: UNTERMINATED_TOKEN
 
+# Note: avoid using this template, it should only be used for debugging and
+# prototyping, see [diagnostics.md](
+# lib/src/fasta/diagnostics.md#avoid-composing-messages-programmatically).
 Unspecified:
   template: "#string"
   dart2jsCode: GENERIC
@@ -914,7 +955,7 @@
   template: "Invalid inline function type."
   tip: "Try changing the inline function type (as in 'int f()') to a prefixed function type using the `Function` keyword (as in 'int Function() f')."
   dart2jsCode: INVALID_INLINE_FUNCTION_TYPE
-  declaration: "typedef F = Function(int f(String x)); main() { F f; }"
+  declaration: "typedef F = Function(int f(String x));"
 
 SetterNotSync:
   template: "Setters can't use 'async', 'async*', or 'sync*'."
@@ -2275,3 +2316,19 @@
 UseOfDeprecatedIdentifier:
   template: "'#name' is deprecated."
   severity: IGNORED
+
+InitializeFromDillNotSelfContained:
+  template: "Tried to initialize from a previous compilation (#string), but the file was not self-contained. This might be a bug. The Dart team would greatly appreciate if you would take a moment to report this problem at http://dartbug.com/new."
+  severity: WARNING
+  frontendInternal: true
+  external: test/incremental_load_from_invalid_dill_test.dart
+
+InitializeFromDillUnknownProblem:
+  template: "Tried to initialize from a previous compilation (#string), but couldn't. Error message was '#string2'. This might be a bug. The Dart team would greatly appreciate if you would take a moment to report this problem at http://dartbug.com/new."
+  severity: WARNING
+  frontendInternal: true
+  external: test/incremental_load_from_invalid_dill_test.dart
+
+MissingExplicitTypeArguments:
+  template: "No type arguments provided, #count possible."
+  severity: IGNORED
diff --git a/pkg/front_end/test/fasta/bootstrap_test.dart b/pkg/front_end/test/fasta/bootstrap_test.dart
index 2ca89b4..752038c 100644
--- a/pkg/front_end/test/fasta/bootstrap_test.dart
+++ b/pkg/front_end/test/fasta/bootstrap_test.dart
@@ -48,6 +48,7 @@
   Uri dartVm = Uri.base.resolveUri(new Uri.file(Platform.resolvedExecutable));
   StdioProcess result = await StdioProcess.run(dartVm.toFilePath(), <String>[
     "-c",
+    "--no_preview_dart_2",
     compiler.toFilePath(),
     "--compile-sdk=sdk/",
     "--output=${output.toFilePath()}",
diff --git a/pkg/front_end/test/fasta/generator_to_string_test.dart b/pkg/front_end/test/fasta/generator_to_string_test.dart
index 4901f63..08dfb3a 100644
--- a/pkg/front_end/test/fasta/generator_to_string_test.dart
+++ b/pkg/front_end/test/fasta/generator_to_string_test.dart
@@ -118,7 +118,7 @@
     Name binaryOperator = new Name("+");
     Name name = new Name("bar");
     PrefixBuilder prefixBuilder =
-        new PrefixBuilder("myPrefix", false, libraryBuilder, -1);
+        new PrefixBuilder("myPrefix", false, libraryBuilder, -1, -1);
     String assignmentOperator = "+=";
     TypeDeclarationBuilder declaration =
         new KernelTypeVariableBuilder.fromKernel(
diff --git a/pkg/front_end/test/fasta/messages_test.dart b/pkg/front_end/test/fasta/messages_test.dart
index d5d759d..9ba85b8 100644
--- a/pkg/front_end/test/fasta/messages_test.dart
+++ b/pkg/front_end/test/fasta/messages_test.dart
@@ -229,8 +229,10 @@
           null,
           exampleAndAnalyzerCodeRequired &&
                   externalTest != null &&
-                  !(new File(externalTest).existsSync())
-              ? "Given external example for $name points to a nonexisting file."
+                  !(new File.fromUri(suite.uri.resolve(externalTest))
+                      .existsSync())
+              ? "Given external example for $name points to a nonexisting file "
+                  "(${suite.uri.resolve(externalTest)})."
               : null);
 
       yield createDescription(
diff --git a/pkg/front_end/test/fasta/tool_test.dart b/pkg/front_end/test/fasta/tool_test.dart
index 494cde9..9c763dd 100644
--- a/pkg/front_end/test/fasta/tool_test.dart
+++ b/pkg/front_end/test/fasta/tool_test.dart
@@ -85,12 +85,12 @@
     "compile-platform": {
       "exitCode": 1,
       "stdout": """
-Usage: compile_platform [options] dart-library-uri libraries.json platform.dill outline.dill
+Usage: compile_platform [options] dart-library-uri libraries.json vm_outline_strong.dill platform.dill outline.dill
 
 Compiles Dart SDK platform to the Dill/Kernel IR format.
 
 $usage
-Error: Expected four arguments.
+Error: Expected five arguments.
 """,
       "stderr": "",
     },
diff --git a/pkg/front_end/test/fasta/type_inference/interface_resolver_test.dart b/pkg/front_end/test/fasta/type_inference/interface_resolver_test.dart
index 679349d..97a1d64 100644
--- a/pkg/front_end/test/fasta/type_inference/interface_resolver_test.dart
+++ b/pkg/front_end/test/fasta/type_inference/interface_resolver_test.dart
@@ -201,7 +201,7 @@
       {String name: 'foo',
       DartType setterType: const DynamicType(),
       bool isCovariant: false}) {
-    var parameter = new ShadowVariableDeclaration('value', 0,
+    var parameter = new VariableDeclarationJudgment('value', 0,
         type: setterType, isCovariant: isCovariant);
     var body = new Block([]);
     var function = new FunctionNode(body,
@@ -256,7 +256,7 @@
   }
 
   void test_candidate_for_setter() {
-    var parameter = new ShadowVariableDeclaration('value', 0);
+    var parameter = new VariableDeclarationJudgment('value', 0);
     var function = new FunctionNode(null,
         positionalParameters: [parameter], returnType: const VoidType());
     var setter = new ShadowProcedure(
@@ -367,8 +367,8 @@
         kind: ProcedureKind.Operator,
         name: '[]=',
         positionalParameters: [
-          new ShadowVariableDeclaration('index', 0, type: intType),
-          new ShadowVariableDeclaration('value', 0, type: numType)
+          new VariableDeclarationJudgment('index', 0, type: intType),
+          new VariableDeclarationJudgment('value', 0, type: numType)
         ]);
     var stub = makeForwardingStub(operator, false);
     expect(stub.name, operator.name);
@@ -397,7 +397,7 @@
   }
 
   void test_createForwardingStub_optionalNamedParameter() {
-    var parameter = new ShadowVariableDeclaration('x', 0, type: intType);
+    var parameter = new VariableDeclarationJudgment('x', 0, type: intType);
     var method = makeEmptyMethod(namedParameters: [parameter]);
     var stub = makeForwardingStub(method, false);
     expect(stub.function.namedParameters, hasLength(1));
@@ -414,7 +414,7 @@
   }
 
   void test_createForwardingStub_optionalPositionalParameter() {
-    var parameter = new ShadowVariableDeclaration('x', 0, type: intType);
+    var parameter = new VariableDeclarationJudgment('x', 0, type: intType);
     var method = makeEmptyMethod(
         positionalParameters: [parameter], requiredParameterCount: 0);
     var stub = makeForwardingStub(method, false);
@@ -431,7 +431,7 @@
   }
 
   void test_createForwardingStub_requiredParameter() {
-    var parameter = new ShadowVariableDeclaration('x', 0, type: intType);
+    var parameter = new VariableDeclarationJudgment('x', 0, type: intType);
     var method = makeEmptyMethod(positionalParameters: [parameter]);
     var stub = makeForwardingStub(method, false);
     expect(stub.function.positionalParameters, hasLength(1));
@@ -512,9 +512,9 @@
     // class C<T> { T foo(T x, {T y}); }
     var T = new TypeParameter('T', objectType);
     var x =
-        new ShadowVariableDeclaration('x', 0, type: new TypeParameterType(T));
+        new VariableDeclarationJudgment('x', 0, type: new TypeParameterType(T));
     var y =
-        new ShadowVariableDeclaration('y', 0, type: new TypeParameterType(T));
+        new VariableDeclarationJudgment('y', 0, type: new TypeParameterType(T));
     var method = makeEmptyMethod(
         positionalParameters: [x],
         namedParameters: [y],
@@ -547,9 +547,9 @@
     var T = new TypeParameter('T', objectType);
     var U = new TypeParameter('U', objectType);
     var x =
-        new ShadowVariableDeclaration('x', 0, type: new TypeParameterType(T));
+        new VariableDeclarationJudgment('x', 0, type: new TypeParameterType(T));
     var y =
-        new ShadowVariableDeclaration('y', 0, type: new TypeParameterType(U));
+        new VariableDeclarationJudgment('y', 0, type: new TypeParameterType(U));
     var method =
         makeEmptyMethod(typeParameters: [U], positionalParameters: [x, y]);
     var substitution = Substitution.fromPairs([T], [intType]);
@@ -563,7 +563,7 @@
   void test_createForwardingStub_typeParameter_substituteUses() {
     // class C { void foo<T>(T x); }
     var typeParameter = new TypeParameter('T', objectType);
-    var param = new ShadowVariableDeclaration('x', 0,
+    var param = new VariableDeclarationJudgment('x', 0,
         type: new TypeParameterType(typeParameter));
     var method = makeEmptyMethod(
         typeParameters: [typeParameter], positionalParameters: [param]);
@@ -578,7 +578,7 @@
     var typeParameter = new TypeParameter('T', null);
     typeParameter.bound =
         new InterfaceType(listClass, [new TypeParameterType(typeParameter)]);
-    var param = new ShadowVariableDeclaration('x', 0,
+    var param = new VariableDeclarationJudgment('x', 0,
         type: new TypeParameterType(typeParameter));
     var method = makeEmptyMethod(
         typeParameters: [typeParameter], positionalParameters: [param]);
@@ -596,9 +596,9 @@
   void test_direct_isGenericCovariant() {
     var typeParameter = new TypeParameter('T', objectType);
     var u = new TypeParameter('U', new TypeParameterType(typeParameter));
-    var x = new ShadowVariableDeclaration('x', 0,
+    var x = new VariableDeclarationJudgment('x', 0,
         type: new TypeParameterType(typeParameter));
-    var y = new ShadowVariableDeclaration('y', 0,
+    var y = new VariableDeclarationJudgment('y', 0,
         type: new TypeParameterType(typeParameter));
     var method = makeEmptyMethod(
         typeParameters: [u], positionalParameters: [x], namedParameters: [y]);
@@ -708,14 +708,14 @@
 
   void test_forwardingStub_isCovariant_inherited() {
     var methodA = makeEmptyMethod(positionalParameters: [
-      new ShadowVariableDeclaration('x', 0, type: numType)
+      new VariableDeclarationJudgment('x', 0, type: numType)
     ], namedParameters: [
-      new ShadowVariableDeclaration('y', 0, type: numType)
+      new VariableDeclarationJudgment('y', 0, type: numType)
     ]);
     var methodB = makeEmptyMethod(positionalParameters: [
-      new ShadowVariableDeclaration('x', 0, type: intType)..isCovariant = true
+      new VariableDeclarationJudgment('x', 0, type: intType)..isCovariant = true
     ], namedParameters: [
-      new ShadowVariableDeclaration('y', 0, type: intType)..isCovariant = true
+      new VariableDeclarationJudgment('y', 0, type: intType)..isCovariant = true
     ]);
     var a = makeClass(name: 'A', procedures: [methodA]);
     var b = makeClass(name: 'B', procedures: [methodB]);
@@ -739,20 +739,20 @@
     var methodA = makeEmptyMethod(typeParameters: [
       new TypeParameter('U', numType)
     ], positionalParameters: [
-      new ShadowVariableDeclaration('x', 0, type: numType)
+      new VariableDeclarationJudgment('x', 0, type: numType)
     ], namedParameters: [
-      new ShadowVariableDeclaration('y', 0, type: numType)
+      new VariableDeclarationJudgment('y', 0, type: numType)
     ]);
     var typeParameterB = new TypeParameter('T', objectType);
     var methodB = makeEmptyMethod(typeParameters: [
       new TypeParameter('U', new TypeParameterType(typeParameterB))
         ..isGenericCovariantImpl = true
     ], positionalParameters: [
-      new ShadowVariableDeclaration('x', 0,
+      new VariableDeclarationJudgment('x', 0,
           type: new TypeParameterType(typeParameterB))
         ..isGenericCovariantImpl = true
     ], namedParameters: [
-      new ShadowVariableDeclaration('y', 0,
+      new VariableDeclarationJudgment('y', 0,
           type: new TypeParameterType(typeParameterB))
         ..isGenericCovariantImpl = true
     ]);
@@ -907,11 +907,11 @@
   }
 
   void test_resolve_directly_declared() {
-    var parameterA = new ShadowVariableDeclaration('x', 0,
+    var parameterA = new VariableDeclarationJudgment('x', 0,
         type: objectType, isCovariant: true);
     var methodA = makeEmptyMethod(positionalParameters: [parameterA]);
-    var parameterB =
-        new ShadowVariableDeclaration('x', 0, type: intType, isCovariant: true);
+    var parameterB = new VariableDeclarationJudgment('x', 0,
+        type: intType, isCovariant: true);
     var methodB = makeEmptyMethod(positionalParameters: [parameterB]);
     var a = makeClass(name: 'A', procedures: [methodA]);
     var b = makeClass(
@@ -987,16 +987,16 @@
 
   void test_resolve_with_added_implementation() {
     var methodA = makeEmptyMethod(positionalParameters: [
-      new ShadowVariableDeclaration('x', 0, type: numType)
+      new VariableDeclarationJudgment('x', 0, type: numType)
     ]);
     var typeParamB = new TypeParameter('T', objectType);
     var methodB = makeEmptyMethod(positionalParameters: [
-      new ShadowVariableDeclaration('x', 0,
+      new VariableDeclarationJudgment('x', 0,
           type: new TypeParameterType(typeParamB))
         ..isGenericCovariantImpl = true
     ]);
     var methodC = makeEmptyMethod(positionalParameters: [
-      new ShadowVariableDeclaration('x', 0, type: numType)
+      new VariableDeclarationJudgment('x', 0, type: numType)
     ], isAbstract: true);
     var a = makeClass(name: 'A', procedures: [methodA]);
     var b = makeClass(
diff --git a/pkg/front_end/test/incremental_dart2js_load_from_dill_test.dart b/pkg/front_end/test/incremental_dart2js_load_from_dill_test.dart
index 0d52517..d9a9cad 100644
--- a/pkg/front_end/test/incremental_dart2js_load_from_dill_test.dart
+++ b/pkg/front_end/test/incremental_dart2js_load_from_dill_test.dart
@@ -29,28 +29,17 @@
   Uri fullDillFromInitialized =
       outDir.uri.resolve("dart2js.full_from_initialized.dill");
   Uri nonexisting = outDir.uri.resolve("dart2js.nonexisting.dill");
-  Uri nonLoadable = outDir.uri.resolve("dart2js.nonloadable.dill");
 
   // Compile dart2js without initializing from dill.
   Stopwatch stopwatch = new Stopwatch()..start();
   await normalCompile(dart2jsUrl, normalDill);
   print("Normal compile took ${stopwatch.elapsedMilliseconds} ms");
 
-  // Create a file that cannot be (fully) loaded as a dill file.
-  List<int> corruptData = new File.fromUri(normalDill).readAsBytesSync();
-  for (int i = 10 * (corruptData.length ~/ 16);
-      i < 15 * (corruptData.length ~/ 16);
-      ++i) {
-    corruptData[i] = 42;
-  }
-  new File.fromUri(nonLoadable).writeAsBytesSync(corruptData);
-
   // Compile dart2js, initializing from the just-compiled dill,
   // a nonexisting file and a dill file that isn't valid.
   for (List<Object> initializationData in [
     [normalDill, true],
     [nonexisting, false],
-    //  [nonLoadable, false] // disabled for now
   ]) {
     Uri initializeWith = initializationData[0];
     bool initializeExpect = initializationData[1];
diff --git a/pkg/front_end/test/incremental_load_from_dill_test.dart b/pkg/front_end/test/incremental_load_from_dill_test.dart
index 156b814..9e14f0e 100644
--- a/pkg/front_end/test/incremental_load_from_dill_test.dart
+++ b/pkg/front_end/test/incremental_load_from_dill_test.dart
@@ -115,8 +115,8 @@
   }
 }
 
-void basicTest(Map<String, String> sourceFiles, String entryPoint, bool strong,
-    List<String> invalidate, Directory outDir) async {
+Future<Null> basicTest(Map<String, String> sourceFiles, String entryPoint,
+    bool strong, List<String> invalidate, Directory outDir) async {
   Uri entryPointUri = outDir.uri.resolve(entryPoint);
   Set<String> invalidateFilenames = invalidate?.toSet() ?? new Set<String>();
   List<Uri> invalidateUris = <Uri>[];
@@ -172,7 +172,7 @@
   checkIsEqual(normalDillData, initializedDillData);
 }
 
-void newWorldTest(bool strong, List worlds) async {
+Future<Null> newWorldTest(bool strong, List worlds) async {
   final Uri sdkRoot = computePlatformBinariesLocation();
   final Uri base = Uri.parse("org-dartlang-test:///");
   final Uri sdkSummary = base.resolve("vm_platform.dill");
diff --git a/pkg/front_end/test/incremental_load_from_invalid_dill_test.dart b/pkg/front_end/test/incremental_load_from_invalid_dill_test.dart
new file mode 100644
index 0000000..deced6f
--- /dev/null
+++ b/pkg/front_end/test/incremental_load_from_invalid_dill_test.dart
@@ -0,0 +1,175 @@
+// Copyright (c) 2018, 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' show Future;
+
+import 'dart:io' show File;
+
+import 'package:expect/expect.dart' show Expect;
+
+import 'package:front_end/src/api_prototype/compiler_options.dart'
+    show CompilerOptions;
+
+import "package:front_end/src/api_prototype/memory_file_system.dart"
+    show MemoryFileSystem;
+
+import 'package:front_end/src/base/processed_options.dart'
+    show ProcessedOptions;
+
+import 'package:front_end/src/compute_platform_binaries_location.dart'
+    show computePlatformBinariesLocation;
+
+import 'package:front_end/src/fasta/compiler_context.dart' show CompilerContext;
+
+import 'package:front_end/src/fasta/fasta_codes.dart'
+    show
+        Template,
+        templateInitializeFromDillNotSelfContained,
+        templateInitializeFromDillUnknownProblem,
+        FormattedMessage;
+
+import 'package:front_end/src/fasta/fasta_codes.dart' show FormattedMessage;
+
+import 'package:front_end/src/fasta/incremental_compiler.dart'
+    show IncrementalCompiler;
+
+import 'package:front_end/src/fasta/kernel/utils.dart' show serializeComponent;
+
+import 'package:front_end/src/fasta/severity.dart' show Severity;
+
+import 'package:kernel/kernel.dart' show Component;
+
+import 'incremental_load_from_dill_test.dart' show getOptions;
+
+Future<Null> main() async {
+  Tester tester = new Tester();
+  await tester.initialize();
+  await tester.test();
+}
+
+class Tester {
+  Uri sdkRoot;
+  Uri base;
+  Uri sdkSummary;
+  Uri initializeFrom;
+  Uri helperFile;
+  Uri entryPoint;
+  Uri platformUri;
+  List<int> sdkSummaryData;
+  List<FormattedMessage> formattedErrors;
+  List<FormattedMessage> formattedWarnings;
+  MemoryFileSystem fs;
+  CompilerOptions options;
+
+  compileExpectInitializeFailAndSpecificWarning(
+      Template expectedWarningTemplate) async {
+    formattedErrors.clear();
+    formattedWarnings.clear();
+    IncrementalCompiler compiler = new IncrementalCompiler(
+        new CompilerContext(new ProcessedOptions(options, [entryPoint])),
+        initializeFrom);
+    await compiler.computeDelta();
+    if (compiler.initializedFromDill) {
+      Expect.fail("Expected to not be able to initialized from dill, but did.");
+    }
+    if (formattedErrors.isNotEmpty) {
+      Expect.fail("Got unexpected errors: $formattedErrors");
+    }
+    if (formattedWarnings.length != 1) {
+      Expect.fail(
+          "Got unexpected errors: Expected one, got this: $formattedWarnings");
+    }
+    if (formattedWarnings[0].code.template != expectedWarningTemplate) {
+      Expect.fail("Expected $expectedWarningTemplate "
+          "but got $formattedWarnings");
+    }
+  }
+
+  initialize() async {
+    sdkRoot = computePlatformBinariesLocation();
+    base = Uri.parse("org-dartlang-test:///");
+    sdkSummary = base.resolve("vm_platform.dill");
+    initializeFrom = base.resolve("initializeFrom.dill");
+    helperFile = base.resolve("helper.dart");
+    entryPoint = base.resolve("small.dart");
+    platformUri = sdkRoot.resolve("vm_platform_strong.dill");
+    sdkSummaryData = await new File.fromUri(platformUri).readAsBytes();
+    formattedErrors = <FormattedMessage>[];
+    formattedWarnings = <FormattedMessage>[];
+    fs = new MemoryFileSystem(base);
+    options = getOptions(true);
+
+    options.fileSystem = fs;
+    options.sdkRoot = null;
+    options.sdkSummary = sdkSummary;
+    options.onProblem = (FormattedMessage problem, Severity severity,
+        List<FormattedMessage> context) {
+      if (severity == Severity.error) {
+        formattedErrors.add(problem);
+      } else if (severity == Severity.warning) {
+        formattedWarnings.add(problem);
+      }
+    };
+
+    fs.entityForUri(sdkSummary).writeAsBytesSync(sdkSummaryData);
+    fs.entityForUri(helperFile).writeAsStringSync("""
+foo() {
+    print("hello from foo");
+}
+""");
+    fs.entityForUri(entryPoint).writeAsStringSync("""
+import "helper.dart" as helper;
+main() {
+    helper.foo();
+}
+""");
+  }
+
+  Future<Null> test() async {
+    IncrementalCompiler compiler = new IncrementalCompiler(
+        new CompilerContext(new ProcessedOptions(options, [entryPoint])),
+        initializeFrom);
+
+    Component componentGood = await compiler.computeDelta();
+    List<int> dataGood = serializeComponent(componentGood);
+    fs.entityForUri(initializeFrom).writeAsBytesSync(dataGood);
+
+    // Initialize from good dill file should be ok.
+    compiler = new IncrementalCompiler(
+        new CompilerContext(new ProcessedOptions(options, [entryPoint])),
+        initializeFrom);
+    compiler.invalidate(entryPoint);
+    Component component = await compiler.computeDelta();
+    if (!compiler.initializedFromDill) {
+      Expect.fail(
+          "Expected to have sucessfully initialized from dill, but didn't.");
+    }
+    if (formattedErrors.isNotEmpty) {
+      Expect.fail("Got unexpected errors: $formattedErrors");
+    }
+    if (formattedWarnings.isNotEmpty) {
+      Expect.fail("Got unexpected errors: $formattedWarnings");
+    }
+
+    // Create a partial dill file.
+    compiler.invalidate(entryPoint);
+    component = await compiler.computeDelta();
+    if (component.libraries.length != 1) {
+      Expect.fail("Expected 1 library, got ${component.libraries.length}: "
+          "${component.libraries}");
+    }
+    List<int> data = serializeComponent(component);
+    fs.entityForUri(initializeFrom).writeAsBytesSync(data);
+
+    // Initializing from partial dill should not be ok.
+    await compileExpectInitializeFailAndSpecificWarning(
+        templateInitializeFromDillNotSelfContained);
+
+    // Create a invalid dill file to load from: Should not be ok.
+    data = new List<int>.filled(42, 42);
+    fs.entityForUri(initializeFrom).writeAsBytesSync(data);
+    await compileExpectInitializeFailAndSpecificWarning(
+        templateInitializeFromDillUnknownProblem);
+  }
+}
diff --git a/pkg/front_end/test/src/base/processed_options_test.dart b/pkg/front_end/test/src/base/processed_options_test.dart
index 8d29cbe..0cb398a 100644
--- a/pkg/front_end/test/src/base/processed_options_test.dart
+++ b/pkg/front_end/test/src/base/processed_options_test.dart
@@ -270,11 +270,12 @@
     fileSystem
         .entityForUri(Uri.parse('org-dartlang-test:///base/location/'))
         .createDirectory();
+
+    // packages/ directory is deprecated and should be ignored.
     fileSystem
         .entityForUri(Uri.parse('org-dartlang-test:///base/location/packages/'))
         .createDirectory();
 
-    // Both of these .packages file should be ignored.
     fileSystem
         .entityForUri(Uri.parse('org-dartlang-test:///.packages'))
         .writeAsStringSync('foo:bar\n');
@@ -285,8 +286,7 @@
     var processed = new ProcessedOptions(
         raw, [Uri.parse('org-dartlang-test:///base/location/script.dart')]);
     var uriTranslator = await processed.getUriTranslator();
-    checkPackageExpansion(
-        'foo', 'base/location/packages/foo', uriTranslator.packages);
+    checkPackageExpansion('foo', 'base/baz', uriTranslator.packages);
   }
 
   test_getUriTranslator_implicitPackagesFile_noPackages() async {
diff --git a/pkg/front_end/test/whole_program_test.dart b/pkg/front_end/test/whole_program_test.dart
index 6261229..d342a04 100644
--- a/pkg/front_end/test/whole_program_test.dart
+++ b/pkg/front_end/test/whole_program_test.dart
@@ -56,6 +56,7 @@
 
   final List<String> arguments = <String>[
     '--packages=${packagesFile.toFilePath()}',
+    '--no_preview_dart_2',
     '-c',
     compiler.toFilePath(),
     '--platform=${platformDill.toFilePath()}',
@@ -91,7 +92,7 @@
 }
 
 Future runHelloWorld(Uri dillFile) async {
-  final List<String> arguments = <String>['-c', dillFile.toFilePath()];
+  final List<String> arguments = <String>[dillFile.toFilePath()];
   await run('Running hello.dart', arguments, 'hello world!\n');
 }
 
diff --git a/pkg/front_end/testcases/bug32414a.dart.strong.expect b/pkg/front_end/testcases/bug32414a.dart.strong.expect
index 3e11c16..052c06d 100644
--- a/pkg/front_end/testcases/bug32414a.dart.strong.expect
+++ b/pkg/front_end/testcases/bug32414a.dart.strong.expect
@@ -5,7 +5,7 @@
 static method test() → void {
   dynamic a = 5;
   core::String b = a.{core::Object::toString}();
-  b = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bug32414a.dart:10:7: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  b = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bug32414a.dart:10:7: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   b = 42;
       ^" in let final dynamic #t2 = 42 in null;
diff --git a/pkg/front_end/testcases/bug32414a.dart.strong.transformed.expect b/pkg/front_end/testcases/bug32414a.dart.strong.transformed.expect
index 96b25c6..079972f 100644
--- a/pkg/front_end/testcases/bug32414a.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/bug32414a.dart.strong.transformed.expect
@@ -5,7 +5,7 @@
 static method test() → void {
   dynamic a = 5;
   core::String b = a.{core::Object::toString}();
-  b = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/bug32414a.dart:10:7: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  b = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/bug32414a.dart:10:7: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   b = 42;
       ^" in let final core::int #t2 = 42 in null;
diff --git a/pkg/front_end/testcases/bug33298.dart b/pkg/front_end/testcases/bug33298.dart
new file mode 100644
index 0000000..e388026
--- /dev/null
+++ b/pkg/front_end/testcases/bug33298.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2018, 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.
+
+class A {
+  String call(String s) => '$s$s';
+}
+
+class B<T> {
+  T call(T t) => t;
+}
+
+class C {
+  T call<T>(T t) => t;
+}
+
+test() {
+  A a = A();
+  List<String> list1 = ['a', 'b', 'c'].map(a.call).toList();
+  List<String> list2 = ['a', 'b', 'c'].map(a).toList();
+
+  B<String> b = B();
+  List<String> list3 = ['a', 'b', 'c'].map(b.call).toList();
+  List<String> list4 = ['a', 'b', 'c'].map(b).toList();
+
+  C c = C();
+  List<String> list5 = ['a', 'b', 'c'].map(c.call).toList();
+  List<String> list6 = ['a', 'b', 'c'].map(c).toList();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/bug33298.dart.direct.expect b/pkg/front_end/testcases/bug33298.dart.direct.expect
new file mode 100644
index 0000000..e89e403
--- /dev/null
+++ b/pkg/front_end/testcases/bug33298.dart.direct.expect
@@ -0,0 +1,37 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method call(core::String s) → core::String
+    return "${s}${s}";
+}
+class B<T extends core::Object = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method call(self::B::T t) → self::B::T
+    return t;
+}
+class C extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method call<T extends core::Object = dynamic>(self::C::call::T t) → self::C::call::T
+    return t;
+}
+static method test() → dynamic {
+  self::A a = new self::A::•();
+  core::List<core::String> list1 = <dynamic>["a", "b", "c"].map(a.call).toList();
+  core::List<core::String> list2 = <dynamic>["a", "b", "c"].map(a).toList();
+  self::B<core::String> b = new self::B::•<dynamic>();
+  core::List<core::String> list3 = <dynamic>["a", "b", "c"].map(b.call).toList();
+  core::List<core::String> list4 = <dynamic>["a", "b", "c"].map(b).toList();
+  self::C c = new self::C::•();
+  core::List<core::String> list5 = <dynamic>["a", "b", "c"].map(c.call).toList();
+  core::List<core::String> list6 = <dynamic>["a", "b", "c"].map(c).toList();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/bug33298.dart.direct.transformed.expect b/pkg/front_end/testcases/bug33298.dart.direct.transformed.expect
new file mode 100644
index 0000000..e89e403
--- /dev/null
+++ b/pkg/front_end/testcases/bug33298.dart.direct.transformed.expect
@@ -0,0 +1,37 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method call(core::String s) → core::String
+    return "${s}${s}";
+}
+class B<T extends core::Object = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method call(self::B::T t) → self::B::T
+    return t;
+}
+class C extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method call<T extends core::Object = dynamic>(self::C::call::T t) → self::C::call::T
+    return t;
+}
+static method test() → dynamic {
+  self::A a = new self::A::•();
+  core::List<core::String> list1 = <dynamic>["a", "b", "c"].map(a.call).toList();
+  core::List<core::String> list2 = <dynamic>["a", "b", "c"].map(a).toList();
+  self::B<core::String> b = new self::B::•<dynamic>();
+  core::List<core::String> list3 = <dynamic>["a", "b", "c"].map(b.call).toList();
+  core::List<core::String> list4 = <dynamic>["a", "b", "c"].map(b).toList();
+  self::C c = new self::C::•();
+  core::List<core::String> list5 = <dynamic>["a", "b", "c"].map(c.call).toList();
+  core::List<core::String> list6 = <dynamic>["a", "b", "c"].map(c).toList();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/bug33298.dart.outline.expect b/pkg/front_end/testcases/bug33298.dart.outline.expect
new file mode 100644
index 0000000..215a8e2
--- /dev/null
+++ b/pkg/front_end/testcases/bug33298.dart.outline.expect
@@ -0,0 +1,26 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → void
+    ;
+  method call(core::String s) → core::String
+    ;
+}
+class B<T extends core::Object = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+  method call(self::B::T t) → self::B::T
+    ;
+}
+class C extends core::Object {
+  synthetic constructor •() → void
+    ;
+  method call<T extends core::Object = dynamic>(self::C::call::T t) → self::C::call::T
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/bug33298.dart.strong.expect b/pkg/front_end/testcases/bug33298.dart.strong.expect
new file mode 100644
index 0000000..5d1ae80
--- /dev/null
+++ b/pkg/front_end/testcases/bug33298.dart.strong.expect
@@ -0,0 +1,40 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method call(core::String s) → core::String
+    return "${s}${s}";
+}
+class B<T extends core::Object = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method call(generic-covariant-impl self::B::T t) → self::B::T
+    return t;
+}
+class C extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method call<T extends core::Object = dynamic>(self::C::call::T t) → self::C::call::T
+    return t;
+}
+static method test() → dynamic {
+  self::A a = new self::A::•();
+  core::List<core::String> list1 = <core::String>["a", "b", "c"].{core::Iterable::map}<core::String>(a.{self::A::call}).{core::Iterable::toList}();
+  core::List<core::String> list2 = <core::String>["a", "b", "c"].{core::Iterable::map}<core::String>(let final self::A #t1 = a in #t1.==(null) ?{(core::String) → core::String} null : #t1.{self::A::call}).{core::Iterable::toList}();
+  self::B<core::String> b = new self::B::•<core::String>();
+  core::List<core::String> list3 = <core::String>["a", "b", "c"].{core::Iterable::map}<core::String>(b.{self::B::call}).{core::Iterable::toList}();
+  core::List<core::String> list4 = <core::String>["a", "b", "c"].{core::Iterable::map}<core::String>(let final self::B<core::String> #t2 = b in #t2.==(null) ?{(core::String) → core::String} null : #t2.{self::B::call}).{core::Iterable::toList}();
+  self::C c = new self::C::•();
+  core::List<core::String> list5 = <core::String>["a", "b", "c"].{core::Iterable::map}<core::String>(c.{self::C::call}<core::String>).{core::Iterable::toList}();
+  core::List<core::String> list6 = <core::String>["a", "b", "c"].{core::Iterable::map}<dynamic>(let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bug33298.dart:28:44: Error: A value of type '<T extends dart.core::Object = dynamic>(#lib1::C::call::T) \u8594 #lib1::C::call::T' can't be assigned to a variable of type '(dart.core::String) \u8594 dynamic'.
+Try changing the type of the left hand side, or casting the right hand side to '(dart.core::String) \u8594 dynamic'.
+  List<String> list6 = ['a', 'b', 'c'].map(c).toList();
+                                           ^" in let final dynamic #t4 = let final self::C #t5 = c in #t5.==(null) ?{<T extends core::Object = dynamic>(self::C::call::T) → self::C::call::T} null : #t5.{self::C::call} in null).{core::Iterable::toList}() as{TypeError} core::List<core::String>;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/bug33298.dart.strong.transformed.expect b/pkg/front_end/testcases/bug33298.dart.strong.transformed.expect
new file mode 100644
index 0000000..f0aa840
--- /dev/null
+++ b/pkg/front_end/testcases/bug33298.dart.strong.transformed.expect
@@ -0,0 +1,40 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method call(core::String s) → core::String
+    return "${s}${s}";
+}
+class B<T extends core::Object = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method call(generic-covariant-impl self::B::T t) → self::B::T
+    return t;
+}
+class C extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method call<T extends core::Object = dynamic>(self::C::call::T t) → self::C::call::T
+    return t;
+}
+static method test() → dynamic {
+  self::A a = new self::A::•();
+  core::List<core::String> list1 = <core::String>["a", "b", "c"].{core::Iterable::map}<core::String>(a.{self::A::call}).{core::Iterable::toList}();
+  core::List<core::String> list2 = <core::String>["a", "b", "c"].{core::Iterable::map}<core::String>(let final self::A #t1 = a in #t1.==(null) ?{(core::String) → core::String} null : #t1.{self::A::call}).{core::Iterable::toList}();
+  self::B<core::String> b = new self::B::•<core::String>();
+  core::List<core::String> list3 = <core::String>["a", "b", "c"].{core::Iterable::map}<core::String>(b.{self::B::call}).{core::Iterable::toList}();
+  core::List<core::String> list4 = <core::String>["a", "b", "c"].{core::Iterable::map}<core::String>(let final self::B<core::String> #t2 = b in #t2.==(null) ?{(core::String) → core::String} null : #t2.{self::B::call}).{core::Iterable::toList}();
+  self::C c = new self::C::•();
+  core::List<core::String> list5 = <core::String>["a", "b", "c"].{core::Iterable::map}<core::String>(c.{self::C::call}<core::String>).{core::Iterable::toList}();
+  core::List<core::String> list6 = <core::String>["a", "b", "c"].{core::Iterable::map}<dynamic>(let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/bug33298.dart:28:44: Error: A value of type '<T extends dart.core::Object = dynamic>(#lib1::C::call::T) \u8594 #lib1::C::call::T' can't be assigned to a variable of type '(dart.core::String) \u8594 dynamic'.
+Try changing the type of the left hand side, or casting the right hand side to '(dart.core::String) \u8594 dynamic'.
+  List<String> list6 = ['a', 'b', 'c'].map(c).toList();
+                                           ^" in let final <T extends core::Object = dynamic>(self::C::call::T) → self::C::call::T #t4 = let final self::C #t5 = c in #t5.==(null) ?{<T extends core::Object = dynamic>(self::C::call::T) → self::C::call::T} null : #t5.{self::C::call} in null).{core::Iterable::toList}() as{TypeError} core::List<core::String>;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/expression/type_param_shadow_arg_ctor_inferred.expression.yaml.expect b/pkg/front_end/testcases/expression/type_param_shadow_arg_ctor_inferred.expression.yaml.expect
index 4802c5b..a10a38b 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow_arg_ctor_inferred.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_param_shadow_arg_ctor_inferred.expression.yaml.expect
@@ -3,5 +3,5 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<T extends dynamic>() → dynamic
   return () → dart.core::Null {
-    main::A::debugExpr::T k = let final dynamic #t1 = let dynamic _ = null in invalid-expression "org-dartlang-debug:synthetic_debug_expression:2:13: Error: A value of type 'main::A<dynamic>' can't be assigned to a variable of type 'T'.\nTry changing the type of the left hand side, or casting the right hand side to 'T'.\n  T k = new A();\n            ^" in let final dynamic #t2 = new main::A::•<dynamic>() in null;
+    main::A::debugExpr::T k = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "org-dartlang-debug:synthetic_debug_expression:2:13: Error: A value of type 'main::A<dynamic>' can't be assigned to a variable of type 'T'.\nTry changing the type of the left hand side, or casting the right hand side to 'T'.\n  T k = new A();\n            ^" in let final dynamic #t2 = new main::A::•<dynamic>() in null;
   };
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.expect
index 66d9ec3..644c45e 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.expect
@@ -7,7 +7,7 @@
     return null;
   () → core::String g = f;
   g = () → core::String {
-    return let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    return let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
     return /*error:RETURN_OF_INVALID_TYPE*/ 1;
                                             ^" in let final dynamic #t2 = 1 in null;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.transformed.expect
index 324afbd..b4515d3 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.transformed.expect
@@ -7,7 +7,7 @@
     return null;
   () → core::String g = f;
   g = () → core::String {
-    return let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    return let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
     return /*error:RETURN_OF_INVALID_TYPE*/ 1;
                                             ^" in let final core::int #t2 = 1 in null;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect
index 2994746..e3df93c 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect
@@ -15,7 +15,7 @@
   self::C<core::num> c_num = new self::C::•<core::num>(123);
   self::C<core::num> c_num2 = let final self::C<core::num> #t1 = new self::C::•<core::num>(456) in let final dynamic #t2 = #t1.{self::C::t} = 1.0 in #t1;
   self::C<dynamic> c_dynamic = new self::C::•<dynamic>(42);
-  x.{self::C::t} = let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  x.{self::C::t} = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x. /*@target=C::t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
                                                        ^" in let final dynamic #t4 = "hello" in null;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.transformed.expect
index 3669a89..d63a39e 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
   self::C<core::num> c_num = new self::C::•<core::num>(123);
   self::C<core::num> c_num2 = let final self::C<core::num> #t1 = new self::C::•<core::num>(456) in let final core::double #t2 = #t1.{self::C::t} = 1.0 in #t1;
   self::C<dynamic> c_dynamic = new self::C::•<dynamic>(42);
-  x.{self::C::t} = let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  x.{self::C::t} = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x. /*@target=C::t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
                                                        ^" in let final core::String #t4 = "hello" in null;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect
index 39dec86..5808a55 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect
@@ -15,7 +15,7 @@
 }
 static method test() → dynamic {
   self::C<core::int> x = self::C::•<core::int>(42);
-  x.{self::C::t} = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  x.{self::C::t} = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x. /*@target=C::t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
                                                        ^" in let final dynamic #t2 = "hello" in null;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.transformed.expect
index 6259db5..14fa331 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
 }
 static method test() → dynamic {
   self::C<core::int> x = self::C::•<core::int>(42);
-  x.{self::C::t} = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  x.{self::C::t} = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x. /*@target=C::t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
                                                        ^" in let final core::String #t2 = "hello" in null;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.expect
index 6e8738f..a31f14b 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.expect
@@ -4,7 +4,7 @@
 
 static method test() → void {
   core::List<core::int> l;
-  l = <core::int>[let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  l = <core::int>[let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   l = /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"];
                                                                     ^" in let final dynamic #t2 = "hello" in null];
diff --git a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.transformed.expect
index 9964842..993ac52 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.transformed.expect
@@ -4,7 +4,7 @@
 
 static method test() → void {
   core::List<core::int> l;
-  l = <core::int>[let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  l = <core::int>[let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   l = /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"];
                                                                     ^" in let final core::String #t2 = "hello" in null];
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.expect
index c8f23f9..8248a92 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.expect
@@ -25,51 +25,51 @@
 static method test() → void {
   new self::F0::•(<core::int>[]);
   new self::F0::•(<core::int>[3]);
-  new self::F0::•(<core::int>[let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F0::•(<core::int>[let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                     ^" in let final dynamic #t2 = "hello" in null]);
-  new self::F0::•(<core::int>[let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F0::•(<core::int>[let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in let final dynamic #t4 = "hello" in null, 3]);
   new self::F1::•(a: <core::int>[]);
   new self::F1::•(a: <core::int>[3]);
-  new self::F1::•(a: <core::int>[let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F1::•(a: <core::int>[let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                ^" in let final dynamic #t6 = "hello" in null]);
-  new self::F1::•(a: <core::int>[let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F1::•(a: <core::int>[let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in let final dynamic #t8 = "hello" in null, 3]);
   new self::F2::•(<core::int>[]);
   new self::F2::•(<core::int>[3]);
-  new self::F2::•(<core::int>[let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F2::•(<core::int>[let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                     ^" in let final dynamic #t10 = "hello" in null]);
-  new self::F2::•(<core::int>[let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F2::•(<core::int>[let dynamic _ = null in let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in let final dynamic #t12 = "hello" in null, 3]);
   new self::F3::•(<core::Iterable<core::int>>[]);
   new self::F3::•(<core::Iterable<core::int>>[<core::int>[3]]);
-  new self::F3::•(<core::Iterable<core::int>>[<core::int>[let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F3::•(<core::Iterable<core::int>>[<core::int>[let dynamic _ = null in let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
                                                                   ^" in let final dynamic #t14 = "hello" in null]]);
-  new self::F3::•(<core::Iterable<core::int>>[<core::int>[let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F3::•(<core::Iterable<core::int>>[<core::int>[let dynamic _ = null in let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
                                                                   ^" in let final dynamic #t16 = "hello" in null], <core::int>[3]]);
   new self::F4::•(a: <core::Iterable<core::int>>[]);
   new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[3]]);
-  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let dynamic _ = null in let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
                                                                   ^" in let final dynamic #t18 = "hello" in null]]);
-  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let dynamic _ = null in let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
                                                                   ^" in let final dynamic #t20 = "hello" in null], <core::int>[3]]);
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.transformed.expect
index 0606923..9e6ac81 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.transformed.expect
@@ -25,51 +25,51 @@
 static method test() → void {
   new self::F0::•(<core::int>[]);
   new self::F0::•(<core::int>[3]);
-  new self::F0::•(<core::int>[let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F0::•(<core::int>[let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                     ^" in let final core::String #t2 = "hello" in null]);
-  new self::F0::•(<core::int>[let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F0::•(<core::int>[let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in let final core::String #t4 = "hello" in null, 3]);
   new self::F1::•(a: <core::int>[]);
   new self::F1::•(a: <core::int>[3]);
-  new self::F1::•(a: <core::int>[let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F1::•(a: <core::int>[let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                ^" in let final core::String #t6 = "hello" in null]);
-  new self::F1::•(a: <core::int>[let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F1::•(a: <core::int>[let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in let final core::String #t8 = "hello" in null, 3]);
   new self::F2::•(<core::int>[]);
   new self::F2::•(<core::int>[3]);
-  new self::F2::•(<core::int>[let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F2::•(<core::int>[let<BottomType> _ = null in let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                     ^" in let final core::String #t10 = "hello" in null]);
-  new self::F2::•(<core::int>[let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F2::•(<core::int>[let<BottomType> _ = null in let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in let final core::String #t12 = "hello" in null, 3]);
   new self::F3::•(<core::Iterable<core::int>>[]);
   new self::F3::•(<core::Iterable<core::int>>[<core::int>[3]]);
-  new self::F3::•(<core::Iterable<core::int>>[<core::int>[let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F3::•(<core::Iterable<core::int>>[<core::int>[let<BottomType> _ = null in let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
                                                                   ^" in let final core::String #t14 = "hello" in null]]);
-  new self::F3::•(<core::Iterable<core::int>>[<core::int>[let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F3::•(<core::Iterable<core::int>>[<core::int>[let<BottomType> _ = null in let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
                                                                   ^" in let final core::String #t16 = "hello" in null], <core::int>[3]]);
   new self::F4::•(a: <core::Iterable<core::int>>[]);
   new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[3]]);
-  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let<BottomType> _ = null in let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
                                                                   ^" in let final core::String #t18 = "hello" in null]]);
-  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let<BottomType> _ = null in let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
                                                                   ^" in let final core::String #t20 = "hello" in null], <core::int>[3]]);
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.expect
index bd9133d..7c0032b 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.expect
@@ -10,51 +10,51 @@
 static method test() → void {
   self::f0(<core::int>[]);
   self::f0(<core::int>[3]);
-  self::f0(<core::int>[let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f0(<core::int>[let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                    ^" in let final dynamic #t2 = "hello" in null]);
-  self::f0(<core::int>[let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f0(<core::int>[let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
                                                                    ^" in let final dynamic #t4 = "hello" in null, 3]);
   self::f1(a: <core::int>[]);
   self::f1(a: <core::int>[3]);
-  self::f1(a: <core::int>[let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f1(a: <core::int>[let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   f1(a: /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                       ^" in let final dynamic #t6 = "hello" in null]);
-  self::f1(a: <core::int>[let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f1(a: <core::int>[let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in let final dynamic #t8 = "hello" in null, 3]);
   self::f2(<core::int>[]);
   self::f2(<core::int>[3]);
-  self::f2(<core::int>[let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f2(<core::int>[let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                    ^" in let final dynamic #t10 = "hello" in null]);
-  self::f2(<core::int>[let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f2(<core::int>[let dynamic _ = null in let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
                                                                    ^" in let final dynamic #t12 = "hello" in null, 3]);
   self::f3(<core::Iterable<core::int>>[]);
   self::f3(<core::Iterable<core::int>>[<core::int>[3]]);
-  self::f3(<core::Iterable<core::int>>[<core::int>[let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f3(<core::Iterable<core::int>>[<core::int>[let dynamic _ = null in let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
                                                                   ^" in let final dynamic #t14 = "hello" in null]]);
-  self::f3(<core::Iterable<core::int>>[<core::int>[let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f3(<core::Iterable<core::int>>[<core::int>[let dynamic _ = null in let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
                                                                   ^" in let final dynamic #t16 = "hello" in null], <core::int>[3]]);
   self::f4(a: <core::Iterable<core::int>>[]);
   self::f4(a: <core::Iterable<core::int>>[<core::int>[3]]);
-  self::f4(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f4(a: <core::Iterable<core::int>>[<core::int>[let dynamic _ = null in let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
                                                                   ^" in let final dynamic #t18 = "hello" in null]]);
-  self::f4(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f4(a: <core::Iterable<core::int>>[<core::int>[let dynamic _ = null in let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
                                                                   ^" in let final dynamic #t20 = "hello" in null], <core::int>[3]]);
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.transformed.expect
index 52a7af1..c6f1d56 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.transformed.expect
@@ -10,51 +10,51 @@
 static method test() → void {
   self::f0(<core::int>[]);
   self::f0(<core::int>[3]);
-  self::f0(<core::int>[let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f0(<core::int>[let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                    ^" in let final core::String #t2 = "hello" in null]);
-  self::f0(<core::int>[let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f0(<core::int>[let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
                                                                    ^" in let final core::String #t4 = "hello" in null, 3]);
   self::f1(a: <core::int>[]);
   self::f1(a: <core::int>[3]);
-  self::f1(a: <core::int>[let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f1(a: <core::int>[let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   f1(a: /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                       ^" in let final core::String #t6 = "hello" in null]);
-  self::f1(a: <core::int>[let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f1(a: <core::int>[let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in let final core::String #t8 = "hello" in null, 3]);
   self::f2(<core::int>[]);
   self::f2(<core::int>[3]);
-  self::f2(<core::int>[let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f2(<core::int>[let<BottomType> _ = null in let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                    ^" in let final core::String #t10 = "hello" in null]);
-  self::f2(<core::int>[let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f2(<core::int>[let<BottomType> _ = null in let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
                                                                    ^" in let final core::String #t12 = "hello" in null, 3]);
   self::f3(<core::Iterable<core::int>>[]);
   self::f3(<core::Iterable<core::int>>[<core::int>[3]]);
-  self::f3(<core::Iterable<core::int>>[<core::int>[let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f3(<core::Iterable<core::int>>[<core::int>[let<BottomType> _ = null in let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
                                                                   ^" in let final core::String #t14 = "hello" in null]]);
-  self::f3(<core::Iterable<core::int>>[<core::int>[let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f3(<core::Iterable<core::int>>[<core::int>[let<BottomType> _ = null in let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
                                                                   ^" in let final core::String #t16 = "hello" in null], <core::int>[3]]);
   self::f4(a: <core::Iterable<core::int>>[]);
   self::f4(a: <core::Iterable<core::int>>[<core::int>[3]]);
-  self::f4(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f4(a: <core::Iterable<core::int>>[<core::int>[let<BottomType> _ = null in let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
                                                                   ^" in let final core::String #t18 = "hello" in null]]);
-  self::f4(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::f4(a: <core::Iterable<core::int>>[<core::int>[let<BottomType> _ = null in let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
                                                                   ^" in let final core::String #t20 = "hello" in null], <core::int>[3]]);
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect
index 2f7fa93..81fd737 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect
@@ -7,16 +7,16 @@
   {
     (core::int) → core::String l0 = (core::int x) → core::Null => null;
     (core::int) → core::String l1 = (core::int x) → core::String => "hello";
-    (core::int) → core::String l2 = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:66: Error: A value of type '(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::String'.
+    (core::int) → core::String l2 = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:66: Error: A value of type '(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::String'.
         l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (String x) =>
                                                                  ^" in let final dynamic #t2 = (core::String x) → core::String => "hello" in null;
-    (core::int) → core::String l3 = (core::int x) → core::String => let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:77: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    (core::int) → core::String l3 = (core::int x) → core::String => let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:77: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         l3 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (int x) => 3;
                                                                             ^" in let final dynamic #t4 = 3 in null;
     (core::int) → core::String l4 = (core::int x) → core::String {
-      return let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
                                               ^" in let final dynamic #t6 = 3 in null;
@@ -25,18 +25,18 @@
   {
     (core::int) → core::String l0 = (core::int x) → core::Null => null;
     (core::int) → core::String l1 = (core::int x) → core::String => "hello";
-    (core::int) → core::String l2 = (core::int x) → core::String => let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    (core::int) → core::String l2 = (core::int x) → core::String => let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
             3;
             ^" in let final dynamic #t8 = 3 in null;
     (core::int) → core::String l3 = (core::int x) → core::String {
-      return let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:31:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:31:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
                                               ^" in let final dynamic #t10 = 3 in null;
     };
     (core::int) → core::String l4 = (core::int x) → core::String {
-      return let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:34:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return let dynamic _ = null in let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:34:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ x;
                                               ^" in let final dynamic #t12 = x in null;
@@ -45,16 +45,16 @@
   {
     (core::int) → core::List<core::String> l0 = (core::int x) → core::Null => null;
     (core::int) → core::List<core::String> l1 = (core::int x) → core::List<core::String> => <core::String>["hello"];
-    (core::int) → core::List<core::String> l2 = let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:42:72: Error: A value of type '(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
+    (core::int) → core::List<core::String> l2 = let dynamic _ = null in let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:42:72: Error: A value of type '(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
         l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=List<String>*/ (String
                                                                        ^" in let final dynamic #t14 = (core::String x) → core::List<core::String> => <core::String>["hello"] in null;
-    (core::int) → core::List<core::String> l3 = (core::int x) → core::List<core::String> => <core::String>[let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:46:58: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    (core::int) → core::List<core::String> l3 = (core::int x) → core::List<core::String> => <core::String>[let dynamic _ = null in let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:46:58: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
               /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
                                                          ^" in let final dynamic #t16 = 3 in null];
     (core::int) → core::List<core::String> l4 = (core::int x) → core::List<core::String> {
-      return <core::String>[let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return <core::String>[let dynamic _ = null in let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
                                                    ^" in let final dynamic #t18 = 3 in null];
@@ -63,7 +63,7 @@
   {
     (core::int) → core::int l0 = (core::int x) → core::int => x;
     (core::int) → core::int l1 = (core::int x) → core::int => x.{core::num::+}(1);
-    (core::int) → core::String l2 = (core::int x) → core::String => let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    (core::int) → core::String l2 = (core::int x) → core::String => let dynamic _ = null in let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
             x;
             ^" in let final dynamic #t20 = x in null;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.transformed.expect
index d4df104..56253b6 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.transformed.expect
@@ -7,16 +7,16 @@
   {
     (core::int) → core::String l0 = (core::int x) → core::Null => null;
     (core::int) → core::String l1 = (core::int x) → core::String => "hello";
-    (core::int) → core::String l2 = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:66: Error: A value of type '(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::String'.
+    (core::int) → core::String l2 = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:66: Error: A value of type '(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::String'.
         l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (String x) =>
                                                                  ^" in let final (core::String) → core::String #t2 = (core::String x) → core::String => "hello" in null;
-    (core::int) → core::String l3 = (core::int x) → core::String => let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:77: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    (core::int) → core::String l3 = (core::int x) → core::String => let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:77: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         l3 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (int x) => 3;
                                                                             ^" in let final core::int #t4 = 3 in null;
     (core::int) → core::String l4 = (core::int x) → core::String {
-      return let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
                                               ^" in let final core::int #t6 = 3 in null;
@@ -25,18 +25,18 @@
   {
     (core::int) → core::String l0 = (core::int x) → core::Null => null;
     (core::int) → core::String l1 = (core::int x) → core::String => "hello";
-    (core::int) → core::String l2 = (core::int x) → core::String => let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    (core::int) → core::String l2 = (core::int x) → core::String => let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
             3;
             ^" in let final core::int #t8 = 3 in null;
     (core::int) → core::String l3 = (core::int x) → core::String {
-      return let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:31:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return let<BottomType> _ = null in let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:31:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
                                               ^" in let final core::int #t10 = 3 in null;
     };
     (core::int) → core::String l4 = (core::int x) → core::String {
-      return let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:34:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return let<BottomType> _ = null in let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:34:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ x;
                                               ^" in let final core::int #t12 = x in null;
@@ -45,16 +45,16 @@
   {
     (core::int) → core::List<core::String> l0 = (core::int x) → core::Null => null;
     (core::int) → core::List<core::String> l1 = (core::int x) → core::List<core::String> => <core::String>["hello"];
-    (core::int) → core::List<core::String> l2 = let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:42:72: Error: A value of type '(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
+    (core::int) → core::List<core::String> l2 = let<BottomType> _ = null in let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:42:72: Error: A value of type '(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
         l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=List<String>*/ (String
                                                                        ^" in let final (core::String) → core::List<core::String> #t14 = (core::String x) → core::List<core::String> => <core::String>["hello"] in null;
-    (core::int) → core::List<core::String> l3 = (core::int x) → core::List<core::String> => <core::String>[let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:46:58: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    (core::int) → core::List<core::String> l3 = (core::int x) → core::List<core::String> => <core::String>[let<BottomType> _ = null in let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:46:58: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
               /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
                                                          ^" in let final core::int #t16 = 3 in null];
     (core::int) → core::List<core::String> l4 = (core::int x) → core::List<core::String> {
-      return <core::String>[let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return <core::String>[let<BottomType> _ = null in let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
                                                    ^" in let final core::int #t18 = 3 in null];
@@ -63,7 +63,7 @@
   {
     (core::int) → core::int l0 = (core::int x) → core::int => x;
     (core::int) → core::int l1 = (core::int x) → core::int => x.{core::num::+}(1);
-    (core::int) → core::String l2 = (core::int x) → core::String => let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    (core::int) → core::String l2 = (core::int x) → core::String => let<BottomType> _ = null in let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
             x;
             ^" in let final core::int #t20 = x in null;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect
index 9d2e2a2..bd656ad 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect
@@ -25,51 +25,51 @@
 static method test() → void {
   new self::F0::•<core::int>(<core::int>[]);
   new self::F0::•<core::int>(<core::int>[3]);
-  new self::F0::•<core::int>(<core::int>[let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F0::•<core::int>(<core::int>[let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                     ^" in let final dynamic #t2 = "hello" in null]);
-  new self::F0::•<core::int>(<core::int>[let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F0::•<core::int>(<core::int>[let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in let final dynamic #t4 = "hello" in null, 3]);
   new self::F1::•<core::int>(a: <core::int>[]);
   new self::F1::•<core::int>(a: <core::int>[3]);
-  new self::F1::•<core::int>(a: <core::int>[let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F1::•<core::int>(a: <core::int>[let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                ^" in let final dynamic #t6 = "hello" in null]);
-  new self::F1::•<core::int>(a: <core::int>[let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F1::•<core::int>(a: <core::int>[let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in let final dynamic #t8 = "hello" in null, 3]);
   new self::F2::•<core::int>(<core::int>[]);
   new self::F2::•<core::int>(<core::int>[3]);
-  new self::F2::•<core::int>(<core::int>[let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F2::•<core::int>(<core::int>[let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                     ^" in let final dynamic #t10 = "hello" in null]);
-  new self::F2::•<core::int>(<core::int>[let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F2::•<core::int>(<core::int>[let dynamic _ = null in let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in let final dynamic #t12 = "hello" in null, 3]);
   new self::F3::•<core::int>(<core::Iterable<core::int>>[]);
   new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[3]]);
-  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let dynamic _ = null in let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
                                                                   ^" in let final dynamic #t14 = "hello" in null]]);
-  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let dynamic _ = null in let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
                                                                   ^" in let final dynamic #t16 = "hello" in null], <core::int>[3]]);
   new self::F4::•<core::int>(a: <core::Iterable<core::int>>[]);
   new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[3]]);
-  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let dynamic _ = null in let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
                                                                   ^" in let final dynamic #t18 = "hello" in null]]);
-  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let dynamic _ = null in let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
                                                                   ^" in let final dynamic #t20 = "hello" in null], <core::int>[3]]);
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.transformed.expect
index 2517cb9..1e39c77 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.transformed.expect
@@ -25,51 +25,51 @@
 static method test() → void {
   new self::F0::•<core::int>(<core::int>[]);
   new self::F0::•<core::int>(<core::int>[3]);
-  new self::F0::•<core::int>(<core::int>[let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F0::•<core::int>(<core::int>[let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                     ^" in let final core::String #t2 = "hello" in null]);
-  new self::F0::•<core::int>(<core::int>[let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F0::•<core::int>(<core::int>[let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in let final core::String #t4 = "hello" in null, 3]);
   new self::F1::•<core::int>(a: <core::int>[]);
   new self::F1::•<core::int>(a: <core::int>[3]);
-  new self::F1::•<core::int>(a: <core::int>[let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F1::•<core::int>(a: <core::int>[let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                ^" in let final core::String #t6 = "hello" in null]);
-  new self::F1::•<core::int>(a: <core::int>[let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F1::•<core::int>(a: <core::int>[let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in let final core::String #t8 = "hello" in null, 3]);
   new self::F2::•<core::int>(<core::int>[]);
   new self::F2::•<core::int>(<core::int>[3]);
-  new self::F2::•<core::int>(<core::int>[let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F2::•<core::int>(<core::int>[let<BottomType> _ = null in let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
                                                                     ^" in let final core::String #t10 = "hello" in null]);
-  new self::F2::•<core::int>(<core::int>[let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F2::•<core::int>(<core::int>[let<BottomType> _ = null in let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                ^" in let final core::String #t12 = "hello" in null, 3]);
   new self::F3::•<core::int>(<core::Iterable<core::int>>[]);
   new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[3]]);
-  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let<BottomType> _ = null in let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
                                                                   ^" in let final core::String #t14 = "hello" in null]]);
-  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let<BottomType> _ = null in let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
                                                                   ^" in let final core::String #t16 = "hello" in null], <core::int>[3]]);
   new self::F4::•<core::int>(a: <core::Iterable<core::int>>[]);
   new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[3]]);
-  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let<BottomType> _ = null in let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
                                                                   ^" in let final core::String #t18 = "hello" in null]]);
-  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let<BottomType> _ = null in let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
                                                                   ^" in let final core::String #t20 = "hello" in null], <core::int>[3]]);
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect
index 03e0d17..c873221 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect
@@ -9,16 +9,16 @@
     <S extends core::Object = dynamic>(core::int) → core::String v = f;
     v = <T extends core::Object = dynamic>(core::int x) → core::Null => null;
     v = <T extends core::Object = dynamic>(core::int x) → core::String => "hello";
-    v = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:65: Error: A value of type '<T extends dart.core::Object = dynamic>(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::String'.
+    v = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:65: Error: A value of type '<T extends dart.core::Object = dynamic>(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::String'.
     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (String x) =>
                                                                 ^" in let final dynamic #t2 = <T extends core::Object = dynamic>(core::String x) → core::String => "hello" in null;
-    v = <T extends core::Object = dynamic>(core::int x) → core::String => let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    v = <T extends core::Object = dynamic>(core::int x) → core::String => let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (int x) => 3;
                                                                            ^" in let final dynamic #t4 = 3 in null;
     v = <T extends core::Object = dynamic>(core::int x) → core::String {
-      return let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
                                               ^" in let final dynamic #t6 = 3 in null;
@@ -30,18 +30,18 @@
     <S extends core::Object = dynamic>(core::int) → core::String v = f;
     v = <T extends core::Object = dynamic>(core::int x) → core::Null => null;
     v = <T extends core::Object = dynamic>(core::int x) → core::String => "hello";
-    v = <T extends core::Object = dynamic>(core::int x) → core::String => let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    v = <T extends core::Object = dynamic>(core::int x) → core::String => let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         3;
         ^" in let final dynamic #t8 = 3 in null;
     v = <T extends core::Object = dynamic>(core::int x) → core::String {
-      return let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
                                               ^" in let final dynamic #t10 = 3 in null;
     };
     v = <T extends core::Object = dynamic>(core::int x) → core::String {
-      return let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return let dynamic _ = null in let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ x;
                                               ^" in let final dynamic #t12 = x in null;
@@ -53,16 +53,16 @@
     <S extends core::Object = dynamic>(core::int) → core::List<core::String> v = f;
     v = <T extends core::Object = dynamic>(core::int x) → core::Null => null;
     v = <T extends core::Object = dynamic>(core::int x) → core::List<core::String> => <core::String>["hello"];
-    v = let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:71: Error: A value of type '<T extends dart.core::Object = dynamic>(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
+    v = let dynamic _ = null in let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:71: Error: A value of type '<T extends dart.core::Object = dynamic>(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=List<String>*/ (String
                                                                       ^" in let final dynamic #t14 = <T extends core::Object = dynamic>(core::String x) → core::List<core::String> => <core::String>["hello"] in null;
-    v = <T extends core::Object = dynamic>(core::int x) → core::List<core::String> => <core::String>[let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    v = <T extends core::Object = dynamic>(core::int x) → core::List<core::String> => <core::String>[let dynamic _ = null in let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
                                                      ^" in let final dynamic #t16 = 3 in null];
     v = <T extends core::Object = dynamic>(core::int x) → core::List<core::String> {
-      return <core::String>[let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return <core::String>[let dynamic _ = null in let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
                                                    ^" in let final dynamic #t18 = 3 in null];
@@ -79,7 +79,7 @@
     x = <T extends core::Object = dynamic>(core::int x) → core::int => x;
     x = <T extends core::Object = dynamic>(core::int x) → core::int => x.{core::num::+}(1);
     <T extends core::Object = dynamic>(core::int) → core::String y = int2String;
-    y = <T extends core::Object = dynamic>(core::int x) → core::String => let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    y = <T extends core::Object = dynamic>(core::int x) → core::String => let dynamic _ = null in let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         x;
         ^" in let final dynamic #t20 = x in null;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.transformed.expect
index fbc3370..b541730 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.transformed.expect
@@ -9,16 +9,16 @@
     <S extends core::Object = dynamic>(core::int) → core::String v = f;
     v = <T extends core::Object = dynamic>(core::int x) → core::Null => null;
     v = <T extends core::Object = dynamic>(core::int x) → core::String => "hello";
-    v = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:65: Error: A value of type '<T extends dart.core::Object = dynamic>(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::String'.
+    v = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:65: Error: A value of type '<T extends dart.core::Object = dynamic>(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::String'.
     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (String x) =>
                                                                 ^" in let final <T extends core::Object = dynamic>(core::String) → core::String #t2 = <T extends core::Object = dynamic>(core::String x) → core::String => "hello" in null;
-    v = <T extends core::Object = dynamic>(core::int x) → core::String => let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    v = <T extends core::Object = dynamic>(core::int x) → core::String => let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (int x) => 3;
                                                                            ^" in let final core::int #t4 = 3 in null;
     v = <T extends core::Object = dynamic>(core::int x) → core::String {
-      return let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
                                               ^" in let final core::int #t6 = 3 in null;
@@ -30,18 +30,18 @@
     <S extends core::Object = dynamic>(core::int) → core::String v = f;
     v = <T extends core::Object = dynamic>(core::int x) → core::Null => null;
     v = <T extends core::Object = dynamic>(core::int x) → core::String => "hello";
-    v = <T extends core::Object = dynamic>(core::int x) → core::String => let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    v = <T extends core::Object = dynamic>(core::int x) → core::String => let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         3;
         ^" in let final core::int #t8 = 3 in null;
     v = <T extends core::Object = dynamic>(core::int x) → core::String {
-      return let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return let<BottomType> _ = null in let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
                                               ^" in let final core::int #t10 = 3 in null;
     };
     v = <T extends core::Object = dynamic>(core::int x) → core::String {
-      return let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return let<BottomType> _ = null in let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       return /*error:RETURN_OF_INVALID_TYPE*/ x;
                                               ^" in let final core::int #t12 = x in null;
@@ -53,16 +53,16 @@
     <S extends core::Object = dynamic>(core::int) → core::List<core::String> v = f;
     v = <T extends core::Object = dynamic>(core::int x) → core::Null => null;
     v = <T extends core::Object = dynamic>(core::int x) → core::List<core::String> => <core::String>["hello"];
-    v = let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:71: Error: A value of type '<T extends dart.core::Object = dynamic>(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
+    v = let<BottomType> _ = null in let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:71: Error: A value of type '<T extends dart.core::Object = dynamic>(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=List<String>*/ (String
                                                                       ^" in let final <T extends core::Object = dynamic>(core::String) → core::List<core::String> #t14 = <T extends core::Object = dynamic>(core::String x) → core::List<core::String> => <core::String>["hello"] in null;
-    v = <T extends core::Object = dynamic>(core::int x) → core::List<core::String> => <core::String>[let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    v = <T extends core::Object = dynamic>(core::int x) → core::List<core::String> => <core::String>[let<BottomType> _ = null in let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
                                                      ^" in let final core::int #t16 = 3 in null];
     v = <T extends core::Object = dynamic>(core::int x) → core::List<core::String> {
-      return <core::String>[let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+      return <core::String>[let<BottomType> _ = null in let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
                                                    ^" in let final core::int #t18 = 3 in null];
@@ -79,7 +79,7 @@
     x = <T extends core::Object = dynamic>(core::int x) → core::int => x;
     x = <T extends core::Object = dynamic>(core::int x) → core::int => x.{core::num::+}(1);
     <T extends core::Object = dynamic>(core::int) → core::String y = int2String;
-    y = <T extends core::Object = dynamic>(core::int x) → core::String => let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    y = <T extends core::Object = dynamic>(core::int x) → core::String => let<BottomType> _ = null in let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         x;
         ^" in let final core::int #t20 = x in null;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect
index 148939a..9bf8892 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect
@@ -55,27 +55,27 @@
     self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>(3, "hello");
     self::A<core::int, core::String> a2 = new self::A::•<core::int, core::String>(3, "hello");
     self::A<core::int, core::String> a3 = new self::A::named<core::int, core::String>(3, "hello");
-    self::A<core::int, core::String> a4 = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: The constructor returns type 'test::A<dart.core::int, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.
+    self::A<core::int, core::String> a4 = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: The constructor returns type 'test::A<dart.core::int, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.
 Change the type of the object being constructed or the context in which it is used.
         a4 = /*error:INVALID_CAST_NEW_EXPR*/ new A<int, dynamic>(3, \"hello\");
                                                  ^" in let final dynamic #t2 = new self::A::•<core::int, dynamic>(3, "hello") in null;
-    self::A<core::int, core::String> a5 = let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: The constructor returns type 'test::A<dynamic, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.
+    self::A<core::int, core::String> a5 = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: The constructor returns type 'test::A<dynamic, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.
 Change the type of the object being constructed or the context in which it is used.
         a5 = /*error:INVALID_CAST_NEW_EXPR*/ new A<dynamic, dynamic>.named(
                                                  ^" in let final dynamic #t4 = new self::A::named<dynamic, dynamic>(3, "hello") in null;
   }
   {
-    self::A<core::int, core::String> a0 = new self::A::•<core::int, core::String>(let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    self::A<core::int, core::String> a0 = new self::A::•<core::int, core::String>(let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final dynamic #t6 = "hello" in null, let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                               ^" in let final dynamic #t6 = "hello" in null, let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
                                                ^" in let final dynamic #t8 = 3 in null);
-    self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>(let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>(let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final dynamic #t10 = "hello" in null, let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                               ^" in let final dynamic #t10 = "hello" in null, let dynamic _ = null in let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
                                                ^" in let final dynamic #t12 = 3 in null);
@@ -85,27 +85,27 @@
     self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>("hello", 3);
     self::A<core::int, core::String> a2 = new self::B::•<core::String, core::int>("hello", 3);
     self::A<core::int, core::String> a3 = new self::B::named<core::String, core::int>("hello", 3);
-    self::A<core::int, core::String> a4 = let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'test::B<dart.core::String, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+    self::A<core::int, core::String> a4 = let dynamic _ = null in let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'test::B<dart.core::String, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
         a4 = /*error:INVALID_ASSIGNMENT*/ new B<String, dynamic>(\"hello\", 3);
                                               ^" in let final dynamic #t14 = new self::B::•<core::String, dynamic>("hello", 3) in null;
-    self::A<core::int, core::String> a5 = let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'test::B<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+    self::A<core::int, core::String> a5 = let dynamic _ = null in let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'test::B<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
         a5 = /*error:INVALID_ASSIGNMENT*/ new B<dynamic, dynamic>.named(
                                               ^" in let final dynamic #t16 = new self::B::named<dynamic, dynamic>("hello", 3) in null;
   }
   {
-    self::A<core::int, core::String> a0 = new self::B::•<core::String, core::int>(let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    self::A<core::int, core::String> a0 = new self::B::•<core::String, core::int>(let dynamic _ = null in let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
-                                               ^" in let final dynamic #t18 = 3 in null, let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                               ^" in let final dynamic #t18 = 3 in null, let dynamic _ = null in let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
                                                ^" in let final dynamic #t20 = "hello" in null);
-    self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>(let final dynamic #t21 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>(let dynamic _ = null in let final dynamic #t21 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
-                                               ^" in let final dynamic #t22 = 3 in null, let final dynamic #t23 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                               ^" in let final dynamic #t22 = 3 in null, let dynamic _ = null in let final dynamic #t23 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
                                                ^" in let final dynamic #t24 = "hello" in null);
@@ -115,21 +115,21 @@
     self::A<core::int, core::int> a1 = new self::C::named<core::int>(3);
     self::A<core::int, core::int> a2 = new self::C::•<core::int>(3);
     self::A<core::int, core::int> a3 = new self::C::named<core::int>(3);
-    self::A<core::int, core::int> a4 = let final dynamic #t25 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.
+    self::A<core::int, core::int> a4 = let dynamic _ = null in let final dynamic #t25 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::int>'.
     A<int, int> a4 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>(3);
                                                       ^" in let final dynamic #t26 = new self::C::•<dynamic>(3) in null;
-    self::A<core::int, core::int> a5 = let final dynamic #t27 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.
+    self::A<core::int, core::int> a5 = let dynamic _ = null in let final dynamic #t27 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::int>'.
     A<int, int> a5 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>.named(3);
                                                       ^" in let final dynamic #t28 = new self::C::named<dynamic>(3) in null;
   }
   {
-    self::A<core::int, core::int> a0 = new self::C::•<core::int>(let final dynamic #t29 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    self::A<core::int, core::int> a0 = new self::C::•<core::int>(let dynamic _ = null in let final dynamic #t29 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
                                                ^" in let final dynamic #t30 = "hello" in null);
-    self::A<core::int, core::int> a1 = new self::C::named<core::int>(let final dynamic #t31 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    self::A<core::int, core::int> a1 = new self::C::named<core::int>(let dynamic _ = null in let final dynamic #t31 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
                                                ^" in let final dynamic #t32 = "hello" in null);
@@ -139,21 +139,21 @@
     self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>("hello");
     self::A<core::int, core::String> a2 = new self::D::•<core::int, core::String>("hello");
     self::A<core::int, core::String> a3 = new self::D::named<core::String, core::String>("hello");
-    self::A<core::int, core::String> a4 = let final dynamic #t33 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'test::D<dart.core::num, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+    self::A<core::int, core::String> a4 = let dynamic _ = null in let final dynamic #t33 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'test::D<dart.core::num, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
         a4 = /*error:INVALID_ASSIGNMENT*/ new D<num, dynamic>(\"hello\");
                                               ^" in let final dynamic #t34 = new self::D::•<core::num, dynamic>("hello") in null;
-    self::A<core::int, core::String> a5 = let final dynamic #t35 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'test::D<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+    self::A<core::int, core::String> a5 = let dynamic _ = null in let final dynamic #t35 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'test::D<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
         a5 = /*error:INVALID_ASSIGNMENT*/ new D<dynamic, dynamic>.named(
                                               ^" in let final dynamic #t36 = new self::D::named<dynamic, dynamic>("hello") in null;
   }
   {
-    self::A<core::int, core::String> a0 = new self::D::•<dynamic, core::String>(let final dynamic #t37 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    self::A<core::int, core::String> a0 = new self::D::•<dynamic, core::String>(let dynamic _ = null in let final dynamic #t37 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
                                                ^" in let final dynamic #t38 = 3 in null);
-    self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>(let final dynamic #t39 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>(let dynamic _ = null in let final dynamic #t39 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
                                                ^" in let final dynamic #t40 = 3 in null);
@@ -163,23 +163,23 @@
   }
   {
     self::A<core::int, core::String> a0 = new self::F::•<core::int, core::String>(3, "hello", a: <core::int>[3], b: <core::String>["hello"]);
-    self::A<core::int, core::String> a1 = new self::F::•<core::int, core::String>(3, "hello", a: <core::int>[let final dynamic #t41 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    self::A<core::int, core::String> a1 = new self::F::•<core::int, core::String>(3, "hello", a: <core::int>[let dynamic _ = null in let final dynamic #t41 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                                     ^" in let final dynamic #t42 = "hello" in null], b: <core::String>[let final dynamic #t43 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                     ^" in let final dynamic #t42 = "hello" in null], b: <core::String>[let dynamic _ = null in let final dynamic #t43 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
                                                      ^" in let final dynamic #t44 = 3 in null]);
     self::A<core::int, core::String> a2 = new self::F::named<core::int, core::String>(3, "hello", 3, "hello");
     self::A<core::int, core::String> a3 = new self::F::named<core::int, core::String>(3, "hello");
-    self::A<core::int, core::String> a4 = new self::F::named<core::int, core::String>(3, "hello", let final dynamic #t45 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    self::A<core::int, core::String> a4 = new self::F::named<core::int, core::String>(3, "hello", let dynamic _ = null in let final dynamic #t45 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final dynamic #t46 = "hello" in null, let final dynamic #t47 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                               ^" in let final dynamic #t46 = "hello" in null, let dynamic _ = null in let final dynamic #t47 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
                                                ^" in let final dynamic #t48 = 3 in null);
-    self::A<core::int, core::String> a5 = new self::F::named<core::int, core::String>(3, "hello", let final dynamic #t49 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    self::A<core::int, core::String> a5 = new self::F::named<core::int, core::String>(3, "hello", let dynamic _ = null in let final dynamic #t49 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
                                                ^" in let final dynamic #t50 = "hello" in null);
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.transformed.expect
index 4e52169..5de4511 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.transformed.expect
@@ -55,27 +55,27 @@
     self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>(3, "hello");
     self::A<core::int, core::String> a2 = new self::A::•<core::int, core::String>(3, "hello");
     self::A<core::int, core::String> a3 = new self::A::named<core::int, core::String>(3, "hello");
-    self::A<core::int, core::String> a4 = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: The constructor returns type 'test::A<dart.core::int, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.
+    self::A<core::int, core::String> a4 = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: The constructor returns type 'test::A<dart.core::int, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.
 Change the type of the object being constructed or the context in which it is used.
         a4 = /*error:INVALID_CAST_NEW_EXPR*/ new A<int, dynamic>(3, \"hello\");
                                                  ^" in let final self::A<core::int, dynamic> #t2 = new self::A::•<core::int, dynamic>(3, "hello") in null;
-    self::A<core::int, core::String> a5 = let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: The constructor returns type 'test::A<dynamic, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.
+    self::A<core::int, core::String> a5 = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: The constructor returns type 'test::A<dynamic, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.
 Change the type of the object being constructed or the context in which it is used.
         a5 = /*error:INVALID_CAST_NEW_EXPR*/ new A<dynamic, dynamic>.named(
                                                  ^" in let final self::A<dynamic, dynamic> #t4 = new self::A::named<dynamic, dynamic>(3, "hello") in null;
   }
   {
-    self::A<core::int, core::String> a0 = new self::A::•<core::int, core::String>(let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    self::A<core::int, core::String> a0 = new self::A::•<core::int, core::String>(let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final core::String #t6 = "hello" in null, let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                               ^" in let final core::String #t6 = "hello" in null, let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
                                                ^" in let final core::int #t8 = 3 in null);
-    self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>(let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>(let<BottomType> _ = null in let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final core::String #t10 = "hello" in null, let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                               ^" in let final core::String #t10 = "hello" in null, let<BottomType> _ = null in let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
                                                ^" in let final core::int #t12 = 3 in null);
@@ -85,27 +85,27 @@
     self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>("hello", 3);
     self::A<core::int, core::String> a2 = new self::B::•<core::String, core::int>("hello", 3);
     self::A<core::int, core::String> a3 = new self::B::named<core::String, core::int>("hello", 3);
-    self::A<core::int, core::String> a4 = let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'test::B<dart.core::String, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+    self::A<core::int, core::String> a4 = let<BottomType> _ = null in let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'test::B<dart.core::String, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
         a4 = /*error:INVALID_ASSIGNMENT*/ new B<String, dynamic>(\"hello\", 3);
                                               ^" in let final self::B<core::String, dynamic> #t14 = new self::B::•<core::String, dynamic>("hello", 3) in null;
-    self::A<core::int, core::String> a5 = let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'test::B<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+    self::A<core::int, core::String> a5 = let<BottomType> _ = null in let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'test::B<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
         a5 = /*error:INVALID_ASSIGNMENT*/ new B<dynamic, dynamic>.named(
                                               ^" in let final self::B<dynamic, dynamic> #t16 = new self::B::named<dynamic, dynamic>("hello", 3) in null;
   }
   {
-    self::A<core::int, core::String> a0 = new self::B::•<core::String, core::int>(let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    self::A<core::int, core::String> a0 = new self::B::•<core::String, core::int>(let<BottomType> _ = null in let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
-                                               ^" in let final core::int #t18 = 3 in null, let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                               ^" in let final core::int #t18 = 3 in null, let<BottomType> _ = null in let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
                                                ^" in let final core::String #t20 = "hello" in null);
-    self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>(let final dynamic #t21 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>(let<BottomType> _ = null in let final dynamic #t21 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
-                                               ^" in let final core::int #t22 = 3 in null, let final dynamic #t23 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                               ^" in let final core::int #t22 = 3 in null, let<BottomType> _ = null in let final dynamic #t23 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
                                                ^" in let final core::String #t24 = "hello" in null);
@@ -115,21 +115,21 @@
     self::A<core::int, core::int> a1 = new self::C::named<core::int>(3);
     self::A<core::int, core::int> a2 = new self::C::•<core::int>(3);
     self::A<core::int, core::int> a3 = new self::C::named<core::int>(3);
-    self::A<core::int, core::int> a4 = let final dynamic #t25 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.
+    self::A<core::int, core::int> a4 = let<BottomType> _ = null in let final dynamic #t25 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::int>'.
     A<int, int> a4 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>(3);
                                                       ^" in let final self::C<dynamic> #t26 = new self::C::•<dynamic>(3) in null;
-    self::A<core::int, core::int> a5 = let final dynamic #t27 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.
+    self::A<core::int, core::int> a5 = let<BottomType> _ = null in let final dynamic #t27 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::int>'.
     A<int, int> a5 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>.named(3);
                                                       ^" in let final self::C<dynamic> #t28 = new self::C::named<dynamic>(3) in null;
   }
   {
-    self::A<core::int, core::int> a0 = new self::C::•<core::int>(let final dynamic #t29 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    self::A<core::int, core::int> a0 = new self::C::•<core::int>(let<BottomType> _ = null in let final dynamic #t29 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
                                                ^" in let final core::String #t30 = "hello" in null);
-    self::A<core::int, core::int> a1 = new self::C::named<core::int>(let final dynamic #t31 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    self::A<core::int, core::int> a1 = new self::C::named<core::int>(let<BottomType> _ = null in let final dynamic #t31 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
                                                ^" in let final core::String #t32 = "hello" in null);
@@ -139,21 +139,21 @@
     self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>("hello");
     self::A<core::int, core::String> a2 = new self::D::•<core::int, core::String>("hello");
     self::A<core::int, core::String> a3 = new self::D::named<core::String, core::String>("hello");
-    self::A<core::int, core::String> a4 = let final dynamic #t33 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'test::D<dart.core::num, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+    self::A<core::int, core::String> a4 = let<BottomType> _ = null in let final dynamic #t33 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'test::D<dart.core::num, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
         a4 = /*error:INVALID_ASSIGNMENT*/ new D<num, dynamic>(\"hello\");
                                               ^" in let final self::D<core::num, dynamic> #t34 = new self::D::•<core::num, dynamic>("hello") in null;
-    self::A<core::int, core::String> a5 = let final dynamic #t35 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'test::D<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+    self::A<core::int, core::String> a5 = let<BottomType> _ = null in let final dynamic #t35 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'test::D<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
         a5 = /*error:INVALID_ASSIGNMENT*/ new D<dynamic, dynamic>.named(
                                               ^" in let final self::D<dynamic, dynamic> #t36 = new self::D::named<dynamic, dynamic>("hello") in null;
   }
   {
-    self::A<core::int, core::String> a0 = new self::D::•<dynamic, core::String>(let final dynamic #t37 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    self::A<core::int, core::String> a0 = new self::D::•<dynamic, core::String>(let<BottomType> _ = null in let final dynamic #t37 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
                                                ^" in let final core::int #t38 = 3 in null);
-    self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>(let final dynamic #t39 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>(let<BottomType> _ = null in let final dynamic #t39 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
                                                ^" in let final core::int #t40 = 3 in null);
@@ -163,23 +163,23 @@
   }
   {
     self::A<core::int, core::String> a0 = new self::F::•<core::int, core::String>(3, "hello", a: <core::int>[3], b: <core::String>["hello"]);
-    self::A<core::int, core::String> a1 = new self::F::•<core::int, core::String>(3, "hello", a: <core::int>[let final dynamic #t41 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    self::A<core::int, core::String> a1 = new self::F::•<core::int, core::String>(3, "hello", a: <core::int>[let<BottomType> _ = null in let final dynamic #t41 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
-                                                     ^" in let final core::String #t42 = "hello" in null], b: <core::String>[let final dynamic #t43 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                     ^" in let final core::String #t42 = "hello" in null], b: <core::String>[let<BottomType> _ = null in let final dynamic #t43 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
                                                      ^" in let final core::int #t44 = 3 in null]);
     self::A<core::int, core::String> a2 = new self::F::named<core::int, core::String>(3, "hello", 3, "hello");
     self::A<core::int, core::String> a3 = new self::F::named<core::int, core::String>(3, "hello");
-    self::A<core::int, core::String> a4 = new self::F::named<core::int, core::String>(3, "hello", let final dynamic #t45 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    self::A<core::int, core::String> a4 = new self::F::named<core::int, core::String>(3, "hello", let<BottomType> _ = null in let final dynamic #t45 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
-                                               ^" in let final core::String #t46 = "hello" in null, let final dynamic #t47 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                               ^" in let final core::String #t46 = "hello" in null, let<BottomType> _ = null in let final dynamic #t47 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
                                                ^" in let final core::int #t48 = 3 in null);
-    self::A<core::int, core::String> a5 = new self::F::named<core::int, core::String>(3, "hello", let final dynamic #t49 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    self::A<core::int, core::String> a5 = new self::F::named<core::int, core::String>(3, "hello", let<BottomType> _ = null in let final dynamic #t49 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
                                                ^" in let final core::String #t50 = "hello" in null);
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.expect
index d5b5aa9..56be18e 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method foo([core::List<core::String> list1 = const <core::String>[], core::List<core::String> list2 = const <core::String>[let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:11:89: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+static method foo([core::List<core::String> list1 = const <core::String>[], core::List<core::String> list2 = const <core::String>[let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:11:89: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42
                                                                                         ^" in let final dynamic #t2 = 42 in null]]) → void {}
@@ -10,11 +10,11 @@
   {
     core::List<core::int> l0 = <core::int>[];
     core::List<core::int> l1 = <core::int>[3];
-    core::List<core::int> l2 = <core::int>[let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::List<core::int> l2 = <core::int>[let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                  ^" in let final dynamic #t4 = "hello" in null];
-    core::List<core::int> l3 = <core::int>[let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::List<core::int> l3 = <core::int>[let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                  ^" in let final dynamic #t6 = "hello" in null, 3];
@@ -26,25 +26,25 @@
     core::List<dynamic> l3 = <dynamic>["hello", 3];
   }
   {
-    core::List<core::int> l0 = let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:33:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+    core::List<core::int> l0 = let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:33:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
 Change the type of the list literal or the context in which it is used.
     List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
                                                             ^" in let final dynamic #t8 = <core::num>[] in null;
-    core::List<core::int> l1 = let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:34:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+    core::List<core::int> l1 = let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:34:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
 Change the type of the list literal or the context in which it is used.
     List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
                                                             ^" in let final dynamic #t10 = <core::num>[3] in null;
-    core::List<core::int> l2 = let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+    core::List<core::int> l2 = let dynamic _ = null in let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
 Change the type of the list literal or the context in which it is used.
     List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
-                                                            ^" in let final dynamic #t12 = <core::num>[let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+                                                            ^" in let final dynamic #t12 = <core::num>[let dynamic _ = null in let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                  ^" in let final dynamic #t14 = "hello" in null] in null;
-    core::List<core::int> l3 = let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+    core::List<core::int> l3 = let dynamic _ = null in let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
 Change the type of the list literal or the context in which it is used.
     List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
-                                                            ^" in let final dynamic #t16 = <core::num>[let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+                                                            ^" in let final dynamic #t16 = <core::num>[let dynamic _ = null in let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                  ^" in let final dynamic #t18 = "hello" in null, 3] in null;
@@ -52,11 +52,11 @@
   {
     core::Iterable<core::int> i0 = <core::int>[];
     core::Iterable<core::int> i1 = <core::int>[3];
-    core::Iterable<core::int> i2 = <core::int>[let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::Iterable<core::int> i2 = <core::int>[let dynamic _ = null in let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                  ^" in let final dynamic #t20 = "hello" in null];
-    core::Iterable<core::int> i3 = <core::int>[let final dynamic #t21 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::Iterable<core::int> i3 = <core::int>[let dynamic _ = null in let final dynamic #t21 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                  ^" in let final dynamic #t22 = "hello" in null, 3];
@@ -64,11 +64,11 @@
   {
     const core::List<core::int> c0 = const <core::int>[];
     const core::List<core::int> c1 = const <core::int>[3];
-    const core::List<core::int> c2 = const <core::int>[let final dynamic #t23 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:58:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    const core::List<core::int> c2 = const <core::int>[let dynamic _ = null in let final dynamic #t23 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:58:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                                                         ^" in let final dynamic #t24 = "hello" in null];
-    const core::List<core::int> c3 = const <core::int>[let final dynamic #t25 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:61:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    const core::List<core::int> c3 = const <core::int>[let dynamic _ = null in let final dynamic #t25 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:61:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                                                         ^" in let final dynamic #t26 = "hello" in null, 3];
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.transformed.expect
index f2e0116..0bbe2ae 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method foo([core::List<core::String> list1 = const <core::String>[], core::List<core::String> list2 = const <core::String>[let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:11:89: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+static method foo([core::List<core::String> list1 = const <core::String>[], core::List<core::String> list2 = const <core::String>[let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:11:89: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42
                                                                                         ^" in let final core::int #t2 = 42 in null]]) → void {}
@@ -10,11 +10,11 @@
   {
     core::List<core::int> l0 = <core::int>[];
     core::List<core::int> l1 = <core::int>[3];
-    core::List<core::int> l2 = <core::int>[let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::List<core::int> l2 = <core::int>[let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                  ^" in let final core::String #t4 = "hello" in null];
-    core::List<core::int> l3 = <core::int>[let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::List<core::int> l3 = <core::int>[let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                  ^" in let final core::String #t6 = "hello" in null, 3];
@@ -26,25 +26,25 @@
     core::List<dynamic> l3 = <dynamic>["hello", 3];
   }
   {
-    core::List<core::int> l0 = let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:33:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+    core::List<core::int> l0 = let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:33:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
 Change the type of the list literal or the context in which it is used.
     List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
                                                             ^" in let final core::List<core::num> #t8 = <core::num>[] in null;
-    core::List<core::int> l1 = let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:34:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+    core::List<core::int> l1 = let<BottomType> _ = null in let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:34:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
 Change the type of the list literal or the context in which it is used.
     List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
                                                             ^" in let final core::List<core::num> #t10 = <core::num>[3] in null;
-    core::List<core::int> l2 = let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+    core::List<core::int> l2 = let<BottomType> _ = null in let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
 Change the type of the list literal or the context in which it is used.
     List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
-                                                            ^" in let final core::List<core::num> #t12 = <core::num>[let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+                                                            ^" in let final core::List<core::num> #t12 = <core::num>[let<BottomType> _ = null in let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                  ^" in let final core::String #t14 = "hello" in null] in null;
-    core::List<core::int> l3 = let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+    core::List<core::int> l3 = let<BottomType> _ = null in let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
 Change the type of the list literal or the context in which it is used.
     List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
-                                                            ^" in let final core::List<core::num> #t16 = <core::num>[let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+                                                            ^" in let final core::List<core::num> #t16 = <core::num>[let<BottomType> _ = null in let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                  ^" in let final core::String #t18 = "hello" in null, 3] in null;
@@ -52,11 +52,11 @@
   {
     core::Iterable<core::int> i0 = <core::int>[];
     core::Iterable<core::int> i1 = <core::int>[3];
-    core::Iterable<core::int> i2 = <core::int>[let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::Iterable<core::int> i2 = <core::int>[let<BottomType> _ = null in let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                  ^" in let final core::String #t20 = "hello" in null];
-    core::Iterable<core::int> i3 = <core::int>[let final dynamic #t21 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::Iterable<core::int> i3 = <core::int>[let<BottomType> _ = null in let final dynamic #t21 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                  ^" in let final core::String #t22 = "hello" in null, 3];
@@ -64,11 +64,11 @@
   {
     const core::List<core::int> c0 = const <core::int>[];
     const core::List<core::int> c1 = const <core::int>[3];
-    const core::List<core::int> c2 = const <core::int>[let final dynamic #t23 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:58:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    const core::List<core::int> c2 = const <core::int>[let<BottomType> _ = null in let final dynamic #t23 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:58:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
                                                                                         ^" in let final core::String #t24 = "hello" in null];
-    const core::List<core::int> c3 = const <core::int>[let final dynamic #t25 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:61:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    const core::List<core::int> c3 = const <core::int>[let<BottomType> _ = null in let final dynamic #t25 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:61:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
                                                                                         ^" in let final core::String #t26 = "hello" in null, 3];
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.expect
index fc58e8e..58ac3bf 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method foo([core::Map<core::int, core::String> m1 = const <core::int, core::String>{1: "hello"}, core::Map<core::int, core::String> m2 = const <core::int, core::String>{let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+static method foo([core::Map<core::int, core::String> m1 = const <core::int, core::String>{1: "hello"}, core::Map<core::int, core::String> m2 = const <core::int, core::String>{let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
                                                                               ^" in let final dynamic #t2 = "hello" in null: "world"}]) → void {}
@@ -10,18 +10,18 @@
   {
     core::Map<core::int, core::String> l0 = <core::int, core::String>{};
     core::Map<core::int, core::String> l1 = <core::int, core::String>{3: "hello"};
-    core::Map<core::int, core::String> l2 = <core::int, core::String>{let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::Map<core::int, core::String> l2 = <core::int, core::String>{let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
                                             ^" in let final dynamic #t4 = "hello" in null: "hello"};
-    core::Map<core::int, core::String> l3 = <core::int, core::String>{3: let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    core::Map<core::int, core::String> l3 = <core::int, core::String>{3: let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                  ^" in let final dynamic #t6 = 3 in null};
-    core::Map<core::int, core::String> l4 = <core::int, core::String>{3: "hello", let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::Map<core::int, core::String> l4 = <core::int, core::String>{3: "hello", let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
-                                            ^" in let final dynamic #t8 = "hello" in null: let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                            ^" in let final dynamic #t8 = "hello" in null: let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                   ^" in let final dynamic #t10 = 3 in null};
@@ -37,11 +37,11 @@
     core::Map<dynamic, core::String> l0 = <dynamic, core::String>{};
     core::Map<dynamic, core::String> l1 = <dynamic, core::String>{3: "hello"};
     core::Map<dynamic, core::String> l2 = <dynamic, core::String>{"hello": "hello"};
-    core::Map<dynamic, core::String> l3 = <dynamic, core::String>{3: let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    core::Map<dynamic, core::String> l3 = <dynamic, core::String>{3: let dynamic _ = null in let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                  ^" in let final dynamic #t12 = 3 in null};
-    core::Map<dynamic, core::String> l4 = <dynamic, core::String>{3: "hello", "hello": let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    core::Map<dynamic, core::String> l4 = <dynamic, core::String>{3: "hello", "hello": let dynamic _ = null in let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       \"hello\": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                        ^" in let final dynamic #t14 = 3 in null};
@@ -49,26 +49,26 @@
   {
     core::Map<core::int, dynamic> l0 = <core::int, dynamic>{};
     core::Map<core::int, dynamic> l1 = <core::int, dynamic>{3: "hello"};
-    core::Map<core::int, dynamic> l2 = <core::int, dynamic>{let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::Map<core::int, dynamic> l2 = <core::int, dynamic>{let dynamic _ = null in let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
                                             ^" in let final dynamic #t16 = "hello" in null: "hello"};
     core::Map<core::int, dynamic> l3 = <core::int, dynamic>{3: 3};
-    core::Map<core::int, dynamic> l4 = <core::int, dynamic>{3: "hello", let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::Map<core::int, dynamic> l4 = <core::int, dynamic>{3: "hello", let dynamic _ = null in let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": 3
                                             ^" in let final dynamic #t18 = "hello" in null: 3};
   }
   {
-    core::Map<core::int, core::String> l0 = let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:68:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+    core::Map<core::int, core::String> l0 = let dynamic _ = null in let final dynamic #t19 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:68:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};
                                                                            ^" in let final dynamic #t20 = <core::num, dynamic>{} in null;
-    core::Map<core::int, core::String> l1 = let final dynamic #t21 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:69:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+    core::Map<core::int, core::String> l1 = let dynamic _ = null in let final dynamic #t21 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:69:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
                                                                            ^" in let final dynamic #t22 = <core::num, dynamic>{3: "hello"} in null;
-    core::Map<core::int, core::String> l3 = let final dynamic #t23 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:72:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+    core::Map<core::int, core::String> l3 = let dynamic _ = null in let final dynamic #t23 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:72:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
                                                                            ^" in let final dynamic #t24 = <core::num, dynamic>{3: 3} in null;
@@ -76,18 +76,18 @@
   {
     const core::Map<core::int, core::String> l0 = const <core::int, core::String>{};
     const core::Map<core::int, core::String> l1 = const <core::int, core::String>{3: "hello"};
-    const core::Map<core::int, core::String> l2 = const <core::int, core::String>{let final dynamic #t25 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:80:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    const core::Map<core::int, core::String> l2 = const <core::int, core::String>{let dynamic _ = null in let final dynamic #t25 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:80:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
                                                                               ^" in let final dynamic #t26 = "hello" in null: "hello"};
-    const core::Map<core::int, core::String> l3 = const <core::int, core::String>{3: let final dynamic #t27 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:84:86: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    const core::Map<core::int, core::String> l3 = const <core::int, core::String>{3: let dynamic _ = null in let final dynamic #t27 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:84:86: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                                                      ^" in let final dynamic #t28 = 3 in null};
-    const core::Map<core::int, core::String> l4 = const <core::int, core::String>{3: "hello", let final dynamic #t29 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:88:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    const core::Map<core::int, core::String> l4 = const <core::int, core::String>{3: "hello", let dynamic _ = null in let final dynamic #t29 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:88:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
-                                                                              ^" in let final dynamic #t30 = "hello" in null: let final dynamic #t31 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:89:87: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                                              ^" in let final dynamic #t30 = "hello" in null: let dynamic _ = null in let final dynamic #t31 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:89:87: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                                                       ^" in let final dynamic #t32 = 3 in null};
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.transformed.expect
index 1364e2d..a825f73 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method foo([core::Map<core::int, core::String> m1 = const <core::int, core::String>{1: "hello"}, core::Map<core::int, core::String> m2 = const <core::int, core::String>{let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+static method foo([core::Map<core::int, core::String> m1 = const <core::int, core::String>{1: "hello"}, core::Map<core::int, core::String> m2 = const <core::int, core::String>{let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
                                                                               ^" in let final core::String #t2 = "hello" in null: "world"}]) → void {}
@@ -10,18 +10,18 @@
   {
     core::Map<core::int, core::String> l0 = <core::int, core::String>{};
     core::Map<core::int, core::String> l1 = <core::int, core::String>{3: "hello"};
-    core::Map<core::int, core::String> l2 = <core::int, core::String>{let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::Map<core::int, core::String> l2 = <core::int, core::String>{let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
                                             ^" in let final core::String #t4 = "hello" in null: "hello"};
-    core::Map<core::int, core::String> l3 = <core::int, core::String>{3: let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    core::Map<core::int, core::String> l3 = <core::int, core::String>{3: let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                  ^" in let final core::int #t6 = 3 in null};
-    core::Map<core::int, core::String> l4 = <core::int, core::String>{3: "hello", let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::Map<core::int, core::String> l4 = <core::int, core::String>{3: "hello", let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
-                                            ^" in let final core::String #t8 = "hello" in null: let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                            ^" in let final core::String #t8 = "hello" in null: let<BottomType> _ = null in let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                   ^" in let final core::int #t10 = 3 in null};
@@ -37,11 +37,11 @@
     core::Map<dynamic, core::String> l0 = <dynamic, core::String>{};
     core::Map<dynamic, core::String> l1 = <dynamic, core::String>{3: "hello"};
     core::Map<dynamic, core::String> l2 = <dynamic, core::String>{"hello": "hello"};
-    core::Map<dynamic, core::String> l3 = <dynamic, core::String>{3: let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    core::Map<dynamic, core::String> l3 = <dynamic, core::String>{3: let<BottomType> _ = null in let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                  ^" in let final core::int #t12 = 3 in null};
-    core::Map<dynamic, core::String> l4 = <dynamic, core::String>{3: "hello", "hello": let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    core::Map<dynamic, core::String> l4 = <dynamic, core::String>{3: "hello", "hello": let<BottomType> _ = null in let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       \"hello\": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                        ^" in let final core::int #t14 = 3 in null};
@@ -49,26 +49,26 @@
   {
     core::Map<core::int, dynamic> l0 = <core::int, dynamic>{};
     core::Map<core::int, dynamic> l1 = <core::int, dynamic>{3: "hello"};
-    core::Map<core::int, dynamic> l2 = <core::int, dynamic>{let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::Map<core::int, dynamic> l2 = <core::int, dynamic>{let<BottomType> _ = null in let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
                                             ^" in let final core::String #t16 = "hello" in null: "hello"};
     core::Map<core::int, dynamic> l3 = <core::int, dynamic>{3: 3};
-    core::Map<core::int, dynamic> l4 = <core::int, dynamic>{3: "hello", let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    core::Map<core::int, dynamic> l4 = <core::int, dynamic>{3: "hello", let<BottomType> _ = null in let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": 3
                                             ^" in let final core::String #t18 = "hello" in null: 3};
   }
   {
-    core::Map<core::int, core::String> l0 = let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:68:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+    core::Map<core::int, core::String> l0 = let<BottomType> _ = null in let final dynamic #t19 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:68:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};
                                                                            ^" in let final core::Map<core::num, dynamic> #t20 = <core::num, dynamic>{} in null;
-    core::Map<core::int, core::String> l1 = let final dynamic #t21 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:69:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+    core::Map<core::int, core::String> l1 = let<BottomType> _ = null in let final dynamic #t21 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:69:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
                                                                            ^" in let final core::Map<core::num, dynamic> #t22 = <core::num, dynamic>{3: "hello"} in null;
-    core::Map<core::int, core::String> l3 = let final dynamic #t23 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:72:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+    core::Map<core::int, core::String> l3 = let<BottomType> _ = null in let final dynamic #t23 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:72:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
 Change the type of the map literal or the context in which it is used.
     Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
                                                                            ^" in let final core::Map<core::num, dynamic> #t24 = <core::num, dynamic>{3: 3} in null;
@@ -76,18 +76,18 @@
   {
     const core::Map<core::int, core::String> l0 = const <core::int, core::String>{};
     const core::Map<core::int, core::String> l1 = const <core::int, core::String>{3: "hello"};
-    const core::Map<core::int, core::String> l2 = const <core::int, core::String>{let final dynamic #t25 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:80:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    const core::Map<core::int, core::String> l2 = const <core::int, core::String>{let<BottomType> _ = null in let final dynamic #t25 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:80:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
                                                                               ^" in let final core::String #t26 = "hello" in null: "hello"};
-    const core::Map<core::int, core::String> l3 = const <core::int, core::String>{3: let final dynamic #t27 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:84:86: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+    const core::Map<core::int, core::String> l3 = const <core::int, core::String>{3: let<BottomType> _ = null in let final dynamic #t27 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:84:86: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                                                      ^" in let final core::int #t28 = 3 in null};
-    const core::Map<core::int, core::String> l4 = const <core::int, core::String>{3: "hello", let final dynamic #t29 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:88:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    const core::Map<core::int, core::String> l4 = const <core::int, core::String>{3: "hello", let<BottomType> _ = null in let final dynamic #t29 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:88:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
-                                                                              ^" in let final core::String #t30 = "hello" in null: let final dynamic #t31 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:89:87: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+                                                                              ^" in let final core::String #t30 = "hello" in null: let<BottomType> _ = null in let final dynamic #t31 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:89:87: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
                                                                                       ^" in let final core::int #t32 = 3 in null};
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect
index fcaf358..a5a751e 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect
@@ -9,11 +9,11 @@
 }
 static method foo() → asy::Stream<core::List<core::int>> async* {
   yield<core::int>[];
-  yield let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:67: Error: A value of type 'test::MyStream<dynamic>' can't be assigned to a variable of type 'dart.core::List<dart.core::int>'.
+  yield let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:67: Error: A value of type 'test::MyStream<dynamic>' can't be assigned to a variable of type 'dart.core::List<dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dart.core::int>'.
   yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@typeArgs=dynamic*/ MyStream();
                                                                   ^" in let final dynamic #t2 = self::MyStream::•<dynamic>() in null;
-  yield* let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:64: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'dart.async::Stream<dart.core::List<dart.core::int>>'.
+  yield* let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:64: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'dart.async::Stream<dart.core::List<dart.core::int>>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dart.core::List<dart.core::int>>'.
   yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];
                                                                ^" in let final dynamic #t4 = <dynamic>[] in null;
@@ -21,11 +21,11 @@
 }
 static method bar() → core::Iterable<core::Map<core::int, core::int>> sync* {
   yield<core::int, core::int>{};
-  yield let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:23:67: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'dart.core::Map<dart.core::int, dart.core::int>'.
+  yield let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:23:67: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'dart.core::Map<dart.core::int, dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Map<dart.core::int, dart.core::int>'.
   yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@typeArgs=dynamic*/ List();
                                                                   ^" in let final dynamic #t6 = core::List::•<dynamic>() in null;
-  yield* let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:24:73: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::Iterable<dart.core::Map<dart.core::int, dart.core::int>>'.
+  yield* let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:24:73: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::Iterable<dart.core::Map<dart.core::int, dart.core::int>>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dart.core::Map<dart.core::int, dart.core::int>>'.
   yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic, dynamic*/ {};
                                                                         ^" in let final dynamic #t8 = <dynamic, dynamic>{} in null;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
index f73a813..f7bfb3c 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
@@ -23,7 +23,7 @@
 }
 static method main() → void {
   self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3);
-  asy::Future<core::int> f2 = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.
+  asy::Future<core::int> f2 = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Future<dart.core::int>'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
                                                 ^" in let final dynamic #t2 = f in null;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.transformed.expect
index 62c39b7..4a8c037 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.transformed.expect
@@ -23,7 +23,7 @@
 }
 static method main() → void {
   self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3);
-  asy::Future<core::int> f2 = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.
+  asy::Future<core::int> f2 = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Future<dart.core::int>'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
                                                 ^" in let final self::MyFuture<core::double> #t2 = f in null;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
index 1e8d4cc..cb171bf 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
@@ -23,7 +23,7 @@
 }
 static method main() → void {
   self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3);
-  self::MyFuture<core::int> f2 = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'test::MyFuture<dart.core::int>'.
+  self::MyFuture<core::int> f2 = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'test::MyFuture<dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::MyFuture<dart.core::int>'.
   MyFuture<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
                                                   ^" in let final dynamic #t2 = f in null;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.transformed.expect
index 2f256a9..b432115 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.transformed.expect
@@ -23,7 +23,7 @@
 }
 static method main() → void {
   self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3);
-  self::MyFuture<core::int> f2 = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'test::MyFuture<dart.core::int>'.
+  self::MyFuture<core::int> f2 = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'test::MyFuture<dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::MyFuture<dart.core::int>'.
   MyFuture<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
                                                   ^" in let final self::MyFuture<core::double> #t2 = f in null;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
index 73b2edf..deb54c1 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
@@ -23,7 +23,7 @@
 }
 static method test() → void {
   asy::Future<core::double> f = self::foo().{asy::Future::then}<core::double>((dynamic _) → core::double => 2.3);
-  asy::Future<core::int> f2 = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'dart.async::Future<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.
+  asy::Future<core::int> f2 = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'dart.async::Future<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Future<dart.core::int>'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
                                                 ^" in let final dynamic #t2 = f in null;
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.transformed.expect
index 7380ae9..94a7c5e 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.transformed.expect
@@ -23,7 +23,7 @@
 }
 static method test() → void {
   asy::Future<core::double> f = self::foo().{asy::Future::then}<core::double>((dynamic _) → core::double => 2.3);
-  asy::Future<core::int> f2 = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'dart.async::Future<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.
+  asy::Future<core::int> f2 = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'dart.async::Future<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Future<dart.core::int>'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
                                                 ^" in let final asy::Future<core::double> #t2 = f in null;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
index a2ccb18..be2d944 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
@@ -22,7 +22,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withoutType("asStream", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false)) as{TypeError} asy::Stream<self::MyFuture::T>;
 }
 static field self::MyFuture<dynamic> f;
-static field asy::Future<core::int> t1 = self::f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::FutureOr<dart.core::int>'.
+static field asy::Future<core::int> t1 = self::f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::FutureOr<dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<dart.core::int>'.
         new /*@typeArgs=int*/ Future.value('hi'));
                                            ^" in let final dynamic #t2 = "hi" in null));
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.transformed.expect
index 372634f..f8b69c0 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.transformed.expect
@@ -22,7 +22,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withoutType("asStream", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false)) as{TypeError} asy::Stream<self::MyFuture::T>;
 }
 static field self::MyFuture<dynamic> f;
-static field asy::Future<core::int> t1 = self::f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::FutureOr<dart.core::int>'.
+static field asy::Future<core::int> t1 = self::f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::FutureOr<dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<dart.core::int>'.
         new /*@typeArgs=int*/ Future.value('hi'));
                                            ^" in let final core::String #t2 = "hi" in null));
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
index 3ad2061..15b6f24 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
@@ -22,7 +22,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withoutType("asStream", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false)) as{TypeError} asy::Stream<self::MyFuture::T>;
 }
 static field asy::Future<dynamic> f;
-static field asy::Future<core::int> t1 = self::f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::FutureOr<dart.core::int>'.
+static field asy::Future<core::int> t1 = self::f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::FutureOr<dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<dart.core::int>'.
         new /*@typeArgs=int*/ Future.value('hi'));
                                            ^" in let final dynamic #t2 = "hi" in null));
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.transformed.expect
index 85c2fcd..3d87abf 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.transformed.expect
@@ -22,7 +22,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withoutType("asStream", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false)) as{TypeError} asy::Stream<self::MyFuture::T>;
 }
 static field asy::Future<dynamic> f;
-static field asy::Future<core::int> t1 = self::f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::FutureOr<dart.core::int>'.
+static field asy::Future<core::int> t1 = self::f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::FutureOr<dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<dart.core::int>'.
         new /*@typeArgs=int*/ Future.value('hi'));
                                            ^" in let final core::String #t2 = "hi" in null));
diff --git a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.expect
index f83fde4..6662a3f 100644
--- a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.expect
@@ -16,26 +16,26 @@
   self::printDouble(math::min<core::double>(1.0, 2.0));
   self::printInt(self::myMax(1, 2) as{TypeError} core::int);
   self::printInt(self::myMax(1, 2) as core::int);
-  self::printInt(math::max<core::int>(1, let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:29:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+  self::printInt(math::max<core::int>(1, let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:29:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*@typeArgs=int*/ max(1, /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 2.0));
                                                                       ^" in let final dynamic #t2 = 2.0 in null));
-  self::printInt(math::min<core::int>(1, let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:31:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+  self::printInt(math::min<core::int>(1, let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:31:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*@typeArgs=int*/ min(1, /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 2.0));
                                                                       ^" in let final dynamic #t4 = 2.0 in null));
-  self::printDouble(math::max<core::double>(let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:33:71: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+  self::printDouble(math::max<core::double>(let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:33:71: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
       /*@typeArgs=double*/ max(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 1, 2.0));
                                                                       ^" in let final dynamic #t6 = 1 in null, 2.0));
-  self::printDouble(math::min<core::double>(let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:35:71: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+  self::printDouble(math::min<core::double>(let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:35:71: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
       /*@typeArgs=double*/ min(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 1, 2.0));
                                                                       ^" in let final dynamic #t8 = 1 in null, 2.0));
-  self::printInt(math::min<core::int>(let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:39:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::printInt(math::min<core::int>(let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:39:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hi\",
-                                             ^" in let final dynamic #t10 = "hi" in null, let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:40:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                             ^" in let final dynamic #t10 = "hi" in null, let dynamic _ = null in let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:40:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"there\"));
                                              ^" in let final dynamic #t12 = "there" in null));
diff --git a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.transformed.expect
index dd3c578..7f186ae 100644
--- a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.transformed.expect
@@ -16,26 +16,26 @@
   self::printDouble(math::min<core::double>(1.0, 2.0));
   self::printInt(self::myMax(1, 2) as{TypeError} core::int);
   self::printInt(self::myMax(1, 2) as core::int);
-  self::printInt(math::max<core::int>(1, let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:29:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+  self::printInt(math::max<core::int>(1, let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:29:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*@typeArgs=int*/ max(1, /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 2.0));
                                                                       ^" in let final core::double #t2 = 2.0 in null));
-  self::printInt(math::min<core::int>(1, let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:31:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+  self::printInt(math::min<core::int>(1, let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:31:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*@typeArgs=int*/ min(1, /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 2.0));
                                                                       ^" in let final core::double #t4 = 2.0 in null));
-  self::printDouble(math::max<core::double>(let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:33:71: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+  self::printDouble(math::max<core::double>(let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:33:71: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
       /*@typeArgs=double*/ max(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 1, 2.0));
                                                                       ^" in let final core::int #t6 = 1 in null, 2.0));
-  self::printDouble(math::min<core::double>(let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:35:71: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+  self::printDouble(math::min<core::double>(let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:35:71: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
       /*@typeArgs=double*/ min(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 1, 2.0));
                                                                       ^" in let final core::int #t8 = 1 in null, 2.0));
-  self::printInt(math::min<core::int>(let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:39:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::printInt(math::min<core::int>(let<BottomType> _ = null in let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:39:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hi\",
-                                             ^" in let final core::String #t10 = "hi" in null, let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:40:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                                             ^" in let final core::String #t10 = "hi" in null, let<BottomType> _ = null in let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:40:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"there\"));
                                              ^" in let final core::String #t12 = "there" in null));
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect
index a980b89..9a823d0 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect
@@ -6,7 +6,7 @@
   return null;
 static method test() → dynamic {
   core::String x = self::f<core::String>(<core::String>["hi"]);
-  core::String y = self::f<core::String>(<core::String>[let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  core::String y = self::f<core::String>(<core::String>[let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           /*@typeArgs=String*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);
                                                                            ^" in let final dynamic #t2 = 42 in null]);
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.transformed.expect
index 4a81079..6fbf8af 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.transformed.expect
@@ -6,7 +6,7 @@
   return null;
 static method test() → dynamic {
   core::String x = self::f<core::String>(<core::String>["hi"]);
-  core::String y = self::f<core::String>(<core::String>[let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  core::String y = self::f<core::String>(<core::String>[let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           /*@typeArgs=String*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);
                                                                            ^" in let final core::int #t2 = 42 in null]);
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect
index 39a38a2..f260b29 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect
@@ -21,11 +21,11 @@
   self::takeIIO(math::max<core::int>);
   self::takeDDO(math::max<core::double>);
   self::takeOOI((math::max<core::Object>) as{TypeError} (core::Object, core::Object) → core::int);
-  self::takeIDI(let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
+  self::takeIDI(let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
                                                                         ^" in let final dynamic #t2 = math::max<core::num> in null);
-  self::takeDID(let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
+  self::takeDID(let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
                                                                         ^" in let final dynamic #t4 = math::max<core::num> in null);
@@ -41,11 +41,11 @@
   self::takeIIO(math::min<core::int>);
   self::takeDDO(math::min<core::double>);
   self::takeOOI((math::min<core::Object>) as{TypeError} (core::Object, core::Object) → core::int);
-  self::takeIDI(let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
+  self::takeIDI(let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
   takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
                                                                        ^" in let final dynamic #t6 = math::min<core::num> in null);
-  self::takeDID(let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
+  self::takeDID(let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
   takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
                                                                        ^" in let final dynamic #t8 = math::min<core::num> in null);
@@ -63,11 +63,11 @@
   self::takeOON((new self::C::•().{self::C::m}<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
   self::takeOOO((new self::C::•().{self::C::m}<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
   self::takeOOI((new self::C::•().{self::C::m}<core::Object>) as{TypeError} (core::Object, core::Object) → core::int);
-  self::takeIDI(let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:30: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
+  self::takeIDI(let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:30: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
           . /*@target=C::m*/ m);
                              ^" in let final dynamic #t10 = new self::C::•().{self::C::m}<core::num> in null);
-  self::takeDID(let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:30: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
+  self::takeDID(let dynamic _ = null in let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:30: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
           . /*@target=C::m*/ m);
                              ^" in let final dynamic #t12 = new self::C::•().{self::C::m}<core::num> in null);
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.transformed.expect
index 4a4c032..b939213 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.transformed.expect
@@ -21,11 +21,11 @@
   self::takeIIO(math::max<core::int>);
   self::takeDDO(math::max<core::double>);
   self::takeOOI((math::max<core::Object>) as{TypeError} (core::Object, core::Object) → core::int);
-  self::takeIDI(let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
+  self::takeIDI(let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
                                                                         ^" in let final (core::num, core::num) → core::num #t2 = math::max<core::num> in null);
-  self::takeDID(let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
+  self::takeDID(let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
                                                                         ^" in let final (core::num, core::num) → core::num #t4 = math::max<core::num> in null);
@@ -41,11 +41,11 @@
   self::takeIIO(math::min<core::int>);
   self::takeDDO(math::min<core::double>);
   self::takeOOI((math::min<core::Object>) as{TypeError} (core::Object, core::Object) → core::int);
-  self::takeIDI(let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
+  self::takeIDI(let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
   takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
                                                                        ^" in let final (core::num, core::num) → core::num #t6 = math::min<core::num> in null);
-  self::takeDID(let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
+  self::takeDID(let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
   takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
                                                                        ^" in let final (core::num, core::num) → core::num #t8 = math::min<core::num> in null);
@@ -63,11 +63,11 @@
   self::takeOON((new self::C::•().{self::C::m}<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
   self::takeOOO((new self::C::•().{self::C::m}<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
   self::takeOOI((new self::C::•().{self::C::m}<core::Object>) as{TypeError} (core::Object, core::Object) → core::int);
-  self::takeIDI(let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:30: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
+  self::takeIDI(let<BottomType> _ = null in let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:30: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
           . /*@target=C::m*/ m);
                              ^" in let final (core::num, core::num) → core::num #t10 = new self::C::•().{self::C::m}<core::num> in null);
-  self::takeDID(let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:30: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
+  self::takeDID(let<BottomType> _ = null in let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:30: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
           . /*@target=C::m*/ m);
                              ^" in let final (core::num, core::num) → core::num #t12 = new self::C::•().{self::C::m}<core::num> in null);
diff --git a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.expect
index e215e2a..032f49a 100644
--- a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.expect
@@ -4,7 +4,7 @@
 
 static method f() → void {
   core::List<core::String> y;
-  core::Iterable<core::String> x = y.{core::Iterable::map}<core::String>((core::String z) → core::String => let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::String'.
+  core::Iterable<core::String> x = y.{core::Iterable::map}<core::String>((core::String z) → core::String => let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           1.0);
           ^" in let final dynamic #t2 = 1.0 in null);
diff --git a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.transformed.expect
index 3693a73..113e131 100644
--- a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.transformed.expect
@@ -4,7 +4,7 @@
 
 static method f() → void {
   core::List<core::String> y;
-  core::Iterable<core::String> x = y.{core::Iterable::map}<core::String>((core::String z) → core::String => let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::String'.
+  core::Iterable<core::String> x = y.{core::Iterable::map}<core::String>((core::String z) → core::String => let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
           1.0);
           ^" in let final core::double #t2 = 1.0 in null);
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect
index 459700d..a9ca526 100644
--- a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect
@@ -12,7 +12,7 @@
 Try correcting the name to the name of an existing method, or defining a method named '+'.
                           /*@type=int*/ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
                                                                                                                        ^") as{TypeError} asy::FutureOr<core::String>));
-  asy::Future<core::String> results3 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → asy::FutureOr<core::String> => list.{core::Iterable::fold}<asy::FutureOr<core::String>>("", let final dynamic #t2 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:108: Error: A value of type '(dart.core::String, dart.core::int) \u8594 dart.core::String' can't be assigned to a variable of type '(dart.async::FutureOr<dart.core::String>, dart.core::int) \u8594 dart.async::FutureOr<dart.core::String>'.
+  asy::Future<core::String> results3 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → asy::FutureOr<core::String> => list.{core::Iterable::fold}<asy::FutureOr<core::String>>("", let dynamic _ = null in let final dynamic #t2 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:108: Error: A value of type '(dart.core::String, dart.core::int) \u8594 dart.core::String' can't be assigned to a variable of type '(dart.async::FutureOr<dart.core::String>, dart.core::int) \u8594 dart.async::FutureOr<dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.async::FutureOr<dart.core::String>, dart.core::int) \u8594 dart.async::FutureOr<dart.core::String>'.
                   /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@returnType=String*/ (String
                                                                                                            ^" in let final dynamic #t3 = (core::String x, core::int y) → core::String => x.{core::String::+}(y.{core::int::toString}()) in null));
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.transformed.expect
index 6be431f..5577717 100644
--- a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.transformed.expect
@@ -12,7 +12,7 @@
 Try correcting the name to the name of an existing method, or defining a method named '+'.
                           /*@type=int*/ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
                                                                                                                        ^") as{TypeError} asy::FutureOr<core::String>));
-  asy::Future<core::String> results3 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → asy::FutureOr<core::String> => list.{core::Iterable::fold}<asy::FutureOr<core::String>>("", let final dynamic #t2 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:108: Error: A value of type '(dart.core::String, dart.core::int) \u8594 dart.core::String' can't be assigned to a variable of type '(dart.async::FutureOr<dart.core::String>, dart.core::int) \u8594 dart.async::FutureOr<dart.core::String>'.
+  asy::Future<core::String> results3 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → asy::FutureOr<core::String> => list.{core::Iterable::fold}<asy::FutureOr<core::String>>("", let<BottomType> _ = null in let final dynamic #t2 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:108: Error: A value of type '(dart.core::String, dart.core::int) \u8594 dart.core::String' can't be assigned to a variable of type '(dart.async::FutureOr<dart.core::String>, dart.core::int) \u8594 dart.async::FutureOr<dart.core::String>'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.async::FutureOr<dart.core::String>, dart.core::int) \u8594 dart.async::FutureOr<dart.core::String>'.
                   /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@returnType=String*/ (String
                                                                                                            ^" in let final (core::String, core::int) → core::String #t3 = (core::String x, core::int y) → core::String => x.{core::String::+}(y.{core::int::toString}()) in null));
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect
index 285f89e..cdf4cc7 100644
--- a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect
@@ -23,18 +23,18 @@
   core::String s;
   core::int i;
   s = new self::B::•().{self::B::x} as{TypeError} core::String;
-  s = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:26:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  s = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:26:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::y*/ y;
                                                              ^" in let final dynamic #t2 = new self::B::•().{self::B::y} in null;
   s = new self::B::•().{self::B::z};
-  s = let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:28:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  s = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:28:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::w*/ w;
                                                              ^" in let final dynamic #t4 = new self::B::•().{self::B::w} in null;
   i = new self::B::•().{self::B::x} as{TypeError} core::int;
   i = new self::B::•().{self::B::y};
-  i = let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:32:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  i = let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:32:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   i = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::z*/ z;
                                                              ^" in let final dynamic #t6 = new self::B::•().{self::B::z} in null;
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.transformed.expect
index 81a68df..6aedf65 100644
--- a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.transformed.expect
@@ -23,18 +23,18 @@
   core::String s;
   core::int i;
   s = new self::B::•().{self::B::x} as{TypeError} core::String;
-  s = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:26:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  s = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:26:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::y*/ y;
                                                              ^" in let final core::int #t2 = new self::B::•().{self::B::y} in null;
   s = new self::B::•().{self::B::z};
-  s = let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:28:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  s = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:28:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::w*/ w;
                                                              ^" in let final core::int #t4 = new self::B::•().{self::B::w} in null;
   i = new self::B::•().{self::B::x} as{TypeError} core::int;
   i = new self::B::•().{self::B::y};
-  i = let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:32:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  i = let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:32:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   i = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::z*/ z;
                                                              ^" in let final core::String #t6 = new self::B::•().{self::B::z} in null;
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
index 7a49ccd..f757830 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
@@ -35,58 +35,58 @@
   /*error:UNDEFINED_IDENTIFIER*/ x
                                  ^"]/* from null */;
 static method test1() → dynamic {
-  self::a = let final dynamic #t4 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:38:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::A'.
+  self::a = let dynamic _ = null in let final dynamic #t4 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:38:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::A'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
   a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in let final dynamic #t5 = "hi" in null;
   self::a = new self::B::•(3);
-  self::b = let final dynamic #t6 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:40:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::B'.
+  self::b = let dynamic _ = null in let final dynamic #t6 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:40:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::B'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
   b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in let final dynamic #t7 = "hi" in null;
   self::b = new self::B::•(3);
   self::c1 = <dynamic>[];
-  self::c1 = let final dynamic #t8 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:43:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.
+  self::c1 = let dynamic _ = null in let final dynamic #t8 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:43:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dynamic>'.
   c1 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
                                                                    ^" in let final dynamic #t9 = <dynamic, dynamic>{} in null;
   self::c2 = <dynamic>[];
-  self::c2 = let final dynamic #t10 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:45:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.
+  self::c2 = let dynamic _ = null in let final dynamic #t10 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:45:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dynamic>'.
   c2 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
                                                                    ^" in let final dynamic #t11 = <dynamic, dynamic>{} in null;
   self::d = <dynamic, dynamic>{};
-  self::d = let final dynamic #t12 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:47:36: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Map<dynamic, dynamic>'.
+  self::d = let dynamic _ = null in let final dynamic #t12 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:47:36: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Map<dynamic, dynamic>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Map<dynamic, dynamic>'.
   d = /*error:INVALID_ASSIGNMENT*/ 3;
                                    ^" in let final dynamic #t13 = 3 in null;
   self::e = new self::A::•();
-  self::e = let final dynamic #t14 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:49:67: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'test::A'.
+  self::e = let dynamic _ = null in let final dynamic #t14 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:49:67: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'test::A'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
   e = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
                                                                   ^" in let final dynamic #t15 = <dynamic, dynamic>{} in null;
   self::f = 3;
-  self::f = let final dynamic #t16 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:51:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.
+  self::f = let dynamic _ = null in let final dynamic #t16 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:51:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   f = /*error:INVALID_ASSIGNMENT*/ false;
                                    ^" in let final dynamic #t17 = false in null;
   self::g = 1;
-  self::g = let final dynamic #t18 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:53:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.
+  self::g = let dynamic _ = null in let final dynamic #t18 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:53:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   g = /*error:INVALID_ASSIGNMENT*/ false;
                                    ^" in let final dynamic #t19 = false in null;
-  self::h = let final dynamic #t20 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:54:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.
+  self::h = let dynamic _ = null in let final dynamic #t20 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:54:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
   h = /*error:INVALID_ASSIGNMENT*/ false;
                                    ^" in let final dynamic #t21 = false in null;
   self::h = new self::B::•("b");
   self::i = false;
   self::j = new self::B::•("b");
-  self::j = let final dynamic #t22 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:58:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.
+  self::j = let dynamic _ = null in let final dynamic #t22 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:58:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
   j = /*error:INVALID_ASSIGNMENT*/ false;
                                    ^" in let final dynamic #t23 = false in null;
-  self::j = let final dynamic #t24 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:59:58: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'test::B'.
+  self::j = let dynamic _ = null in let final dynamic #t24 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:59:58: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'test::B'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
   j = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ [];
                                                          ^" in let final dynamic #t25 = <dynamic>[] in null;
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.transformed.expect
index 664191e..d1d2dd6 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.transformed.expect
@@ -35,58 +35,58 @@
   /*error:UNDEFINED_IDENTIFIER*/ x
                                  ^"]/* from null */;
 static method test1() → dynamic {
-  self::a = let final dynamic #t4 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:38:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::A'.
+  self::a = let<BottomType> _ = null in let final dynamic #t4 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:38:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::A'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
   a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in let final core::String #t5 = "hi" in null;
   self::a = new self::B::•(3);
-  self::b = let final dynamic #t6 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:40:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::B'.
+  self::b = let<BottomType> _ = null in let final dynamic #t6 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:40:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::B'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
   b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in let final core::String #t7 = "hi" in null;
   self::b = new self::B::•(3);
   self::c1 = <dynamic>[];
-  self::c1 = let final dynamic #t8 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:43:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.
+  self::c1 = let<BottomType> _ = null in let final dynamic #t8 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:43:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dynamic>'.
   c1 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
                                                                    ^" in let final core::Map<dynamic, dynamic> #t9 = <dynamic, dynamic>{} in null;
   self::c2 = <dynamic>[];
-  self::c2 = let final dynamic #t10 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:45:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.
+  self::c2 = let<BottomType> _ = null in let final dynamic #t10 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:45:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dynamic>'.
   c2 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
                                                                    ^" in let final core::Map<dynamic, dynamic> #t11 = <dynamic, dynamic>{} in null;
   self::d = <dynamic, dynamic>{};
-  self::d = let final dynamic #t12 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:47:36: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Map<dynamic, dynamic>'.
+  self::d = let<BottomType> _ = null in let final dynamic #t12 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:47:36: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Map<dynamic, dynamic>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Map<dynamic, dynamic>'.
   d = /*error:INVALID_ASSIGNMENT*/ 3;
                                    ^" in let final core::int #t13 = 3 in null;
   self::e = new self::A::•();
-  self::e = let final dynamic #t14 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:49:67: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'test::A'.
+  self::e = let<BottomType> _ = null in let final dynamic #t14 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:49:67: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'test::A'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
   e = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
                                                                   ^" in let final core::Map<dynamic, dynamic> #t15 = <dynamic, dynamic>{} in null;
   self::f = 3;
-  self::f = let final dynamic #t16 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:51:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.
+  self::f = let<BottomType> _ = null in let final dynamic #t16 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:51:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   f = /*error:INVALID_ASSIGNMENT*/ false;
                                    ^" in let final core::bool #t17 = false in null;
   self::g = 1;
-  self::g = let final dynamic #t18 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:53:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.
+  self::g = let<BottomType> _ = null in let final dynamic #t18 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:53:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   g = /*error:INVALID_ASSIGNMENT*/ false;
                                    ^" in let final core::bool #t19 = false in null;
-  self::h = let final dynamic #t20 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:54:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.
+  self::h = let<BottomType> _ = null in let final dynamic #t20 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:54:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
   h = /*error:INVALID_ASSIGNMENT*/ false;
                                    ^" in let final core::bool #t21 = false in null;
   self::h = new self::B::•("b");
   self::i = false;
   self::j = new self::B::•("b");
-  self::j = let final dynamic #t22 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:58:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.
+  self::j = let<BottomType> _ = null in let final dynamic #t22 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:58:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
   j = /*error:INVALID_ASSIGNMENT*/ false;
                                    ^" in let final core::bool #t23 = false in null;
-  self::j = let final dynamic #t24 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:59:58: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'test::B'.
+  self::j = let<BottomType> _ = null in let final dynamic #t24 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:59:58: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'test::B'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
   j = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ [];
                                                          ^" in let final core::List<dynamic> #t25 = <dynamic>[] in null;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.expect
index 708d7f1..8b50c96 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.expect
@@ -5,11 +5,11 @@
 
 static field core::int y = inf::x;
 static method test1() → dynamic {
-  inf::x = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  inf::x = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in let final dynamic #t2 = "hi" in null;
-  self::y = let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:14:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::y = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:14:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   y = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in let final dynamic #t4 = "hi" in null;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.transformed.expect
index cd6e0c2..5889b18 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.transformed.expect
@@ -5,11 +5,11 @@
 
 static field core::int y = inf::x;
 static method test1() → dynamic {
-  inf::x = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  inf::x = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in let final core::String #t2 = "hi" in null;
-  self::y = let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:14:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::y = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:14:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   y = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in let final core::String #t4 = "hi" in null;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect
index c3efe0d..ea8e666 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect
@@ -10,11 +10,11 @@
     ;
 }
 static method test1() → dynamic {
-  inf::A::x = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  inf::A::x = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   A.x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in let final dynamic #t2 = "hi" in null;
-  self::B::y = let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::B::y = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   B.y = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in let final dynamic #t4 = "hi" in null;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.transformed.expect
index 5932bf8..e4ef88d 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.transformed.expect
@@ -10,11 +10,11 @@
     ;
 }
 static method test1() → dynamic {
-  inf::A::x = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  inf::A::x = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   A.x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in let final core::String #t2 = "hi" in null;
-  self::B::y = let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::B::y = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   B.y = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in let final core::String #t4 = "hi" in null;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect
index ab767ce..35575d7 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect
@@ -16,7 +16,7 @@
     return 3;
 }
 static method foo() → dynamic {
-  core::String y = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  core::String y = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;
                                                                     ^" in let final dynamic #t2 = new self::B::•().{self::B::x} in null;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.transformed.expect
index e8028b4..a825f30 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.transformed.expect
@@ -16,7 +16,7 @@
     return 3;
 }
 static method foo() → dynamic {
-  core::String y = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  core::String y = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;
                                                                     ^" in let final core::int #t2 = new self::B::•().{self::B::x} in null;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect
index d61fe5e..e45a825 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect
@@ -16,7 +16,7 @@
     return 3;
 }
 static method foo() → dynamic {
-  core::String y = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  core::String y = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;
                                                                     ^" in let final dynamic #t2 = new self::B::•().{self::B::x} in null;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.transformed.expect
index d476ef7..46cd118 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.transformed.expect
@@ -16,7 +16,7 @@
     return 3;
 }
 static method foo() → dynamic {
-  core::String y = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  core::String y = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;
                                                                     ^" in let final core::int #t2 = new self::B::•().{self::B::x} in null;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.expect
index a43d1ae..693987c 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.expect
@@ -4,7 +4,7 @@
 
 static method test1() → dynamic {
   core::int x = 3;
-  x = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  x = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in let final dynamic #t2 = "hi" in null;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.transformed.expect
index 58d47dd..efe4122 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.transformed.expect
@@ -4,7 +4,7 @@
 
 static method test1() → dynamic {
   core::int x = 3;
-  x = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  x = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in let final core::String #t2 = "hi" in null;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.expect
index f1715e6..f42a486 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.expect
@@ -4,7 +4,7 @@
 
 static method test2() → dynamic {
   core::int x = 3;
-  x = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var2.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  x = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var2.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in let final dynamic #t2 = "hi" in null;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.transformed.expect
index fd663a6..93650c3 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.transformed.expect
@@ -4,7 +4,7 @@
 
 static method test2() → dynamic {
   core::int x = 3;
-  x = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var2.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  x = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var2.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in let final core::String #t2 = "hi" in null;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect
index f583bb8..4296aaf 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect
@@ -11,19 +11,19 @@
     ;
   method test1() → dynamic {
     core::int a = this.{self::A::x};
-    a = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    a = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in let final dynamic #t2 = "hi" in null;
     a = 3;
     core::int b = this.{self::A::y};
-    b = let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    b = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in let final dynamic #t4 = "hi" in null;
     b = 4;
     core::int c = this.{self::A::z};
-    c = let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    c = let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in let final dynamic #t6 = "hi" in null;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.transformed.expect
index 025bb0b..e1d081e 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.transformed.expect
@@ -11,19 +11,19 @@
     ;
   method test1() → dynamic {
     core::int a = this.{self::A::x};
-    a = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    a = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in let final core::String #t2 = "hi" in null;
     a = 3;
     core::int b = this.{self::A::y};
-    b = let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    b = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in let final core::String #t4 = "hi" in null;
     b = 4;
     core::int c = this.{self::A::z};
-    c = let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    c = let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                      ^" in let final core::String #t6 = "hi" in null;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.expect
index 13b5afa..1da00c1 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.expect
@@ -7,19 +7,19 @@
 static final field core::int z = 42;
 static method test1() → dynamic {
   core::int a = self::x;
-  a = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:12:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  a = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:12:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in let final dynamic #t2 = "hi" in null;
   a = 3;
   core::int b = self::y;
-  b = let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:15:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  b = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:15:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in let final dynamic #t4 = "hi" in null;
   b = 4;
   core::int c = self::z;
-  c = let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:18:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  c = let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:18:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in let final dynamic #t6 = "hi" in null;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.transformed.expect
index 3bb751c..6f715a0 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.transformed.expect
@@ -7,19 +7,19 @@
 static final field core::int z = 42;
 static method test1() → dynamic {
   core::int a = self::x;
-  a = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:12:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  a = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:12:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in let final core::String #t2 = "hi" in null;
   a = 3;
   core::int b = self::y;
-  b = let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:15:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  b = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:15:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in let final core::String #t4 = "hi" in null;
   b = 4;
   core::int c = self::z;
-  c = let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:18:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  c = let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:18:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                    ^" in let final core::String #t6 = "hi" in null;
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect
index 1f67d46..3344f00 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect
@@ -19,7 +19,7 @@
 }
 static method foo() → dynamic {
   core::int y = new self::C::•().{self::C::x};
-  core::String z = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  core::String z = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C::x*/ x;
                                                                     ^" in let final dynamic #t2 = new self::C::•().{self::C::x} in null;
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.transformed.expect
index 76508fd..c4a712c 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.transformed.expect
@@ -19,7 +19,7 @@
 }
 static method foo() → dynamic {
   core::int y = new self::C::•().{self::C::x};
-  core::String z = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  core::String z = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C::x*/ x;
                                                                     ^" in let final core::int #t2 = new self::C::•().{self::C::x} in null;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect
index 680dc9c..22a1397 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect
@@ -16,13 +16,13 @@
   get x() → core::int
     return 3;
   get w() → core::int
-    return let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    return let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   get /*@topType=int*/ w => /*error:RETURN_OF_INVALID_TYPE*/ \"hello\";
                                                              ^" in let final dynamic #t2 = "hello" in null;
 }
 static method foo() → dynamic {
-  core::String y = let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  core::String y = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;
                                                                     ^" in let final dynamic #t4 = new self::B::•().{self::B::x} in null;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.transformed.expect
index cecd7ae..7c184cf 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.transformed.expect
@@ -16,13 +16,13 @@
   get x() → core::int
     return 3;
   get w() → core::int
-    return let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+    return let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   get /*@topType=int*/ w => /*error:RETURN_OF_INVALID_TYPE*/ \"hello\";
                                                              ^" in let final core::String #t2 = "hello" in null;
 }
 static method foo() → dynamic {
-  core::String y = let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  core::String y = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;
                                                                     ^" in let final core::int #t4 = new self::B::•().{self::B::x} in null;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect
index f7edc12..efe5253 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect
@@ -17,7 +17,7 @@
     return this.{self::B::y};
 }
 static method foo() → dynamic {
-  core::int y = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:74: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  core::int y = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:74: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   int y = /*error:INVALID_ASSIGNMENT*/ new B<String>(). /*@target=B::x*/ x;
                                                                          ^" in let final dynamic #t2 = new self::B::•<core::String>().{self::B::x} in null;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.transformed.expect
index dbde06b..412283f 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.transformed.expect
@@ -17,7 +17,7 @@
     return this.{self::B::y};
 }
 static method foo() → dynamic {
-  core::int y = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:74: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  core::int y = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:74: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   int y = /*error:INVALID_ASSIGNMENT*/ new B<String>(). /*@target=B::x*/ x;
                                                                          ^" in let final core::String #t2 = new self::B::•<core::String>().{self::B::x} in null;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect
index 8bd9cd0..5c0a1e4 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect
@@ -29,7 +29,7 @@
   method m(dynamic a, (dynamic, self::B::E) → dynamic f) → core::String {}
 }
 static method foo() → dynamic {
-  core::int y = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:26: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  core::int y = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:26: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       . /*@target=B::m*/ m(null, null);
                          ^" in let final dynamic #t2 = new self::B::•<dynamic>().{self::B::m}(null, null) in null;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.transformed.expect
index 5c0657a..37a225e 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.transformed.expect
@@ -29,7 +29,7 @@
   method m(dynamic a, (dynamic, self::B::E) → dynamic f) → core::String {}
 }
 static method foo() → dynamic {
-  core::int y = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:26: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  core::int y = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:26: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       . /*@target=B::m*/ m(null, null);
                          ^" in let final core::String #t2 = new self::B::•<dynamic>().{self::B::m}(null, null) in null;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect
index a3154f4..e92f2a3 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect
@@ -24,7 +24,7 @@
   method m(dynamic a, (dynamic, core::int) → dynamic f) → self::A<self::B::E> {}
 }
 static method foo() → dynamic {
-  core::int y = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:30: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  core::int y = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:30: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       . /*@target=A::value*/ value;
                              ^" in let final dynamic #t2 = new self::B::•<core::String>().{self::B::m}(null, null).{self::A::value} in null;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.transformed.expect
index 53741ec..aa3882c 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.transformed.expect
@@ -24,7 +24,7 @@
   method m(dynamic a, (dynamic, core::int) → dynamic f) → self::A<self::B::E> {}
 }
 static method foo() → dynamic {
-  core::int y = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:30: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  core::int y = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:30: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       . /*@target=A::value*/ value;
                              ^" in let final core::String #t2 = new self::B::•<core::String>().{self::B::m}(null, null).{self::A::value} in null;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
index f156e4b..4b7c312 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
@@ -14,7 +14,7 @@
     ;
   method foo(generic-covariant-impl self::Bar::T t) → void {
     for (core::String i in t) {
-      core::int x = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+      core::int x = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
                                            ^" in let final dynamic #t2 = i in null;
@@ -27,7 +27,7 @@
     ;
   method foo(generic-covariant-impl self::Baz::S t) → void {
     for (self::Baz::T i in t) {
-      core::int x = let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.
+      core::int x = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
                                            ^" in let final dynamic #t4 = i in null;
@@ -38,7 +38,7 @@
 static method test() → dynamic {
   core::List<self::Foo> list = <self::Foo>[];
   for (self::Foo x in list) {
-    core::String y = let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
+    core::String y = let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
     String y = /*error:INVALID_ASSIGNMENT*/ x;
                                             ^" in let final dynamic #t6 = x in null;
@@ -47,7 +47,7 @@
     core::String y = x as{TypeError} core::String;
   }
   for (final self::Foo #t7 in list) {
-    core::String x = let final dynamic #t8 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:39:15: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
+    core::String x = let dynamic _ = null in let final dynamic #t8 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:39:15: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ list) {
               ^" in let final dynamic #t9 = #t7 in null;
@@ -69,7 +69,7 @@
     self::Foo y = x;
   }
   core::Map<core::String, self::Foo> map = <core::String, self::Foo>{};
-  for (dynamic x in let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:68: Error: A value of type 'dart.core::Map<dart.core::String, test::Foo>' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.
+  for (dynamic x in let dynamic _ = null in let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:68: Error: A value of type 'dart.core::Map<dart.core::String, test::Foo>' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dynamic>'.
   for (var /*@type=dynamic*/ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
                                                                    ^" in let final dynamic #t14 = map in null) {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.transformed.expect
index 6d6bba4..674ff5c 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.transformed.expect
@@ -14,7 +14,7 @@
     ;
   method foo(generic-covariant-impl self::Bar::T t) → void {
     for (core::String i in t) {
-      core::int x = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+      core::int x = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
                                            ^" in let final core::String #t2 = i in null;
@@ -27,7 +27,7 @@
     ;
   method foo(generic-covariant-impl self::Baz::S t) → void {
     for (self::Baz::T i in t) {
-      core::int x = let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.
+      core::int x = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
                                            ^" in let final self::Baz::T #t4 = i in null;
@@ -38,7 +38,7 @@
 static method test() → dynamic {
   core::List<self::Foo> list = <self::Foo>[];
   for (self::Foo x in list) {
-    core::String y = let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
+    core::String y = let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
     String y = /*error:INVALID_ASSIGNMENT*/ x;
                                             ^" in let final self::Foo #t6 = x in null;
@@ -47,7 +47,7 @@
     core::String y = x as{TypeError} core::String;
   }
   for (final self::Foo #t7 in list) {
-    core::String x = let final dynamic #t8 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:39:15: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
+    core::String x = let<BottomType> _ = null in let final dynamic #t8 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:39:15: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ list) {
               ^" in let final self::Foo #t9 = #t7 in null;
@@ -69,7 +69,7 @@
     self::Foo y = x;
   }
   core::Map<core::String, self::Foo> map = <core::String, self::Foo>{};
-  for (dynamic x in let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:68: Error: A value of type 'dart.core::Map<dart.core::String, test::Foo>' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.
+  for (dynamic x in let<BottomType> _ = null in let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:68: Error: A value of type 'dart.core::Map<dart.core::String, test::Foo>' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dynamic>'.
   for (var /*@type=dynamic*/ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
                                                                    ^" in let final core::Map<core::String, self::Foo> #t14 = map in null) {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
index 5e12f30..5ebd147 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
@@ -15,7 +15,7 @@
     ;
   method foo(generic-covariant-impl self::Bar::T t) → dynamic async {
     await for (core::String i in t) {
-      core::int x = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+      core::int x = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
                                            ^" in let final dynamic #t2 = i in null;
@@ -28,7 +28,7 @@
     ;
   method foo(generic-covariant-impl self::Baz::S t) → dynamic async {
     await for (self::Baz::T i in t) {
-      core::int x = let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.
+      core::int x = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
                                            ^" in let final dynamic #t4 = i in null;
@@ -43,7 +43,7 @@
 static method test() → dynamic async {
   self::MyStream<self::Foo> myStream = self::MyStream::•<self::Foo>();
   await for (self::Foo x in myStream) {
-    core::String y = let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
+    core::String y = let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
     String y = /*error:INVALID_ASSIGNMENT*/ x;
                                             ^" in let final dynamic #t6 = x in null;
@@ -52,7 +52,7 @@
     core::String y = x as{TypeError} core::String;
   }
   await for (final self::Foo #t7 in myStream) {
-    core::String x = let final dynamic #t8 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:45:21: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
+    core::String x = let dynamic _ = null in let final dynamic #t8 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:45:21: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   await for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ myStream) {
                     ^" in let final dynamic #t9 = #t7 in null;
@@ -74,7 +74,7 @@
     self::Foo y = x;
   }
   core::Map<core::String, self::Foo> map = <core::String, self::Foo>{};
-  await for (dynamic x in let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:66:74: Error: A value of type 'dart.core::Map<dart.core::String, test::Foo>' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.
+  await for (dynamic x in let dynamic _ = null in let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:66:74: Error: A value of type 'dart.core::Map<dart.core::String, test::Foo>' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dynamic>'.
   await for (var /*@type=dynamic*/ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
                                                                          ^" in let final dynamic #t14 = map in null) {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.transformed.expect
index e515591..616b08d 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.transformed.expect
@@ -38,7 +38,7 @@
                 if(:result) {
                   core::String i = :for-iterator.{asy::_StreamIterator::current};
                   {
-                    core::int x = let final dynamic #t2 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+                    core::int x = let<BottomType> _ = null in let final dynamic #t2 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
                                            ^" in let final core::String #t3 = i in null;
@@ -96,7 +96,7 @@
                 if(:result) {
                   self::Baz::T i = :for-iterator.{asy::_StreamIterator::current};
                   {
-                    core::int x = let final dynamic #t6 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.
+                    core::int x = let<BottomType> _ = null in let final dynamic #t6 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
                                            ^" in let final self::Baz::T #t7 = i in null;
@@ -156,7 +156,7 @@
               if(:result) {
                 self::Foo x = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  core::String y = let final dynamic #t10 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
+                  core::String y = let<BottomType> _ = null in let final dynamic #t10 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
     String y = /*error:INVALID_ASSIGNMENT*/ x;
                                             ^" in let final self::Foo #t11 = x in null;
@@ -201,7 +201,7 @@
               if(:result) {
                 final self::Foo #t16 = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  core::String x = let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:45:21: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
+                  core::String x = let<BottomType> _ = null in let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:45:21: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   await for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ myStream) {
                     ^" in let final self::Foo #t18 = #t16 in null;
@@ -288,7 +288,7 @@
         }
         core::Map<core::String, self::Foo> map = <core::String, self::Foo>{};
         {
-          asy::_StreamIterator<dynamic> :for-iterator = new asy::_StreamIterator::•<dynamic>(let final dynamic #t29 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:66:74: Error: A value of type 'dart.core::Map<dart.core::String, test::Foo>' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.
+          asy::_StreamIterator<dynamic> :for-iterator = new asy::_StreamIterator::•<dynamic>(let<BottomType> _ = null in let final dynamic #t29 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:66:74: Error: A value of type 'dart.core::Map<dart.core::String, test::Foo>' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dynamic>'.
   await for (var /*@type=dynamic*/ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
                                                                          ^" in let final core::Map<core::String, self::Foo> #t30 = map in null);
diff --git a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.expect b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.expect
index 14cb11c..fcd2925 100644
--- a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class Foo extends core::Object {
   field core::int x = 1;
-  constructor •([core::int x = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart:10:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  constructor •([core::int x = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart:10:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   Foo([this.x = /*error:INVALID_ASSIGNMENT*/ \"1\"]);
                                              ^" in let final dynamic #t2 = "1" in null]) → void
diff --git a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.transformed.expect
index d5a62d4..ef10cdb 100644
--- a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.transformed.expect
@@ -4,7 +4,7 @@
 
 class Foo extends core::Object {
   field core::int x = 1;
-  constructor •([core::int x = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart:10:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  constructor •([core::int x = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart:10:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   Foo([this.x = /*error:INVALID_ASSIGNMENT*/ \"1\"]);
                                              ^" in let final core::String #t2 = "1" in null]) → void
diff --git a/pkg/front_end/testcases/inference/list_literals.dart.strong.expect b/pkg/front_end/testcases/inference/list_literals.dart.strong.expect
index 83da1c81..03fddbd 100644
--- a/pkg/front_end/testcases/inference/list_literals.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/list_literals.dart.strong.expect
@@ -4,11 +4,11 @@
 
 static method test1() → dynamic {
   core::List<core::int> x = <core::int>[1, 2, 3];
-  x.{core::List::add}(let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:10:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  x.{core::List::add}(let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:10:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
                                                                       ^" in let final dynamic #t2 = "hi" in null);
-  x.{core::List::add}(let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:11:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+  x.{core::List::add}(let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:11:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
                                                                       ^" in let final dynamic #t4 = 4.0 in null);
@@ -17,7 +17,7 @@
 }
 static method test2() → dynamic {
   core::List<core::num> x = <core::num>[1, 2.0, 3];
-  x.{core::List::add}(let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:18:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+  x.{core::List::add}(let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:18:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
   x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
                                                                       ^" in let final dynamic #t6 = "hi" in null);
diff --git a/pkg/front_end/testcases/inference/list_literals.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/list_literals.dart.strong.transformed.expect
index 956676b..1b7e2aa 100644
--- a/pkg/front_end/testcases/inference/list_literals.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/list_literals.dart.strong.transformed.expect
@@ -4,11 +4,11 @@
 
 static method test1() → dynamic {
   core::List<core::int> x = <core::int>[1, 2, 3];
-  x.{core::List::add}(let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:10:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  x.{core::List::add}(let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:10:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
                                                                       ^" in let final core::String #t2 = "hi" in null);
-  x.{core::List::add}(let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:11:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+  x.{core::List::add}(let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:11:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
                                                                       ^" in let final core::double #t4 = 4.0 in null);
@@ -17,7 +17,7 @@
 }
 static method test2() → dynamic {
   core::List<core::num> x = <core::num>[1, 2.0, 3];
-  x.{core::List::add}(let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:18:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+  x.{core::List::add}(let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:18:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
   x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
                                                                       ^" in let final core::String #t6 = "hi" in null);
diff --git a/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.expect b/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.expect
index a30cdb4..fdc6bfa 100644
--- a/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.expect
@@ -5,11 +5,11 @@
 static field core::List<core::int> x1 = <core::int>[1, 2, 3];
 static field core::List<core::num> x2 = <core::num>[1, 2.0, 3];
 static method test1() → dynamic {
-  self::x1.{core::List::add}(let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:10:72: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::x1.{core::List::add}(let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:10:72: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x1. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
                                                                        ^" in let final dynamic #t2 = "hi" in null);
-  self::x1.{core::List::add}(let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:11:72: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+  self::x1.{core::List::add}(let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:11:72: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x1. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
                                                                        ^" in let final dynamic #t4 = 4.0 in null);
@@ -17,7 +17,7 @@
   core::List<core::num> y = self::x1;
 }
 static method test2() → dynamic {
-  self::x2.{core::List::add}(let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:18:72: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+  self::x2.{core::List::add}(let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:18:72: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
   x2. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
                                                                        ^" in let final dynamic #t6 = "hi" in null);
diff --git a/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.transformed.expect
index 6972b2e..3788b95 100644
--- a/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.transformed.expect
@@ -5,11 +5,11 @@
 static field core::List<core::int> x1 = <core::int>[1, 2, 3];
 static field core::List<core::num> x2 = <core::num>[1, 2.0, 3];
 static method test1() → dynamic {
-  self::x1.{core::List::add}(let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:10:72: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::x1.{core::List::add}(let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:10:72: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x1. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
                                                                        ^" in let final core::String #t2 = "hi" in null);
-  self::x1.{core::List::add}(let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:11:72: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+  self::x1.{core::List::add}(let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:11:72: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x1. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
                                                                        ^" in let final core::double #t4 = 4.0 in null);
@@ -17,7 +17,7 @@
   core::List<core::num> y = self::x1;
 }
 static method test2() → dynamic {
-  self::x2.{core::List::add}(let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:18:72: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+  self::x2.{core::List::add}(let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:18:72: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
   x2. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
                                                                        ^" in let final core::String #t6 = "hi" in null);
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.expect b/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.expect
index 0105a3f..08af811 100644
--- a/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.expect
@@ -9,7 +9,7 @@
     return (core::int x) → core::int => x;
   }
   function b() → asy::Future<(core::int) → core::int> async {
-    return let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:19:36: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
+    return let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:19:36: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
     return /*@returnType=dynamic*/ (/*@type=dynamic*/ x) => x;
                                    ^" in let final dynamic #t2 = (dynamic x) → dynamic => x in null;
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.transformed.expect
index 2a29a2c..2155171 100644
--- a/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.transformed.expect
@@ -20,7 +20,7 @@
       try {
         #L1:
         {
-          :return_value = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:19:36: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
+          :return_value = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:19:36: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
     return /*@returnType=dynamic*/ (/*@type=dynamic*/ x) => x;
                                    ^" in let final (dynamic) → dynamic #t2 = (dynamic x) → dynamic => x in null;
diff --git a/pkg/front_end/testcases/inference/map_literals.dart.strong.expect b/pkg/front_end/testcases/inference/map_literals.dart.strong.expect
index e4f4c9b..e539f33 100644
--- a/pkg/front_end/testcases/inference/map_literals.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/map_literals.dart.strong.expect
@@ -5,15 +5,15 @@
 static method test1() → dynamic {
   core::Map<core::int, core::String> x = <core::int, core::String>{1: "x", 2: "y"};
   x.{core::Map::[]=}(3, "z");
-  x.{core::Map::[]=}(let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  x.{core::Map::[]=}(let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
                                              ^" in let final dynamic #t2 = "hi" in null, "w");
-  x.{core::Map::[]=}(let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+  x.{core::Map::[]=}(let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
                                              ^" in let final dynamic #t4 = 4.0 in null, "u");
-  x.{core::Map::[]=}(3, let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:15:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  x.{core::Map::[]=}(3, let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:15:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   x /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
                                                             ^" in let final dynamic #t6 = 42 in null);
@@ -22,12 +22,12 @@
 static method test2() → dynamic {
   core::Map<core::num, core::Pattern> x = <core::num, core::Pattern>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
   x.{core::Map::[]=}(3, "z");
-  x.{core::Map::[]=}(let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+  x.{core::Map::[]=}(let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
                                              ^" in let final dynamic #t8 = "hi" in null, "w");
   x.{core::Map::[]=}(4.0, "u");
-  x.{core::Map::[]=}(3, let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:29:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.
+  x.{core::Map::[]=}(3, let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:29:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Pattern'.
   x /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
                                                             ^" in let final dynamic #t10 = 42 in null);
diff --git a/pkg/front_end/testcases/inference/map_literals.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/map_literals.dart.strong.transformed.expect
index 512d00e..3405df2 100644
--- a/pkg/front_end/testcases/inference/map_literals.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/map_literals.dart.strong.transformed.expect
@@ -5,15 +5,15 @@
 static method test1() → dynamic {
   core::Map<core::int, core::String> x = <core::int, core::String>{1: "x", 2: "y"};
   x.{core::Map::[]=}(3, "z");
-  x.{core::Map::[]=}(let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  x.{core::Map::[]=}(let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
                                              ^" in let final core::String #t2 = "hi" in null, "w");
-  x.{core::Map::[]=}(let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+  x.{core::Map::[]=}(let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
                                              ^" in let final core::double #t4 = 4.0 in null, "u");
-  x.{core::Map::[]=}(3, let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:15:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  x.{core::Map::[]=}(3, let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:15:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   x /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
                                                             ^" in let final core::int #t6 = 42 in null);
@@ -22,12 +22,12 @@
 static method test2() → dynamic {
   core::Map<core::num, core::Pattern> x = <core::num, core::Pattern>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
   x.{core::Map::[]=}(3, "z");
-  x.{core::Map::[]=}(let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+  x.{core::Map::[]=}(let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
                                              ^" in let final core::String #t8 = "hi" in null, "w");
   x.{core::Map::[]=}(4.0, "u");
-  x.{core::Map::[]=}(3, let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:29:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.
+  x.{core::Map::[]=}(3, let<BottomType> _ = null in let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:29:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Pattern'.
   x /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
                                                             ^" in let final core::int #t10 = 42 in null);
diff --git a/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.expect b/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.expect
index c9dd74e..af7a290 100644
--- a/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.expect
@@ -6,15 +6,15 @@
 static field core::Map<core::num, core::Pattern> x2 = <core::num, core::Pattern>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
 static method test1() → dynamic {
   self::x1.{core::Map::[]=}(3, "z");
-  self::x1.{core::Map::[]=}(let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:14:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::x1.{core::Map::[]=}(let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:14:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x1 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
                                                                   ^" in let final dynamic #t2 = "hi" in null, "w");
-  self::x1.{core::Map::[]=}(let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:15:67: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+  self::x1.{core::Map::[]=}(let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:15:67: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x1 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
                                                                   ^" in let final dynamic #t4 = 4.0 in null, "u");
-  self::x1.{core::Map::[]=}(3, let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:16:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  self::x1.{core::Map::[]=}(3, let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:16:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   x1 /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
                                                              ^" in let final dynamic #t6 = 42 in null);
@@ -22,12 +22,12 @@
 }
 static method test2() → dynamic {
   self::x2.{core::Map::[]=}(3, "z");
-  self::x2.{core::Map::[]=}(let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:27:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+  self::x2.{core::Map::[]=}(let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:27:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
   x2 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
                                                                   ^" in let final dynamic #t8 = "hi" in null, "w");
   self::x2.{core::Map::[]=}(4.0, "u");
-  self::x2.{core::Map::[]=}(3, let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:29:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.
+  self::x2.{core::Map::[]=}(3, let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:29:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Pattern'.
   x2 /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
                                                              ^" in let final dynamic #t10 = 42 in null);
diff --git a/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.transformed.expect
index 28834d9..05fb52e 100644
--- a/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.transformed.expect
@@ -6,15 +6,15 @@
 static field core::Map<core::num, core::Pattern> x2 = <core::num, core::Pattern>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
 static method test1() → dynamic {
   self::x1.{core::Map::[]=}(3, "z");
-  self::x1.{core::Map::[]=}(let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:14:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  self::x1.{core::Map::[]=}(let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:14:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x1 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
                                                                   ^" in let final core::String #t2 = "hi" in null, "w");
-  self::x1.{core::Map::[]=}(let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:15:67: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+  self::x1.{core::Map::[]=}(let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:15:67: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   x1 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
                                                                   ^" in let final core::double #t4 = 4.0 in null, "u");
-  self::x1.{core::Map::[]=}(3, let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:16:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+  self::x1.{core::Map::[]=}(3, let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:16:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   x1 /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
                                                              ^" in let final core::int #t6 = 42 in null);
@@ -22,12 +22,12 @@
 }
 static method test2() → dynamic {
   self::x2.{core::Map::[]=}(3, "z");
-  self::x2.{core::Map::[]=}(let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:27:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+  self::x2.{core::Map::[]=}(let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:27:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
   x2 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
                                                                   ^" in let final core::String #t8 = "hi" in null, "w");
   self::x2.{core::Map::[]=}(4.0, "u");
-  self::x2.{core::Map::[]=}(3, let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:29:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.
+  self::x2.{core::Map::[]=}(3, let<BottomType> _ = null in let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:29:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Pattern'.
   x2 /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
                                                              ^" in let final core::int #t10 = 42 in null);
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect
index 800802c..6ed5cbf 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect
@@ -10,12 +10,12 @@
 }
 static method test5() → dynamic {
   self::A a1 = new self::A::•();
-  a1.{self::A::x} = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:14:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  a1.{self::A::x} = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:14:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   a1. /*@target=A::x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                                         ^" in let final dynamic #t2 = "hi" in null;
   self::A a2 = new self::A::•();
-  a2.{self::A::x} = let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:17:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  a2.{self::A::x} = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:17:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   a2. /*@target=A::x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                                         ^" in let final dynamic #t4 = "hi" in null;
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.transformed.expect
index 4f04d5a..cc1778f 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.transformed.expect
@@ -10,12 +10,12 @@
 }
 static method test5() → dynamic {
   self::A a1 = new self::A::•();
-  a1.{self::A::x} = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:14:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  a1.{self::A::x} = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:14:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   a1. /*@target=A::x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                                         ^" in let final core::String #t2 = "hi" in null;
   self::A a2 = new self::A::•();
-  a2.{self::A::x} = let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:17:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  a2.{self::A::x} = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:17:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   a2. /*@target=A::x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
                                                         ^" in let final core::String #t4 = "hi" in null;
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.expect
index c0b6fc9..c48a4c4 100644
--- a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.expect
@@ -8,7 +8,7 @@
   return (core::int x) → core::int => x;
 }
 static method b() → asy::Future<(core::int) → core::int> async {
-  return let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:34: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
+  return let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:34: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
   return /*@returnType=dynamic*/ (/*@type=dynamic*/ x) => x;
                                  ^" in let final dynamic #t2 = (dynamic x) → dynamic => x in null;
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.transformed.expect
index cb53a52..684b488 100644
--- a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.transformed.expect
@@ -19,7 +19,7 @@
     try {
       #L1:
       {
-        :return_value = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:34: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
+        :return_value = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:34: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
   return /*@returnType=dynamic*/ (/*@type=dynamic*/ x) => x;
                                  ^" in let final (dynamic) → dynamic #t2 = (dynamic x) → dynamic => x in null;
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect
index bb7f27f..cb323c5 100644
--- a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect
@@ -4,26 +4,26 @@
 
 static method test() → dynamic async {
   core::String s;
-  for (final dynamic #t1 in let final dynamic #t2 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.
+  for (final dynamic #t1 in let dynamic _ = null in let final dynamic #t2 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dynamic>'.
   for (int x in /*@error=InvalidAssignment*/ s) {}
                                              ^" in let final dynamic #t3 = s in null) {
     core::int x = #t1 as{TypeError} core::int;
   }
-  await for (final dynamic #t4 in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:52: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.
+  await for (final dynamic #t4 in let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:52: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dynamic>'.
   await for (int x in /*@error=InvalidAssignment*/ s) {}
                                                    ^" in let final dynamic #t6 = s in null) {
     core::int x = #t4 as{TypeError} core::int;
   }
   core::int y;
-  for (final dynamic #t7 in let final dynamic #t8 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:42: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.
+  for (final dynamic #t7 in let dynamic _ = null in let final dynamic #t8 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:42: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dynamic>'.
   for (y in /*@error=InvalidAssignment*/ s) {}
                                          ^" in let final dynamic #t9 = s in null) {
     y = #t7 as{TypeError} core::int;
   }
-  await for (final dynamic #t10 in let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.
+  await for (final dynamic #t10 in let dynamic _ = null in let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dynamic>'.
   await for (y in /*@error=InvalidAssignment*/ s) {}
                                                ^" in let final dynamic #t12 = s in null) {
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.transformed.expect
index bb9b75a..3357d37 100644
--- a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.transformed.expect
@@ -20,14 +20,14 @@
       #L1:
       {
         core::String s;
-        for (final dynamic #t1 in let final dynamic #t2 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.
+        for (final dynamic #t1 in let<BottomType> _ = null in let final dynamic #t2 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dynamic>'.
   for (int x in /*@error=InvalidAssignment*/ s) {}
                                              ^" in let final core::String #t3 = s in null) {
           core::int x = #t1 as{TypeError} core::int;
         }
         {
-          asy::_StreamIterator<dynamic> :for-iterator = new asy::_StreamIterator::•<dynamic>(let final dynamic #t4 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:52: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.
+          asy::_StreamIterator<dynamic> :for-iterator = new asy::_StreamIterator::•<dynamic>(let<BottomType> _ = null in let final dynamic #t4 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:52: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dynamic>'.
   await for (int x in /*@error=InvalidAssignment*/ s) {}
                                                    ^" in let final core::String #t5 = s in null);
@@ -51,14 +51,14 @@
             }
         }
         core::int y;
-        for (final dynamic #t9 in let final dynamic #t10 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:42: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.
+        for (final dynamic #t9 in let<BottomType> _ = null in let final dynamic #t10 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:42: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dynamic>'.
   for (y in /*@error=InvalidAssignment*/ s) {}
                                          ^" in let final core::String #t11 = s in null) {
           y = #t9 as{TypeError} core::int;
         }
         {
-          asy::_StreamIterator<dynamic> :for-iterator = new asy::_StreamIterator::•<dynamic>(let final dynamic #t12 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.
+          asy::_StreamIterator<dynamic> :for-iterator = new asy::_StreamIterator::•<dynamic>(let<BottomType> _ = null in let final dynamic #t12 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dynamic>'.
   await for (y in /*@error=InvalidAssignment*/ s) {}
                                                ^" in let final core::String #t13 = s in null);
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect
index 5800a96..4c88501 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect
@@ -34,13 +34,13 @@
     b = #t4 as{TypeError} self::B;
   }
   for (final self::A #t5 in iterable) {
-    i = let final dynamic #t6 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:39: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.
+    i = let dynamic _ = null in let final dynamic #t6 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:39: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   for (i /*@error=InvalidAssignment*/ in iterable) {}
                                       ^" in let final dynamic #t7 = #t5 in null;
   }
   await for (final self::A #t8 in stream) {
-    i = let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:45: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.
+    i = let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:45: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   await for (i /*@error=InvalidAssignment*/ in stream) {}
                                             ^" in let final dynamic #t10 = #t8 in null;
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.transformed.expect
index c633524..24cf8c0 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.transformed.expect
@@ -85,7 +85,7 @@
             }
         }
         for (final self::A #t9 in iterable) {
-          i = let final dynamic #t10 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:39: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.
+          i = let<BottomType> _ = null in let final dynamic #t10 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:39: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   for (i /*@error=InvalidAssignment*/ in iterable) {}
                                       ^" in let final self::A #t11 = #t9 in null;
@@ -99,7 +99,7 @@
               if(:result) {
                 final self::A #t13 = :for-iterator.{asy::_StreamIterator::current};
                 {
-                  i = let final dynamic #t14 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:45: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.
+                  i = let<BottomType> _ = null in let final dynamic #t14 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:45: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   await for (i /*@error=InvalidAssignment*/ in stream) {}
                                             ^" in let final self::A #t15 = #t13 in null;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect
index 35a241f..d231fbe 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect
@@ -55,17 +55,17 @@
     core::double v3 = let final core::String #t66 = "x" in let final core::double #t67 = self::getDouble() in let final void #t68 = super.{self::Base::[]=}(#t66, #t67) in #t67;
     core::num v5 = let final core::String #t69 = "x" in let final core::int #t70 = super.{self::Base::[]}(#t69) in #t70.{core::num::==}(null) ?{core::num} let final core::num #t71 = self::getNum() as{TypeError} core::double in let final void #t72 = super.{self::Base::[]=}(#t69, #t71) in #t71 : #t70;
     core::num v6 = let final core::String #t73 = "x" in let final core::int #t74 = super.{self::Base::[]}(#t73) in #t74.{core::num::==}(null) ?{core::num} let final core::double #t75 = self::getDouble() in let final void #t76 = super.{self::Base::[]=}(#t73, #t75) in #t75 : #t74;
-    core::int v7 = let final core::String #t77 = "x" in let final core::int #t78 = let final dynamic #t79 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:55:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+    core::int v7 = let final core::String #t77 = "x" in let final core::int #t78 = let dynamic _ = null in let final dynamic #t79 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:55:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
     var /*@type=int*/ v7 = super /*@target=Base::[]=*/ ['x'] += getInt();
                                                              ^" in let final dynamic #t80 = super.{self::Base::[]}(#t77).{core::num::+}(self::getInt()) in null in let final void #t81 = super.{self::Base::[]=}(#t77, #t78) in #t78;
     core::num v8 = let final core::String #t82 = "x" in let final core::num #t83 = super.{self::Base::[]}(#t82).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t84 = super.{self::Base::[]=}(#t82, #t83) in #t83;
     core::double v9 = let final core::String #t85 = "x" in let final core::double #t86 = super.{self::Base::[]}(#t85).{core::num::+}(self::getDouble()) in let final void #t87 = super.{self::Base::[]=}(#t85, #t86) in #t86;
-    core::int v10 = let final core::String #t88 = "x" in let final core::int #t89 = let final dynamic #t90 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:58:29: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+    core::int v10 = let final core::String #t88 = "x" in let final core::int #t89 = let dynamic _ = null in let final dynamic #t90 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:58:29: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
     var /*@type=int*/ v10 = ++super /*@target=Base::[]=*/ ['x'];
                             ^" in let final dynamic #t91 = super.{self::Base::[]}(#t88).{core::num::+}(1) in null in let final void #t92 = super.{self::Base::[]=}(#t88, #t89) in #t89;
-    core::int v11 = let final core::String #t93 = "x" in let final core::int #t94 = super.{self::Base::[]}(#t93) in let final void #t95 = super.{self::Base::[]=}(#t93, let final dynamic #t96 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:59:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+    core::int v11 = let final core::String #t93 = "x" in let final core::int #t94 = super.{self::Base::[]}(#t93) in let final void #t95 = super.{self::Base::[]=}(#t93, let dynamic _ = null in let final dynamic #t96 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:59:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
     var /*@type=int*/ v11 = super /*@target=Base::[]=*/ ['x']++;
                                                              ^" in let final dynamic #t97 = #t94.{core::num::+}(1) in null) in #t94;
@@ -129,19 +129,19 @@
     core::num v2 = let final core::String #t192 = "x" in let final core::num #t193 = self::getNum() as{TypeError} core::int in let final void #t194 = super.{self::Base::[]=}(#t192, #t193) in #t193;
     core::num v4 = let final core::String #t195 = "x" in let final core::double #t196 = super.{self::Base::[]}(#t195) in #t196.{core::num::==}(null) ?{core::num} let final core::int #t197 = self::getInt() in let final void #t198 = super.{self::Base::[]=}(#t195, #t197) in #t197 : #t196;
     core::num v5 = let final core::String #t199 = "x" in let final core::double #t200 = super.{self::Base::[]}(#t199) in #t200.{core::num::==}(null) ?{core::num} let final core::num #t201 = self::getNum() as{TypeError} core::int in let final void #t202 = super.{self::Base::[]=}(#t199, #t201) in #t201 : #t200;
-    core::double v7 = let final core::String #t203 = "x" in let final core::double #t204 = let final dynamic #t205 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:112:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+    core::double v7 = let final core::String #t203 = "x" in let final core::double #t204 = let dynamic _ = null in let final dynamic #t205 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:112:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     var /*@type=double*/ v7 = super /*@target=Base::[]=*/ ['x'] += getInt();
                                                                 ^" in let final dynamic #t206 = super.{self::Base::[]}(#t203).{core::double::+}(self::getInt()) in null in let final void #t207 = super.{self::Base::[]=}(#t203, #t204) in #t204;
-    core::double v8 = let final core::String #t208 = "x" in let final core::double #t209 = let final dynamic #t210 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:113:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+    core::double v8 = let final core::String #t208 = "x" in let final core::double #t209 = let dynamic _ = null in let final dynamic #t210 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:113:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     var /*@type=double*/ v8 = super /*@target=Base::[]=*/ ['x'] += getNum();
                                                                 ^" in let final dynamic #t211 = super.{self::Base::[]}(#t208).{core::double::+}(self::getNum()) in null in let final void #t212 = super.{self::Base::[]=}(#t208, #t209) in #t209;
-    core::double v10 = let final core::String #t213 = "x" in let final core::double #t214 = let final dynamic #t215 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:114:32: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+    core::double v10 = let final core::String #t213 = "x" in let final core::double #t214 = let dynamic _ = null in let final dynamic #t215 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:114:32: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     var /*@type=double*/ v10 = ++super /*@target=Base::[]=*/ ['x'];
                                ^" in let final dynamic #t216 = super.{self::Base::[]}(#t213).{core::double::+}(1) in null in let final void #t217 = super.{self::Base::[]=}(#t213, #t214) in #t214;
-    core::double v11 = let final core::String #t218 = "x" in let final core::double #t219 = super.{self::Base::[]}(#t218) in let final void #t220 = super.{self::Base::[]=}(#t218, let final dynamic #t221 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:115:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+    core::double v11 = let final core::String #t218 = "x" in let final core::double #t219 = super.{self::Base::[]}(#t218) in let final void #t220 = super.{self::Base::[]=}(#t218, let dynamic _ = null in let final dynamic #t221 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:115:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     var /*@type=double*/ v11 = super /*@target=Base::[]=*/ ['x']++;
                                                                 ^" in let final dynamic #t222 = #t219.{core::double::+}(1) in null) in #t219;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect
index c520d9b..06f2a25 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect
@@ -50,17 +50,17 @@
     core::double v3 = let final core::String #t66 = "x" in let final core::double #t67 = self::getDouble() in let final void #t68 = this.{self::Test3::[]=}(#t66, #t67) in #t67;
     core::num v5 = let final core::String #t69 = "x" in let final core::int #t70 = this.{self::Test3::[]}(#t69) in #t70.{core::num::==}(null) ?{core::num} let final core::num #t71 = self::getNum() as{TypeError} core::double in let final void #t72 = this.{self::Test3::[]=}(#t69, #t71) in #t71 : #t70;
     core::num v6 = let final core::String #t73 = "x" in let final core::int #t74 = this.{self::Test3::[]}(#t73) in #t74.{core::num::==}(null) ?{core::num} let final core::double #t75 = self::getDouble() in let final void #t76 = this.{self::Test3::[]=}(#t73, #t75) in #t75 : #t74;
-    core::int v7 = let final core::String #t77 = "x" in let final core::int #t78 = let final dynamic #t79 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:56:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+    core::int v7 = let final core::String #t77 = "x" in let final core::int #t78 = let dynamic _ = null in let final dynamic #t79 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:56:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
     var /*@type=int*/ v7 = this /*@target=Test3::[]=*/ ['x'] += getInt();
                                                              ^" in let final dynamic #t80 = this.{self::Test3::[]}(#t77).{core::num::+}(self::getInt()) in null in let final void #t81 = this.{self::Test3::[]=}(#t77, #t78) in #t78;
     core::num v8 = let final core::String #t82 = "x" in let final core::num #t83 = this.{self::Test3::[]}(#t82).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t84 = this.{self::Test3::[]=}(#t82, #t83) in #t83;
     core::double v9 = let final core::String #t85 = "x" in let final core::double #t86 = this.{self::Test3::[]}(#t85).{core::num::+}(self::getDouble()) in let final void #t87 = this.{self::Test3::[]=}(#t85, #t86) in #t86;
-    core::int v10 = let final core::String #t88 = "x" in let final core::int #t89 = let final dynamic #t90 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:59:29: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+    core::int v10 = let final core::String #t88 = "x" in let final core::int #t89 = let dynamic _ = null in let final dynamic #t90 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:59:29: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
     var /*@type=int*/ v10 = ++this /*@target=Test3::[]=*/ ['x'];
                             ^" in let final dynamic #t91 = this.{self::Test3::[]}(#t88).{core::num::+}(1) in null in let final void #t92 = this.{self::Test3::[]=}(#t88, #t89) in #t89;
-    core::int v11 = let final core::String #t93 = "x" in let final core::int #t94 = this.{self::Test3::[]}(#t93) in let final void #t95 = this.{self::Test3::[]=}(#t93, let final dynamic #t96 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:60:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+    core::int v11 = let final core::String #t93 = "x" in let final core::int #t94 = this.{self::Test3::[]}(#t93) in let final void #t95 = this.{self::Test3::[]=}(#t93, let dynamic _ = null in let final dynamic #t96 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:60:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
     var /*@type=int*/ v11 = this /*@target=Test3::[]=*/ ['x']++;
                                                              ^" in let final dynamic #t97 = #t94.{core::num::+}(1) in null) in #t94;
@@ -132,19 +132,19 @@
     core::num v2 = let final core::String #t192 = "x" in let final core::num #t193 = self::getNum() as{TypeError} core::int in let final void #t194 = this.{self::Test7::[]=}(#t192, #t193) in #t193;
     core::num v4 = let final core::String #t195 = "x" in let final core::double #t196 = this.{self::Test7::[]}(#t195) in #t196.{core::num::==}(null) ?{core::num} let final core::int #t197 = self::getInt() in let final void #t198 = this.{self::Test7::[]=}(#t195, #t197) in #t197 : #t196;
     core::num v5 = let final core::String #t199 = "x" in let final core::double #t200 = this.{self::Test7::[]}(#t199) in #t200.{core::num::==}(null) ?{core::num} let final core::num #t201 = self::getNum() as{TypeError} core::int in let final void #t202 = this.{self::Test7::[]=}(#t199, #t201) in #t201 : #t200;
-    core::double v7 = let final core::String #t203 = "x" in let final core::double #t204 = let final dynamic #t205 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:125:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+    core::double v7 = let final core::String #t203 = "x" in let final core::double #t204 = let dynamic _ = null in let final dynamic #t205 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:125:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     var /*@type=double*/ v7 = this /*@target=Test7::[]=*/ ['x'] += getInt();
                                                                 ^" in let final dynamic #t206 = this.{self::Test7::[]}(#t203).{core::double::+}(self::getInt()) in null in let final void #t207 = this.{self::Test7::[]=}(#t203, #t204) in #t204;
-    core::double v8 = let final core::String #t208 = "x" in let final core::double #t209 = let final dynamic #t210 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:126:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+    core::double v8 = let final core::String #t208 = "x" in let final core::double #t209 = let dynamic _ = null in let final dynamic #t210 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:126:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     var /*@type=double*/ v8 = this /*@target=Test7::[]=*/ ['x'] += getNum();
                                                                 ^" in let final dynamic #t211 = this.{self::Test7::[]}(#t208).{core::double::+}(self::getNum()) in null in let final void #t212 = this.{self::Test7::[]=}(#t208, #t209) in #t209;
-    core::double v10 = let final core::String #t213 = "x" in let final core::double #t214 = let final dynamic #t215 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:127:32: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+    core::double v10 = let final core::String #t213 = "x" in let final core::double #t214 = let dynamic _ = null in let final dynamic #t215 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:127:32: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     var /*@type=double*/ v10 = ++this /*@target=Test7::[]=*/ ['x'];
                                ^" in let final dynamic #t216 = this.{self::Test7::[]}(#t213).{core::double::+}(1) in null in let final void #t217 = this.{self::Test7::[]=}(#t213, #t214) in #t214;
-    core::double v11 = let final core::String #t218 = "x" in let final core::double #t219 = this.{self::Test7::[]}(#t218) in let final void #t220 = this.{self::Test7::[]=}(#t218, let final dynamic #t221 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:128:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+    core::double v11 = let final core::String #t218 = "x" in let final core::double #t219 = this.{self::Test7::[]}(#t218) in let final void #t220 = this.{self::Test7::[]=}(#t218, let dynamic _ = null in let final dynamic #t221 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:128:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
     var /*@type=double*/ v11 = this /*@target=Test7::[]=*/ ['x']++;
                                                                 ^" in let final dynamic #t222 = #t219.{core::double::+}(1) in null) in #t219;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect
index 00c1fb0..abc6e6b 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect
@@ -43,17 +43,17 @@
   core::double v3 = let final self::Test<core::int, core::double> #t86 = t in let final core::String #t87 = "x" in let final core::double #t88 = self::getDouble() in let final void #t89 = #t86.{self::Test::[]=}(#t87, #t88) in #t88;
   core::num v5 = let final self::Test<core::int, core::double> #t90 = t in let final core::String #t91 = "x" in let final core::int #t92 = #t90.{self::Test::[]}(#t91) in #t92.{core::num::==}(null) ?{core::num} let final core::num #t93 = self::getNum() as{TypeError} core::double in let final void #t94 = #t90.{self::Test::[]=}(#t91, #t93) in #t93 : #t92;
   core::num v6 = let final self::Test<core::int, core::double> #t95 = t in let final core::String #t96 = "x" in let final core::int #t97 = #t95.{self::Test::[]}(#t96) in #t97.{core::num::==}(null) ?{core::num} let final core::double #t98 = self::getDouble() in let final void #t99 = #t95.{self::Test::[]=}(#t96, #t98) in #t98 : #t97;
-  core::int v7 = let final self::Test<core::int, core::double> #t100 = t in let final core::String #t101 = "x" in let final core::int #t102 = let final dynamic #t103 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:47:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+  core::int v7 = let final self::Test<core::int, core::double> #t100 = t in let final core::String #t101 = "x" in let final core::int #t102 = let dynamic _ = null in let final dynamic #t103 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:47:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
   var /*@type=int*/ v7 = t /*@target=Test::[]=*/ ['x'] += getInt();
                                                        ^" in let final dynamic #t104 = #t100.{self::Test::[]}(#t101).{core::num::+}(self::getInt()) in null in let final void #t105 = #t100.{self::Test::[]=}(#t101, #t102) in #t102;
   core::num v8 = let final self::Test<core::int, core::double> #t106 = t in let final core::String #t107 = "x" in let final core::num #t108 = #t106.{self::Test::[]}(#t107).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t109 = #t106.{self::Test::[]=}(#t107, #t108) in #t108;
   core::double v9 = let final self::Test<core::int, core::double> #t110 = t in let final core::String #t111 = "x" in let final core::double #t112 = #t110.{self::Test::[]}(#t111).{core::num::+}(self::getDouble()) in let final void #t113 = #t110.{self::Test::[]=}(#t111, #t112) in #t112;
-  core::int v10 = let final self::Test<core::int, core::double> #t114 = t in let final core::String #t115 = "x" in let final core::int #t116 = let final dynamic #t117 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:50:27: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+  core::int v10 = let final self::Test<core::int, core::double> #t114 = t in let final core::String #t115 = "x" in let final core::int #t116 = let dynamic _ = null in let final dynamic #t117 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:50:27: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
   var /*@type=int*/ v10 = ++t /*@target=Test::[]=*/ ['x'];
                           ^" in let final dynamic #t118 = #t114.{self::Test::[]}(#t115).{core::num::+}(1) in null in let final void #t119 = #t114.{self::Test::[]=}(#t115, #t116) in #t116;
-  core::int v11 = let final self::Test<core::int, core::double> #t120 = t in let final core::String #t121 = "x" in let final core::int #t122 = #t120.{self::Test::[]}(#t121) in let final void #t123 = #t120.{self::Test::[]=}(#t121, let final dynamic #t124 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:51:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+  core::int v11 = let final self::Test<core::int, core::double> #t120 = t in let final core::String #t121 = "x" in let final core::int #t122 = #t120.{self::Test::[]}(#t121) in let final void #t123 = #t120.{self::Test::[]=}(#t121, let dynamic _ = null in let final dynamic #t124 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:51:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
   var /*@type=int*/ v11 = t /*@target=Test::[]=*/ ['x']++;
                                                        ^" in let final dynamic #t125 = #t122.{core::num::+}(1) in null) in #t122;
@@ -97,19 +97,19 @@
   core::num v2 = let final self::Test<core::double, core::int> #t249 = t in let final core::String #t250 = "x" in let final core::num #t251 = self::getNum() as{TypeError} core::int in let final void #t252 = #t249.{self::Test::[]=}(#t250, #t251) in #t251;
   core::num v4 = let final self::Test<core::double, core::int> #t253 = t in let final core::String #t254 = "x" in let final core::double #t255 = #t253.{self::Test::[]}(#t254) in #t255.{core::num::==}(null) ?{core::num} let final core::int #t256 = self::getInt() in let final void #t257 = #t253.{self::Test::[]=}(#t254, #t256) in #t256 : #t255;
   core::num v5 = let final self::Test<core::double, core::int> #t258 = t in let final core::String #t259 = "x" in let final core::double #t260 = #t258.{self::Test::[]}(#t259) in #t260.{core::num::==}(null) ?{core::num} let final core::num #t261 = self::getNum() as{TypeError} core::int in let final void #t262 = #t258.{self::Test::[]=}(#t259, #t261) in #t261 : #t260;
-  core::double v7 = let final self::Test<core::double, core::int> #t263 = t in let final core::String #t264 = "x" in let final core::double #t265 = let final dynamic #t266 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:96:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+  core::double v7 = let final self::Test<core::double, core::int> #t263 = t in let final core::String #t264 = "x" in let final core::double #t265 = let dynamic _ = null in let final dynamic #t266 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:96:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   var /*@type=double*/ v7 = t /*@target=Test::[]=*/ ['x'] += getInt();
                                                           ^" in let final dynamic #t267 = #t263.{self::Test::[]}(#t264).{core::double::+}(self::getInt()) in null in let final void #t268 = #t263.{self::Test::[]=}(#t264, #t265) in #t265;
-  core::double v8 = let final self::Test<core::double, core::int> #t269 = t in let final core::String #t270 = "x" in let final core::double #t271 = let final dynamic #t272 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:97:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+  core::double v8 = let final self::Test<core::double, core::int> #t269 = t in let final core::String #t270 = "x" in let final core::double #t271 = let dynamic _ = null in let final dynamic #t272 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:97:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   var /*@type=double*/ v8 = t /*@target=Test::[]=*/ ['x'] += getNum();
                                                           ^" in let final dynamic #t273 = #t269.{self::Test::[]}(#t270).{core::double::+}(self::getNum()) in null in let final void #t274 = #t269.{self::Test::[]=}(#t270, #t271) in #t271;
-  core::double v10 = let final self::Test<core::double, core::int> #t275 = t in let final core::String #t276 = "x" in let final core::double #t277 = let final dynamic #t278 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:98:30: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+  core::double v10 = let final self::Test<core::double, core::int> #t275 = t in let final core::String #t276 = "x" in let final core::double #t277 = let dynamic _ = null in let final dynamic #t278 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:98:30: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   var /*@type=double*/ v10 = ++t /*@target=Test::[]=*/ ['x'];
                              ^" in let final dynamic #t279 = #t275.{self::Test::[]}(#t276).{core::double::+}(1) in null in let final void #t280 = #t275.{self::Test::[]=}(#t276, #t277) in #t277;
-  core::double v11 = let final self::Test<core::double, core::int> #t281 = t in let final core::String #t282 = "x" in let final core::double #t283 = #t281.{self::Test::[]}(#t282) in let final void #t284 = #t281.{self::Test::[]=}(#t282, let final dynamic #t285 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:99:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+  core::double v11 = let final self::Test<core::double, core::int> #t281 = t in let final core::String #t282 = "x" in let final core::double #t283 = #t281.{self::Test::[]}(#t282) in let final void #t284 = #t281.{self::Test::[]=}(#t282, let dynamic _ = null in let final dynamic #t285 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:99:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   var /*@type=double*/ v11 = t /*@target=Test::[]=*/ ['x']++;
                                                           ^" in let final dynamic #t286 = #t283.{core::double::+}(1) in null) in #t283;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect
index 45bad0d..c06c05f 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect
@@ -17,19 +17,19 @@
     : super core::Object::•()
     ;
 }
-static field core::int v_prefix_pp = let final self::B #t1 = new self::B::•() in #t1.{self::B::a} = let final dynamic #t2 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:37: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.
+static field core::int v_prefix_pp = let final self::B #t1 = new self::B::•() in #t1.{self::B::a} = let dynamic _ = null in let final dynamic #t2 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:37: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
 var /*@topType=int*/ v_prefix_pp = (++new B(). /*@target=B::a*/ a);
                                     ^" in let final dynamic #t3 = #t1.{self::B::a}.{self::A::+}(1) in null;
-static field core::double v_prefix_mm = let final self::B #t4 = new self::B::•() in #t4.{self::B::a} = let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:18:40: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.
+static field core::double v_prefix_mm = let final self::B #t4 = new self::B::•() in #t4.{self::B::a} = let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:18:40: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
 var /*@topType=double*/ v_prefix_mm = (--new B(). /*@target=B::a*/ a);
                                        ^" in let final dynamic #t6 = #t4.{self::B::a}.{self::A::-}(1) in null;
-static field self::A v_postfix_pp = let final self::B #t7 = new self::B::•() in let final self::A #t8 = #t7.{self::B::a} in let final core::int #t9 = #t7.{self::B::a} = let final dynamic #t10 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:63: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.
+static field self::A v_postfix_pp = let final self::B #t7 = new self::B::•() in let final self::A #t8 = #t7.{self::B::a} in let final core::int #t9 = #t7.{self::B::a} = let dynamic _ = null in let final dynamic #t10 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:63: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
 var /*@topType=A*/ v_postfix_pp = (new B(). /*@target=B::a*/ a++);
                                                               ^" in let final dynamic #t11 = #t8.{self::A::+}(1) in null in #t8;
-static field self::A v_postfix_mm = let final self::B #t12 = new self::B::•() in let final self::A #t13 = #t12.{self::B::a} in let final core::double #t14 = #t12.{self::B::a} = let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:20:63: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.
+static field self::A v_postfix_mm = let final self::B #t12 = new self::B::•() in let final self::A #t13 = #t12.{self::B::a} in let final core::double #t14 = #t12.{self::B::a} = let dynamic _ = null in let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:20:63: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
 var /*@topType=A*/ v_postfix_mm = (new B(). /*@target=B::a*/ a--);
                                                               ^" in let final dynamic #t16 = #t13.{self::A::-}(1) in null in #t13;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.transformed.expect
index ce574ee..bc2c686 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.transformed.expect
@@ -17,19 +17,19 @@
     : super core::Object::•()
     ;
 }
-static field core::int v_prefix_pp = let final self::B #t1 = new self::B::•() in #t1.{self::B::a} = let final dynamic #t2 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:37: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.
+static field core::int v_prefix_pp = let final self::B #t1 = new self::B::•() in #t1.{self::B::a} = let<BottomType> _ = null in let final dynamic #t2 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:37: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
 var /*@topType=int*/ v_prefix_pp = (++new B(). /*@target=B::a*/ a);
                                     ^" in let final core::int #t3 = #t1.{self::B::a}.{self::A::+}(1) in null;
-static field core::double v_prefix_mm = let final self::B #t4 = new self::B::•() in #t4.{self::B::a} = let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:18:40: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.
+static field core::double v_prefix_mm = let final self::B #t4 = new self::B::•() in #t4.{self::B::a} = let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:18:40: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
 var /*@topType=double*/ v_prefix_mm = (--new B(). /*@target=B::a*/ a);
                                        ^" in let final core::double #t6 = #t4.{self::B::a}.{self::A::-}(1) in null;
-static field self::A v_postfix_pp = let final self::B #t7 = new self::B::•() in let final self::A #t8 = #t7.{self::B::a} in let final core::int #t9 = #t7.{self::B::a} = let final dynamic #t10 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:63: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.
+static field self::A v_postfix_pp = let final self::B #t7 = new self::B::•() in let final self::A #t8 = #t7.{self::B::a} in let final core::int #t9 = #t7.{self::B::a} = let<BottomType> _ = null in let final dynamic #t10 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:63: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
 var /*@topType=A*/ v_postfix_pp = (new B(). /*@target=B::a*/ a++);
                                                               ^" in let final core::int #t11 = #t8.{self::A::+}(1) in null in #t8;
-static field self::A v_postfix_mm = let final self::B #t12 = new self::B::•() in let final self::A #t13 = #t12.{self::B::a} in let final core::double #t14 = #t12.{self::B::a} = let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:20:63: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.
+static field self::A v_postfix_mm = let final self::B #t12 = new self::B::•() in let final self::A #t13 = #t12.{self::B::a} in let final core::double #t14 = #t12.{self::B::a} = let<BottomType> _ = null in let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:20:63: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
 var /*@topType=A*/ v_postfix_mm = (new B(). /*@target=B::a*/ a--);
                                                               ^" in let final core::double #t16 = #t13.{self::A::-}(1) in null in #t13;
diff --git a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.expect b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.expect
index 0be91a6..81e4b1f 100644
--- a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.expect
@@ -4,7 +4,7 @@
 
 static field core::int i;
 static field core::String s;
-static field core::String x = self::i = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+static field core::String x = self::i = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
 var /*@topType=String*/ x = i = /*@error=InvalidAssignment*/ s;
                                                              ^" in let final dynamic #t2 = self::s in null;
diff --git a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.transformed.expect
index 85fba5a..ca548ee 100644
--- a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.transformed.expect
@@ -4,7 +4,7 @@
 
 static field core::int i;
 static field core::String s;
-static field core::String x = self::i = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+static field core::String x = self::i = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
 var /*@topType=String*/ x = i = /*@error=InvalidAssignment*/ s;
                                                              ^" in let final core::String #t2 = self::s in null;
diff --git a/pkg/front_end/testcases/invalid_assignment.dart.strong.expect b/pkg/front_end/testcases/invalid_assignment.dart.strong.expect
index f7f07a4..32ac9fb 100644
--- a/pkg/front_end/testcases/invalid_assignment.dart.strong.expect
+++ b/pkg/front_end/testcases/invalid_assignment.dart.strong.expect
@@ -11,17 +11,17 @@
 }
 static method test(core::int i, core::String s, self::A a) → dynamic {
   i = 1;
-  i = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  i = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   i = /*@error=InvalidAssignment*/ s;
                                    ^" in let final dynamic #t2 = s in null;
   i.{core::num::==}(null) ?{core::int} i = 1 : null;
-  i.{core::num::==}(null) ?{core::Object} i = let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  i.{core::num::==}(null) ?{core::Object} i = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   i ??= /*@error=InvalidAssignment*/ s;
                                      ^" in let final dynamic #t4 = s in null : null;
   a = new self::A::•();
-  a = let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:17:34: Error: A value of type 'dart.core::String' can't be assigned to a variable of type '#lib1::A'.
+  a = let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:17:34: Error: A value of type 'dart.core::String' can't be assigned to a variable of type '#lib1::A'.
 Try changing the type of the left hand side, or casting the right hand side to '#lib1::A'.
   a /*@error=InvalidAssignment*/ += 1;
                                  ^" in let final dynamic #t6 = a.{self::A::+}(1) in null;
diff --git a/pkg/front_end/testcases/invalid_assignment.dart.strong.transformed.expect b/pkg/front_end/testcases/invalid_assignment.dart.strong.transformed.expect
index dcb2006..3f357ca 100644
--- a/pkg/front_end/testcases/invalid_assignment.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/invalid_assignment.dart.strong.transformed.expect
@@ -11,17 +11,17 @@
 }
 static method test(core::int i, core::String s, self::A a) → dynamic {
   i = 1;
-  i = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  i = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   i = /*@error=InvalidAssignment*/ s;
                                    ^" in let final core::String #t2 = s in null;
   i.{core::num::==}(null) ?{core::int} i = 1 : null;
-  i.{core::num::==}(null) ?{core::Object} i = let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+  i.{core::num::==}(null) ?{core::Object} i = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
   i ??= /*@error=InvalidAssignment*/ s;
                                      ^" in let final core::String #t4 = s in null : null;
   a = new self::A::•();
-  a = let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:17:34: Error: A value of type 'dart.core::String' can't be assigned to a variable of type '#lib1::A'.
+  a = let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:17:34: Error: A value of type 'dart.core::String' can't be assigned to a variable of type '#lib1::A'.
 Try changing the type of the left hand side, or casting the right hand side to '#lib1::A'.
   a /*@error=InvalidAssignment*/ += 1;
                                  ^" in let final core::String #t6 = a.{self::A::+}(1) in null;
diff --git a/pkg/front_end/testcases/invalid_cast.dart.strong.expect b/pkg/front_end/testcases/invalid_cast.dart.strong.expect
index df83aa8..9c249ad 100644
--- a/pkg/front_end/testcases/invalid_cast.dart.strong.expect
+++ b/pkg/front_end/testcases/invalid_cast.dart.strong.expect
@@ -27,41 +27,41 @@
 static method topLevelFunction(core::int i) → void {}
 static method bad() → dynamic {
   function localFunction(core::int i) → void {}
-  core::List<core::int> a = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:22:60: Error: The list literal type 'dart.core::List<dart.core::Object>' isn't of expected type 'dart.core::List<dart.core::int>'.
+  core::List<core::int> a = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:22:60: Error: The list literal type 'dart.core::List<dart.core::Object>' isn't of expected type 'dart.core::List<dart.core::int>'.
 Change the type of the list literal or the context in which it is used.
   List<int> a = <Object> /*@error=InvalidCastLiteralList*/ [];
                                                            ^" in let final dynamic #t2 = <core::Object>[] in null;
-  core::Map<core::int, core::String> b = let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:23:74: Error: The map literal type 'dart.core::Map<dart.core::Object, dart.core::String>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+  core::Map<core::int, core::String> b = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:23:74: Error: The map literal type 'dart.core::Map<dart.core::Object, dart.core::String>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
 Change the type of the map literal or the context in which it is used.
   Map<int, String> b = <Object, String> /*@error=InvalidCastLiteralMap*/ {};
                                                                          ^" in let final dynamic #t4 = <core::Object, core::String>{} in null;
-  core::Map<core::int, core::String> c = let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:24:71: Error: The map literal type 'dart.core::Map<dart.core::int, dart.core::Object>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+  core::Map<core::int, core::String> c = let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:24:71: Error: The map literal type 'dart.core::Map<dart.core::int, dart.core::Object>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
 Change the type of the map literal or the context in which it is used.
   Map<int, String> c = <int, Object> /*@error=InvalidCastLiteralMap*/ {};
                                                                       ^" in let final dynamic #t6 = <core::int, core::Object>{} in null;
-  (core::Object) → core::int d = let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:25:63: Error: The function expression type '(dart.core::int) \u8594 dart.core::int' isn't of expected type '(dart.core::Object) \u8594 dart.core::int'.
+  (core::Object) → core::int d = let dynamic _ = null in let final dynamic #t7 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:25:63: Error: The function expression type '(dart.core::int) \u8594 dart.core::int' isn't of expected type '(dart.core::Object) \u8594 dart.core::int'.
 Change the type of the function expression or the context in which it is used.
   int Function(Object) d = /*@error=InvalidCastFunctionExpr*/ (int i) => i;
                                                               ^" in let final dynamic #t8 = (core::int i) → core::int => i in null;
   self::D e = self::C::fact() as{TypeError} self::D;
   self::D f = new self::D::•() as{TypeError} self::D;
-  self::D g = let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:28:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.
+  self::D g = let dynamic _ = null in let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:28:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.
 Change the type of the object being constructed or the context in which it is used.
   D g = new /*@error=InvalidCastNewExpr*/ C.nonFact();
                                           ^" in let final dynamic #t10 = new self::C::nonFact() in null;
-  self::D h = let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:29:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.
+  self::D h = let dynamic _ = null in let final dynamic #t11 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:29:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.
 Change the type of the object being constructed or the context in which it is used.
   D h = new /*@error=InvalidCastNewExpr*/ C.nonFact2();
                                           ^" in let final dynamic #t12 = new self::C::nonFact2() in null;
-  (core::Object) → void i = let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:31:45: Error: The static method has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
+  (core::Object) → void i = let dynamic _ = null in let final dynamic #t13 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:31:45: Error: The static method has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
 Change the type of the method or the context in which it is used.
       C. /*@error=InvalidCastStaticMethod*/ staticFunction;
                                             ^" in let final dynamic #t14 = self::C::staticFunction in null;
-  (core::Object) → void j = let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:33:50: Error: The top level function has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
+  (core::Object) → void j = let dynamic _ = null in let final dynamic #t15 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:33:50: Error: The top level function has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
 Change the type of the function or the context in which it is used.
       j = /*@error=InvalidCastTopLevelFunction*/ topLevelFunction;
                                                  ^" in let final dynamic #t16 = self::topLevelFunction in null;
-  (core::Object) → void k = let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:34:65: Error: The local function has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
+  (core::Object) → void k = let dynamic _ = null in let final dynamic #t17 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:34:65: Error: The local function has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
 Change the type of the function or the context in which it is used.
   void Function(Object) k = /*@error=InvalidCastLocalFunction*/ localFunction;
                                                                 ^" in let final dynamic #t18 = localFunction in null;
diff --git a/pkg/front_end/testcases/invalid_cast.dart.strong.transformed.expect b/pkg/front_end/testcases/invalid_cast.dart.strong.transformed.expect
index 858df4a..db63dce 100644
--- a/pkg/front_end/testcases/invalid_cast.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/invalid_cast.dart.strong.transformed.expect
@@ -27,41 +27,41 @@
 static method topLevelFunction(core::int i) → void {}
 static method bad() → dynamic {
   function localFunction(core::int i) → void {}
-  core::List<core::int> a = let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:22:60: Error: The list literal type 'dart.core::List<dart.core::Object>' isn't of expected type 'dart.core::List<dart.core::int>'.
+  core::List<core::int> a = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:22:60: Error: The list literal type 'dart.core::List<dart.core::Object>' isn't of expected type 'dart.core::List<dart.core::int>'.
 Change the type of the list literal or the context in which it is used.
   List<int> a = <Object> /*@error=InvalidCastLiteralList*/ [];
                                                            ^" in let final core::List<core::Object> #t2 = <core::Object>[] in null;
-  core::Map<core::int, core::String> b = let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:23:74: Error: The map literal type 'dart.core::Map<dart.core::Object, dart.core::String>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+  core::Map<core::int, core::String> b = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:23:74: Error: The map literal type 'dart.core::Map<dart.core::Object, dart.core::String>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
 Change the type of the map literal or the context in which it is used.
   Map<int, String> b = <Object, String> /*@error=InvalidCastLiteralMap*/ {};
                                                                          ^" in let final core::Map<core::Object, core::String> #t4 = <core::Object, core::String>{} in null;
-  core::Map<core::int, core::String> c = let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:24:71: Error: The map literal type 'dart.core::Map<dart.core::int, dart.core::Object>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+  core::Map<core::int, core::String> c = let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:24:71: Error: The map literal type 'dart.core::Map<dart.core::int, dart.core::Object>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
 Change the type of the map literal or the context in which it is used.
   Map<int, String> c = <int, Object> /*@error=InvalidCastLiteralMap*/ {};
                                                                       ^" in let final core::Map<core::int, core::Object> #t6 = <core::int, core::Object>{} in null;
-  (core::Object) → core::int d = let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:25:63: Error: The function expression type '(dart.core::int) \u8594 dart.core::int' isn't of expected type '(dart.core::Object) \u8594 dart.core::int'.
+  (core::Object) → core::int d = let<BottomType> _ = null in let final dynamic #t7 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:25:63: Error: The function expression type '(dart.core::int) \u8594 dart.core::int' isn't of expected type '(dart.core::Object) \u8594 dart.core::int'.
 Change the type of the function expression or the context in which it is used.
   int Function(Object) d = /*@error=InvalidCastFunctionExpr*/ (int i) => i;
                                                               ^" in let final (core::int) → core::int #t8 = (core::int i) → core::int => i in null;
   self::D e = self::C::fact() as{TypeError} self::D;
   self::D f = new self::D::•() as{TypeError} self::D;
-  self::D g = let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:28:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.
+  self::D g = let<BottomType> _ = null in let final dynamic #t9 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:28:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.
 Change the type of the object being constructed or the context in which it is used.
   D g = new /*@error=InvalidCastNewExpr*/ C.nonFact();
                                           ^" in let final self::C #t10 = new self::C::nonFact() in null;
-  self::D h = let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:29:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.
+  self::D h = let<BottomType> _ = null in let final dynamic #t11 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:29:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.
 Change the type of the object being constructed or the context in which it is used.
   D h = new /*@error=InvalidCastNewExpr*/ C.nonFact2();
                                           ^" in let final self::C #t12 = new self::C::nonFact2() in null;
-  (core::Object) → void i = let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:31:45: Error: The static method has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
+  (core::Object) → void i = let<BottomType> _ = null in let final dynamic #t13 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:31:45: Error: The static method has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
 Change the type of the method or the context in which it is used.
       C. /*@error=InvalidCastStaticMethod*/ staticFunction;
                                             ^" in let final (core::int) → void #t14 = self::C::staticFunction in null;
-  (core::Object) → void j = let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:33:50: Error: The top level function has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
+  (core::Object) → void j = let<BottomType> _ = null in let final dynamic #t15 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:33:50: Error: The top level function has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
 Change the type of the function or the context in which it is used.
       j = /*@error=InvalidCastTopLevelFunction*/ topLevelFunction;
                                                  ^" in let final (core::int) → void #t16 = self::topLevelFunction in null;
-  (core::Object) → void k = let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:34:65: Error: The local function has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
+  (core::Object) → void k = let<BottomType> _ = null in let final dynamic #t17 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:34:65: Error: The local function has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
 Change the type of the function or the context in which it is used.
   void Function(Object) k = /*@error=InvalidCastLocalFunction*/ localFunction;
                                                                 ^" in let final (core::int) → void #t18 = localFunction in null;
diff --git a/pkg/front_end/testcases/minimum_int.dart.direct.expect b/pkg/front_end/testcases/minimum_int.dart.direct.expect
index 20fea8a..4216458 100644
--- a/pkg/front_end/testcases/minimum_int.dart.direct.expect
+++ b/pkg/front_end/testcases/minimum_int.dart.direct.expect
@@ -3,5 +3,4 @@
 import "dart:core" as core;
 
 static method main() → dynamic
-  return core::print(-9223372036854775808);
-
+  return core::print(-9223372036854775808.unary-());
diff --git a/pkg/front_end/testcases/minimum_int.dart.direct.transformed.expect b/pkg/front_end/testcases/minimum_int.dart.direct.transformed.expect
index eb7af70..4216458 100644
--- a/pkg/front_end/testcases/minimum_int.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/minimum_int.dart.direct.transformed.expect
@@ -3,4 +3,4 @@
 import "dart:core" as core;
 
 static method main() → dynamic
-  return core::print(-9223372036854775808);
+  return core::print(-9223372036854775808.unary-());
diff --git a/pkg/front_end/testcases/minimum_int.dart.strong.expect b/pkg/front_end/testcases/minimum_int.dart.strong.expect
index 20fea8a..17fdfdc 100644
--- a/pkg/front_end/testcases/minimum_int.dart.strong.expect
+++ b/pkg/front_end/testcases/minimum_int.dart.strong.expect
@@ -3,5 +3,4 @@
 import "dart:core" as core;
 
 static method main() → dynamic
-  return core::print(-9223372036854775808);
-
+  return core::print(-9223372036854775808.{core::int::unary-}());
diff --git a/pkg/front_end/testcases/minimum_int.dart.strong.transformed.expect b/pkg/front_end/testcases/minimum_int.dart.strong.transformed.expect
index eb7af70..17fdfdc 100644
--- a/pkg/front_end/testcases/minimum_int.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/minimum_int.dart.strong.transformed.expect
@@ -3,4 +3,4 @@
 import "dart:core" as core;
 
 static method main() → dynamic
-  return core::print(-9223372036854775808);
+  return core::print(-9223372036854775808.{core::int::unary-}());
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart
new file mode 100644
index 0000000..de97201
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2018, 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 test checks that when both LHS and RHS in a mixin application have a
+// concrete implementation of a method and a noSuchMethod forwarder for it, the
+// concrete implementation stays.
+
+abstract class I {
+  foo();
+}
+
+class A {
+  foo() {}
+}
+
+class B implements I {
+  noSuchMethod(_) => null;
+}
+
+class C extends A with B {}
+
+main() {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.direct.expect b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.direct.expect
new file mode 100644
index 0000000..86da90d
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.direct.expect
@@ -0,0 +1,33 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  abstract method foo() → dynamic;
+}
+class A extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {}
+}
+class B extends core::Object implements self::I {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method noSuchMethod(dynamic _) → dynamic
+    return null;
+  no-such-method-forwarder method foo() → dynamic
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false)) as{TypeError} dynamic;
+}
+abstract class _C&A&B = self::A with self::B {
+}
+class C extends self::_C&A&B {
+  synthetic constructor •() → void
+    : super self::A::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.direct.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.direct.transformed.expect
new file mode 100644
index 0000000..45424c8
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.direct.transformed.expect
@@ -0,0 +1,38 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  abstract method foo() → dynamic;
+}
+class A extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {}
+}
+class B extends core::Object implements self::I {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method noSuchMethod(dynamic _) → dynamic
+    return null;
+  no-such-method-forwarder method foo() → dynamic
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false)) as{TypeError} dynamic;
+}
+abstract class _C&A&B extends self::A implements self::B {
+  synthetic constructor •() → void
+    : super self::A::•()
+    ;
+  method noSuchMethod(dynamic _) → dynamic
+    return null;
+}
+class C extends self::_C&A&B {
+  synthetic constructor •() → void
+    : super self::A::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.outline.expect
new file mode 100644
index 0000000..8252a0a
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.outline.expect
@@ -0,0 +1,31 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  synthetic constructor •() → void
+    ;
+  abstract method foo() → dynamic;
+}
+class A extends core::Object {
+  synthetic constructor •() → void
+    ;
+  method foo() → dynamic
+    ;
+}
+class B extends core::Object implements self::I {
+  synthetic constructor •() → void
+    ;
+  method noSuchMethod(dynamic _) → dynamic
+    ;
+  no-such-method-forwarder method foo() → dynamic
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false)) as{TypeError} dynamic;
+}
+abstract class _C&A&B = self::A with self::B {
+}
+class C extends self::_C&A&B {
+  synthetic constructor •() → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.expect
new file mode 100644
index 0000000..10faf1b
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.expect
@@ -0,0 +1,33 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  abstract method foo() → dynamic;
+}
+class A extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {}
+}
+class B extends core::Object implements self::I {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation _) → dynamic
+    return null;
+  no-such-method-forwarder method foo() → dynamic
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false)) as{TypeError} dynamic;
+}
+abstract class _C&A&B = self::A with self::B {
+}
+class C extends self::_C&A&B {
+  synthetic constructor •() → void
+    : super self::A::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.transformed.expect
new file mode 100644
index 0000000..15ead99
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.strong.transformed.expect
@@ -0,0 +1,38 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  abstract method foo() → dynamic;
+}
+class A extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {}
+}
+class B extends core::Object implements self::I {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation _) → dynamic
+    return null;
+  no-such-method-forwarder method foo() → dynamic
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false)) as{TypeError} dynamic;
+}
+abstract class _C&A&B extends self::A implements self::B {
+  synthetic constructor •() → void
+    : super self::A::•()
+    ;
+  method noSuchMethod(core::Invocation _) → dynamic
+    return null;
+}
+class C extends self::_C&A&B {
+  synthetic constructor •() → void
+    : super self::A::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart
similarity index 66%
rename from pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart
rename to pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart
index fcbc2e3..6a76ef8 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart
@@ -2,8 +2,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// This test checks that the noSuchMethod forwarder is not duplicated in classes
-// that mix in the classes that already have the forwarder.
+// This test checks that the noSuchMethod forwarder is not assumed to be mixed
+// in and is generated for classes that mix in a user-defined noSuchMethod and
+// have an abstract method.
 
 abstract class I {
   void foo();
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.direct.expect
similarity index 83%
copy from pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.transformed.expect
copy to pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.direct.expect
index bf046d8..65e96b6 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.direct.expect
@@ -17,18 +17,13 @@
   no-such-method-forwarder method foo() → void
     return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false));
 }
-abstract class _B&Object&A extends core::Object implements self::A {
-  synthetic constructor •() → void
-    : super core::Object::•()
-    ;
-  method noSuchMethod(core::Invocation i) → dynamic
-    return null;
-  no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false));
+abstract class _B&Object&A = core::Object with self::A {
 }
 class B extends self::_B&Object&A {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
+  no-such-method-forwarder method foo() → void
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.direct.transformed.expect
similarity index 99%
rename from pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.transformed.expect
rename to pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.direct.transformed.expect
index bf046d8..4211c4c 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.direct.transformed.expect
@@ -23,12 +23,12 @@
     ;
   method noSuchMethod(core::Invocation i) → dynamic
     return null;
-  no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false));
 }
 class B extends self::_B&Object&A {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
+  no-such-method-forwarder method foo() → void
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.outline.expect
similarity index 74%
rename from pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.outline.expect
rename to pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.outline.expect
index 63d5358..e39977a 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.outline.expect
@@ -20,6 +20,8 @@
 class B extends self::_B&Object&A {
   synthetic constructor •() → void
     ;
+  no-such-method-forwarder method foo() → void
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false));
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.strong.expect
similarity index 83%
copy from pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.transformed.expect
copy to pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.strong.expect
index bf046d8..65e96b6 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.strong.expect
@@ -17,18 +17,13 @@
   no-such-method-forwarder method foo() → void
     return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false));
 }
-abstract class _B&Object&A extends core::Object implements self::A {
-  synthetic constructor •() → void
-    : super core::Object::•()
-    ;
-  method noSuchMethod(core::Invocation i) → dynamic
-    return null;
-  no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false));
+abstract class _B&Object&A = core::Object with self::A {
 }
 class B extends self::_B&Object&A {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
+  no-such-method-forwarder method foo() → void
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.strong.transformed.expect
similarity index 99%
copy from pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.transformed.expect
copy to pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.strong.transformed.expect
index bf046d8..4211c4c 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.strong.transformed.expect
@@ -23,12 +23,12 @@
     ;
   method noSuchMethod(core::Invocation i) → dynamic
     return null;
-  no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false));
 }
 class B extends self::_B&Object&A {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
+  no-such-method-forwarder method foo() → void
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.strong.expect
deleted file mode 100644
index 0283bae..0000000
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.strong.expect
+++ /dev/null
@@ -1,27 +0,0 @@
-library;
-import self as self;
-import "dart:core" as core;
-
-abstract class I extends core::Object {
-  synthetic constructor •() → void
-    : super core::Object::•()
-    ;
-  abstract method foo() → void;
-}
-class A extends core::Object implements self::I {
-  synthetic constructor •() → void
-    : super core::Object::•()
-    ;
-  method noSuchMethod(core::Invocation i) → dynamic
-    return null;
-  no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false));
-}
-abstract class _B&Object&A = core::Object with self::A {
-}
-class B extends self::_B&Object&A {
-  synthetic constructor •() → void
-    : super core::Object::•()
-    ;
-}
-static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.strong.transformed.expect
deleted file mode 100644
index bf046d8..0000000
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.strong.transformed.expect
+++ /dev/null
@@ -1,34 +0,0 @@
-library;
-import self as self;
-import "dart:core" as core;
-
-abstract class I extends core::Object {
-  synthetic constructor •() → void
-    : super core::Object::•()
-    ;
-  abstract method foo() → void;
-}
-class A extends core::Object implements self::I {
-  synthetic constructor •() → void
-    : super core::Object::•()
-    ;
-  method noSuchMethod(core::Invocation i) → dynamic
-    return null;
-  no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false));
-}
-abstract class _B&Object&A extends core::Object implements self::A {
-  synthetic constructor •() → void
-    : super core::Object::•()
-    ;
-  method noSuchMethod(core::Invocation i) → dynamic
-    return null;
-  no-such-method-forwarder method foo() → void
-    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false));
-}
-class B extends self::_B&Object&A {
-  synthetic constructor •() → void
-    : super core::Object::•()
-    ;
-}
-static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart
new file mode 100644
index 0000000..bb14b72
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2018, 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 test checks that the noSuchMethod forwarders aren't generated for the
+// abstract classes that have user-defined noSuchMethod, but rather in their
+// concrete descendants.
+
+abstract class A {
+  noSuchMethod(i) => null;
+
+  // The forwarder for [foo] shouldn't be generated here.
+  void foo();
+}
+
+class B extends A {
+  // The forwarder for [foo] should be generated here.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.direct.expect
similarity index 60%
copy from pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.expect
copy to pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.direct.expect
index 0283bae..0844ef1 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.direct.expect
@@ -2,26 +2,19 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class I extends core::Object {
+abstract class A extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
+  method noSuchMethod(dynamic i) → dynamic
+    return null;
   abstract method foo() → void;
 }
-class A extends core::Object implements self::I {
+class B extends self::A {
   synthetic constructor •() → void
-    : super core::Object::•()
+    : super self::A::•()
     ;
-  method noSuchMethod(core::Invocation i) → dynamic
-    return null;
   no-such-method-forwarder method foo() → void
     return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false));
 }
-abstract class _B&Object&A = core::Object with self::A {
-}
-class B extends self::_B&Object&A {
-  synthetic constructor •() → void
-    : super core::Object::•()
-    ;
-}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.direct.transformed.expect
similarity index 60%
copy from pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.expect
copy to pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.direct.transformed.expect
index 0283bae..0844ef1 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.direct.transformed.expect
@@ -2,26 +2,19 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class I extends core::Object {
+abstract class A extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
+  method noSuchMethod(dynamic i) → dynamic
+    return null;
   abstract method foo() → void;
 }
-class A extends core::Object implements self::I {
+class B extends self::A {
   synthetic constructor •() → void
-    : super core::Object::•()
+    : super self::A::•()
     ;
-  method noSuchMethod(core::Invocation i) → dynamic
-    return null;
   no-such-method-forwarder method foo() → void
     return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false));
 }
-abstract class _B&Object&A = core::Object with self::A {
-}
-class B extends self::_B&Object&A {
-  synthetic constructor •() → void
-    : super core::Object::•()
-    ;
-}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.outline.expect
similarity index 63%
copy from pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.outline.expect
copy to pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.outline.expect
index 63d5358..9d07b09 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.outline.expect
@@ -2,24 +2,18 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class I extends core::Object {
+abstract class A extends core::Object {
   synthetic constructor •() → void
     ;
+  method noSuchMethod(dynamic i) → dynamic
+    ;
   abstract method foo() → void;
 }
-class A extends core::Object implements self::I {
+class B extends self::A {
   synthetic constructor •() → void
     ;
-  method noSuchMethod(core::Invocation i) → dynamic
-    ;
   no-such-method-forwarder method foo() → void
     return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false));
 }
-abstract class _B&Object&A = core::Object with self::A {
-}
-class B extends self::_B&Object&A {
-  synthetic constructor •() → void
-    ;
-}
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.strong.expect
similarity index 66%
copy from pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.expect
copy to pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.strong.expect
index 0283bae..06e4afc 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.strong.expect
@@ -2,26 +2,19 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class I extends core::Object {
-  synthetic constructor •() → void
-    : super core::Object::•()
-    ;
-  abstract method foo() → void;
-}
-class A extends core::Object implements self::I {
+abstract class A extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method noSuchMethod(core::Invocation i) → dynamic
     return null;
+  abstract method foo() → void;
+}
+class B extends self::A {
+  synthetic constructor •() → void
+    : super self::A::•()
+    ;
   no-such-method-forwarder method foo() → void
     return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false));
 }
-abstract class _B&Object&A = core::Object with self::A {
-}
-class B extends self::_B&Object&A {
-  synthetic constructor •() → void
-    : super core::Object::•()
-    ;
-}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.strong.transformed.expect
similarity index 66%
copy from pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.expect
copy to pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.strong.transformed.expect
index 0283bae..06e4afc 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.strong.transformed.expect
@@ -2,26 +2,19 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class I extends core::Object {
-  synthetic constructor •() → void
-    : super core::Object::•()
-    ;
-  abstract method foo() → void;
-}
-class A extends core::Object implements self::I {
+abstract class A extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method noSuchMethod(core::Invocation i) → dynamic
     return null;
+  abstract method foo() → void;
+}
+class B extends self::A {
+  synthetic constructor •() → void
+    : super self::A::•()
+    ;
   no-such-method-forwarder method foo() → void
     return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false));
 }
-abstract class _B&Object&A = core::Object with self::A {
-}
-class B extends self::_B&Object&A {
-  synthetic constructor •() → void
-    : super core::Object::•()
-    ;
-}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart
new file mode 100644
index 0000000..3ea89bf
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2018, 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 test checks that the noSuchMethod forwarders aren't generated for the
+// abstract classes that have user-defined noSuchMethod, but rather in their
+// top-most concrete descendants.  The immediate abstract children should not
+// receive the forwarders.
+
+abstract class A {
+  noSuchMethod(i) => null;
+
+  // The forwarder for [foo] shouldn't be generated here.
+  void foo();
+}
+
+abstract class B extends A {
+  // [B] shouldn't receive a forwarder.
+}
+
+class C extends B {
+  // The forwarder for [foo] should be generated here.
+}
+
+class D extends C {
+  // [D] shouldn't receiver a forwarder.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.direct.expect
similarity index 66%
copy from pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.expect
copy to pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.direct.expect
index 0283bae..8e3a340 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.direct.expect
@@ -2,26 +2,29 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class I extends core::Object {
+abstract class A extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
+  method noSuchMethod(dynamic i) → dynamic
+    return null;
   abstract method foo() → void;
 }
-class A extends core::Object implements self::I {
+abstract class B extends self::A {
   synthetic constructor •() → void
-    : super core::Object::•()
+    : super self::A::•()
     ;
-  method noSuchMethod(core::Invocation i) → dynamic
-    return null;
+}
+class C extends self::B {
+  synthetic constructor •() → void
+    : super self::B::•()
+    ;
   no-such-method-forwarder method foo() → void
     return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false));
 }
-abstract class _B&Object&A = core::Object with self::A {
-}
-class B extends self::_B&Object&A {
+class D extends self::C {
   synthetic constructor •() → void
-    : super core::Object::•()
+    : super self::C::•()
     ;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.direct.transformed.expect
similarity index 66%
copy from pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.expect
copy to pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.direct.transformed.expect
index 0283bae..8e3a340 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.direct.transformed.expect
@@ -2,26 +2,29 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class I extends core::Object {
+abstract class A extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
+  method noSuchMethod(dynamic i) → dynamic
+    return null;
   abstract method foo() → void;
 }
-class A extends core::Object implements self::I {
+abstract class B extends self::A {
   synthetic constructor •() → void
-    : super core::Object::•()
+    : super self::A::•()
     ;
-  method noSuchMethod(core::Invocation i) → dynamic
-    return null;
+}
+class C extends self::B {
+  synthetic constructor •() → void
+    : super self::B::•()
+    ;
   no-such-method-forwarder method foo() → void
     return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false));
 }
-abstract class _B&Object&A = core::Object with self::A {
-}
-class B extends self::_B&Object&A {
+class D extends self::C {
   synthetic constructor •() → void
-    : super core::Object::•()
+    : super self::C::•()
     ;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.outline.expect
similarity index 69%
copy from pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.outline.expect
copy to pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.outline.expect
index 63d5358..7be5d2c 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.outline.expect
@@ -2,22 +2,24 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class I extends core::Object {
+abstract class A extends core::Object {
   synthetic constructor •() → void
     ;
+  method noSuchMethod(dynamic i) → dynamic
+    ;
   abstract method foo() → void;
 }
-class A extends core::Object implements self::I {
+abstract class B extends self::A {
   synthetic constructor •() → void
     ;
-  method noSuchMethod(core::Invocation i) → dynamic
+}
+class C extends self::B {
+  synthetic constructor •() → void
     ;
   no-such-method-forwarder method foo() → void
     return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false));
 }
-abstract class _B&Object&A = core::Object with self::A {
-}
-class B extends self::_B&Object&A {
+class D extends self::C {
   synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.strong.expect
similarity index 71%
rename from pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.expect
rename to pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.strong.expect
index 0283bae..8196a67 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.strong.expect
@@ -2,26 +2,29 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class I extends core::Object {
-  synthetic constructor •() → void
-    : super core::Object::•()
-    ;
-  abstract method foo() → void;
-}
-class A extends core::Object implements self::I {
+abstract class A extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method noSuchMethod(core::Invocation i) → dynamic
     return null;
+  abstract method foo() → void;
+}
+abstract class B extends self::A {
+  synthetic constructor •() → void
+    : super self::A::•()
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → void
+    : super self::B::•()
+    ;
   no-such-method-forwarder method foo() → void
     return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false));
 }
-abstract class _B&Object&A = core::Object with self::A {
-}
-class B extends self::_B&Object&A {
+class D extends self::C {
   synthetic constructor •() → void
-    : super core::Object::•()
+    : super self::C::•()
     ;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.strong.transformed.expect
similarity index 71%
copy from pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.expect
copy to pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.strong.transformed.expect
index 0283bae..8196a67 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/no_dup_from_mixin.dart.direct.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.strong.transformed.expect
@@ -2,26 +2,29 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class I extends core::Object {
-  synthetic constructor •() → void
-    : super core::Object::•()
-    ;
-  abstract method foo() → void;
-}
-class A extends core::Object implements self::I {
+abstract class A extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   method noSuchMethod(core::Invocation i) → dynamic
     return null;
+  abstract method foo() → void;
+}
+abstract class B extends self::A {
+  synthetic constructor •() → void
+    : super self::A::•()
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → void
+    : super self::B::•()
+    ;
   no-such-method-forwarder method foo() → void
     return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withoutType("foo", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false));
 }
-abstract class _B&Object&A = core::Object with self::A {
-}
-class B extends self::_B&Object&A {
+class D extends self::C {
   synthetic constructor •() → void
-    : super core::Object::•()
+    : super self::C::•()
     ;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.expect b/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.expect
index 6b348e6..eb883bc 100644
--- a/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.expect
+++ b/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.expect
@@ -5,7 +5,7 @@
 class Foo<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl field self::Foo::T x;
   constructor from(core::String _init) → void
-    : this self::Foo::_internal(x: let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/redirecting_initializer_arguments_test.dart:12:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type '#lib1::Foo::T'.
+    : this self::Foo::_internal(x: let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/redirecting_initializer_arguments_test.dart:12:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type '#lib1::Foo::T'.
 Try changing the type of the left hand side, or casting the right hand side to '#lib1::Foo::T'.
   Foo.from(String _init) : this._internal(x: _init);
                                              ^" in let final dynamic #t2 = _init in null)
diff --git a/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.transformed.expect b/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.transformed.expect
index 6b348e6..eb883bc 100644
--- a/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/redirecting_initializer_arguments_test.dart.strong.transformed.expect
@@ -5,7 +5,7 @@
 class Foo<T extends core::Object = dynamic> extends core::Object {
   generic-covariant-impl field self::Foo::T x;
   constructor from(core::String _init) → void
-    : this self::Foo::_internal(x: let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/redirecting_initializer_arguments_test.dart:12:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type '#lib1::Foo::T'.
+    : this self::Foo::_internal(x: let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/redirecting_initializer_arguments_test.dart:12:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type '#lib1::Foo::T'.
 Try changing the type of the left hand side, or casting the right hand side to '#lib1::Foo::T'.
   Foo.from(String _init) : this._internal(x: _init);
                                              ^" in let final dynamic #t2 = _init in null)
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
index 8427437..3300422 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
@@ -8,7 +8,7 @@
     ;
   method f<generic-covariant-impl U extends self::C::T = self::C::T>(self::C::f::U x) → void {}
   method g1<generic-covariant-impl U extends self::C::T = self::C::T>() → void {
-    this.{self::C::f}<self::C::g1::U>(let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::C::g1::U'.
+    this.{self::C::f}<self::C::g1::U>(let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::C::g1::U'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::C::g1::U'.
     this.f<U>(1.5);
               ^" in let final dynamic #t2 = 1.5 in null);
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.transformed.expect
index b595fdf..1de3ac1 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.transformed.expect
@@ -8,7 +8,7 @@
     ;
   method f<generic-covariant-impl U extends self::C::T = self::C::T>(self::C::f::U x) → void {}
   method g1<generic-covariant-impl U extends self::C::T = self::C::T>() → void {
-    this.{self::C::f}<self::C::g1::U>(let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::C::g1::U'.
+    this.{self::C::f}<self::C::g1::U>(let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::C::g1::U'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::C::g1::U'.
     this.f<U>(1.5);
               ^" in let final core::double #t2 = 1.5 in null);
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect
index 1447ddb..974e021 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect
@@ -41,14 +41,14 @@
   return 2;
 static method main() → void {
   self::D d = new self::D::•(new self::C::•<core::num>(self::numToInt));
-  let final self::D #t1 = d in #t1.{self::D::value} = let final dynamic #t2 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:49:41: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.
+  let final self::D #t1 = d in #t1.{self::D::value} = let dynamic _ = null in let final dynamic #t2 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:49:41: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::int'.
   d.value /*@checkReturn=(num) -> num*/ += 1;
                                         ^" in let final dynamic #t3 = #t1.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num) → core::num in null;
   self::expect(d.{self::D::setValue}(0), 1);
   d = new self::D::•(new self::C::•<core::num>(self::numToNum));
   self::expectTypeError(() → core::Null {
-    let final self::D #t4 = d in #t4.{self::D::value} = let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:53:43: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.
+    let final self::D #t4 = d in #t4.{self::D::value} = let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:53:43: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::int'.
     d.value /*@checkReturn=(num) -> num*/ += 1;
                                           ^" in let final dynamic #t6 = #t4.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num) → core::num in null;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.transformed.expect
index 8378a4c..a09c774 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.transformed.expect
@@ -41,14 +41,14 @@
   return 2;
 static method main() → void {
   self::D d = new self::D::•(new self::C::•<core::num>(self::numToInt));
-  let final self::D #t1 = d in #t1.{self::D::value} = let final dynamic #t2 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:49:41: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.
+  let final self::D #t1 = d in #t1.{self::D::value} = let<BottomType> _ = null in let final dynamic #t2 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:49:41: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::int'.
   d.value /*@checkReturn=(num) -> num*/ += 1;
                                         ^" in let final (core::num) → core::num #t3 = #t1.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num) → core::num in null;
   self::expect(d.{self::D::setValue}(0), 1);
   d = new self::D::•(new self::C::•<core::num>(self::numToNum));
   self::expectTypeError(() → core::Null {
-    let final self::D #t4 = d in #t4.{self::D::value} = let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:53:43: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.
+    let final self::D #t4 = d in #t4.{self::D::value} = let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:53:43: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.
 Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::int'.
     d.value /*@checkReturn=(num) -> num*/ += 1;
                                           ^" in let final (core::num) → core::num #t6 = #t4.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num) → core::num in null;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
index 8e6a045..6bc4680 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
@@ -19,19 +19,19 @@
   set x(self::B<(self::C::T) → void> value) → void {}
 }
 static method test(self::C<core::num> c) → void {
-  let final self::C<core::num> #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x} as{TypeError} self::B<(core::num) → void>).{self::B::+}(let final dynamic #t2 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:49: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
+  let final self::C<core::num> #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x} as{TypeError} self::B<(core::num) → void>).{self::B::+}(let dynamic _ = null in let final dynamic #t2 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:49: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.
   c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
                                                 ^" in let final dynamic #t3 = new self::B::•<core::num>() in null);
-  self::B<(core::num) → void> y = let final self::C<core::num> #t4 = c in #t4.{self::C::x} = (#t4.{self::C::x} as{TypeError} self::B<(core::num) → void>).{self::B::+}(let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:57: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
+  self::B<(core::num) → void> y = let final self::C<core::num> #t4 = c in #t4.{self::C::x} = (#t4.{self::C::x} as{TypeError} self::B<(core::num) → void>).{self::B::+}(let dynamic _ = null in let final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:57: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.
   var y = c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
                                                         ^" in let final dynamic #t6 = new self::B::•<core::num>() in null);
-  let final self::C<core::num> #t7 = c in (#t7.{self::C::x} as{TypeError} self::B<(core::num) → void>).{core::Object::==}(null) ?{self::B<core::Object>} #t7.{self::C::x} = let final dynamic #t8 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:50: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
+  let final self::C<core::num> #t7 = c in (#t7.{self::C::x} as{TypeError} self::B<(core::num) → void>).{core::Object::==}(null) ?{self::B<core::Object>} #t7.{self::C::x} = let dynamic _ = null in let final dynamic #t8 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:50: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.
   c. /*@checkReturn=B<(num) -> void>*/ x ??= new B<num>();
                                                  ^" in let final dynamic #t9 = new self::B::•<core::num>() in null : null;
-  self::B<core::Object> z = let final self::C<core::num> #t10 = c in let final dynamic #t11 = #t10.{self::C::x} as{TypeError} self::B<(core::num) → void> in #t11.{core::Object::==}(null) ?{self::B<core::Object>} #t10.{self::C::x} = let final dynamic #t12 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:58: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
+  self::B<core::Object> z = let final self::C<core::num> #t10 = c in let final dynamic #t11 = #t10.{self::C::x} as{TypeError} self::B<(core::num) → void> in #t11.{core::Object::==}(null) ?{self::B<core::Object>} #t10.{self::C::x} = let dynamic _ = null in let final dynamic #t12 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:58: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.
   var z = c. /*@checkReturn=B<(num) -> void>*/ x ??= new B<num>();
                                                          ^" in let final dynamic #t13 = new self::B::•<core::num>() in null : #t11;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.transformed.expect
index 3180850..0bad701 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.transformed.expect
@@ -19,19 +19,19 @@
   set x(self::B<(self::C::T) → void> value) → void {}
 }
 static method test(self::C<core::num> c) → void {
-  let final self::C<core::num> #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x} as{TypeError} self::B<(core::num) → void>).{self::B::+}(let final dynamic #t2 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:49: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
+  let final self::C<core::num> #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x} as{TypeError} self::B<(core::num) → void>).{self::B::+}(let<BottomType> _ = null in let final dynamic #t2 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:49: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.
   c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
                                                 ^" in let final self::B<core::num> #t3 = new self::B::•<core::num>() in null);
-  self::B<(core::num) → void> y = let final self::C<core::num> #t4 = c in #t4.{self::C::x} = (#t4.{self::C::x} as{TypeError} self::B<(core::num) → void>).{self::B::+}(let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:57: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
+  self::B<(core::num) → void> y = let final self::C<core::num> #t4 = c in #t4.{self::C::x} = (#t4.{self::C::x} as{TypeError} self::B<(core::num) → void>).{self::B::+}(let<BottomType> _ = null in let final dynamic #t5 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:57: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.
   var y = c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
                                                         ^" in let final self::B<core::num> #t6 = new self::B::•<core::num>() in null);
-  let final self::C<core::num> #t7 = c in (#t7.{self::C::x} as{TypeError} self::B<(core::num) → void>).{core::Object::==}(null) ?{self::B<core::Object>} #t7.{self::C::x} = let final dynamic #t8 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:50: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
+  let final self::C<core::num> #t7 = c in (#t7.{self::C::x} as{TypeError} self::B<(core::num) → void>).{core::Object::==}(null) ?{self::B<core::Object>} #t7.{self::C::x} = let<BottomType> _ = null in let final dynamic #t8 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:50: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.
   c. /*@checkReturn=B<(num) -> void>*/ x ??= new B<num>();
                                                  ^" in let final self::B<core::num> #t9 = new self::B::•<core::num>() in null : null;
-  self::B<core::Object> z = let final self::C<core::num> #t10 = c in let final self::B<(core::num) → void> #t11 = #t10.{self::C::x} as{TypeError} self::B<(core::num) → void> in #t11.{core::Object::==}(null) ?{self::B<core::Object>} #t10.{self::C::x} = let final dynamic #t12 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:58: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
+  self::B<core::Object> z = let final self::C<core::num> #t10 = c in let final self::B<(core::num) → void> #t11 = #t10.{self::C::x} as{TypeError} self::B<(core::num) → void> in #t11.{core::Object::==}(null) ?{self::B<core::Object>} #t10.{self::C::x} = let<BottomType> _ = null in let final dynamic #t12 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:58: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
 Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.
   var z = c. /*@checkReturn=B<(num) -> void>*/ x ??= new B<num>();
                                                          ^" in let final self::B<core::num> #t13 = new self::B::•<core::num>() in null : #t11;
diff --git a/pkg/front_end/testcases/super_nsm.dart b/pkg/front_end/testcases/super_nsm.dart
new file mode 100644
index 0000000..d4cfc6d
--- /dev/null
+++ b/pkg/front_end/testcases/super_nsm.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2018, 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 class I {
+  interfaceMethod();
+}
+
+class C implements I {
+  noSuchMethod(_) => "C";
+}
+
+class D extends C {
+  noSuchMethod(_) => "D";
+  dMethod() => super.interfaceMethod();
+}
+
+main() {
+  var result = new D().dMethod();
+  if (result != "D") throw "Expected 'D' but got: '$result'";
+}
diff --git a/pkg/front_end/testcases/super_nsm.dart.direct.expect b/pkg/front_end/testcases/super_nsm.dart.direct.expect
new file mode 100644
index 0000000..6409395
--- /dev/null
+++ b/pkg/front_end/testcases/super_nsm.dart.direct.expect
@@ -0,0 +1,33 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  abstract method interfaceMethod() → dynamic;
+}
+class C extends core::Object implements self::I {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method noSuchMethod(dynamic _) → dynamic
+    return "C";
+  no-such-method-forwarder method interfaceMethod() → dynamic
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withoutType("interfaceMethod", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false)) as{TypeError} dynamic;
+}
+class D extends self::C {
+  synthetic constructor •() → void
+    : super self::C::•()
+    ;
+  method noSuchMethod(dynamic _) → dynamic
+    return "D";
+  method dMethod() → dynamic
+    return super.{self::C::interfaceMethod}();
+}
+static method main() → dynamic {
+  dynamic result = new self::D::•().dMethod();
+  if(!result.==("D"))
+    throw "Expected 'D' but got: '${result}'";
+}
diff --git a/pkg/front_end/testcases/super_nsm.dart.direct.transformed.expect b/pkg/front_end/testcases/super_nsm.dart.direct.transformed.expect
new file mode 100644
index 0000000..6409395
--- /dev/null
+++ b/pkg/front_end/testcases/super_nsm.dart.direct.transformed.expect
@@ -0,0 +1,33 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  abstract method interfaceMethod() → dynamic;
+}
+class C extends core::Object implements self::I {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method noSuchMethod(dynamic _) → dynamic
+    return "C";
+  no-such-method-forwarder method interfaceMethod() → dynamic
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withoutType("interfaceMethod", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false)) as{TypeError} dynamic;
+}
+class D extends self::C {
+  synthetic constructor •() → void
+    : super self::C::•()
+    ;
+  method noSuchMethod(dynamic _) → dynamic
+    return "D";
+  method dMethod() → dynamic
+    return super.{self::C::interfaceMethod}();
+}
+static method main() → dynamic {
+  dynamic result = new self::D::•().dMethod();
+  if(!result.==("D"))
+    throw "Expected 'D' but got: '${result}'";
+}
diff --git a/pkg/front_end/testcases/super_nsm.dart.outline.expect b/pkg/front_end/testcases/super_nsm.dart.outline.expect
new file mode 100644
index 0000000..ac7f6b6
--- /dev/null
+++ b/pkg/front_end/testcases/super_nsm.dart.outline.expect
@@ -0,0 +1,27 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  synthetic constructor •() → void
+    ;
+  abstract method interfaceMethod() → dynamic;
+}
+class C extends core::Object implements self::I {
+  synthetic constructor •() → void
+    ;
+  method noSuchMethod(dynamic _) → dynamic
+    ;
+  no-such-method-forwarder method interfaceMethod() → dynamic
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withoutType("interfaceMethod", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false)) as{TypeError} dynamic;
+}
+class D extends self::C {
+  synthetic constructor •() → void
+    ;
+  method noSuchMethod(dynamic _) → dynamic
+    ;
+  method dMethod() → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/super_nsm.dart.strong.expect b/pkg/front_end/testcases/super_nsm.dart.strong.expect
new file mode 100644
index 0000000..5cf1472
--- /dev/null
+++ b/pkg/front_end/testcases/super_nsm.dart.strong.expect
@@ -0,0 +1,33 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  abstract method interfaceMethod() → dynamic;
+}
+class C extends core::Object implements self::I {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation _) → dynamic
+    return "C";
+  no-such-method-forwarder method interfaceMethod() → dynamic
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withoutType("interfaceMethod", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false)) as{TypeError} dynamic;
+}
+class D extends self::C {
+  synthetic constructor •() → void
+    : super self::C::•()
+    ;
+  method noSuchMethod(core::Invocation _) → dynamic
+    return "D";
+  method dMethod() → dynamic
+    return super.{self::C::interfaceMethod}();
+}
+static method main() → dynamic {
+  dynamic result = new self::D::•().{self::D::dMethod}();
+  if(!result.{core::Object::==}("D"))
+    throw "Expected 'D' but got: '${result}'";
+}
diff --git a/pkg/front_end/testcases/super_nsm.dart.strong.transformed.expect b/pkg/front_end/testcases/super_nsm.dart.strong.transformed.expect
new file mode 100644
index 0000000..5cf1472
--- /dev/null
+++ b/pkg/front_end/testcases/super_nsm.dart.strong.transformed.expect
@@ -0,0 +1,33 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  abstract method interfaceMethod() → dynamic;
+}
+class C extends core::Object implements self::I {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation _) → dynamic
+    return "C";
+  no-such-method-forwarder method interfaceMethod() → dynamic
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withoutType("interfaceMethod", const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false)) as{TypeError} dynamic;
+}
+class D extends self::C {
+  synthetic constructor •() → void
+    : super self::C::•()
+    ;
+  method noSuchMethod(core::Invocation _) → dynamic
+    return "D";
+  method dMethod() → dynamic
+    return super.{self::C::interfaceMethod}();
+}
+static method main() → dynamic {
+  dynamic result = new self::D::•().{self::D::dMethod}();
+  if(!result.{core::Object::==}("D"))
+    throw "Expected 'D' but got: '${result}'";
+}
diff --git a/pkg/front_end/testcases/tabs.dart b/pkg/front_end/testcases/tabs.dart
new file mode 100644
index 0000000..28a958f
--- /dev/null
+++ b/pkg/front_end/testcases/tabs.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test that error messages are indented correctly
+// in the presence of tabs.
+
+test() {
+	print(one);
+		print(two);
+		  print(three);
+	   	print(four);
+	   	  print(five);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/tabs.dart.direct.expect b/pkg/front_end/testcases/tabs.dart.direct.expect
new file mode 100644
index 0000000..b542e17
--- /dev/null
+++ b/pkg/front_end/testcases/tabs.dart.direct.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method test() → dynamic {
+  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#one, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#two, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#three, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#four, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#five, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/tabs.dart.direct.transformed.expect b/pkg/front_end/testcases/tabs.dart.direct.transformed.expect
new file mode 100644
index 0000000..b542e17
--- /dev/null
+++ b/pkg/front_end/testcases/tabs.dart.direct.transformed.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method test() → dynamic {
+  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#one, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#two, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#three, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#four, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#five, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/tabs.dart.outline.expect b/pkg/front_end/testcases/tabs.dart.outline.expect
new file mode 100644
index 0000000..a29647d
--- /dev/null
+++ b/pkg/front_end/testcases/tabs.dart.outline.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/tabs.dart.strong.expect b/pkg/front_end/testcases/tabs.dart.strong.expect
new file mode 100644
index 0000000..83b1b86
--- /dev/null
+++ b/pkg/front_end/testcases/tabs.dart.strong.expect
@@ -0,0 +1,23 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/tabs.dart:9:8: Error: Getter not found: 'one'.
+\tprint(one);
+\t      ^^^", "pkg/front_end/testcases/tabs.dart:10:9: Error: Getter not found: 'two'.
+\t\tprint(two);
+\t\t      ^^^", "pkg/front_end/testcases/tabs.dart:11:11: Error: Getter not found: 'three'.
+\t\t  print(three);
+\t\t        ^^^^^", "pkg/front_end/testcases/tabs.dart:12:12: Error: Getter not found: 'four'.
+\t   \tprint(four);
+\t   \t      ^^^^", "pkg/front_end/testcases/tabs.dart:13:14: Error: Getter not found: 'five'.
+\t   \t  print(five);
+\t   \t        ^^^^"]/* from null */;
+static method test() → dynamic {
+  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#one, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#two, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#three, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#four, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#five, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/tabs.dart.strong.transformed.expect b/pkg/front_end/testcases/tabs.dart.strong.transformed.expect
new file mode 100644
index 0000000..83b1b86
--- /dev/null
+++ b/pkg/front_end/testcases/tabs.dart.strong.transformed.expect
@@ -0,0 +1,23 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/tabs.dart:9:8: Error: Getter not found: 'one'.
+\tprint(one);
+\t      ^^^", "pkg/front_end/testcases/tabs.dart:10:9: Error: Getter not found: 'two'.
+\t\tprint(two);
+\t\t      ^^^", "pkg/front_end/testcases/tabs.dart:11:11: Error: Getter not found: 'three'.
+\t\t  print(three);
+\t\t        ^^^^^", "pkg/front_end/testcases/tabs.dart:12:12: Error: Getter not found: 'four'.
+\t   \tprint(four);
+\t   \t      ^^^^", "pkg/front_end/testcases/tabs.dart:13:14: Error: Getter not found: 'five'.
+\t   \t  print(five);
+\t   \t        ^^^^"]/* from null */;
+static method test() → dynamic {
+  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#one, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#two, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#three, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#four, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+  core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#five, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect b/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
index 52774b2..fe1360b 100644
--- a/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
+++ b/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   method method() → invalid-type
-    return let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:8:24: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'invalid-type'.
+    return let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:8:24: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'invalid-type'.
 Try changing the type of the left hand side, or casting the right hand side to 'invalid-type'.
   T.String method() => \"Hello, World!\";
                        ^" in let final dynamic #t2 = "Hello, World!" in null;
@@ -16,7 +16,7 @@
   T.String method() => \"Hello, World!\";
   ^"]/* from null */;
 static method main() → dynamic {
-  core::String s = let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:12:24: Error: A value of type 'invalid-type' can't be assigned to a variable of type 'dart.core::String'.
+  core::String s = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:12:24: Error: A value of type 'invalid-type' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   T.String s = new C().method();
                        ^" in let final dynamic #t4 = new self::C::•<dynamic>().{self::C::method}() in null;
diff --git a/pkg/front_end/testcases/type_variable_prefix.dart.strong.transformed.expect b/pkg/front_end/testcases/type_variable_prefix.dart.strong.transformed.expect
index c26c47a..198bffd 100644
--- a/pkg/front_end/testcases/type_variable_prefix.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/type_variable_prefix.dart.strong.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   method method() → invalid-type
-    return let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:8:24: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'invalid-type'.
+    return let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:8:24: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'invalid-type'.
 Try changing the type of the left hand side, or casting the right hand side to 'invalid-type'.
   T.String method() => \"Hello, World!\";
                        ^" in let final core::String #t2 = "Hello, World!" in null;
@@ -16,7 +16,7 @@
   T.String method() => \"Hello, World!\";
   ^"]/* from null */;
 static method main() → dynamic {
-  core::String s = let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:12:24: Error: A value of type 'invalid-type' can't be assigned to a variable of type 'dart.core::String'.
+  core::String s = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:12:24: Error: A value of type 'invalid-type' can't be assigned to a variable of type 'dart.core::String'.
 Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
   T.String s = new C().method();
                        ^" in let final invalid-type #t4 = new self::C::•<dynamic>().{self::C::method}() in null;
diff --git a/pkg/front_end/testing.json b/pkg/front_end/testing.json
index 6c3add6..4ebfbb2 100644
--- a/pkg/front_end/testing.json
+++ b/pkg/front_end/testing.json
@@ -80,6 +80,24 @@
       "exclude": [
         "/testcases/.*_part[0-9]*\\.dart$",
         "/testcases/.*_lib[0-9]*\\.dart$",
+	"/testcases/bug33099",
+	"/testcases/covariant_generic",
+	"/testcases/inference/bug32291",
+	"/testcases/inference/downward_inference_miscellaneous",
+	"/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound",
+	"/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method",
+	"/testcases/inference/generic_methods_nested_generic_instantiation",
+	"/testcases/inference/infer_list_literal_nested_in_map_literal",
+	"/testcases/inference/infer_return_of_statement_lambda",
+	"/testcases/inference/override_equals",
+	"/testcases/inference/unsafe_block_closure_inference_in_map_typed",
+	"/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param",
+	"/testcases/rasta/issue_000002",
+	"/testcases/regress/issue_31766",
+	"/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast",
+	"/testcases/runtime_checks_new/mixin_forwarding_stub_field",
+	"/testcases/runtime_checks_new/mixin_forwarding_stub_setter",
+	"/testcases/runtime_checks_new/stub_checked_via_target",
         "/testcases/dartino/",
         "/testcases/shaker/",
         "/testcases/expression/"
diff --git a/pkg/front_end/tool/_fasta/command_line.dart b/pkg/front_end/tool/_fasta/command_line.dart
index 8408682..258e081 100644
--- a/pkg/front_end/tool/_fasta/command_line.dart
+++ b/pkg/front_end/tool/_fasta/command_line.dart
@@ -313,9 +313,9 @@
   }
 
   if (programName == "compile_platform") {
-    if (arguments.length != 4) {
+    if (arguments.length != 5) {
       return throw new CommandLineProblem.deprecated(
-          "Expected four arguments.");
+          "Expected five arguments.");
     }
     if (compileSdk) {
       return throw new CommandLineProblem.deprecated(
@@ -343,7 +343,7 @@
           ..verbose = verbose
           ..verify = verify,
         <Uri>[Uri.parse(arguments[0])],
-        resolveInputUri(arguments[2], extraSchemes: extraSchemes));
+        resolveInputUri(arguments[3], extraSchemes: extraSchemes));
   } else if (arguments.isEmpty) {
     return throw new CommandLineProblem.deprecated("No Dart file specified.");
   }
@@ -445,7 +445,8 @@
     case "compile_platform":
       summary = "Compiles Dart SDK platform to the Dill/Kernel IR format.";
       basicUsage = "Usage: $programName [options]"
-          " dart-library-uri libraries.json platform.dill outline.dill\n";
+          " dart-library-uri libraries.json vm_outline_strong.dill"
+          " platform.dill outline.dill\n";
   }
   StringBuffer sb = new StringBuffer(basicUsage);
   if (summary != null) {
diff --git a/pkg/front_end/tool/_fasta/compile_platform.dart b/pkg/front_end/tool/_fasta/compile_platform.dart
index 4f02bd0..d824723 100644
--- a/pkg/front_end/tool/_fasta/compile_platform.dart
+++ b/pkg/front_end/tool/_fasta/compile_platform.dart
@@ -56,13 +56,15 @@
 Future compilePlatform(List<String> arguments) async {
   await withGlobalOptions("compile_platform", arguments, false,
       (CompilerContext c, List<String> restArguments) {
-    Uri outlineOutput = Uri.base.resolveUri(new Uri.file(restArguments.last));
-    return compilePlatformInternal(c, c.options.output, outlineOutput);
+    Uri hostPlatform = Uri.base.resolveUri(new Uri.file(restArguments[2]));
+    Uri outlineOutput = Uri.base.resolveUri(new Uri.file(restArguments[4]));
+    return compilePlatformInternal(
+        c, c.options.output, outlineOutput, hostPlatform);
   });
 }
 
-Future compilePlatformInternal(
-    CompilerContext c, Uri fullOutput, Uri outlineOutput) async {
+Future compilePlatformInternal(CompilerContext c, Uri fullOutput,
+    Uri outlineOutput, Uri hostPlatform) async {
   if (c.options.verbose) {
     print("Generating outline of ${c.options.sdkRoot} into $outlineOutput");
     print("Compiling ${c.options.sdkRoot} to $fullOutput");
@@ -89,8 +91,7 @@
   c.options.ticker.logMs("Wrote component to ${fullOutput.toFilePath()}");
 
   List<Uri> deps = result.deps.toList();
-  for (Uri dependency
-      in await computeHostDependencies(outlineOutput.resolve("./"))) {
+  for (Uri dependency in await computeHostDependencies(hostPlatform)) {
     // Add the dependencies of the compiler's own sources.
     if (dependency != outlineOutput) {
       // We're computing the dependencies for [outlineOutput], so we shouldn't
@@ -102,13 +103,12 @@
       fullOutput, new File(new File.fromUri(fullOutput).path + ".d").uri, deps);
 }
 
-Future<List<Uri>> computeHostDependencies(Uri platformLocation) async {
+Future<List<Uri>> computeHostDependencies(Uri hostPlatform) async {
   // Returns a list of source files that make up the Fasta compiler (the files
   // the Dart VM reads to run Fasta). Until Fasta is self-hosting (in strong
   // mode), this is only an approximation, albeit accurate.  Once Fasta is
   // self-hosting, this isn't an approximation. Regardless, strong mode
   // shouldn't affect which files are read.
-  Uri hostPlatform = platformLocation.resolve("vm_outline_strong.dill");
   Target hostTarget = getTarget("vm", new TargetFlags(strongMode: true));
   return getDependencies(Platform.script,
       platform: hostPlatform, target: hostTarget);
diff --git a/pkg/front_end/tool/_fasta/compile_platform_legacy_test.dart b/pkg/front_end/tool/_fasta/compile_platform_legacy_test.dart
index 47a5f9c..4decb5d 100644
--- a/pkg/front_end/tool/_fasta/compile_platform_legacy_test.dart
+++ b/pkg/front_end/tool/_fasta/compile_platform_legacy_test.dart
@@ -22,10 +22,12 @@
       Uri platformDill = tmp.resolve("vm_platform.dill");
       Uri outlineDill = tmp.resolve("vm_outline_strong.dill");
       ProcessResult result = await Process.run(dartVm.toFilePath(), <String>[
+        "--no_preview_dart_2",
         compilePlatform.toFilePath(),
         "-v",
         "dart:core",
         librariesJson.toFilePath(),
+        outlineDill.toFilePath(),
         platformDill.toFilePath(),
         outlineDill.toFilePath(),
       ]);
diff --git a/pkg/front_end/tool/_fasta/compile_platform_test.dart b/pkg/front_end/tool/_fasta/compile_platform_test.dart
index b09d1c6..ac0ea114 100644
--- a/pkg/front_end/tool/_fasta/compile_platform_test.dart
+++ b/pkg/front_end/tool/_fasta/compile_platform_test.dart
@@ -22,11 +22,13 @@
       Uri platformDill = tmp.resolve("vm_platform.dill");
       Uri outlineDill = tmp.resolve("vm_outline_strong.dill");
       ProcessResult result = await Process.run(dartVm.toFilePath(), <String>[
+        "--no_preview_dart_2",
         compilePlatform.toFilePath(),
         "-v",
         "--strong",
         "dart:core",
         librariesJson.toFilePath(),
+        outlineDill.toFilePath(),
         platformDill.toFilePath(),
         outlineDill.toFilePath(),
       ]);
diff --git a/pkg/front_end/tool/_fasta/entry_points.dart b/pkg/front_end/tool/_fasta/entry_points.dart
index 3af6703..2c27df0 100644
--- a/pkg/front_end/tool/_fasta/entry_points.dart
+++ b/pkg/front_end/tool/_fasta/entry_points.dart
@@ -26,6 +26,9 @@
 
 import 'package:front_end/src/fasta/dill/dill_target.dart' show DillTarget;
 
+import 'package:front_end/src/fasta/incremental_compiler.dart'
+    show IncrementalCompiler;
+
 import 'package:front_end/src/fasta/kernel/kernel_target.dart'
     show KernelTarget;
 
@@ -161,6 +164,16 @@
   }
 }
 
+incrementalEntryPoint(List<String> arguments) async {
+  installAdditionalTargets();
+  await withGlobalOptions("incremental", arguments, true,
+      (CompilerContext c, _) {
+    // TODO(ahe): Extend this entry point so it can replace
+    // batchEntryPoint.
+    new IncrementalCompiler(c);
+  });
+}
+
 Future<KernelTarget> outline(List<String> arguments) async {
   try {
     return await withGlobalOptions("outline", arguments, true,
diff --git a/pkg/front_end/tool/_fasta/resolve_input_uri_test.dart b/pkg/front_end/tool/_fasta/resolve_input_uri_test.dart
index 7020ffc..d644f92 100644
--- a/pkg/front_end/tool/_fasta/resolve_input_uri_test.dart
+++ b/pkg/front_end/tool/_fasta/resolve_input_uri_test.dart
@@ -2,6 +2,8 @@
 // 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' show Platform;
+
 import 'package:test/test.dart';
 
 import 'resolve_input_uri.dart';
@@ -17,8 +19,15 @@
   });
 
   test('unknown schemes are not recognized by default', () {
-    expect(resolveInputUri('test:foo').scheme, 'file');
-    expect(resolveInputUri('org-dartlang-foo:bar').scheme, 'file');
+    expect(resolveInputUri('c:/foo').scheme, 'file');
+    if (Platform.isWindows) {
+      /// : is an invalid path character in windows.
+      expect(() => resolveInputUri('test:foo').scheme, throws);
+      expect(() => resolveInputUri('org-dartlang-foo:bar').scheme, throws);
+    } else {
+      expect(resolveInputUri('test:foo').scheme, 'file');
+      expect(resolveInputUri('org-dartlang-foo:bar').scheme, 'file');
+    }
   });
 
   test('more schemes can be supported', () {
diff --git a/pkg/front_end/tool/fasta b/pkg/front_end/tool/fasta
index eb455cd..32485f4 100755
--- a/pkg/front_end/tool/fasta
+++ b/pkg/front_end/tool/fasta
@@ -68,4 +68,4 @@
 
 shift
 
-exec "${DART_VM}" -c "${SCRIPT}" "$@"
+exec "${DART_VM}" --no_preview_dart_2 -c "${SCRIPT}" "$@"
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 5e01828..56555cc 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -22,6 +22,18 @@
   String toString() => '$filename:$byteIndex: $message at $path';
 }
 
+class InvalidKernelVersionError {
+  final String message;
+
+  InvalidKernelVersionError(this.message);
+}
+
+class CanonicalNameError {
+  final String message;
+
+  CanonicalNameError(this.message);
+}
+
 class _ComponentIndex {
   static const numberOfFixedFields = 9;
 
@@ -390,7 +402,7 @@
   /// computed ahead of time.
   ///
   /// The input bytes may contain multiple files concatenated.
-  void readComponent(Component component) {
+  void readComponent(Component component, {bool checkCanonicalNames: false}) {
     List<int> componentFileSizes = _indexComponents();
     if (componentFileSizes.length > 1) {
       _disableLazyReading = true;
@@ -400,6 +412,10 @@
       _readOneComponent(component, componentFileSizes[componentFileIndex]);
       ++componentFileIndex;
     }
+
+    if (checkCanonicalNames) {
+      _checkCanonicalNameChildren(component.root);
+    }
   }
 
   /// Deserializes the source and stores it in [component].
@@ -426,7 +442,8 @@
   ///
   /// This should *only* be used when there is a reason to not allow
   /// concatenated files.
-  void readSingleFileComponent(Component component) {
+  void readSingleFileComponent(Component component,
+      {bool checkCanonicalNames: false}) {
     List<int> componentFileSizes = _indexComponents();
     if (componentFileSizes.isEmpty) throw "Invalid component data.";
     _readOneComponent(component, componentFileSizes[0]);
@@ -440,6 +457,48 @@
       }
       throw 'Unrecognized bytes following component data';
     }
+
+    if (checkCanonicalNames) {
+      _checkCanonicalNameChildren(component.root);
+    }
+  }
+
+  void _checkCanonicalNameChildren(CanonicalName parent) {
+    for (CanonicalName child in parent.children) {
+      if (child.name != '@methods' &&
+          child.name != '@typedefs' &&
+          child.name != '@fields' &&
+          child.name != '@getters' &&
+          child.name != '@setters' &&
+          child.name != '@factories' &&
+          child.name != '@constructors') {
+        bool checkReferenceNode = true;
+        if (child.reference == null) {
+          // OK for "if private: URI of library" part of "Qualified name"...
+          Iterable<CanonicalName> children = child.children;
+          if (parent.parent != null &&
+              children.isNotEmpty &&
+              children.first.name.startsWith("_")) {
+            // OK then.
+            checkReferenceNode = false;
+          } else {
+            throw new CanonicalNameError(
+                "Null reference (${child.name}) ($child).");
+          }
+        }
+        if (checkReferenceNode) {
+          if (child.reference.canonicalName != child) {
+            throw new CanonicalNameError(
+                "Canonical name and reference doesn't agree.");
+          }
+          if (child.reference.node == null) {
+            throw new CanonicalNameError(
+                "Reference is null (${child.name}) ($child).");
+          }
+        }
+      }
+      _checkCanonicalNameChildren(child);
+    }
   }
 
   _ComponentIndex _readComponentIndex(int componentFileSize) {
@@ -520,7 +579,8 @@
 
     final int formatVersion = readUint32();
     if (formatVersion != Tag.BinaryFormatVersion) {
-      throw fail('Invalid kernel binary format version '
+      throw new InvalidKernelVersionError(
+          'Invalid kernel binary format version '
           '(found ${formatVersion}, expected ${Tag.BinaryFormatVersion})');
     }
 
diff --git a/pkg/kernel/lib/canonical_name.dart b/pkg/kernel/lib/canonical_name.dart
index 4aa9003..6fbc693 100644
--- a/pkg/kernel/lib/canonical_name.dart
+++ b/pkg/kernel/lib/canonical_name.dart
@@ -30,6 +30,11 @@
 ///         "@fields"
 ///         Qualified name
 ///
+///      Typedef:
+///         Canonical name of enclosing class
+///         "@typedefs"
+///         Name text
+///
 ///      Procedure that is not an accessor or factory:
 ///         Canonical name of enclosing class or library
 ///         "@methods"
diff --git a/pkg/kernel/lib/transformations/constants.dart b/pkg/kernel/lib/transformations/constants.dart
index cf18494..4e62d58 100644
--- a/pkg/kernel/lib/transformations/constants.dart
+++ b/pkg/kernel/lib/transformations/constants.dart
@@ -719,8 +719,14 @@
         }
       } else if (arguments.length == 1) {
         final Constant other = arguments[0];
+        final op = node.name.name;
         if (other is IntConstant) {
-          switch (node.name.name) {
+          if ((op == '<<' || op == '>>') && other.value < 0) {
+            errorReporter.negativeShift(contextChain,
+                node.arguments.positional.first, receiver, op, other);
+            throw const _AbortCurrentEvaluation();
+          }
+          switch (op) {
             case '|':
               return canonicalize(
                   new IntConstant(receiver.value | other.value));
@@ -739,12 +745,18 @@
           }
         }
 
-        if (other is IntConstant || other is DoubleConstant) {
-          final num value = (other is IntConstant)
-              ? other.value
-              : (other as DoubleConstant).value;
+        if (other is IntConstant) {
+          if (other.value == 0 && (op == '%' || op == '~/')) {
+            errorReporter.zeroDivisor(
+                contextChain, node.arguments.positional.first, receiver, op);
+            throw const _AbortCurrentEvaluation();
+          }
+
           return evaluateBinaryNumericOperation(
-              node.name.name, receiver.value, value, node);
+              node.name.name, receiver.value, other.value, node);
+        } else if (other is DoubleConstant) {
+          return evaluateBinaryNumericOperation(
+              node.name.name, receiver.value, other.value, node);
         }
 
         errorReporter.invalidBinaryOperandType(
@@ -1150,9 +1162,6 @@
     }
     return value;
   }
-
-  static const kMaxInt64 = (1 << 63) - 1;
-  static const kMinInt64 = -(1 << 63);
 }
 
 /// Holds the necessary information for a constant object, namely
@@ -1256,6 +1265,10 @@
       List<TreeNode> context, TreeNode node, Procedure target);
   invalidStringInterpolationOperand(
       List<TreeNode> context, TreeNode node, Constant constant);
+  zeroDivisor(
+      List<TreeNode> context, TreeNode node, IntConstant receiver, String op);
+  negativeShift(List<TreeNode> context, TreeNode node, IntConstant receiver,
+      String op, IntConstant argument);
   nonConstLiteral(List<TreeNode> context, TreeNode node, String klass);
   duplicateKey(List<TreeNode> context, TreeNode node, Constant key);
   failedAssertion(List<TreeNode> context, TreeNode node, String message);
@@ -1323,6 +1336,24 @@
         node);
   }
 
+  zeroDivisor(
+      List<TreeNode> context, TreeNode node, IntConstant receiver, String op) {
+    report(
+        context,
+        "Binary operator '$op' on '${receiver.value}' requires non-zero "
+        "divisor, but divisor was '0'.",
+        node);
+  }
+
+  negativeShift(List<TreeNode> context, TreeNode node, IntConstant receiver,
+      String op, IntConstant argument) {
+    report(
+        context,
+        "Binary operator '$op' on '${receiver.value}' requires non-negative "
+        "operand, but was '${argument.value}'.",
+        node);
+  }
+
   nonConstLiteral(List<TreeNode> context, TreeNode node, String klass) {
     report(
         context,
diff --git a/pkg/kernel/lib/transformations/mixin_full_resolution.dart b/pkg/kernel/lib/transformations/mixin_full_resolution.dart
index d546fe4..d132d11 100644
--- a/pkg/kernel/lib/transformations/mixin_full_resolution.dart
+++ b/pkg/kernel/lib/transformations/mixin_full_resolution.dart
@@ -180,6 +180,9 @@
       // Factory constructors are not cloned.
       if (procedure.isFactory) continue;
 
+      // NoSuchMethod forwarders aren't cloned.
+      if (procedure.isNoSuchMethodForwarder) continue;
+
       Procedure clone = cloner.clone(procedure);
       // Linear search for a forwarding stub with the same name.
       for (int i = 0; i < originalLength; ++i) {
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 0c49070..7a258a5 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -147,9 +147,45 @@
 [ $jscl ]
 kernel/test/*: SkipByDesign # Uses dart:io and bigints.
 
+[ $no_preview_dart_2 ]
+dev_compiler/*: SkipByDesign # uses Dart 2.
+
 [ $arch == x64 && $runtime == vm && $system == windows && $checked ]
 analyzer/test/src/task/strong/inferred_type_test: Pass, Slow
 
+# analyzer using the fasta parser
+[ $builder_tag == analyzer_use_fasta && $runtime == vm ]
+analysis_server/test/analysis/get_errors_test: Fail
+analysis_server/test/completion_test: Fail
+analysis_server/test/domain_completion_test: Fail
+analysis_server/test/edit/fixes_test: Fail
+analysis_server/test/integration/analysis/package_root_test: Pass, RuntimeError # Issue 33382
+analysis_server/test/services/completion/dart/keyword_contributor_test: Fail
+analysis_server/test/services/completion/dart/override_contributor_test: Fail
+analysis_server/test/services/completion/statement/statement_completion_test: Fail
+analysis_server/test/services/correction/fix_test: Fail
+analysis_server/test/services/refactoring/extract_local_test: Fail
+analyzer/test/generated/compile_time_error_code_driver_test: Fail
+analyzer/test/generated/compile_time_error_code_test: Fail
+analyzer/test/generated/declaration_resolver_test: Fail
+analyzer/test/generated/hint_code_driver_test: Fail
+analyzer/test/generated/hint_code_test: Fail
+analyzer/test/generated/invalid_code_driver_test: Fail
+analyzer/test/generated/non_error_resolver_driver_test: Fail
+analyzer/test/generated/non_error_resolver_test: Fail
+analyzer/test/generated/parser_test: Fail
+analyzer/test/generated/resolver_test: Fail
+analyzer/test/generated/utilities_test: Fail
+analyzer/test/src/context/context_test: Fail
+analyzer/test/src/dart/constant/evaluation_test: Fail
+analyzer/test/src/summary/prelinker_test: Fail
+analyzer/test/src/summary/summarize_ast_strong_test: Fail
+analyzer/test/src/summary/summarize_ast_test: Fail
+analyzer_plugin/test/src/utilities/completion/completion_target_test: Fail
+analyzer_plugin/test/src/utilities/completion/optype_test: Fail
+analyzer_plugin/test/src/utilities/visitors/local_declaration_visitor_test: Fail
+analyzer_plugin/test/utilities/completion/completion_target_test: Fail
+
 [ $builder_tag != dart2js_analyzer && $compiler == dart2js ]
 analysis_server/test/*: Skip # Issue 26813
 analyzer/test/*: Skip # Issue 26813
@@ -163,7 +199,6 @@
 analyzer/test/src/summary/resynthesize_ast_test: StaticWarning, Pass
 analyzer/test/src/summary/resynthesize_kernel_test: StaticWarning, Pass
 front_end/test/incremental_dart2js_load_from_dill_test: StaticWarning, Pass
-front_end/test/incremental_load_from_dill_test: StaticWarning, Pass
 
 # ILLEGAL_ASYNC_RETURN_TYPE warnings
 [ $compiler == dart2analyzer && !$preview_dart_2 && !$strong && ($system == macos || $system == windows) ]
@@ -172,7 +207,6 @@
 analyzer/test/src/summary/resynthesize_ast_test: StaticWarning
 analyzer/test/src/summary/resynthesize_kernel_test: StaticWarning
 front_end/test/incremental_dart2js_load_from_dill_test: StaticWarning
-front_end/test/incremental_load_from_dill_test: StaticWarning
 
 # Analyze dev_compiler but only run its tests on the vm
 [ $compiler != dart2analyzer && $runtime != vm ]
@@ -221,6 +255,7 @@
 front_end/tool/perf_test: Slow, Pass
 
 [ $runtime == vm && $checked ]
+analysis_server/test/benchmarks_test: Pass, Slow
 analysis_server/test/completion_test: Pass, Slow
 analysis_server/test/integration/edit/sort_members_test: Pass, Slow
 analysis_server/test/services/correction/fix_test: Pass, Slow
diff --git a/pkg/vm/bin/kernel_service.dart b/pkg/vm/bin/kernel_service.dart
index eedfdee..7ec5b51 100644
--- a/pkg/vm/bin/kernel_service.dart
+++ b/pkg/vm/bin/kernel_service.dart
@@ -53,12 +53,14 @@
 //   4 - Compile an individual expression in some context (for debugging
 //       purposes).
 //   5 - List program dependencies (for creating depfiles)
+//   6 - Isolate shutdown that potentially should result in compiler cleanup.
 const int kCompileTag = 0;
 const int kUpdateSourcesTag = 1;
 const int kAcceptTag = 2;
 const int kTrainTag = 3;
 const int kCompileExpressionTag = 4;
 const int kListDependenciesTag = 5;
+const int kNotifyIsolateShutdownTag = 6;
 
 bool allowDartInternalImport = false;
 
@@ -345,6 +347,12 @@
   port.send(result.toResponse());
 }
 
+Future _processIsolateShutdownNotification(request) async {
+  final int isolateId = request[1];
+  isolateCompilers.remove(isolateId);
+  isolateDependencies.remove(isolateId);
+}
+
 Future _processLoadRequest(request) async {
   if (verbose) print("DFE: request: $request");
 
@@ -360,6 +368,11 @@
     return;
   }
 
+  if (tag == kNotifyIsolateShutdownTag) {
+    await _processIsolateShutdownNotification(request);
+    return;
+  }
+
   final SendPort port = request[1];
   final String inputFileUri = request[2];
   final Uri script =
diff --git a/pkg/vm/lib/bytecode/constant_pool.dart b/pkg/vm/lib/bytecode/constant_pool.dart
index b6b0ad1..c0c07ff 100644
--- a/pkg/vm/lib/bytecode/constant_pool.dart
+++ b/pkg/vm/lib/bytecode/constant_pool.dart
@@ -158,6 +158,10 @@
   StringReference nativeName;
 }
 
+type ConstantSubtypeTestCache extends ConstantPoolEntry {
+  Byte tag = 24;
+}
+
 */
 
 enum ConstantTag {
@@ -185,6 +189,7 @@
   kClosureFunction,
   kEndClosureFunctionScope,
   kNativeEntry,
+  kSubtypeTestCache,
 }
 
 abstract class ConstantPoolEntry {
@@ -251,6 +256,8 @@
         return new ConstantEndClosureFunctionScope.readFromBinary(source);
       case ConstantTag.kNativeEntry:
         return new ConstantNativeEntry.readFromBinary(source);
+      case ConstantTag.kSubtypeTestCache:
+        return new ConstantSubtypeTestCache.readFromBinary(source);
     }
     throw 'Unexpected constant tag $tag';
   }
@@ -1041,6 +1048,31 @@
       other is ConstantNativeEntry && this.nativeName == other.nativeName;
 }
 
+class ConstantSubtypeTestCache extends ConstantPoolEntry {
+  ConstantSubtypeTestCache();
+
+  @override
+  ConstantTag get tag => ConstantTag.kSubtypeTestCache;
+
+  @override
+  void writeValueToBinary(BinarySink sink) {}
+
+  ConstantSubtypeTestCache.readFromBinary(BinarySource source);
+
+  @override
+  String toString() => 'SubtypeTestCache';
+
+  // ConstantSubtypeTestCache entries are created per subtype test site and
+  // should not be merged, so ConstantSubtypeTestCache class uses identity
+  // [hashCode] and [operator ==].
+
+  @override
+  int get hashCode => identityHashCode(this);
+
+  @override
+  bool operator ==(other) => identical(this, other);
+}
+
 class ConstantPool {
   final List<ConstantPoolEntry> entries = <ConstantPoolEntry>[];
   final Map<ConstantPoolEntry, int> _canonicalizationCache =
diff --git a/pkg/vm/lib/bytecode/gen_bytecode.dart b/pkg/vm/lib/bytecode/gen_bytecode.dart
index 4e218c8..953ae1c 100644
--- a/pkg/vm/lib/bytecode/gen_bytecode.dart
+++ b/pkg/vm/lib/bytecode/gen_bytecode.dart
@@ -250,8 +250,6 @@
     _genPushReceiver();
     initializer.accept(this);
 
-    // TODO(alexmarkov): assignability check
-
     final int cpIndex = cp.add(new ConstantFieldOffset(field));
     asm.emitStoreFieldTOS(cpIndex);
   }
@@ -585,7 +583,7 @@
   void _genEqualsOperatorNullHandling(Member member) {
     if (member.name.name != '==' ||
         locals.numParameters != 2 ||
-        member.enclosingClass != coreTypes.objectClass) {
+        member.enclosingClass == coreTypes.objectClass) {
       return;
     }
 
@@ -663,10 +661,9 @@
     }
     asm.emitCheckStack();
 
-    // TODO(alexmarkov): add type checks for parameters
-
     final bool isClosure =
         node is FunctionDeclaration || node is FunctionExpression;
+
     if (isClosure) {
       asm.emitPush(locals.closureVarIndexInFrame);
       asm.emitLoadFieldTOS(cp.add(new ConstantFieldOffset(closureContext)));
@@ -691,6 +688,10 @@
         asm.emitPopLocal(locals.typeArgsVarIndexInFrame);
       }
     }
+
+    if (isClosure || (node is Procedure && node.isInstanceMember)) {
+      _checkArguments(function);
+    }
   }
 
   void _setupInitialContext(FunctionNode function) {
@@ -716,6 +717,44 @@
     }
   }
 
+  void _checkArguments(FunctionNode function) {
+    for (var typeParam in function.typeParameters) {
+      if (!typeEnvironment.isTop(typeParam.bound)) {
+        final DartType type = new TypeParameterType(typeParam);
+        _genPushInstantiatorAndFunctionTypeArguments([type, typeParam.bound]);
+        asm.emitPushConstant(cp.add(new ConstantType(type)));
+        asm.emitPushConstant(cp.add(new ConstantType(typeParam.bound)));
+        asm.emitPushConstant(cp.add(new ConstantString(typeParam.name)));
+        asm.emitAssertSubtype();
+      }
+    }
+    function.positionalParameters.forEach(_genArgumentTypeCheck);
+    function.namedParameters.forEach(_genArgumentTypeCheck);
+  }
+
+  void _genArgumentTypeCheck(VariableDeclaration variable) {
+    if (typeEnvironment.isTop(variable.type)) {
+      return;
+    }
+    if (locals.isCaptured(variable)) {
+      asm.emitPush(locals.getOriginalParamSlotIndex(variable));
+    } else {
+      asm.emitPush(locals.getVarIndexInFrame(variable));
+    }
+    _genAssertAssignable(variable.type, name: variable.name);
+    asm.emitDrop1();
+  }
+
+  void _genAssertAssignable(DartType type, {String name = ''}) {
+    assert(!typeEnvironment.isTop(type));
+    _genPushInstantiatorAndFunctionTypeArguments([type]);
+    asm.emitPushConstant(cp.add(new ConstantType(type)));
+    asm.emitPushConstant(cp.add(new ConstantString(name)));
+    bool isIntOk = typeEnvironment.isSubtypeOf(typeEnvironment.intType, type);
+    int subtypeTestCacheCpIndex = cp.add(new ConstantSubtypeTestCache());
+    asm.emitAssertAssignable(isIntOk ? 1 : 0, subtypeTestCacheCpIndex);
+  }
+
   void _pushAssemblerState() {
     savedAssemblers.add(asm);
     asm = new BytecodeAssembler();
@@ -964,25 +1003,20 @@
   visitAsExpression(AsExpression node) {
     node.operand.accept(this);
 
-    if (node.type == const DynamicType()) {
+    final type = node.type;
+    if (typeEnvironment.isTop(type)) {
       return;
     }
     if (node.isTypeError) {
-      // TODO(alexmarkov): type checks
-      return;
-    }
-    if (hasTypeParameters([node.type])) {
-      _genPushInstantiatorAndFunctionTypeArguments([node.type]);
+      _genAssertAssignable(type);
     } else {
-      _genPushNull(); // Instantiator type arguments.
-      _genPushNull(); // Function type arguments.
+      _genPushInstantiatorAndFunctionTypeArguments([type]);
+      asm.emitPushConstant(cp.add(new ConstantType(type)));
+      final argDescIndex = cp.add(new ConstantArgDesc(4));
+      final icdataIndex = cp.add(new ConstantICData(
+          InvocationKind.method, objectAs.name, argDescIndex));
+      asm.emitInstanceCall1(4, icdataIndex);
     }
-    final typeIndex = cp.add(new ConstantType(node.type));
-    asm.emitPushConstant(typeIndex);
-    final argDescIndex = cp.add(new ConstantArgDesc(4));
-    final icdataIndex = cp.add(
-        new ConstantICData(InvocationKind.method, objectAs.name, argDescIndex));
-    asm.emitInstanceCall1(4, icdataIndex);
   }
 
   @override
@@ -1123,7 +1157,6 @@
       asm.emitPush(temp);
       _genPushInt(i);
       node.expressions[i].accept(this);
-      // TODO(alexmarkov): assignable check
       asm.emitStoreIndexedTOS();
     }
 
@@ -1361,7 +1394,6 @@
     _genDupTOS(locals.tempIndexInFrame(node));
     final target = node.target;
     if (target is Field) {
-      // TODO(alexmarkov): assignable check
       int cpIndex = cp.add(new ConstantField(target));
       asm.emitStoreStaticTOS(cpIndex);
     } else {
diff --git a/pkg/vm/lib/kernel_front_end.dart b/pkg/vm/lib/kernel_front_end.dart
index 928cac8..162890e 100644
--- a/pkg/vm/lib/kernel_front_end.dart
+++ b/pkg/vm/lib/kernel_front_end.dart
@@ -27,6 +27,7 @@
         DartType,
         Field,
         FileUriNode,
+        IntConstant,
         Procedure,
         StaticGet,
         TreeNode;
@@ -283,6 +284,20 @@
     reportIt(context, message, node);
   }
 
+  zeroDivisor(
+      List<TreeNode> context, TreeNode node, IntConstant receiver, String op) {
+    final message = codes.templateConstEvalZeroDivisor
+        .withArguments(op, '${receiver.value}');
+    reportIt(context, message, node);
+  }
+
+  negativeShift(List<TreeNode> context, TreeNode node, IntConstant receiver,
+      String op, IntConstant argument) {
+    final message = codes.templateConstEvalNegativeShift
+        .withArguments(op, '${receiver.value}', '${argument.value}');
+    reportIt(context, message, node);
+  }
+
   nonConstLiteral(List<TreeNode> context, TreeNode node, String klass) {
     final message =
         codes.templateConstEvalNonConstantLiteral.withArguments(klass);
diff --git a/pkg/vm/testcases/bytecode/closures.dart.expect b/pkg/vm/testcases/bytecode/closures.dart.expect
index 6f72b9f..cd54d28 100644
--- a/pkg/vm/testcases/bytecode/closures.dart.expect
+++ b/pkg/vm/testcases/bytecode/closures.dart.expect
@@ -523,45 +523,45 @@
   Push                 r0
   PushConstant         CP#4
   StoreFieldTOS        CP#1
-  Allocate             CP#20
+  Allocate             CP#23
   StoreLocal           r4
   Push                 r4
-  PushConstant         CP#18
-  StoreFieldTOS        CP#21
+  PushConstant         CP#7
+  StoreFieldTOS        CP#24
   Push                 r4
-  PushConstant         CP#18
-  StoreFieldTOS        CP#22
+  PushConstant         CP#7
+  StoreFieldTOS        CP#25
   Push                 r4
   PushConstant         CP#5
-  StoreFieldTOS        CP#23
+  StoreFieldTOS        CP#26
   Push                 r4
   Push                 r0
   StoreFieldTOS        CP#6
   PopLocal             r3
   Push                 r3
-  PushConstant         CP#27
-  InstanceCall1        2, CP#28
+  PushConstant         CP#30
+  InstanceCall1        2, CP#31
   Drop1
   Push                 r3
-  PushConstant         CP#29
-  InstanceCall1        2, CP#30
+  PushConstant         CP#32
+  InstanceCall1        2, CP#33
   Drop1
   Push                 r2
-  PushConstant         CP#31
-  IndirectStaticCall   1, CP#15
+  PushConstant         CP#34
+  IndirectStaticCall   1, CP#19
   Drop1
   Push                 r0
   LoadFieldTOS         CP#1
-  PushConstant         CP#32
-  IndirectStaticCall   1, CP#15
+  PushConstant         CP#35
+  IndirectStaticCall   1, CP#19
   Drop1
   Push                 r0
   LoadFieldTOS         CP#0
   PopLocal             r0
   Push                 r0
   LoadFieldTOS         CP#1
-  PushConstant         CP#33
-  IndirectStaticCall   1, CP#15
+  PushConstant         CP#36
+  IndirectStaticCall   1, CP#19
   Drop1
   Push                 r0
   LoadFieldTOS         CP#0
@@ -573,30 +573,30 @@
   StoreFieldTOS        CP#0
   PopLocal             r0
   Push                 r0
-  PushConstant         CP#34
+  PushConstant         CP#37
   StoreFieldTOS        CP#1
-  Allocate             CP#20
+  Allocate             CP#23
   StoreLocal           r3
   Push                 r3
-  PushConstant         CP#18
-  StoreFieldTOS        CP#21
+  PushConstant         CP#7
+  StoreFieldTOS        CP#24
   Push                 r3
-  PushConstant         CP#18
-  StoreFieldTOS        CP#22
+  PushConstant         CP#7
+  StoreFieldTOS        CP#25
   Push                 r3
-  PushConstant         CP#35
-  StoreFieldTOS        CP#23
+  PushConstant         CP#38
+  StoreFieldTOS        CP#26
   Push                 r3
   Push                 r0
   StoreFieldTOS        CP#6
   PopLocal             r2
   Push                 r2
-  InstanceCall1        1, CP#38
+  InstanceCall1        1, CP#41
   Drop1
   Push                 r0
   LoadFieldTOS         CP#0
   PopLocal             r0
-  PushConstant         CP#18
+  PushConstant         CP#7
   ReturnTOS
 }
 ConstantPool {
@@ -607,40 +607,43 @@
   [4] = Int 3
   [5] = ClosureFunction <anonymous closure> (dart.core::int y) → dart.core::Null;
   [6] = FieldOffset dart.core::_Closure::_context
-  [7] = ArgDesc num-args 2, num-type-args 0, names []
-  [8] = ICData target-name '+', arg-desc CP#7
-  [9] = Int 5
-  [10] = ICData target-name '>', arg-desc CP#7
-  [11] = Bool true
-  [12] = Int 4
-  [13] = ClosureFunction closure2 () → void;
-  [14] = ICData target-name '+', arg-desc CP#7
-  [15] = ArgDesc num-args 1, num-type-args 0, names []
-  [16] = ICData get target-name 'foo', arg-desc CP#15
-  [17] = ICData target-name '+', arg-desc CP#7
-  [18] = Null
-  [19] = EndClosureFunctionScope
-  [20] = Class dart.core::_Closure
-  [21] = FieldOffset dart.core::_Closure::_instantiator_type_arguments
-  [22] = FieldOffset dart.core::_Closure::_function_type_arguments
-  [23] = FieldOffset dart.core::_Closure::_function
-  [24] = ICData target-name 'call', arg-desc CP#15
-  [25] = StaticICData target 'dart.core::print', arg-desc CP#15
-  [26] = EndClosureFunctionScope
-  [27] = Int 10
-  [28] = ICData target-name 'call', arg-desc CP#7
-  [29] = Int 11
-  [30] = ICData target-name 'call', arg-desc CP#7
-  [31] = StaticICData target 'dart.core::print', arg-desc CP#15
-  [32] = StaticICData target 'dart.core::print', arg-desc CP#15
-  [33] = StaticICData target 'dart.core::print', arg-desc CP#15
-  [34] = Int 42
-  [35] = ClosureFunction <anonymous closure> () → dart.core::Null;
-  [36] = ICData set target-name 'foo', arg-desc CP#7
-  [37] = EndClosureFunctionScope
-  [38] = ICData target-name 'call', arg-desc CP#15
+  [7] = Null
+  [8] = Type dart.core::int
+  [9] = String 'y'
+  [10] = SubtypeTestCache
+  [11] = ArgDesc num-args 2, num-type-args 0, names []
+  [12] = ICData target-name '+', arg-desc CP#11
+  [13] = Int 5
+  [14] = ICData target-name '>', arg-desc CP#11
+  [15] = Bool true
+  [16] = Int 4
+  [17] = ClosureFunction closure2 () → void;
+  [18] = ICData target-name '+', arg-desc CP#11
+  [19] = ArgDesc num-args 1, num-type-args 0, names []
+  [20] = ICData get target-name 'foo', arg-desc CP#19
+  [21] = ICData target-name '+', arg-desc CP#11
+  [22] = EndClosureFunctionScope
+  [23] = Class dart.core::_Closure
+  [24] = FieldOffset dart.core::_Closure::_instantiator_type_arguments
+  [25] = FieldOffset dart.core::_Closure::_function_type_arguments
+  [26] = FieldOffset dart.core::_Closure::_function
+  [27] = ICData target-name 'call', arg-desc CP#19
+  [28] = StaticICData target 'dart.core::print', arg-desc CP#19
+  [29] = EndClosureFunctionScope
+  [30] = Int 10
+  [31] = ICData target-name 'call', arg-desc CP#11
+  [32] = Int 11
+  [33] = ICData target-name 'call', arg-desc CP#11
+  [34] = StaticICData target 'dart.core::print', arg-desc CP#19
+  [35] = StaticICData target 'dart.core::print', arg-desc CP#19
+  [36] = StaticICData target 'dart.core::print', arg-desc CP#19
+  [37] = Int 42
+  [38] = ClosureFunction <anonymous closure> () → dart.core::Null;
+  [39] = ICData set target-name 'foo', arg-desc CP#11
+  [40] = EndClosureFunctionScope
+  [41] = ICData target-name 'call', arg-desc CP#19
 }
-Closure CP#13 {
+Closure CP#17 {
   Entry                3
   CheckStack
   Push                 FP[-5]
@@ -655,7 +658,7 @@
   LoadFieldTOS         CP#0
   LoadFieldTOS         CP#1
   PushConstant         CP#3
-  InstanceCall1        2, CP#14
+  InstanceCall1        2, CP#18
   StoreLocal           r2
   StoreFieldTOS        CP#1
   Push                 r2
@@ -667,16 +670,16 @@
   LoadFieldTOS         CP#0
   LoadFieldTOS         CP#0
   LoadFieldTOS         CP#1
-  InstanceCall1        1, CP#16
+  InstanceCall1        1, CP#20
   Push                 r0
   LoadFieldTOS         CP#0
   LoadFieldTOS         CP#1
-  InstanceCall1        2, CP#17
+  InstanceCall1        2, CP#21
   StoreLocal           r2
   StoreFieldTOS        CP#1
   Push                 r2
   Drop1
-  PushConstant         CP#18
+  PushConstant         CP#7
   ReturnTOS
 
 }
@@ -687,6 +690,13 @@
   Push                 FP[-6]
   LoadFieldTOS         CP#6
   PopLocal             r0
+  Push                 FP[-5]
+  PushConstant         CP#7
+  PushConstant         CP#7
+  PushConstant         CP#8
+  PushConstant         CP#9
+  AssertAssignable     1, CP#10
+  Drop1
   AllocateContext      1
   StoreLocal           r1
   Push                 r1
@@ -708,7 +718,7 @@
   Push                 r0
   LoadFieldTOS         CP#1
   PushConstant         CP#2
-  InstanceCall1        2, CP#8
+  InstanceCall1        2, CP#12
   StoreLocal           r2
   StoreFieldTOS        CP#1
   Push                 r2
@@ -717,9 +727,9 @@
   LoadFieldTOS         CP#0
   LoadFieldTOS         CP#0
   LoadFieldTOS         CP#1
-  PushConstant         CP#9
-  InstanceCall1        2, CP#10
-  PushConstant         CP#11
+  PushConstant         CP#13
+  InstanceCall1        2, CP#14
+  PushConstant         CP#15
   IfNeStrictTOS
   Jump                 L1
   AllocateContext      1
@@ -729,41 +739,41 @@
   StoreFieldTOS        CP#0
   PopLocal             r0
   Push                 r0
-  PushConstant         CP#12
+  PushConstant         CP#16
   StoreFieldTOS        CP#1
-  Allocate             CP#20
+  Allocate             CP#23
   StoreLocal           r2
   Push                 r2
-  PushConstant         CP#18
-  StoreFieldTOS        CP#21
+  PushConstant         CP#7
+  StoreFieldTOS        CP#24
   Push                 r2
-  PushConstant         CP#18
-  StoreFieldTOS        CP#22
+  PushConstant         CP#7
+  StoreFieldTOS        CP#25
   Push                 r2
-  PushConstant         CP#13
-  StoreFieldTOS        CP#23
+  PushConstant         CP#17
+  StoreFieldTOS        CP#26
   Push                 r2
   Push                 r0
   StoreFieldTOS        CP#6
   PopLocal             r3
   Push                 r3
-  InstanceCall1        1, CP#24
+  InstanceCall1        1, CP#27
   Drop1
   Push                 r0
   LoadFieldTOS         CP#1
-  PushConstant         CP#25
-  IndirectStaticCall   1, CP#15
+  PushConstant         CP#28
+  IndirectStaticCall   1, CP#19
   Drop1
   Push                 r0
   LoadFieldTOS         CP#0
   PopLocal             r0
 L1:
-  PushConstant         CP#18
+  PushConstant         CP#7
   ReturnTOS
 
 }
 
-Closure CP#35 {
+Closure CP#38 {
   Entry                3
   CheckStack
   Push                 FP[-5]
@@ -775,11 +785,11 @@
   Push                 r0
   LoadFieldTOS         CP#1
   StoreLocal           r2
-  InstanceCall1        2, CP#36
+  InstanceCall1        2, CP#39
   Drop1
   Push                 r2
   Drop1
-  PushConstant         CP#18
+  PushConstant         CP#7
   ReturnTOS
 
 }
@@ -918,7 +928,7 @@
   Push                 r3
   Push                 r0
   StoreFieldTOS        CP#12
-  InstanceCall1        2, CP#24
+  InstanceCall1        2, CP#27
   Drop1
   Push                 r0
   CloneContext
@@ -926,8 +936,8 @@
   Push                 r0
   Push                 r0
   LoadFieldTOS         CP#2
-  PushConstant         CP#25
-  InstanceCall1        2, CP#26
+  PushConstant         CP#28
+  InstanceCall1        2, CP#29
   StoreLocal           r3
   StoreFieldTOS        CP#2
   Push                 r3
@@ -966,11 +976,14 @@
   [19] = FieldOffset dart.core::_Closure::_function
   [20] = ICData target-name 'add', arg-desc CP#8
   [21] = ClosureFunction <anonymous closure> (dart.core::int ii) → dart.core::Null;
-  [22] = ICData target-name '+', arg-desc CP#8
-  [23] = EndClosureFunctionScope
-  [24] = ICData target-name 'add', arg-desc CP#8
-  [25] = Int 1
-  [26] = ICData target-name '+', arg-desc CP#8
+  [22] = Type dart.core::int
+  [23] = String 'ii'
+  [24] = SubtypeTestCache
+  [25] = ICData target-name '+', arg-desc CP#8
+  [26] = EndClosureFunctionScope
+  [27] = ICData target-name 'add', arg-desc CP#8
+  [28] = Int 1
+  [29] = ICData target-name '+', arg-desc CP#8
 }
 Closure CP#11 {
   Entry                2
@@ -996,12 +1009,19 @@
   Push                 FP[-6]
   LoadFieldTOS         CP#12
   PopLocal             r0
+  Push                 FP[-5]
+  PushConstant         CP#14
+  PushConstant         CP#14
+  PushConstant         CP#22
+  PushConstant         CP#23
+  AssertAssignable     1, CP#24
+  Drop1
   Push                 r0
   Push                 FP[-5]
   Push                 r0
   LoadFieldTOS         CP#0
   LoadFieldTOS         CP#2
-  InstanceCall1        2, CP#22
+  InstanceCall1        2, CP#25
   StoreLocal           r2
   StoreFieldTOS        CP#2
   Push                 r2
@@ -1026,94 +1046,104 @@
   Entry                5
   CheckStack
   Push                 FP[-5]
-  InstanceCall1        1, CP#1
+  PushConstant         CP#0
+  PushConstant         CP#0
+  PushConstant         CP#1
+  PushConstant         CP#2
+  AssertAssignable     0, CP#3
+  Drop1
+  Push                 FP[-5]
+  InstanceCall1        1, CP#5
   PopLocal             r2
 L2:
   CheckStack
   Push                 r2
-  InstanceCall1        1, CP#2
-  PushConstant         CP#3
+  InstanceCall1        1, CP#6
+  PushConstant         CP#7
   IfNeStrictTOS
   Jump                 L1
   AllocateContext      1
   StoreLocal           r1
   Push                 r1
   Push                 r0
-  StoreFieldTOS        CP#4
+  StoreFieldTOS        CP#8
   PopLocal             r0
   Push                 r0
   Push                 r2
-  InstanceCall1        1, CP#5
-  StoreFieldTOS        CP#6
-  Allocate             CP#14
+  InstanceCall1        1, CP#9
+  StoreFieldTOS        CP#10
+  Allocate             CP#17
   StoreLocal           r4
   Push                 r4
-  PushConstant         CP#12
-  StoreFieldTOS        CP#15
+  PushConstant         CP#0
+  StoreFieldTOS        CP#18
   Push                 r4
-  PushConstant         CP#12
-  StoreFieldTOS        CP#16
+  PushConstant         CP#0
+  StoreFieldTOS        CP#19
   Push                 r4
-  PushConstant         CP#7
-  StoreFieldTOS        CP#17
+  PushConstant         CP#11
+  StoreFieldTOS        CP#20
   Push                 r4
   Push                 r0
-  StoreFieldTOS        CP#8
+  StoreFieldTOS        CP#12
   PopLocal             r3
   Push                 r3
-  InstanceCall1        1, CP#18
+  InstanceCall1        1, CP#21
   Drop1
   Push                 r0
-  LoadFieldTOS         CP#6
-  PushConstant         CP#19
-  IndirectStaticCall   1, CP#0
+  LoadFieldTOS         CP#10
+  PushConstant         CP#22
+  IndirectStaticCall   1, CP#4
   Drop1
   Push                 r0
-  LoadFieldTOS         CP#4
+  LoadFieldTOS         CP#8
   PopLocal             r0
   Jump                 L2
 L1:
-  PushConstant         CP#12
+  PushConstant         CP#0
   ReturnTOS
 }
 ConstantPool {
-  [0] = ArgDesc num-args 1, num-type-args 0, names []
-  [1] = ICData get target-name 'iterator', arg-desc CP#0
-  [2] = ICData target-name 'moveNext', arg-desc CP#0
-  [3] = Bool true
-  [4] = ContextOffset parent
-  [5] = ICData get target-name 'current', arg-desc CP#0
-  [6] = ContextOffset var [0]
-  [7] = ClosureFunction <anonymous closure> () → dart.core::Null;
-  [8] = FieldOffset dart.core::_Closure::_context
-  [9] = Int 1
-  [10] = ArgDesc num-args 2, num-type-args 0, names []
-  [11] = ICData target-name '+', arg-desc CP#10
-  [12] = Null
-  [13] = EndClosureFunctionScope
-  [14] = Class dart.core::_Closure
-  [15] = FieldOffset dart.core::_Closure::_instantiator_type_arguments
-  [16] = FieldOffset dart.core::_Closure::_function_type_arguments
-  [17] = FieldOffset dart.core::_Closure::_function
-  [18] = ICData target-name 'call', arg-desc CP#0
-  [19] = StaticICData target 'dart.core::print', arg-desc CP#0
+  [0] = Null
+  [1] = Type dart.core::List<dart.core::int>
+  [2] = String 'list'
+  [3] = SubtypeTestCache
+  [4] = ArgDesc num-args 1, num-type-args 0, names []
+  [5] = ICData get target-name 'iterator', arg-desc CP#4
+  [6] = ICData target-name 'moveNext', arg-desc CP#4
+  [7] = Bool true
+  [8] = ContextOffset parent
+  [9] = ICData get target-name 'current', arg-desc CP#4
+  [10] = ContextOffset var [0]
+  [11] = ClosureFunction <anonymous closure> () → dart.core::Null;
+  [12] = FieldOffset dart.core::_Closure::_context
+  [13] = Int 1
+  [14] = ArgDesc num-args 2, num-type-args 0, names []
+  [15] = ICData target-name '+', arg-desc CP#14
+  [16] = EndClosureFunctionScope
+  [17] = Class dart.core::_Closure
+  [18] = FieldOffset dart.core::_Closure::_instantiator_type_arguments
+  [19] = FieldOffset dart.core::_Closure::_function_type_arguments
+  [20] = FieldOffset dart.core::_Closure::_function
+  [21] = ICData target-name 'call', arg-desc CP#4
+  [22] = StaticICData target 'dart.core::print', arg-desc CP#4
 }
-Closure CP#7 {
+Closure CP#11 {
   Entry                3
   CheckStack
   Push                 FP[-5]
-  LoadFieldTOS         CP#8
+  LoadFieldTOS         CP#12
   PopLocal             r0
   Push                 r0
   Push                 r0
-  LoadFieldTOS         CP#6
-  PushConstant         CP#9
-  InstanceCall1        2, CP#11
+  LoadFieldTOS         CP#10
+  PushConstant         CP#13
+  InstanceCall1        2, CP#15
   StoreLocal           r2
-  StoreFieldTOS        CP#6
+  StoreFieldTOS        CP#10
   Push                 r2
   Drop1
-  PushConstant         CP#12
+  PushConstant         CP#0
   ReturnTOS
 
 }
@@ -1140,24 +1170,24 @@
   Push                 r0
   PushConstant         CP#1
   StoreFieldTOS        CP#2
-  Allocate             CP#9
+  Allocate             CP#12
   StoreLocal           r3
   Push                 r3
-  PushConstant         CP#7
-  StoreFieldTOS        CP#10
+  PushConstant         CP#5
+  StoreFieldTOS        CP#13
   Push                 r3
-  PushConstant         CP#7
-  StoreFieldTOS        CP#11
+  PushConstant         CP#5
+  StoreFieldTOS        CP#14
   Push                 r3
   PushConstant         CP#3
-  StoreFieldTOS        CP#12
+  StoreFieldTOS        CP#15
   Push                 r3
   Push                 r0
   StoreFieldTOS        CP#4
   PopLocal             r2
   Push                 r2
-  PushConstant         CP#13
-  InstanceCall1        2, CP#14
+  PushConstant         CP#16
+  InstanceCall1        2, CP#17
   Drop1
   Push                 r0
   LoadFieldTOS         CP#2
@@ -1165,7 +1195,7 @@
   Push                 r0
   LoadFieldTOS         CP#0
   PopLocal             r0
-  PushConstant         CP#7
+  PushConstant         CP#5
   ReturnTOS
 }
 ConstantPool {
@@ -1174,16 +1204,19 @@
   [2] = ContextOffset var [0]
   [3] = ClosureFunction <anonymous closure> (dart.core::int y) → dart.core::Null;
   [4] = FieldOffset dart.core::_Closure::_context
-  [5] = ArgDesc num-args 2, num-type-args 0, names []
-  [6] = ICData target-name '+', arg-desc CP#5
-  [7] = Null
-  [8] = EndClosureFunctionScope
-  [9] = Class dart.core::_Closure
-  [10] = FieldOffset dart.core::_Closure::_instantiator_type_arguments
-  [11] = FieldOffset dart.core::_Closure::_function_type_arguments
-  [12] = FieldOffset dart.core::_Closure::_function
-  [13] = Int 3
-  [14] = ICData target-name 'call', arg-desc CP#5
+  [5] = Null
+  [6] = Type dart.core::int
+  [7] = String 'y'
+  [8] = SubtypeTestCache
+  [9] = ArgDesc num-args 2, num-type-args 0, names []
+  [10] = ICData target-name '+', arg-desc CP#9
+  [11] = EndClosureFunctionScope
+  [12] = Class dart.core::_Closure
+  [13] = FieldOffset dart.core::_Closure::_instantiator_type_arguments
+  [14] = FieldOffset dart.core::_Closure::_function_type_arguments
+  [15] = FieldOffset dart.core::_Closure::_function
+  [16] = Int 3
+  [17] = ICData target-name 'call', arg-desc CP#9
 }
 Closure CP#3 {
   Entry                3
@@ -1191,16 +1224,23 @@
   Push                 FP[-6]
   LoadFieldTOS         CP#4
   PopLocal             r0
+  Push                 FP[-5]
+  PushConstant         CP#5
+  PushConstant         CP#5
+  PushConstant         CP#6
+  PushConstant         CP#7
+  AssertAssignable     1, CP#8
+  Drop1
   Push                 r0
   Push                 r0
   LoadFieldTOS         CP#2
   Push                 FP[-5]
-  InstanceCall1        2, CP#6
+  InstanceCall1        2, CP#10
   StoreLocal           r2
   StoreFieldTOS        CP#2
   Push                 r2
   Drop1
-  PushConstant         CP#7
+  PushConstant         CP#5
   ReturnTOS
 
 }
diff --git a/pkg/vm/testcases/bytecode/type_ops.dart b/pkg/vm/testcases/bytecode/type_ops.dart
index 664dc6e..687d58f 100644
--- a/pkg/vm/testcases/bytecode/type_ops.dart
+++ b/pkg/vm/testcases/bytecode/type_ops.dart
@@ -21,6 +21,8 @@
 class D<P, Q> extends C<int, Q, P> {
   Map<P, Q> foo;
 
+  D(tt) : foo = tt;
+
   foo2(y) {
     if (y is A<P>) {
       print('21');
@@ -40,6 +42,22 @@
     }
     return (z as Map<T2, Q>).values;
   }
+
+  Map<P, Q> foo4(w) {
+    List<Map<P, Q>> list = [w];
+    return w;
+  }
+}
+
+List<Iterable> globalVar;
+
+void foo5(x) {
+  globalVar = x;
+}
+
+class E<P extends String> {
+  factory E() => null;
+  void foo6<T extends P, U extends List<T>>(Map<T, U> map) {}
 }
 
 main() {}
diff --git a/pkg/vm/testcases/bytecode/type_ops.dart.expect b/pkg/vm/testcases/bytecode/type_ops.dart.expect
index 16f4aaf..eb5a775 100644
--- a/pkg/vm/testcases/bytecode/type_ops.dart.expect
+++ b/pkg/vm/testcases/bytecode/type_ops.dart.expect
@@ -66,25 +66,39 @@
     ;
 }
 class D<P extends core::Object = dynamic, Q extends core::Object = dynamic> extends self::C<core::int, self::D::Q, self::D::P> {
-  generic-covariant-impl field core::Map<self::D::P, self::D::Q> foo = null;
+  generic-covariant-impl field core::Map<self::D::P, self::D::Q> foo;
 [@vm.bytecode=
 Bytecode {
   Entry                0
   CheckStack
+  Push                 FP[-6]
   Push                 FP[-5]
+  Push                 FP[-6]
+  LoadFieldTOS         CP#0
   PushConstant         CP#1
-  IndirectStaticCall   1, CP#0
-  Drop1
   PushConstant         CP#2
+  PushConstant         CP#3
+  AssertAssignable     0, CP#4
+  StoreFieldTOS        CP#5
+  Push                 FP[-6]
+  PushConstant         CP#7
+  IndirectStaticCall   1, CP#6
+  Drop1
+  PushConstant         CP#1
   ReturnTOS
 }
 ConstantPool {
-  [0] = ArgDesc num-args 1, num-type-args 0, names []
-  [1] = StaticICData target '#lib::C::', arg-desc CP#0
-  [2] = Null
+  [0] = TypeArgumentsFieldOffset #lib::D
+  [1] = Null
+  [2] = Type dart.core::Map<#lib::D::P, #lib::D::Q>
+  [3] = String ''
+  [4] = SubtypeTestCache
+  [5] = FieldOffset #lib::D::foo
+  [6] = ArgDesc num-args 1, num-type-args 0, names []
+  [7] = StaticICData target '#lib::C::', arg-desc CP#6
 }
-]  synthetic constructor •() → void
-    : super self::C::•()
+]  constructor •(dynamic tt) → void
+    : self::D::foo = tt as{TypeError} core::Map<self::D::P, self::D::Q>, super self::C::•()
     ;
 [@vm.bytecode=
 Bytecode {
@@ -120,8 +134,14 @@
 L2:
   Push                 FP[-6]
   Push                 FP[-5]
+  Push                 FP[-6]
+  LoadFieldTOS         CP#0
+  PushConstant         CP#1
+  PushConstant         CP#13
+  PushConstant         CP#14
+  AssertAssignable     0, CP#15
   StoreLocal           r0
-  InstanceCall1        2, CP#14
+  InstanceCall1        2, CP#17
   Drop1
   Push                 r0
   Drop1
@@ -142,8 +162,11 @@
   [10] = ICData target-name 'dart.core::_instanceOf', arg-desc CP#3
   [11] = String '22'
   [12] = StaticICData target 'dart.core::print', arg-desc CP#7
-  [13] = ArgDesc num-args 2, num-type-args 0, names []
-  [14] = ICData set target-name 'foo', arg-desc CP#13
+  [13] = Type dart.core::Map<#lib::D::P, #lib::D::Q>
+  [14] = String ''
+  [15] = SubtypeTestCache
+  [16] = ArgDesc num-args 2, num-type-args 0, names []
+  [17] = ICData set target-name 'foo', arg-desc CP#16
 }
 ]  method foo2(dynamic y) → dynamic {
     if(y is self::A<self::D::P>) {
@@ -223,7 +246,119 @@
     }
     return (z as core::Map<self::D::foo3::T2, self::D::Q>).{core::Map::values};
   }
+[@vm.bytecode=
+Bytecode {
+  Entry                2
+  CheckStack
+  Push                 FP[-6]
+  LoadFieldTOS         CP#0
+  PushConstant         CP#1
+  InstantiateTypeArgumentsTOS 1, CP#2
+  StoreLocal           r1
+  Push                 r1
+  PushConstant         CP#3
+  CreateArrayTOS
+  StoreLocal           r1
+  Push                 r1
+  PushConstant         CP#4
+  Push                 FP[-5]
+  Push                 FP[-6]
+  LoadFieldTOS         CP#0
+  PushConstant         CP#1
+  PushConstant         CP#5
+  PushConstant         CP#6
+  AssertAssignable     0, CP#7
+  StoreIndexedTOS
+  PushConstant         CP#9
+  IndirectStaticCall   2, CP#8
+  PopLocal             r0
+  Push                 FP[-5]
+  Push                 FP[-6]
+  LoadFieldTOS         CP#0
+  PushConstant         CP#1
+  PushConstant         CP#5
+  PushConstant         CP#6
+  AssertAssignable     0, CP#10
+  ReturnTOS
+  PushConstant         CP#1
+  ReturnTOS
 }
+ConstantPool {
+  [0] = TypeArgumentsFieldOffset #lib::D
+  [1] = Null
+  [2] = TypeArgs [dart.core::Map<#lib::D::P, #lib::D::Q>]
+  [3] = Int 1
+  [4] = Int 0
+  [5] = Type dart.core::Map<#lib::D::P, #lib::D::Q>
+  [6] = String ''
+  [7] = SubtypeTestCache
+  [8] = ArgDesc num-args 1, num-type-args 1, names []
+  [9] = StaticICData target 'dart.core::List::_fromLiteral', arg-desc CP#8
+  [10] = SubtypeTestCache
+}
+]  method foo4(dynamic w) → core::Map<self::D::P, self::D::Q> {
+    core::List<core::Map<self::D::P, self::D::Q>> list = <core::Map<self::D::P, self::D::Q>>[w as{TypeError} core::Map<self::D::P, self::D::Q>];
+    return w as{TypeError} core::Map<self::D::P, self::D::Q>;
+  }
+}
+class E<P extends core::String = core::String> extends core::Object {
+[@vm.bytecode=
+Bytecode {
+  Entry                0
+  CheckStack
+  PushConstant         CP#0
+  ReturnTOS
+  PushConstant         CP#0
+  ReturnTOS
+}
+ConstantPool {
+  [0] = Null
+}
+]  static factory •<P extends core::String = dynamic>() → self::E<self::E::•::P>
+    return null;
+[@vm.bytecode=
+Bytecode {
+  Entry                0
+  CheckStack
+  Push                 FP[-6]
+  LoadFieldTOS         CP#0
+  Push                 FP[-7]
+  PushConstant         CP#1
+  PushConstant         CP#2
+  PushConstant         CP#3
+  AssertSubtype
+  PushConstant         CP#4
+  Push                 FP[-7]
+  PushConstant         CP#5
+  PushConstant         CP#6
+  PushConstant         CP#7
+  AssertSubtype
+  Push                 FP[-5]
+  PushConstant         CP#4
+  Push                 FP[-7]
+  PushConstant         CP#8
+  PushConstant         CP#9
+  AssertAssignable     0, CP#10
+  Drop1
+  PushConstant         CP#4
+  ReturnTOS
+}
+ConstantPool {
+  [0] = TypeArgumentsFieldOffset #lib::E
+  [1] = Type #lib::E::foo6::T
+  [2] = Type #lib::E::P
+  [3] = String 'T'
+  [4] = Null
+  [5] = Type #lib::E::foo6::U
+  [6] = Type dart.core::List<#lib::E::foo6::T>
+  [7] = String 'U'
+  [8] = Type dart.core::Map<#lib::E::foo6::T, #lib::E::foo6::U>
+  [9] = String 'map'
+  [10] = SubtypeTestCache
+}
+]  method foo6<generic-covariant-impl T extends self::E::P = self::E::P, U extends core::List<self::E::foo6::T> = core::List<self::E::P>>(core::Map<self::E::foo6::T, self::E::foo6::U> map) → void {}
+}
+static field core::List<core::Iterable<dynamic>> globalVar;
 [@vm.bytecode=
 Bytecode {
   Entry                0
@@ -290,6 +425,33 @@
 }
 [@vm.bytecode=
 Bytecode {
+  Entry                1
+  CheckStack
+  Push                 FP[-5]
+  PushConstant         CP#0
+  PushConstant         CP#0
+  PushConstant         CP#1
+  PushConstant         CP#2
+  AssertAssignable     0, CP#3
+  StoreLocal           r0
+  Push                 r0
+  StoreStaticTOS       CP#4
+  Drop1
+  PushConstant         CP#0
+  ReturnTOS
+}
+ConstantPool {
+  [0] = Null
+  [1] = Type dart.core::List<dart.core::Iterable<dynamic>>
+  [2] = String ''
+  [3] = SubtypeTestCache
+  [4] = Field #lib::globalVar
+}
+]static method foo5(dynamic x) → void {
+  self::globalVar = x as{TypeError} core::List<core::Iterable<dynamic>>;
+}
+[@vm.bytecode=
+Bytecode {
   Entry                0
   CheckStack
   PushConstant         CP#0
diff --git a/pkg/vm/tool/dart2 b/pkg/vm/tool/dart2
deleted file mode 100755
index a41cfc2..0000000
--- a/pkg/vm/tool/dart2
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env bash
-# Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-# Script for running JIT mode VM with Dart 2 pipeline: using Fasta in DFE
-# isolate and strong mode semantics.
-
-function follow_links() {
-  file="$1"
-  while [ -h "$file" ]; do
-    # On Mac OS, readlink -f doesn't work.
-    file="$(readlink "$file")"
-  done
-  echo "$file"
-}
-
-# Unlike $0, $BASH_SOURCE points to the absolute path of this file.
-PROG_NAME="$(follow_links "$BASH_SOURCE")"
-
-# Handle the case where dart-sdk/bin has been symlinked to.
-CUR_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
-
-if [[ `uname` == 'Darwin' ]]; then
-  OUT_DIR="$CUR_DIR"/../../../xcodebuild/
-else
-  OUT_DIR="$CUR_DIR"/../../../out/
-fi
-
-export DART_CONFIGURATION=${DART_CONFIGURATION:-ReleaseX64}
-export DART_USE_SDK=${DART_USE_SDK:0}
-BUILD_DIR="$OUT_DIR$DART_CONFIGURATION"
-
-if [[ $DART_USE_SDK -eq 1 ]]; then
-  DART_BINARY="$BUILD_DIR"/dart-sdk/bin/dart
-  KERNEL_BINARIES_DIR="$BUILD_DIR"/dart-sdk/lib/_internal
-else
-  DART_BINARY="$BUILD_DIR"/dart
-  KERNEL_BINARIES_DIR="$BUILD_DIR"
-fi
-
-exec "$DART_BINARY"                                                            \
-     --preview_dart_2                                                          \
-     --strong                                                                  \
-     --reify-generic-functions                                                 \
-     "$@"
diff --git a/pkg/vm/tool/dart2.bat b/pkg/vm/tool/dart2.bat
deleted file mode 100644
index 5d82e33..0000000
--- a/pkg/vm/tool/dart2.bat
+++ /dev/null
@@ -1,38 +0,0 @@
-@echo off
-REM Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-REM for details. All rights reserved. Use of this source code is governed by a
-REM BSD-style license that can be found in the LICENSE file.
-
-REM Script for running JIT mode VM with Dart 2 pipeline: using Fasta in DFE
-REM isolate and strong mode semantics.
-
-set SCRIPTPATH=%~dp0
-
-REM Does the path have a trailing slash? If so, remove it.
-if %SCRIPTPATH:~-1%==\ set SCRIPTPATH=%SCRIPTPATH:~0,-1%
-
-set OUT_DIR=%SCRIPTPATH%/../../../out/
-
-REM Remove trailing spaces if line is not empty
-if not "%DART_CONFIGURATION%" == "" (
-  set DART_CONFIGURATION=%DART_CONFIGURATION: =%
-)
-if "%DART_CONFIGURATION%"=="" set DART_CONFIGURATION=ReleaseX64
-
-if "%DART_USE_SDK%"=="" set DART_USE_SDK=0
-set BUILD_DIR=%OUT_DIR%%DART_CONFIGURATION%
-
-if not "_%DART_VM_OPTIONS%_" == "__" (
-  set EXTRA_VM_OPTIONS=%EXTRA_VM_OPTIONS% %DART_VM_OPTIONS%
-)
-
-if "%DART_USE_SDK%"=="1" (
-  set DART_BINARY=%BUILD_DIR%/dart-sdk/bin/dart
-  set KERNEL_BINARIES_DIR=%BUILD_DIR%/dart-sdk/lib/_internal
-) else (
-  set DART_BINARY=%BUILD_DIR%/dart
-  set KERNEL_BINARIES_DIR=%BUILD_DIR%
-)
-set KERNEL_SERVICE_SNAPSHOT=%BUILD_DIR%/gen/kernel-service.dart.snapshot
-
-"%DART_BINARY%" --preview_dart_2 --strong --reify-generic-functions %*
diff --git a/runtime/bin/BUILD.gn b/runtime/bin/BUILD.gn
index 577560e..27506b0 100644
--- a/runtime/bin/BUILD.gn
+++ b/runtime/bin/BUILD.gn
@@ -8,6 +8,7 @@
 import("../../sdk/lib/cli/cli_sources.gni")
 import("../../utils/generate_entry_points_json.gni")
 import("../runtime_args.gni")
+import("../vm/heap/heap_sources.gni")
 import("../vm/compiler/compiler_sources.gni")
 import("../vm/vm_sources.gni")
 import("builtin_impl_sources.gni")
@@ -272,7 +273,6 @@
       ":generate_web_sql_cc_file",
     ]
     if (is_fuchsia) {
-      deps += [ "//zircon/public/lib/launchpad" ]
       public_deps = [
         "//zircon/public/lib/fdio",
       ]
@@ -348,9 +348,6 @@
              ":generate_cli_cc_file",
              ":generate_cli_patch_cc_file",
            ] + extra_deps
-    if (is_fuchsia) {
-      deps += [ "//zircon/public/lib/launchpad" ]
-    }
 
     sources = [
       # Include generated source files.
@@ -596,10 +593,7 @@
     deps += [ "//third_party/boringssl" ]
 
     if (is_fuchsia) {
-      deps += [
-        "//garnet/public/lib/netstack/c",
-        "//zircon/public/lib/launchpad",
-      ]
+      deps += [ "//garnet/public/lib/netstack/c" ]
       public_deps = [
         "//zircon/public/lib/fdio",
       ]
@@ -705,6 +699,14 @@
       "--target_os",
       current_os,
     ]
+    if (defined(invoker.size_symbol)) {
+      args += [
+        "--size_symbol_name",
+        invoker.size_symbol,
+        "--target_arch",
+        current_cpu,
+      ]
+    }
     if (invoker.executable) {
       args += [ "--executable" ]
     }
@@ -758,64 +760,37 @@
   executable = true
 }
 
-template("dill_to_cc") {
-  assert(defined(invoker.dill_file), "Need dill_file in $target_name.")
-  assert(defined(invoker.data_symbol), "Need data_symbol in $target_name.")
-  assert(defined(invoker.size_symbol), "Need size_symbol in $target_name.")
-  assert(defined(invoker.output), "Need output in $target_name.")
-
-  extra_deps = []
-  if (defined(invoker.deps)) {
-    extra_deps += invoker.deps
-  }
-
-  action(target_name) {
-    deps = extra_deps
-    script = "../tools/dill_to_data_cc.py"
-    inputs = [
-      "../tools/dill_to_data_cc.py",
-      invoker.dill_file,
-    ]
-    outputs = [
-      invoker.output,
-    ]
-    args = [
-      "--dill_file=" + rebase_path(invoker.dill_file),
-      "--data_symbol=" + invoker.data_symbol,
-      "--size_symbol=" + invoker.size_symbol,
-      "--output=" + rebase_path(invoker.output),
-    ]
-  }
-}
-
-dill_to_cc("kernel_service_dill_cc") {
+bin_to_assembly("kernel_service_dill_S") {
   deps = [
     "../../utils/kernel-service:kernel_service_dill",
   ]
-  dill_file = "$root_gen_dir/kernel_service.dill"
-  data_symbol = "kKernelServiceDill"
+  input = "$root_gen_dir/kernel_service.dill"
+  output = "$root_gen_dir/kernel_service.dill.S"
+  symbol = "kKernelServiceDill"
   size_symbol = "kKernelServiceDillSize"
-  output = "$root_gen_dir/kernel_service.dill.cc"
+  executable = false
 }
 
-dill_to_cc("platform_dill_cc") {
+bin_to_assembly("platform_dill_S") {
   deps = [
     "../vm:vm_legacy_platform",
   ]
-  dill_file = "$root_out_dir/vm_platform.dill"
-  data_symbol = "kPlatformDill"
+  input = "$root_out_dir/vm_platform.dill"
+  output = "$target_gen_dir/vm_platform.dill.S"
+  symbol = "kPlatformDill"
   size_symbol = "kPlatformDillSize"
-  output = "$target_gen_dir/vm_platform.dill.cc"
+  executable = false
 }
 
-dill_to_cc("platform_strong_dill_cc") {
+bin_to_assembly("platform_strong_dill_S") {
   deps = [
     "../vm:vm_platform",
   ]
-  dill_file = "$root_out_dir/vm_platform_strong.dill"
-  data_symbol = "kPlatformStrongDill"
+  input = "$root_out_dir/vm_platform_strong.dill"
+  output = "$target_gen_dir/vm_platform_strong.dill.S"
+  symbol = "kPlatformStrongDill"
   size_symbol = "kPlatformStrongDillSize"
-  output = "$target_gen_dir/vm_platform_strong.dill.cc"
+  executable = false
 }
 
 source_set("dart_snapshot_cc") {
@@ -835,14 +810,14 @@
 
 source_set("dart_kernel_platform_cc") {
   deps = [
-    ":kernel_service_dill_cc",
-    ":platform_dill_cc",
-    ":platform_strong_dill_cc",
+    ":kernel_service_dill_S",
+    ":platform_dill_S",
+    ":platform_strong_dill_S",
   ]
   sources = [
-    "$root_gen_dir/kernel_service.dill.cc",
-    "$target_gen_dir/vm_platform.dill.cc",
-    "$target_gen_dir/vm_platform_strong.dill.cc",
+    "$root_gen_dir/kernel_service.dill.S",
+    "$target_gen_dir/vm_platform.dill.S",
+    "$target_gen_dir/vm_platform_strong.dill.S",
   ]
 }
 
@@ -896,10 +871,6 @@
              "$dart_zlib_path",
            ] + extra_deps
 
-    if (is_fuchsia) {
-      deps += [ "//zircon/public/lib/launchpad" ]
-    }
-
     defines = extra_defines
     if (exclude_kernel_service) {
       defines += [ "EXCLUDE_CFE_AND_KERNEL_PLATFORM" ]
@@ -1156,6 +1127,7 @@
   # the tests here.
   vm_tests = rebase_path(vm_sources_tests, ".", "../vm")
   compiler_tests = rebase_path(compiler_sources_tests, ".", "../vm/compiler")
+  heap_tests = rebase_path(heap_sources_tests, ".", "../vm/heap")
 
   sources = [
               "builtin_nolib.cc",
@@ -1164,7 +1136,7 @@
               "run_vm_tests.cc",
               "snapshot_utils.cc",
               "snapshot_utils.h",
-            ] + builtin_impl_tests + vm_tests + compiler_tests
+            ] + builtin_impl_tests + vm_tests + compiler_tests + heap_tests
 
   if (!is_win) {
     ldflags = [ "-rdynamic" ]
diff --git a/runtime/bin/embedded_dart_io.cc b/runtime/bin/embedded_dart_io.cc
index d6ab7e2..f13233a 100644
--- a/runtime/bin/embedded_dart_io.cc
+++ b/runtime/bin/embedded_dart_io.cc
@@ -4,6 +4,7 @@
 
 #include "bin/embedded_dart_io.h"
 
+#include "bin/crypto.h"
 #include "bin/directory.h"
 #include "bin/eventhandler.h"
 #include "bin/platform.h"
@@ -40,5 +41,9 @@
   Process::GetRSSInformation(&(info->max_rss), &(info->current_rss));
 }
 
+bool GetEntropy(uint8_t* buffer, intptr_t length) {
+  return Crypto::GetRandomBytes(length, buffer);
+}
+
 }  // namespace bin
 }  // namespace dart
diff --git a/runtime/bin/embedded_dart_io.h b/runtime/bin/embedded_dart_io.h
index 0133b85..2eb3f71 100644
--- a/runtime/bin/embedded_dart_io.h
+++ b/runtime/bin/embedded_dart_io.h
@@ -38,6 +38,11 @@
 // Set dart:io implementation specific fields of Dart_EmbedderInformation.
 void GetIOEmbedderInformation(Dart_EmbedderInformation* info);
 
+// Generates 'length' random bytes into 'buffer'. Returns true on success
+// and false on failure. This is appropriate to assign to
+// Dart_InitializeParams.entropy_source.
+bool GetEntropy(uint8_t* buffer, intptr_t length);
+
 }  // namespace bin
 }  // namespace dart
 
diff --git a/runtime/bin/extensions_fuchsia.cc b/runtime/bin/extensions_fuchsia.cc
index db447a3..a177c4c 100644
--- a/runtime/bin/extensions_fuchsia.cc
+++ b/runtime/bin/extensions_fuchsia.cc
@@ -10,7 +10,6 @@
 #include <dlfcn.h>
 #include <fcntl.h>
 #include <lib/fdio/io.h>
-#include <launchpad/vmo.h>
 #include <zircon/dlfcn.h>
 
 #include "platform/assert.h"
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index 1859422..76dec67 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -503,6 +503,7 @@
   }
 
   if (isolate == NULL) {
+    Log::PrintErr("%s\n", *error);
     delete isolate_data;
     return NULL;
   }
@@ -1302,7 +1303,7 @@
                                       application_kernel_buffer_size);
     // Since we saw a dill file, it means we have to turn on all the
     // preview_dart_2 options.
-    Options::SetPreviewDart2Options(&vm_options);
+    Options::SetDart2Options(&vm_options);
   }
 #endif
 
diff --git a/runtime/bin/main_options.cc b/runtime/bin/main_options.cc
index 0282762..e162713 100644
--- a/runtime/bin/main_options.cc
+++ b/runtime/bin/main_options.cc
@@ -63,19 +63,17 @@
 CB_OPTIONS_LIST(CB_OPTION_DEFINITION)
 #undef CB_OPTION_DEFINITION
 
-void Options::SetPreviewDart2Options(CommandLineOptions* vm_options) {
-#if !defined(DART_PRECOMPILED_RUNTIME)
-  Options::dfe()->set_use_dfe();
-#endif  // !defined(DART_PRECOMPILED_RUNTIME)
-  OPTION_FIELD(preview_dart_2) = true;
+void Options::SetDart2Options(CommandLineOptions* vm_options) {
   vm_options->AddArgument("--strong");
   vm_options->AddArgument("--reify-generic-functions");
   vm_options->AddArgument("--sync-async");
 }
 
-bool OPTION_FIELD(preview_dart_2) = false;
-DEFINE_BOOL_OPTION_CB(preview_dart_2,
-                      { Options::SetPreviewDart2Options(vm_options); });
+void Options::SetDart1Options(CommandLineOptions* vm_options) {
+  vm_options->AddArgument("--no-strong");
+  vm_options->AddArgument("--no-reify-generic-functions");
+  vm_options->AddArgument("--no-sync-async");
+}
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
 DFE* Options::dfe_ = NULL;
@@ -338,6 +336,9 @@
   const char* kPrefix = "--";
   const intptr_t kPrefixLen = strlen(kPrefix);
 
+  // Set Dart 2 as the default option.
+  Options::SetDart2Options(vm_options);
+
   // Store the executable name.
   Platform::SetExecutableName(argv[0]);
 
@@ -381,6 +382,13 @@
     }
   }
 
+  if (Options::no_preview_dart_2()) {
+    Options::SetDart1Options(vm_options);
+  } else {
+#if !defined(DART_PRECOMPILED_RUNTIME)
+    Options::dfe()->set_use_dfe();
+#endif  // !defined(DART_PRECOMPILED_RUNTIME)
+  }
   if (Options::deterministic()) {
     // Both an embedder and VM flag.
     vm_options->AddArgument("--deterministic");
diff --git a/runtime/bin/main_options.h b/runtime/bin/main_options.h
index b5e87d2..0592ffa 100644
--- a/runtime/bin/main_options.h
+++ b/runtime/bin/main_options.h
@@ -42,7 +42,8 @@
   V(trace_loading, trace_loading)                                              \
   V(short_socket_read, short_socket_read)                                      \
   V(short_socket_write, short_socket_write)                                    \
-  V(disable_exit, exit_disabled)
+  V(disable_exit, exit_disabled)                                               \
+  V(no_preview_dart_2, no_preview_dart_2)
 
 // Boolean flags that have a short form.
 #define SHORT_BOOL_OPTIONS_LIST(V)                                             \
@@ -107,8 +108,9 @@
   CB_OPTIONS_LIST(CB_OPTIONS_DECL)
 #undef CB_OPTIONS_DECL
 
-  static bool preview_dart_2() { return preview_dart_2_; }
-  static void SetPreviewDart2Options(CommandLineOptions* vm_options);
+  static bool preview_dart_2() { return !no_preview_dart_2(); }
+  static void SetDart2Options(CommandLineOptions* vm_options);
+  static void SetDart1Options(CommandLineOptions* vm_options);
 
   static dart::HashMap* environment() { return environment_; }
 
@@ -143,7 +145,6 @@
   ENUM_OPTIONS_LIST(ENUM_OPTION_DECL)
 #undef ENUM_OPTION_DECL
 
-  static bool preview_dart_2_;
   static dart::HashMap* environment_;
 
 // Frontend argument processing.
@@ -175,8 +176,6 @@
   ENUM_OPTIONS_LIST(ENUM_OPTION_FRIEND)
 #undef ENUM_OPTION_FRIEND
 
-  friend class OptionProcessor_preview_dart_2;
-
   DISALLOW_ALLOCATION();
   DISALLOW_IMPLICIT_CONSTRUCTORS(Options);
 };
diff --git a/runtime/bin/process_fuchsia.cc b/runtime/bin/process_fuchsia.cc
index fb52be3..615d32a 100644
--- a/runtime/bin/process_fuchsia.cc
+++ b/runtime/bin/process_fuchsia.cc
@@ -12,9 +12,8 @@
 #include <lib/fdio/io.h>
 #include <lib/fdio/namespace.h>
 #include <lib/fdio/private.h>
+#include <lib/fdio/spawn.h>
 #include <lib/fdio/util.h>
-#include <launchpad/launchpad.h>
-#include <launchpad/vmo.h>
 #include <poll.h>
 #include <pthread.h>
 #include <stdbool.h>
@@ -23,6 +22,7 @@
 #include <string.h>
 #include <unistd.h>
 #include <zircon/process.h>
+#include <zircon/processargs.h>
 #include <zircon/status.h>
 #include <zircon/syscalls.h>
 #include <zircon/syscalls/object.h>
@@ -548,7 +548,6 @@
       program_arguments_[i + 1] = arguments[i];
     }
     program_arguments_[arguments_length + 1] = NULL;
-    program_arguments_count_ = arguments_length + 1;
 
     program_environment_ = NULL;
     if (environment != NULL) {
@@ -585,27 +584,46 @@
     LOG_INFO("ProcessStarter: Start() set up exit_pipe_fds (%d, %d)\n",
              exit_pipe_fds[0], exit_pipe_fds[1]);
 
-    // Set up a launchpad.
-    launchpad_t* lp = NULL;
-    zx_status_t status = SetupLaunchpad(&lp);
+    NamespaceScope ns(namespc_, path_);
+    const int pathfd =
+        TEMP_FAILURE_RETRY(openat64(ns.fd(), ns.path(), O_RDONLY));
+    zx_handle_t vmo = ZX_HANDLE_INVALID;
+    zx_status_t status = fdio_get_vmo_clone(pathfd, &vmo);
+    VOID_TEMP_FAILURE_RETRY(close(pathfd));
     if (status != ZX_OK) {
       close(exit_pipe_fds[0]);
       close(exit_pipe_fds[1]);
+      *os_error_message_ = DartUtils::ScopedCopyCString(
+          "Failed to load executable for process start.");
       return status;
     }
-    ASSERT(lp != NULL);
 
-    // Launch it.
-    LOG_INFO("ProcessStarter: Start() Calling launchpad_start\n");
+    fdio_spawn_action_t actions[4];
+    memset(actions, 0, sizeof(actions));
+    AddPipe(0, &write_out_, &actions[0]);
+    AddPipe(1, &read_in_, &actions[1]);
+    AddPipe(2, &read_err_, &actions[2]);
+    actions[3] = {
+      .action = FDIO_SPAWN_ACTION_SET_NAME,
+      .name.data = program_arguments_[0],
+    };
+
+    // TODO(zra): Use the supplied working directory when fdio_spawn_vmo adds an
+    // API to set it.
+
+    LOG_INFO("ProcessStarter: Start() Calling fdio_spawn_vmo\n");
     zx_handle_t process = ZX_HANDLE_INVALID;
-    const char* errormsg = NULL;
-    status = launchpad_go(lp, &process, &errormsg);
-    lp = NULL;  // launchpad_go() calls launchpad_destroy() on the launchpad.
+    char err_msg[FDIO_SPAWN_ERR_MSG_MAX_LENGTH];
+    uint32_t flags = FDIO_SPAWN_CLONE_JOB | FDIO_SPAWN_CLONE_LDSVC |
+        FDIO_SPAWN_CLONE_NAMESPACE;
+    status = fdio_spawn_vmo(ZX_HANDLE_INVALID, flags, vmo, program_arguments_,
+                            program_environment_, 4, actions, &process, err_msg);
+
     if (status != ZX_OK) {
-      LOG_ERR("ProcessStarter: Start() launchpad_start failed\n");
+      LOG_ERR("ProcessStarter: Start() fdio_spawn_vmo failed\n");
       close(exit_pipe_fds[0]);
       close(exit_pipe_fds[1]);
-      ReportStartError(errormsg);
+      ReportStartError(err_msg);
       return status;
     }
 
@@ -652,39 +670,14 @@
     *os_error_message_ = message;
   }
 
-  zx_status_t SetupLaunchpad(launchpad_t** launchpad) {
-    // TODO(zra): Use the supplied working directory when launchpad adds an
-    // API to set it.
-    ASSERT(launchpad != NULL);
-    launchpad_t* lp = NULL;
-    launchpad_create(ZX_HANDLE_INVALID, program_arguments_[0], &lp);
-    launchpad_set_args(lp, program_arguments_count_, program_arguments_);
-    launchpad_set_environ(lp, program_environment_);
-    launchpad_clone(lp, LP_CLONE_FDIO_NAMESPACE);
-    launchpad_add_pipe(lp, &write_out_, 0);
-    launchpad_add_pipe(lp, &read_in_, 1);
-    launchpad_add_pipe(lp, &read_err_, 2);
-    launchpad_add_vdso_vmo(lp);
-
-    NamespaceScope ns(namespc_, path_);
-    const int pathfd =
-        TEMP_FAILURE_RETRY(openat64(ns.fd(), ns.path(), O_RDONLY));
-    launchpad_load_from_fd(lp, pathfd);
-    VOID_TEMP_FAILURE_RETRY(close(pathfd));
-
-    // If there were any errors, grab launchpad's error message and put it in
-    // the os_error_message_ field.
-    zx_status_t status = launchpad_get_status(lp);
-    if (status != ZX_OK) {
-      const intptr_t kMaxMessageSize = 256;
-      char* message = DartUtils::ScopedCString(kMaxMessageSize);
-      snprintf(message, kMaxMessageSize, "launchpad failed: %s, %s",
-               zx_status_get_string(status), launchpad_error_message(lp));
-      *os_error_message_ = message;
+  zx_status_t AddPipe(int target_fd, int* local_fd,
+                      fdio_spawn_action_t* action) {
+    zx_status_t status = fdio_pipe_half(&action->h.handle, &action->h.id);
+    if (status < 0)
       return status;
-    }
-
-    *launchpad = lp;
+    *local_fd = status;
+    action->action = FDIO_SPAWN_ACTION_ADD_HANDLE;
+    action->h.id = PA_HND(PA_HND_TYPE(action->h.id), target_fd);
     return ZX_OK;
   }
 
@@ -693,7 +686,6 @@
   int write_out_;  // Pipe for stdin to child process.
 
   char** program_arguments_;
-  intptr_t program_arguments_count_;
   char** program_environment_;
 
   Namespace* namespc_;
diff --git a/runtime/lib/integers.cc b/runtime/lib/integers.cc
index 2b9f0d4..3f1c653 100644
--- a/runtime/lib/integers.cc
+++ b/runtime/lib/integers.cc
@@ -42,9 +42,7 @@
     OS::PrintErr("Integer_bitAndFromInteger %s & %s\n", right.ToCString(),
                  left.ToCString());
   }
-  const Integer& result = Integer::Handle(left.BitOp(Token::kBIT_AND, right));
-  // A null result indicates that a bigint operation is required.
-  return result.IsNull() ? result.raw() : result.AsValidInteger();
+  return left.BitOp(Token::kBIT_AND, right);
 }
 
 DEFINE_NATIVE_ENTRY(Integer_bitOrFromInteger, 2) {
@@ -56,9 +54,7 @@
     OS::PrintErr("Integer_bitOrFromInteger %s | %s\n", left.ToCString(),
                  right.ToCString());
   }
-  const Integer& result = Integer::Handle(left.BitOp(Token::kBIT_OR, right));
-  // A null result indicates that a bigint operation is required.
-  return result.IsNull() ? result.raw() : result.AsValidInteger();
+  return left.BitOp(Token::kBIT_OR, right);
 }
 
 DEFINE_NATIVE_ENTRY(Integer_bitXorFromInteger, 2) {
@@ -70,9 +66,7 @@
     OS::PrintErr("Integer_bitXorFromInteger %s ^ %s\n", left.ToCString(),
                  right.ToCString());
   }
-  const Integer& result = Integer::Handle(left.BitOp(Token::kBIT_XOR, right));
-  // A null result indicates that a bigint operation is required.
-  return result.IsNull() ? result.raw() : result.AsValidInteger();
+  return left.BitOp(Token::kBIT_XOR, right);
 }
 
 DEFINE_NATIVE_ENTRY(Integer_addFromInteger, 2) {
@@ -84,10 +78,7 @@
     OS::PrintErr("Integer_addFromInteger %s + %s\n", left_int.ToCString(),
                  right_int.ToCString());
   }
-  const Integer& result =
-      Integer::Handle(left_int.ArithmeticOp(Token::kADD, right_int));
-  // A null result indicates that a bigint operation is required.
-  return result.IsNull() ? result.raw() : result.AsValidInteger();
+  return left_int.ArithmeticOp(Token::kADD, right_int);
 }
 
 DEFINE_NATIVE_ENTRY(Integer_subFromInteger, 2) {
@@ -99,10 +90,7 @@
     OS::PrintErr("Integer_subFromInteger %s - %s\n", left_int.ToCString(),
                  right_int.ToCString());
   }
-  const Integer& result =
-      Integer::Handle(left_int.ArithmeticOp(Token::kSUB, right_int));
-  // A null result indicates that a bigint operation is required.
-  return result.IsNull() ? result.raw() : result.AsValidInteger();
+  return left_int.ArithmeticOp(Token::kSUB, right_int);
 }
 
 DEFINE_NATIVE_ENTRY(Integer_mulFromInteger, 2) {
@@ -114,10 +102,7 @@
     OS::PrintErr("Integer_mulFromInteger %s * %s\n", left_int.ToCString(),
                  right_int.ToCString());
   }
-  const Integer& result =
-      Integer::Handle(left_int.ArithmeticOp(Token::kMUL, right_int));
-  // A null result indicates that a bigint operation is required.
-  return result.IsNull() ? result.raw() : result.AsValidInteger();
+  return left_int.ArithmeticOp(Token::kMUL, right_int);
 }
 
 DEFINE_NATIVE_ENTRY(Integer_truncDivFromInteger, 2) {
@@ -126,10 +111,7 @@
   ASSERT(CheckInteger(right_int));
   ASSERT(CheckInteger(left_int));
   ASSERT(!right_int.IsZero());
-  const Integer& result =
-      Integer::Handle(left_int.ArithmeticOp(Token::kTRUNCDIV, right_int));
-  // A null result indicates that a bigint operation is required.
-  return result.IsNull() ? result.raw() : result.AsValidInteger();
+  return left_int.ArithmeticOp(Token::kTRUNCDIV, right_int);
 }
 
 DEFINE_NATIVE_ENTRY(Integer_moduloFromInteger, 2) {
@@ -145,10 +127,7 @@
     // Should have been caught before calling into runtime.
     UNIMPLEMENTED();
   }
-  const Integer& result =
-      Integer::Handle(left_int.ArithmeticOp(Token::kMOD, right_int));
-  // A null result indicates that a bigint operation is required.
-  return result.IsNull() ? result.raw() : result.AsValidInteger();
+  return left_int.ArithmeticOp(Token::kMOD, right_int);
 }
 
 DEFINE_NATIVE_ENTRY(Integer_greaterThanFromInteger, 2) {
@@ -232,28 +211,35 @@
 
 static RawInteger* ShiftOperationHelper(Token::Kind kind,
                                         const Integer& value,
-                                        const Smi& amount) {
-  if (amount.Value() < 0) {
+                                        const Integer& amount) {
+  if (amount.AsInt64Value() < 0) {
     Exceptions::ThrowArgumentError(amount);
   }
-  if (value.IsSmi()) {
-    const Smi& smi_value = Smi::Cast(value);
-    return smi_value.ShiftOp(kind, amount, Heap::kNew);
+  return value.ShiftOp(kind, amount, Heap::kNew);
+}
+
+DEFINE_NATIVE_ENTRY(Integer_shrFromInteger, 2) {
+  const Integer& amount = Integer::CheckedHandle(arguments->NativeArgAt(0));
+  GET_NON_NULL_NATIVE_ARGUMENT(Integer, value, arguments->NativeArgAt(1));
+  ASSERT(CheckInteger(amount));
+  ASSERT(CheckInteger(value));
+  if (FLAG_trace_intrinsified_natives) {
+    OS::PrintErr("Integer_shrFromInteger: %s >> %s\n", value.ToCString(),
+                 amount.ToCString());
   }
-  ASSERT(value.IsMint());
-  const int64_t mint_value = value.AsInt64Value();
-  intptr_t shift_count = amount.Value();
-  switch (kind) {
-    case Token::kSHL:
-      return Integer::New(
-          Utils::ShiftLeftWithTruncation(mint_value, shift_count), Heap::kNew);
-    case Token::kSHR:
-      shift_count = Utils::Minimum(shift_count, Mint::kBits);
-      return Integer::New(mint_value >> shift_count, Heap::kNew);
-    default:
-      UNIMPLEMENTED();
-      return Integer::null();
+  return ShiftOperationHelper(Token::kSHR, value, amount);
+}
+
+DEFINE_NATIVE_ENTRY(Integer_shlFromInteger, 2) {
+  const Integer& amount = Integer::CheckedHandle(arguments->NativeArgAt(0));
+  GET_NON_NULL_NATIVE_ARGUMENT(Integer, value, arguments->NativeArgAt(1));
+  ASSERT(CheckInteger(amount));
+  ASSERT(CheckInteger(value));
+  if (FLAG_trace_intrinsified_natives) {
+    OS::PrintErr("Integer_shlFromInteger: %s << %s\n", value.ToCString(),
+                 amount.ToCString());
   }
+  return ShiftOperationHelper(Token::kSHL, value, amount);
 }
 
 DEFINE_NATIVE_ENTRY(Smi_bitAndFromSmi, 2) {
@@ -268,32 +254,6 @@
   return Smi::New(left_value.Value() & right_value.Value());
 }
 
-DEFINE_NATIVE_ENTRY(Smi_shrFromInt, 2) {
-  const Smi& amount = Smi::CheckedHandle(arguments->NativeArgAt(0));
-  GET_NON_NULL_NATIVE_ARGUMENT(Integer, value, arguments->NativeArgAt(1));
-  ASSERT(CheckInteger(amount));
-  ASSERT(CheckInteger(value));
-  const Integer& result =
-      Integer::Handle(ShiftOperationHelper(Token::kSHR, value, amount));
-  // A null result indicates that a bigint operation is required.
-  return result.IsNull() ? result.raw() : result.AsValidInteger();
-}
-
-DEFINE_NATIVE_ENTRY(Smi_shlFromInt, 2) {
-  const Smi& amount = Smi::CheckedHandle(arguments->NativeArgAt(0));
-  GET_NON_NULL_NATIVE_ARGUMENT(Integer, value, arguments->NativeArgAt(1));
-  ASSERT(CheckInteger(amount));
-  ASSERT(CheckInteger(value));
-  if (FLAG_trace_intrinsified_natives) {
-    OS::PrintErr("Smi_shlFromInt: %s << %s\n", value.ToCString(),
-                 amount.ToCString());
-  }
-  const Integer& result =
-      Integer::Handle(ShiftOperationHelper(Token::kSHL, value, amount));
-  // A null result indicates that a bigint operation is required.
-  return result.IsNull() ? result.raw() : result.AsValidInteger();
-}
-
 DEFINE_NATIVE_ENTRY(Smi_bitNegate, 1) {
   const Smi& operand = Smi::CheckedHandle(arguments->NativeArgAt(0));
   if (FLAG_trace_intrinsified_natives) {
@@ -339,14 +299,4 @@
   return Smi::New(result);
 }
 
-DEFINE_NATIVE_ENTRY(Mint_shlFromInt, 2) {
-  // Use the preallocated out of memory exception to avoid calling
-  // into dart code or allocating any code.
-  const Instance& exception =
-      Instance::Handle(isolate->object_store()->out_of_memory());
-  Exceptions::Throw(thread, exception);
-  UNREACHABLE();
-  return 0;
-}
-
 }  // namespace dart
diff --git a/runtime/lib/integers.dart b/runtime/lib/integers.dart
index fe33e66..eb2d165 100644
--- a/runtime/lib/integers.dart
+++ b/runtime/lib/integers.dart
@@ -47,6 +47,8 @@
   int _bitAndFromInteger(int other) native "Integer_bitAndFromInteger";
   int _bitOrFromInteger(int other) native "Integer_bitOrFromInteger";
   int _bitXorFromInteger(int other) native "Integer_bitXorFromInteger";
+  int _shrFromInteger(int other) native "Integer_shrFromInteger";
+  int _shlFromInteger(int other) native "Integer_shlFromInteger";
   int _addFromInteger(int other) native "Integer_addFromInteger";
   int _subFromInteger(int other) native "Integer_subFromInteger";
   int _mulFromInteger(int other) native "Integer_mulFromInteger";
@@ -56,8 +58,8 @@
     return other - (other ~/ this) * this;
   }
 
-  int operator >>(int other) => other._shrFromInt(this);
-  int operator <<(int other) => other._shlFromInt(this);
+  int operator >>(int other) => other._shrFromInteger(this);
+  int operator <<(int other) => other._shlFromInteger(this);
 
   bool operator <(num other) {
     return other > this;
@@ -461,8 +463,6 @@
   int operator &(int other) => other._bitAndFromSmi(this);
 
   int _bitAndFromSmi(_Smi other) native "Smi_bitAndFromSmi";
-  int _shrFromInt(int other) native "Smi_shrFromInt";
-  int _shlFromInt(int other) native "Smi_shlFromInt";
 
   /**
    * The digits of '00', '01', ... '99' as a single array.
@@ -659,15 +659,4 @@
   int get bitLength native "Mint_bitLength";
 
   int _bitAndFromSmi(_Smi other) => _bitAndFromInteger(other);
-
-  // Shift by mint exceeds range that can be handled by the VM.
-  int _shrFromInt(int other) {
-    if (other < 0) {
-      return -1;
-    } else {
-      return 0;
-    }
-  }
-
-  int _shlFromInt(int other) native "Mint_shlFromInt";
 }
diff --git a/runtime/lib/integers_patch.dart b/runtime/lib/integers_patch.dart
index 9d2f62d..a871e7c 100644
--- a/runtime/lib/integers_patch.dart
+++ b/runtime/lib/integers_patch.dart
@@ -11,12 +11,12 @@
   const factory int.fromEnvironment(String name, {int defaultValue})
       native "Integer_fromEnvironment";
 
-  int _shrFromInt(int other);
-  int _shlFromInt(int other);
   int _bitAndFromSmi(_Smi other);
   int _bitAndFromInteger(int other);
   int _bitOrFromInteger(int other);
   int _bitXorFromInteger(int other);
+  int _shrFromInteger(int other);
+  int _shlFromInteger(int other);
 
   static int _tryParseSmi(String str, int first, int last) {
     assert(first <= last);
@@ -90,7 +90,7 @@
           if (index == end) {
             return _throwFormatException(onError, source, index, null);
           }
-          int result = _parseRadix(source, 16, index, end, sign);
+          int result = _parseRadix(source, 16, index, end, sign, sign > 0);
           if (result == null) {
             return _throwFormatException(onError, source, null, null);
           }
@@ -99,7 +99,7 @@
       }
       radix = 10;
     }
-    int result = _parseRadix(source, radix, start, end, sign);
+    int result = _parseRadix(source, radix, start, end, sign, false);
     if (result == null) {
       return _throwFormatException(onError, source, null, radix);
     }
@@ -131,7 +131,7 @@
   }
 
   static int _parseRadix(
-      String source, int radix, int start, int end, int sign) {
+      String source, int radix, int start, int end, int sign, bool allowU64) {
     int tableIndex = (radix - 2) * 4 + (is64Bit ? 2 : 0);
     int blockSize = _PARSE_LIMITS[tableIndex];
     int length = end - start;
@@ -174,7 +174,7 @@
           // platform, the multiplier and block size, which are used to
           // compute it, do.
           int X = is64Bit ? 1 : 0;
-          if (radix == 16 &&
+          if (allowU64 &&
               !(result >= _int64UnsignedOverflowLimits[X] &&
                   (result > _int64UnsignedOverflowLimits[X] ||
                       smi > _int64UnsignedSmiOverflowLimits[X])) &&
diff --git a/runtime/lib/object.cc b/runtime/lib/object.cc
index c3a6a6c..a9a0550 100644
--- a/runtime/lib/object.cc
+++ b/runtime/lib/object.cc
@@ -7,7 +7,7 @@
 #include "lib/invocation_mirror.h"
 #include "vm/code_patcher.h"
 #include "vm/exceptions.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/native_entry.h"
 #include "vm/object.h"
 #include "vm/stack_frame.h"
diff --git a/runtime/observatory/tests/service/eval_internal_class_test.dart b/runtime/observatory/tests/service/eval_internal_class_test.dart
index 0e7beb1..0abee5e 100644
--- a/runtime/observatory/tests/service/eval_internal_class_test.dart
+++ b/runtime/observatory/tests/service/eval_internal_class_test.dart
@@ -12,24 +12,38 @@
 
     Class classLibrary = await root.clazz.load();
     print(classLibrary);
-    dynamic result = await classLibrary.evaluate('3 + 4');
-    print(result);
-    expect(result is DartError, isTrue);
-    expect(result.message, contains('can be evaluated only'));
+    {
+      bool caughtExceptions = false;
+      try {
+        dynamic result = await classLibrary.evaluate('3 + 4');
+        print(result);
+      } on ServerRpcException catch (e) {
+        expect(e.toString(), contains('can be evaluated only'));
+        caughtExceptions = true;
+      }
+      expect(caughtExceptions, isTrue);
+    }
 
     Class classClass = await classLibrary.clazz.load();
     print(classClass);
-    result = await classClass.evaluate('3 + 4');
-    print(result);
-    expect(result is DartError, isTrue);
-    expect(result.message, contains('can be evaluated only'));
+    {
+      bool caughtExceptions = false;
+      try {
+        dynamic result = await classClass.evaluate('3 + 4');
+        print(result);
+      } on ServerRpcException catch (e) {
+        expect(e.toString(), contains('can be evaluated only'));
+        caughtExceptions = true;
+      }
+      expect(caughtExceptions, isTrue);
+    }
 
     Instance someArray = await root.evaluate("new List(2)");
     print(someArray);
     expect(someArray is Instance, isTrue);
     Class classArray = await someArray.clazz.load();
     print(classArray);
-    result = await classArray.evaluate('3 + 4');
+    dynamic result = await classArray.evaluate('3 + 4');
     print(result);
     expect(result is Instance, isTrue);
     expect(result.valueAsString, equals('7'));
diff --git a/runtime/observatory/tests/service/eval_test.dart b/runtime/observatory/tests/service/eval_test.dart
index 8a7ff74..a461a1d 100644
--- a/runtime/observatory/tests/service/eval_test.dart
+++ b/runtime/observatory/tests/service/eval_test.dart
@@ -57,22 +57,19 @@
     print(result);
     expect(result.valueAsString, equals('105'));
 
-    result = await lib.evaluate('globalVar + staticVar + 5');
-    expect(result.type, equals('Error'));
+    await expectError(() => lib.evaluate('globalVar + staticVar + 5'));
 
     result = await cls.evaluate('globalVar + staticVar + 5');
     print(result);
     expect(result.valueAsString, equals('1105'));
 
-    result = await cls.evaluate('this + 5');
-    expect(result.type, equals('Error'));
+    await expectError(() => cls.evaluate('this + 5'));
 
     result = await instance.evaluate('this + 5');
     print(result);
     expect(result.valueAsString, equals('10005'));
 
-    result = await instance.evaluate('this + frog');
-    expect(result.type, equals('Error'));
+    await expectError(() => instance.evaluate('this + frog'));
   },
   resumeIsolate,
   hasStoppedAtBreakpoint,
@@ -93,4 +90,19 @@
   }
 ];
 
+expectError(func) async {
+  bool gotException = false;
+  dynamic result;
+  try {
+    result = await func();
+    expect(result.type, equals('Error')); // dart1 semantics
+  } on ServerRpcException catch (e) {
+    expect(e.code, equals(ServerRpcException.kExpressionCompilationError));
+    gotException = true;
+  }
+  if (result?.type != 'Error') {
+    expect(gotException, true); // dart2 semantics
+  }
+}
+
 main(args) => runIsolateTests(args, tests, testeeConcurrent: testFunction);
diff --git a/runtime/observatory/tests/service/service.status b/runtime/observatory/tests/service/service.status
index aa06e10..63598af 100644
--- a/runtime/observatory/tests/service/service.status
+++ b/runtime/observatory/tests/service/service.status
@@ -16,8 +16,6 @@
 process_service_test: Pass, Fail # Issue 24344
 
 [ $compiler == app_jit ]
-async_step_out_test: RuntimeError # Issue 29158, Async debugging
-awaiter_async_stack_contents_test: RuntimeError # Issue 29158, Async debugging
 bad_reload_test: RuntimeError # Issue 27806
 complex_reload_test: RuntimeError # Issue 27806
 debugger_location_second_test: Skip # Issue 28180
@@ -30,8 +28,7 @@
 next_through_for_each_loop_test: RuntimeError # Snapshots don't include source and generated source is not 1-to-1. The column offsets are thus off.
 next_through_implicit_call_test: RuntimeError # Snapshots don't include source and generated source is not 1-to-1. The column offsets are thus off.
 pause_on_unhandled_async_exceptions2_test: Pass, RuntimeError, Timeout, Crash # Issue 29178
-regress_28980_test: RuntimeError # Issue 29158, Async debugging
-set_library_debuggable_test: RuntimeError # Issue 29158, Async debugging
+process_service_test: RuntimeError # Spawned process runs in Dart2 mode
 set_name_rpc_test: RuntimeError # Issue 27806
 step_through_constructor_calls_test: RuntimeError # Snapshots don't include source and generated source is not 1-to-1. The column offsets are thus off.
 step_through_function_test: RuntimeError # Snapshots don't include source and generated source is not 1-to-1. The column offsets are thus off.
@@ -81,16 +78,18 @@
 [ $mode == debug && ($arch == simarm || $arch == simarm64) ]
 *: SkipSlow
 
+[ $runtime == vm && ($compiler == app_jit || $compiler == none) ]
+coverage_leaf_function_test: RuntimeError
+coverage_optimized_function_test: RuntimeError
+get_object_rpc_test: RuntimeError # Spawned process runs in Dart2 mode
+get_source_report_test: RuntimeError # Spawned process runs in Dart2 mode
+
 [ !$strong && ($compiler == dartk || $compiler == dartkp) ]
 *: Skip
 
 [ ($compiler == none || $compiler == precompiler) && ($runtime == dart_precompiled || $runtime == vm) ]
-async_step_out_test: RuntimeError # Issue 29158, Async debugging
-awaiter_async_stack_contents_test: RuntimeError # Issue 29158, Async debugging
 evaluate_activation_test/instance: RuntimeError # http://dartbug.com/20047
 evaluate_activation_test/scope: RuntimeError # http://dartbug.com/20047
-regress_28980_test: RuntimeError # Issue 29158, Async debugging
-set_library_debuggable_test: RuntimeError # Issue 29158, Async debugging
 
 [ $arch != ia32 || $arch != x64 || $system != linux ]
 get_native_allocation_samples_test: Skip # Unsupported.
diff --git a/runtime/observatory/tests/service/service_kernel.status b/runtime/observatory/tests/service/service_kernel.status
index fd0455f..1786a6f 100644
--- a/runtime/observatory/tests/service/service_kernel.status
+++ b/runtime/observatory/tests/service/service_kernel.status
@@ -24,8 +24,6 @@
 causal_async_star_stack_contents_test: RuntimeError
 causal_async_star_stack_presence_test: RuntimeError
 complex_reload_test: RuntimeError
-coverage_leaf_function_test: RuntimeError
-coverage_optimized_function_test: RuntimeError
 debugger_inspect_test: Skip # Timeout
 debugger_location_second_test: RuntimeError
 debugger_location_test: RuntimeError
@@ -87,7 +85,6 @@
 pause_on_unhandled_async_exceptions2_test: RuntimeError
 pause_on_unhandled_async_exceptions_test: RuntimeError
 positive_token_pos_test: RuntimeError
-process_service_test: RuntimeError
 regress_28443_test: RuntimeError
 regress_28980_test: RuntimeError
 rewind_optimized_out_test: RuntimeError
@@ -231,8 +228,6 @@
 bad_reload_test: Skip # Times out on sim architectures, also RuntimeError.
 break_on_activation_test: RuntimeError # Issue #33087
 complex_reload_test: Skip # Times out on sim architectures, also RuntimeError.
-coverage_leaf_function_test: RuntimeError # Please triage.
-coverage_optimized_function_test: RuntimeError # Please triage.
 debugger_inspect_test: RuntimeError, Timeout # Issue #33087
 developer_service_get_isolate_id_test: RuntimeError # Issue #33087
 eval_internal_class_test: RuntimeError # Issue #33087
@@ -249,7 +244,6 @@
 get_instances_rpc_test: RuntimeError # Issue #33087
 get_object_rpc_test: RuntimeError # Please triage.
 get_retaining_path_rpc_test: RuntimeError # Issue #33087
-get_source_report_test: RuntimeError # Please triage.
 get_user_level_retaining_path_rpc_test: RuntimeError # Issue #33087
 instance_field_order_rpc_test: RuntimeError # Issue #33087
 pause_on_exceptions_test: RuntimeError, Timeout # Issue #33087
diff --git a/runtime/observatory/tests/service/service_test_common.dart b/runtime/observatory/tests/service/service_test_common.dart
index bf3dca8..15f0007 100644
--- a/runtime/observatory/tests/service/service_test_common.dart
+++ b/runtime/observatory/tests/service/service_test_common.dart
@@ -553,10 +553,9 @@
 
 bool isKernel() {
   for (String argument in Platform.executableArguments) {
-    if (argument.startsWith("--preview_dart_2") || argument.startsWith("--dfe"))
-      return true;
+    if (argument.startsWith("--no-preview_dart_2")) return false;
   }
-  return false;
+  return true;
 }
 
 E ifKernel<E>(E then, E otherwise) {
diff --git a/runtime/tests/vm/dart/slow_path_shared_stub_test.dart b/runtime/tests/vm/dart/slow_path_shared_stub_test.dart
new file mode 100644
index 0000000..87ce2ed
--- /dev/null
+++ b/runtime/tests/vm/dart/slow_path_shared_stub_test.dart
@@ -0,0 +1,83 @@
+// Copyright (c) 2018, 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.
+
+// VMOptions=--optimization_counter_threshold=10 --no-background-compilation --shared-slow-path-triggers-gc
+
+// This tests the stackmaps and environments for safepoints corresponding to
+// slow-path code which uses shared runtime stubs.
+
+import 'package:expect/expect.dart';
+import 'dart:math';
+
+class C {
+  C talk(C _) => _;
+}
+
+int getPositiveNum() {
+  return (new DateTime.now()).millisecondsSinceEpoch;
+}
+
+C getC() {
+  if (getPositiveNum() == 0) {
+    return new C();
+  } else {
+    return null;
+  }
+}
+
+int global;
+
+int getNum() {
+  return global++;
+}
+
+test0(int k) {
+  var x = getC();
+  var y = getNum();
+  try {
+    y = getNum();
+    x = getC();
+    x.talk(x).talk(x);
+    y = getNum();
+  } catch (e) {
+    Expect.equals(x, null);
+    Expect.equals(y, k);
+  }
+}
+
+test1(int k) {
+  var x = getC();
+  var y = getNum();
+  double z = getPositiveNum().toDouble();
+  while (z > 1) {
+    z = sqrt(z - 0.1);
+  }
+  try {
+    y = getNum();
+    x = getC();
+    z = z.ceil().toDouble();
+    var k = z / 2;
+    x.talk(x).talk(x);
+    z = k / 2;
+    y = getNum();
+  } catch (e) {
+    Expect.equals(x, null);
+    Expect.equals(y, k);
+    Expect.equals(z, 1);
+  }
+}
+
+main() {
+  global = 1;
+
+  for (int i = 0; i < 100; ++i) {
+    test0(2 * (i + 1));
+  }
+
+  global = 1;
+
+  for (int i = 0; i < 100; ++i) {
+    test1(2 * (i + 1));
+  }
+}
diff --git a/runtime/tests/vm/dart/snapshot_version_test.dart b/runtime/tests/vm/dart/snapshot_version_test.dart
index 2dcde10..7034458 100644
--- a/runtime/tests/vm/dart/snapshot_version_test.dart
+++ b/runtime/tests/vm/dart/snapshot_version_test.dart
@@ -6,8 +6,10 @@
 import "package:expect/expect.dart";
 
 main() {
-  var result = Process.runSync(Platform.executable,
-      [Platform.script.resolve('./bad_snapshot').toFilePath()]);
+  var result = Process.runSync(Platform.executable, [
+    '--no-preview-dart-2',
+    Platform.script.resolve('./bad_snapshot').toFilePath()
+  ]);
   print("=== stdout ===\n ${result.stdout}");
   print("=== stderr ===\n ${result.stderr}");
   Expect.equals(253, result.exitCode);
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index d129fcb..d52b4c8 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -100,6 +100,7 @@
 
 [ $system == windows ]
 cc/CorelibCompilerStats: Skip
+cc/Profiler_ContextAllocation: Fail, Pass # Flaky on Windows --- sometimes give "profiler_test.cc: 1107: error: expected: !walker.Down()"
 cc/Service_Profile: Skip
 
 [ !$strong ]
@@ -148,6 +149,7 @@
 
 [ $compiler == dartk && $mode == debug && $runtime == vm ]
 cc/PrintJSON: Crash
+cc/Profiler_FunctionInline: Fail
 cc/Service_TokenStream: Crash
 
 # Enabling of dartk for sim{arm,arm64,dbc64} revelaed these test failures, which
@@ -205,7 +207,6 @@
 
 [ $compiler == dartk && $system == windows ]
 cc/IsolateReload_LibraryLookup: Fail, Crash
-cc/Profiler_ContextAllocation: Fail, Pass # Flaky on Windows --- sometimes give "profiler_test.cc: 1107: error: expected: !walker.Down()"
 cc/Profiler_FunctionTicks: Fail, Pass
 cc/Profiler_ToggleRecordAllocation: Fail, Pass
 cc/Profiler_TrivialRecordAllocation: Fail, Pass
diff --git a/runtime/tools/bin_to_assembly.py b/runtime/tools/bin_to_assembly.py
index 941a050..8bc5d8c 100755
--- a/runtime/tools/bin_to_assembly.py
+++ b/runtime/tools/bin_to_assembly.py
@@ -25,6 +25,10 @@
                     action="store_true", default=False)
   parser.add_option("--target_os",
                     action="store", type="string")
+  parser.add_option("--size_symbol_name",
+                    action="store", type="string")
+  parser.add_option("--target_arch",
+                    action="store", type="string")
 
   (options, args) = parser.parse_args()
   if not options.output:
@@ -78,18 +82,53 @@
       output_file.write(".balign 32\n")
       output_file.write("%s:\n" % options.symbol_name)
 
+    size = 0
     with open(options.input, "rb") as input_file:
       if options.target_os in ["win"]:
         for byte in input_file.read():
           output_file.write("byte %d\n" % ord(byte))
-        output_file.write("end\n")
+          size += 1
       else:
         for byte in input_file.read():
           output_file.write(".byte %d\n" % ord(byte))
+          size += 1
 
     if options.target_os not in ["mac", "ios", "win"]:
       output_file.write(".size {0}, .-{0}\n".format(options.symbol_name))
 
+    if options.size_symbol_name:
+      if not options.target_arch:
+        sys.stderr.write("--target_arch not specified\n")
+        parser.print_help();
+        return -1
+
+      is64bit = 0
+      if options.target_arch:
+        if options.target_arch in ["arm64", "x64"]:
+          is64bit = 1
+
+      if options.target_os in ["win"]:
+        output_file.write("public %s\n" % options.size_symbol_name)
+        output_file.write("%s label byte\n" % options.size_symbol_name)
+        if (is64bit == 1):
+          output_file.write("qword %d\n" % size )
+        else:
+          output_file.write("dword %d\n" % size )
+      else:
+        if options.target_os in ["mac", "ios"]:
+          output_file.write(".global _%s\n" % options.size_symbol_name)
+          output_file.write("_%s:\n" % options.size_symbol_name)
+        else:
+          output_file.write(".global %s\n" % options.size_symbol_name)
+          output_file.write("%s:\n" % options.size_symbol_name)
+        if (is64bit == 1):
+          output_file.write(".quad %d\n" % size )
+        else:
+          output_file.write(".long %d\n" % size )
+
+    if options.target_os in ["win"]:
+      output_file.write("end\n")
+
   return 0
 
 if __name__ == "__main__":
diff --git a/runtime/tools/dill_to_data_cc.py b/runtime/tools/dill_to_data_cc.py
deleted file mode 100755
index b3b1211..0000000
--- a/runtime/tools/dill_to_data_cc.py
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright (c) 2018, 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.
-
-# Script to create a cc file with uint8 array of bytes corresponding to the
-# content of given a dill file.
-
-import optparse
-import sys
-
-# Option => Help mapping.
-OPTION_MAP = {
-  'dill_file': 'Path to the input dill file.',
-  'data_symbol': 'The C name for the data array.',
-  'size_symbol': 'The C name for the data size variable.',
-  'output': 'Path to the generated cc file.',
-}
-
-
-def BuildOptionParser():
-  parser = optparse.OptionParser()
-  for opt, help_text in OPTION_MAP.iteritems():
-    parser.add_option('--%s' % opt, type='string', help=help_text)
-  return parser
-
-
-def ValidateOptions(options):
-  for opt in OPTION_MAP.keys():
-    if getattr(options, opt) is None:
-      sys.stderr.write('--%s option not specified.\n' % opt)
-      return False
-  return True
-
-
-def WriteData(input_filename, data_symbol, output_file):
-  output_file.write('uint8_t %s[] = {\n' % data_symbol)
-  with open(input_filename, 'rb') as f:
-    first = True
-    size = 0
-    for byte in f.read():
-      if first:
-        output_file.write('  %d' % ord(byte))
-        first = False
-      else:
-        output_file.write(',\n  %d' % ord(byte))
-      size += 1
-  output_file.write('\n};\n')
-  return size
-
-
-def WriteSize(size_symbol, size, output_file):
-  output_file.write('intptr_t %s = %d;\n' % (size_symbol, size))
-
-
-def Main():
-  opt_parser = BuildOptionParser()
-  (options, args) = opt_parser.parse_args()
-  if not ValidateOptions(options):
-    opt_parser.print_help()
-    return 1
-  if args:
-    sys.stderr.write('Unknown args: "%s"\n' % str(args))
-    parser.print_help()
-    return 1
-
-  with open(options.output, 'w') as output_file:
-    output_file.write('#include <stdint.h>\n')
-    output_file.write('extern "C" {\n')
-    size = WriteData(options.dill_file, options.data_symbol, output_file)
-    WriteSize(options.size_symbol, size, output_file)
-    output_file.write("}")
-
-
-if __name__ == '__main__':
-  sys.exit(Main())
diff --git a/runtime/vm/BUILD.gn b/runtime/vm/BUILD.gn
index a3f1640..33bd09d 100644
--- a/runtime/vm/BUILD.gn
+++ b/runtime/vm/BUILD.gn
@@ -33,6 +33,7 @@
 import("../configs.gni")
 import("../runtime_args.gni")
 import("compiler/compiler_sources.gni")
+import("heap/heap_sources.gni")
 import("vm_sources.gni")
 
 config("libdart_vm_config") {
@@ -75,7 +76,8 @@
                                   "*_test.cc",
                                   "*_test.h",
                                 ])
-  sources = vm_sources + rebase_path(compiler_sources, ".", "./compiler/")
+  sources = vm_sources + rebase_path(compiler_sources, ".", "./compiler/") +
+            rebase_path(heap_sources, ".", "./heap/")
   include_dirs = [ ".." ]
 }
 
diff --git a/runtime/vm/ast_printer_test.cc b/runtime/vm/ast_printer_test.cc
index 7f73a8d..4385f84 100644
--- a/runtime/vm/ast_printer_test.cc
+++ b/runtime/vm/ast_printer_test.cc
@@ -4,10 +4,8 @@
 
 #include "vm/ast_printer.h"
 #include "platform/assert.h"
-#include "vm/heap.h"
 #include "vm/isolate.h"
 #include "vm/object.h"
-#include "vm/object_store.h"
 #include "vm/unit_test.h"
 
 namespace dart {
diff --git a/runtime/vm/ast_test.cc b/runtime/vm/ast_test.cc
index 302c1d9..b1a062e 100644
--- a/runtime/vm/ast_test.cc
+++ b/runtime/vm/ast_test.cc
@@ -4,10 +4,8 @@
 
 #include "vm/ast.h"
 #include "platform/assert.h"
-#include "vm/heap.h"
 #include "vm/isolate.h"
 #include "vm/object.h"
-#include "vm/object_store.h"
 #include "vm/unit_test.h"
 
 namespace dart {
diff --git a/runtime/vm/benchmark_test.h b/runtime/vm/benchmark_test.h
index 58f4eee..eb08041 100644
--- a/runtime/vm/benchmark_test.h
+++ b/runtime/vm/benchmark_test.h
@@ -9,7 +9,6 @@
 
 #include "vm/dart.h"
 #include "vm/globals.h"
-#include "vm/heap.h"
 #include "vm/isolate.h"
 #include "vm/malloc_hooks.h"
 #include "vm/object.h"
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index cdbb56d..30360b7 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -43,6 +43,8 @@
   V(Integer_equalToInteger, 2)                                                 \
   V(Integer_fromEnvironment, 3)                                                \
   V(Integer_parse, 1)                                                          \
+  V(Integer_shlFromInteger, 2)                                                 \
+  V(Integer_shrFromInteger, 2)                                                 \
   V(Bool_fromEnvironment, 3)                                                   \
   V(CapabilityImpl_factory, 1)                                                 \
   V(CapabilityImpl_equals, 2)                                                  \
@@ -55,13 +57,10 @@
   V(SendPortImpl_get_hashcode, 1)                                              \
   V(SendPortImpl_sendInternal_, 2)                                             \
   V(Smi_bitAndFromSmi, 2)                                                      \
-  V(Smi_shlFromInt, 2)                                                         \
-  V(Smi_shrFromInt, 2)                                                         \
   V(Smi_bitNegate, 1)                                                          \
   V(Smi_bitLength, 1)                                                          \
   V(Mint_bitNegate, 1)                                                         \
   V(Mint_bitLength, 1)                                                         \
-  V(Mint_shlFromInt, 2)                                                        \
   V(Developer_debugger, 2)                                                     \
   V(Developer_getIsolateIDFromSendPort, 1)                                     \
   V(Developer_getServerInfo, 1)                                                \
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index 5ae8029..5bdfcb8 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -7,7 +7,7 @@
 #include "vm/compiler/jit/compiler.h"
 #include "vm/flags.h"
 #include "vm/hash_table.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/isolate.h"
 #include "vm/kernel_loader.h"
 #include "vm/log.h"
diff --git a/runtime/vm/class_table.cc b/runtime/vm/class_table.cc
index c07f14a..f0434a3 100644
--- a/runtime/vm/class_table.cc
+++ b/runtime/vm/class_table.cc
@@ -6,9 +6,8 @@
 
 #include "platform/atomic.h"
 #include "vm/flags.h"
-#include "vm/freelist.h"
 #include "vm/growable_array.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/object.h"
 #include "vm/raw_object.h"
 #include "vm/visitor.h"
diff --git a/runtime/vm/clustered_snapshot.cc b/runtime/vm/clustered_snapshot.cc
index 378b2e6..de660dd 100644
--- a/runtime/vm/clustered_snapshot.cc
+++ b/runtime/vm/clustered_snapshot.cc
@@ -8,7 +8,7 @@
 #include "vm/bootstrap.h"
 #include "vm/compiler/backend/code_statistics.h"
 #include "vm/dart.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/image_snapshot.h"
 #include "vm/native_entry.h"
 #include "vm/object.h"
diff --git a/runtime/vm/clustered_snapshot.h b/runtime/vm/clustered_snapshot.h
index 1e2da8c..7c64239 100644
--- a/runtime/vm/clustered_snapshot.h
+++ b/runtime/vm/clustered_snapshot.h
@@ -12,7 +12,7 @@
 #include "vm/globals.h"
 #include "vm/growable_array.h"
 #include "vm/hash_map.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/object.h"
 #include "vm/snapshot.h"
 #include "vm/type_testing_stubs.h"
diff --git a/runtime/vm/compiler/assembler/assembler.cc b/runtime/vm/compiler/assembler/assembler.cc
index c2dc4e7..7b7a2ff 100644
--- a/runtime/vm/compiler/assembler/assembler.cc
+++ b/runtime/vm/compiler/assembler/assembler.cc
@@ -8,7 +8,7 @@
 
 #include "platform/utils.h"
 #include "vm/cpu.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/memory_region.h"
 #include "vm/os.h"
 #include "vm/zone.h"
diff --git a/runtime/vm/compiler/assembler/assembler_arm.h b/runtime/vm/compiler/assembler/assembler_arm.h
index 10b2c61..1916d62 100644
--- a/runtime/vm/compiler/assembler/assembler_arm.h
+++ b/runtime/vm/compiler/assembler/assembler_arm.h
@@ -698,6 +698,8 @@
   void BranchLink(const Code& code, Patchability patchable);
   void BranchLinkToRuntime();
 
+  void CallNullErrorShared(bool save_fpu_registers) { UNREACHABLE(); }
+
   // Branch and link to an entry address. Call sequence can be patched.
   void BranchLinkPatchable(const StubEntry& stub_entry);
   void BranchLinkPatchable(const Code& code);
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.h b/runtime/vm/compiler/assembler/assembler_arm64.h
index 368e4a3..ba5897e 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.h
+++ b/runtime/vm/compiler/assembler/assembler_arm64.h
@@ -255,8 +255,7 @@
         return kUnsignedWord;
       case kTypedDataInt64ArrayCid:
       case kTypedDataUint64ArrayCid:
-        UNREACHABLE();
-        return kByte;
+        return kDWord;
       case kTypedDataFloat32ArrayCid:
         return kSWord;
       case kTypedDataFloat64ArrayCid:
@@ -1380,6 +1379,8 @@
   void BranchLinkPatchable(const StubEntry& stub_entry);
   void BranchLinkToRuntime();
 
+  void CallNullErrorShared(bool save_fpu_registers) { UNREACHABLE(); }
+
   // Emit a call that shares its object pool entries with other calls
   // that have the same equivalence marker.
   void BranchLinkWithEquivalence(const StubEntry& stub_entry,
diff --git a/runtime/vm/compiler/assembler/assembler_ia32.cc b/runtime/vm/compiler/assembler/assembler_ia32.cc
index ae69a35..692d9c8 100644
--- a/runtime/vm/compiler/assembler/assembler_ia32.cc
+++ b/runtime/vm/compiler/assembler/assembler_ia32.cc
@@ -7,7 +7,7 @@
 
 #include "vm/compiler/assembler/assembler.h"
 #include "vm/cpu.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/instructions.h"
 #include "vm/memory_region.h"
 #include "vm/runtime_entry.h"
diff --git a/runtime/vm/compiler/assembler/assembler_ia32.h b/runtime/vm/compiler/assembler/assembler_ia32.h
index 24783cb..6694a85 100644
--- a/runtime/vm/compiler/assembler/assembler_ia32.h
+++ b/runtime/vm/compiler/assembler/assembler_ia32.h
@@ -644,6 +644,8 @@
   void Call(const StubEntry& stub_entry, bool movable_target = false);
   void CallToRuntime();
 
+  void CallNullErrorShared(bool save_fpu_registers) { UNREACHABLE(); }
+
   void Jmp(const StubEntry& stub_entry);
   void J(Condition condition, const StubEntry& stub_entry);
 
diff --git a/runtime/vm/compiler/assembler/assembler_x64.cc b/runtime/vm/compiler/assembler/assembler_x64.cc
index 7bcd4a0..76f051f 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.cc
+++ b/runtime/vm/compiler/assembler/assembler_x64.cc
@@ -8,7 +8,7 @@
 #include "vm/compiler/assembler/assembler.h"
 #include "vm/compiler/backend/locations.h"
 #include "vm/cpu.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/instructions.h"
 #include "vm/memory_region.h"
 #include "vm/runtime_entry.h"
@@ -100,6 +100,14 @@
   call(TMP);
 }
 
+void Assembler::CallNullErrorShared(bool save_fpu_registers) {
+  uword entry_point_offset =
+      save_fpu_registers
+          ? Thread::null_error_shared_with_fpu_regs_entry_point_offset()
+          : Thread::null_error_shared_without_fpu_regs_entry_point_offset();
+  call(Address(THR, entry_point_offset));
+}
+
 void Assembler::pushq(Register reg) {
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitRegisterREX(reg, REX_NONE);
diff --git a/runtime/vm/compiler/assembler/assembler_x64.h b/runtime/vm/compiler/assembler/assembler_x64.h
index 569a962..df75109 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.h
+++ b/runtime/vm/compiler/assembler/assembler_x64.h
@@ -695,6 +695,9 @@
   void CallPatchable(const StubEntry& stub_entry);
   void Call(const StubEntry& stub_entry);
   void CallToRuntime();
+
+  void CallNullErrorShared(bool save_fpu_registers);
+
   // Emit a call that shares its object pool entries with other calls
   // that have the same equivalence marker.
   void CallWithEquivalence(const StubEntry& stub_entry,
@@ -758,6 +761,8 @@
   void LeaveCallRuntimeFrame();
 
   void CallRuntime(const RuntimeEntry& entry, intptr_t argument_count);
+  void CallRuntimeSavingRegisters(const RuntimeEntry& entry,
+                                  intptr_t argument_count);
 
   // Call runtime function. Reserves shadow space on the stack before calling
   // if platform ABI requires that. Does not restore RSP after the call itself.
diff --git a/runtime/vm/compiler/assembler/disassembler_x86.cc b/runtime/vm/compiler/assembler/disassembler_x86.cc
index a25530c..6e7089e 100644
--- a/runtime/vm/compiler/assembler/disassembler_x86.cc
+++ b/runtime/vm/compiler/assembler/disassembler_x86.cc
@@ -11,7 +11,7 @@
 
 #include "platform/utils.h"
 #include "vm/allocation.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/instructions.h"
 #include "vm/os.h"
 #include "vm/stack_frame.h"
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.cc b/runtime/vm/compiler/backend/flow_graph_compiler.cc
index 9716e1c..90112c2 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.cc
@@ -6,6 +6,7 @@
 
 #include "vm/compiler/backend/flow_graph_compiler.h"
 
+#include "platform/utils.h"
 #include "vm/bit_vector.h"
 #include "vm/compiler/backend/code_statistics.h"
 #include "vm/compiler/backend/il_printer.h"
@@ -681,7 +682,8 @@
 // See StackFrame::VisitObjectPointers for the details of how stack map is
 // interpreted.
 void FlowGraphCompiler::RecordSafepoint(LocationSummary* locs,
-                                        intptr_t slow_path_argument_count) {
+                                        intptr_t slow_path_argument_count,
+                                        Environment* env) {
   if (is_optimizing() || locs->live_registers()->HasUntaggedValues()) {
     const intptr_t spill_area_size =
         is_optimizing() ? flow_graph_.graph_entry()->spill_slot_count() : 0;
@@ -689,9 +691,20 @@
     RegisterSet* registers = locs->live_registers();
     ASSERT(registers != NULL);
     const intptr_t kFpuRegisterSpillFactor = kFpuRegisterSize / kWordSize;
-    const intptr_t live_registers_size =
-        registers->CpuRegisterCount() +
-        (registers->FpuRegisterCount() * kFpuRegisterSpillFactor);
+    intptr_t saved_registers_size = 0;
+    const bool using_shared_stub = locs->call_on_shared_slow_path();
+    if (using_shared_stub) {
+      saved_registers_size =
+          Utils::CountOneBitsWord(kDartAvailableCpuRegs) +
+          (registers->FpuRegisterCount() > 0
+               ? kFpuRegisterSpillFactor * kNumberOfFpuRegisters
+               : 0) +
+          1 /*saved PC*/;
+    } else {
+      saved_registers_size =
+          registers->CpuRegisterCount() +
+          (registers->FpuRegisterCount() * kFpuRegisterSpillFactor);
+    }
 
     BitmapBuilder* bitmap = locs->stack_bitmap();
 
@@ -706,19 +719,22 @@
 // append the live registers to it again. The bitmap produced by both calls
 // will be the same.
 #if !defined(TARGET_ARCH_DBC)
-    ASSERT(bitmap->Length() <= (spill_area_size + live_registers_size));
+    ASSERT(bitmap->Length() <= (spill_area_size + saved_registers_size));
     bitmap->SetLength(spill_area_size);
 #else
-    if (bitmap->Length() <= (spill_area_size + live_registers_size)) {
+    ASSERT(slow_path_argument_count == 0);
+    if (bitmap->Length() <= (spill_area_size + saved_registers_size)) {
       bitmap->SetLength(Utils::Maximum(bitmap->Length(), spill_area_size));
     }
 #endif
 
+    ASSERT(slow_path_argument_count == 0 || !using_shared_stub);
+
     // Mark the bits in the stack map in the same order we push registers in
     // slow path code (see FlowGraphCompiler::SaveLiveRegisters).
     //
     // Slow path code can have registers at the safepoint.
-    if (!locs->always_calls()) {
+    if (!locs->always_calls() && !using_shared_stub) {
       RegisterSet* regs = locs->live_registers();
       if (regs->FpuRegisterCount() > 0) {
         // Denote FPU registers with 0 bits in the stackmap.  Based on the
@@ -737,6 +753,7 @@
           }
         }
       }
+
       // General purpose registers have the highest register number at the
       // highest address (i.e., first in the stackmap).
       for (intptr_t i = kNumberOfCpuRegisters - 1; i >= 0; --i) {
@@ -747,7 +764,27 @@
       }
     }
 
-    // Arguments pushed on top of live registers in the slow path are tagged.
+    if (using_shared_stub) {
+      // To simplify the code in the shared stub, we create an untagged hole
+      // in the stack frame where the shared stub can leave the return address
+      // before saving registers.
+      bitmap->Set(bitmap->Length(), false);
+      if (registers->FpuRegisterCount() > 0) {
+        bitmap->SetRange(bitmap->Length(),
+                         bitmap->Length() +
+                             kNumberOfFpuRegisters * kFpuRegisterSpillFactor -
+                             1,
+                         false);
+      }
+      for (intptr_t i = kNumberOfCpuRegisters - 1; i >= 0; --i) {
+        if ((kReservedCpuRegisters & (1 << i)) != 0) continue;
+        const Register reg = static_cast<Register>(i);
+        bitmap->Set(bitmap->Length(),
+                    locs->live_registers()->ContainsRegister(reg));
+      }
+    }
+
+    // Arguments pushed after live registers in the slow path are tagged.
     for (intptr_t i = 0; i < slow_path_argument_count; ++i) {
       bitmap->Set(bitmap->Length(), true);
     }
@@ -767,7 +804,16 @@
 //     MaterializeObjectInstr::RemapRegisters
 //
 Environment* FlowGraphCompiler::SlowPathEnvironmentFor(
-    Instruction* instruction) {
+    Instruction* instruction,
+    intptr_t num_slow_path_args) {
+  const bool using_shared_stub =
+      instruction->locs()->call_on_shared_slow_path();
+  const bool shared_stub_save_fpu_registers =
+      using_shared_stub &&
+      instruction->locs()->live_registers()->FpuRegisterCount() > 0;
+  // TODO(sjindel): Modify logic below to account for slow-path args with shared
+  // stubs.
+  ASSERT(!using_shared_stub || num_slow_path_args == 0);
   if (instruction->env() == NULL) {
     ASSERT(!is_optimizing());
     return NULL;
@@ -777,6 +823,10 @@
   // 1. Iterate the registers in the order they will be spilled to compute
   //    the slots they will be spilled to.
   intptr_t next_slot = StackSize() + env->CountArgsPushed();
+  if (using_shared_stub) {
+    // The PC from the call to the shared stub is pushed here.
+    next_slot++;
+  }
   RegisterSet* regs = instruction->locs()->live_registers();
   intptr_t fpu_reg_slots[kNumberOfFpuRegisters];
   intptr_t cpu_reg_slots[kNumberOfCpuRegisters];
@@ -790,16 +840,21 @@
       next_slot += kFpuRegisterSpillFactor;
       fpu_reg_slots[i] = (next_slot - 1);
     } else {
+      if (using_shared_stub && shared_stub_save_fpu_registers) {
+        next_slot += kFpuRegisterSpillFactor;
+      }
       fpu_reg_slots[i] = -1;
     }
   }
   // General purpose registers are spilled from highest to lowest register
   // number.
   for (intptr_t i = kNumberOfCpuRegisters - 1; i >= 0; --i) {
+    if ((kReservedCpuRegisters & (1 << i)) != 0) continue;
     Register reg = static_cast<Register>(i);
     if (regs->ContainsRegister(reg)) {
       cpu_reg_slots[i] = next_slot++;
     } else {
+      if (using_shared_stub) next_slot++;
       cpu_reg_slots[i] = -1;
     }
   }
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.h b/runtime/vm/compiler/backend/flow_graph_compiler.h
index f31d130..8e05c21 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.h
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.h
@@ -583,8 +583,10 @@
                     TokenPosition token_pos,
                     intptr_t null_check_name_idx);
 
+  // 'environment' is required if 'using_shared_stub'.
   void RecordSafepoint(LocationSummary* locs,
-                       intptr_t slow_path_argument_count = 0);
+                       intptr_t slow_path_argument_count = 0,
+                       Environment* env = NULL);
 
   Label* AddDeoptStub(intptr_t deopt_id,
                       ICData::DeoptReasonId reason,
@@ -626,7 +628,8 @@
   void ClobberDeadTempRegisters(LocationSummary* locs);
 #endif
 
-  Environment* SlowPathEnvironmentFor(Instruction* instruction);
+  Environment* SlowPathEnvironmentFor(Instruction* instruction,
+                                      intptr_t num_slow_path_args);
 
   intptr_t CurrentTryIndex() const {
     if (current_block_ == NULL) {
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index 9890b36..ca1dcbf 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -1900,7 +1900,7 @@
     case Token::kTRUNCDIV:
     case Token::kMOD:
       // Check right value for zero.
-      if (right.IsSmi() && right.AsInt64Value() == 0) {
+      if (right.AsInt64Value() == 0) {
         break;  // Will throw.
       }
     // Fall through.
@@ -1912,9 +1912,8 @@
     }
     case Token::kSHL:
     case Token::kSHR:
-      if (left.IsSmi() && right.IsSmi() && (Smi::Cast(right).Value() >= 0)) {
-        result =
-            Smi::Cast(left).ShiftOp(op_kind(), Smi::Cast(right), Heap::kOld);
+      if (right.AsInt64Value() >= 0) {
+        result = left.ShiftOp(op_kind(), right, Heap::kOld);
       }
       break;
     case Token::kBIT_AND:
@@ -3980,24 +3979,42 @@
 
   virtual void AddMetadataForRuntimeCall(FlowGraphCompiler* compiler) {}
 
+  virtual void EmitSharedStubCall(Assembler* assembler,
+                                  bool save_fpu_registers) {
+    UNREACHABLE();
+  }
+
   virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
     if (Assembler::EmittingComments()) {
       __ Comment("slow path %s operation", name());
     }
+    bool use_shared_stub =
+        instruction()->UseSharedSlowPathStub(compiler->is_optimizing());
+    bool live_fpu_registers =
+        instruction()->locs()->live_registers()->FpuRegisterCount() > 0;
+    ASSERT(!use_shared_stub || num_args_ == 0);
     __ Bind(entry_label());
     LocationSummary* locs = instruction()->locs();
     // Save registers as they are needed for lazy deopt / exception handling.
-    compiler->SaveLiveRegisters(locs);
+    if (!use_shared_stub) {
+      compiler->SaveLiveRegisters(locs);
+    }
     for (intptr_t i = 0; i < num_args_; ++i) {
       __ PushRegister(locs->in(i).reg());
     }
-    __ CallRuntime(runtime_entry_, num_args_);
+    if (use_shared_stub) {
+      EmitSharedStubCall(compiler->assembler(), live_fpu_registers);
+    } else {
+      __ CallRuntime(runtime_entry_, num_args_);
+    }
     compiler->AddDescriptor(
         RawPcDescriptors::kOther, compiler->assembler()->CodeSize(),
         instruction()->deopt_id(), instruction()->token_pos(), try_index_);
     AddMetadataForRuntimeCall(compiler);
-    compiler->RecordSafepoint(locs, num_args_);
-    Environment* env = compiler->SlowPathEnvironmentFor(instruction());
+    ASSERT(instruction()->env() != nullptr);
+    compiler->RecordSafepoint(locs, num_args_, instruction()->env());
+    Environment* env =
+        compiler->SlowPathEnvironmentFor(instruction(), num_args_);
     compiler->EmitCatchEntryState(env, try_index_);
     __ Breakpoint();
   }
@@ -4042,7 +4059,9 @@
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* locs = new (zone) LocationSummary(
-      zone, kNumInputs, kNumTemps, LocationSummary::kCallOnSlowPath);
+      zone, kNumInputs, kNumTemps,
+      UseSharedSlowPathStub(opt) ? LocationSummary::kCallOnSharedSlowPath
+                                 : LocationSummary::kCallOnSlowPath);
   locs->set_in(0, Location::RequiresRegister());
   return locs;
 }
@@ -4059,6 +4078,11 @@
 
   const char* name() override { return "check null"; }
 
+  void EmitSharedStubCall(Assembler* assembler,
+                          bool save_fpu_registers) override {
+    assembler->CallNullErrorShared(save_fpu_registers);
+  }
+
   void AddMetadataForRuntimeCall(FlowGraphCompiler* compiler) override {
     const String& function_name = instruction()->AsCheckNull()->function_name();
     const intptr_t name_index =
diff --git a/runtime/vm/compiler/backend/il.h b/runtime/vm/compiler/backend/il.h
index 3ce1bb1..bcafcbd 100644
--- a/runtime/vm/compiler/backend/il.h
+++ b/runtime/vm/compiler/backend/il.h
@@ -1007,6 +1007,8 @@
 
   void Unsupported(FlowGraphCompiler* compiler);
 
+  virtual bool UseSharedSlowPathStub(bool is_optimizing) const { return false; }
+
  protected:
   // GetDeoptId and/or CopyDeoptIdFrom.
   friend class CallSiteInliner;
@@ -6902,6 +6904,15 @@
   virtual TokenPosition token_pos() const { return token_pos_; }
   const String& function_name() const { return function_name_; }
 
+  bool UseSharedSlowPathStub(bool is_optimizing) const {
+#if defined(TARGET_ARCH_X64)
+    return FLAG_enable_slow_path_sharing && FLAG_precompiled_mode &&
+           is_optimizing;
+#else
+    return false;
+#endif
+  }
+
   DECLARE_INSTRUCTION(CheckNull)
 
   // CheckNull can implicitly call Dart code (NoSuchMethodError constructor),
diff --git a/runtime/vm/compiler/backend/il_arm.cc b/runtime/vm/compiler/backend/il_arm.cc
index 269f1b4..42daf66 100644
--- a/runtime/vm/compiler/backend/il_arm.cc
+++ b/runtime/vm/compiler/backend/il_arm.cc
@@ -2934,6 +2934,8 @@
 class CheckStackOverflowSlowPath
     : public TemplateSlowPathCode<CheckStackOverflowInstr> {
  public:
+  static constexpr intptr_t kNumSlowPathArgs = 0;
+
   explicit CheckStackOverflowSlowPath(CheckStackOverflowInstr* instruction)
       : TemplateSlowPathCode(instruction) {}
 
@@ -2951,11 +2953,12 @@
     // pending_deoptimization_env_ is needed to generate a runtime call that
     // may throw an exception.
     ASSERT(compiler->pending_deoptimization_env_ == NULL);
-    Environment* env = compiler->SlowPathEnvironmentFor(instruction());
+    Environment* env =
+        compiler->SlowPathEnvironmentFor(instruction(), kNumSlowPathArgs);
     compiler->pending_deoptimization_env_ = env;
     compiler->GenerateRuntimeCall(
         instruction()->token_pos(), instruction()->deopt_id(),
-        kStackOverflowRuntimeEntry, 0, instruction()->locs());
+        kStackOverflowRuntimeEntry, kNumSlowPathArgs, instruction()->locs());
 
     if (compiler->isolate()->use_osr() && !compiler->is_optimizing() &&
         instruction()->in_loop()) {
@@ -3100,6 +3103,8 @@
   CheckedSmiSlowPath(CheckedSmiOpInstr* instruction, intptr_t try_index)
       : TemplateSlowPathCode(instruction), try_index_(try_index) {}
 
+  static constexpr intptr_t kNumSlowPathArgs = 2;
+
   virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
     if (Assembler::EmittingComments()) {
       __ Comment("slow path smi operation");
@@ -3111,7 +3116,8 @@
 
     compiler->SaveLiveRegisters(locs);
     if (instruction()->env() != NULL) {
-      Environment* env = compiler->SlowPathEnvironmentFor(instruction());
+      Environment* env =
+          compiler->SlowPathEnvironmentFor(instruction(), kNumSlowPathArgs);
       compiler->pending_deoptimization_env_ = env;
     }
     __ Push(locs->in(0).reg());
@@ -3122,8 +3128,7 @@
         Array::Handle(instruction()->call()->ic_data()->arguments_descriptor());
     compiler->EmitMegamorphicInstanceCall(
         selector, arguments_descriptor, instruction()->call()->deopt_id(),
-        instruction()->call()->token_pos(), locs, try_index_,
-        /* slow_path_argument_count = */ 2);
+        instruction()->call()->token_pos(), locs, try_index_, kNumSlowPathArgs);
     __ mov(result, Operand(R0));
     compiler->RestoreLiveRegisters(locs);
     __ b(exit_label());
@@ -3230,6 +3235,8 @@
 class CheckedSmiComparisonSlowPath
     : public TemplateSlowPathCode<CheckedSmiComparisonInstr> {
  public:
+  static constexpr intptr_t kNumSlowPathArgs = 2;
+
   CheckedSmiComparisonSlowPath(CheckedSmiComparisonInstr* instruction,
                                intptr_t try_index,
                                BranchLabels labels,
@@ -3250,7 +3257,8 @@
 
     compiler->SaveLiveRegisters(locs);
     if (instruction()->env() != NULL) {
-      Environment* env = compiler->SlowPathEnvironmentFor(instruction());
+      Environment* env =
+          compiler->SlowPathEnvironmentFor(instruction(), kNumSlowPathArgs);
       compiler->pending_deoptimization_env_ = env;
     }
     __ Push(locs->in(0).reg());
@@ -3261,8 +3269,7 @@
         Array::Handle(instruction()->call()->ic_data()->arguments_descriptor());
     compiler->EmitMegamorphicInstanceCall(
         selector, arguments_descriptor, instruction()->call()->deopt_id(),
-        instruction()->call()->token_pos(), locs, try_index_,
-        /* slow_path_argument_count = */ 2);
+        instruction()->call()->token_pos(), locs, try_index_, kNumSlowPathArgs);
     __ mov(result, Operand(R0));
     compiler->RestoreLiveRegisters(locs);
     compiler->pending_deoptimization_env_ = NULL;
diff --git a/runtime/vm/compiler/backend/il_arm64.cc b/runtime/vm/compiler/backend/il_arm64.cc
index d8bbde3..983914d 100644
--- a/runtime/vm/compiler/backend/il_arm64.cc
+++ b/runtime/vm/compiler/backend/il_arm64.cc
@@ -1047,6 +1047,7 @@
     case kTypedDataUint32ArrayCid:
       return kUnboxedUint32;
     case kTypedDataInt64ArrayCid:
+    case kTypedDataUint64ArrayCid:
       return kUnboxedInt64;
     case kTypedDataFloat32ArrayCid:
     case kTypedDataFloat64ArrayCid:
@@ -1200,7 +1201,8 @@
   }
 
   if (representation() == kUnboxedInt64) {
-    ASSERT(class_id() == kTypedDataInt64ArrayCid);
+    ASSERT(class_id() == kTypedDataInt64ArrayCid ||
+           class_id() == kTypedDataUint64ArrayCid);
     Register result = locs()->out(0).reg();
     if (aligned()) {
       __ ldr(result, element_address, kDoubleWord);
@@ -1336,6 +1338,7 @@
     case kTypedDataUint32ArrayCid:
       return kUnboxedUint32;
     case kTypedDataInt64ArrayCid:
+    case kTypedDataUint64ArrayCid:
       return kUnboxedInt64;
     case kTypedDataFloat32ArrayCid:
     case kTypedDataFloat64ArrayCid:
@@ -1380,6 +1383,8 @@
     case kTypedDataUint16ArrayCid:
     case kTypedDataInt32ArrayCid:
     case kTypedDataUint32ArrayCid:
+    case kTypedDataInt64ArrayCid:
+    case kTypedDataUint64ArrayCid:
       locs->set_in(2, Location::RequiresRegister());
       break;
     case kTypedDataFloat32ArrayCid:
@@ -1508,6 +1513,16 @@
       }
       break;
     }
+    case kTypedDataInt64ArrayCid:
+    case kTypedDataUint64ArrayCid: {
+      const Register value = locs()->in(2).reg();
+      if (aligned()) {
+        __ str(value, element_address, kDoubleWord);
+      } else {
+        __ StoreUnaligned(value, address, scratch, kDoubleWord);
+      }
+      break;
+    }
     case kTypedDataFloat32ArrayCid: {
       const VRegister value_reg = locs()->in(2).fpu_reg();
       if (aligned()) {
@@ -2681,6 +2696,8 @@
 class CheckStackOverflowSlowPath
     : public TemplateSlowPathCode<CheckStackOverflowInstr> {
  public:
+  static constexpr intptr_t kNumSlowPathArgs = 0;
+
   explicit CheckStackOverflowSlowPath(CheckStackOverflowInstr* instruction)
       : TemplateSlowPathCode(instruction) {}
 
@@ -2698,11 +2715,12 @@
     // pending_deoptimization_env_ is needed to generate a runtime call that
     // may throw an exception.
     ASSERT(compiler->pending_deoptimization_env_ == NULL);
-    Environment* env = compiler->SlowPathEnvironmentFor(instruction());
+    Environment* env =
+        compiler->SlowPathEnvironmentFor(instruction(), kNumSlowPathArgs);
     compiler->pending_deoptimization_env_ = env;
     compiler->GenerateRuntimeCall(
         instruction()->token_pos(), instruction()->deopt_id(),
-        kStackOverflowRuntimeEntry, 0, instruction()->locs());
+        kStackOverflowRuntimeEntry, kNumSlowPathArgs, instruction()->locs());
 
     if (compiler->isolate()->use_osr() && !compiler->is_optimizing() &&
         instruction()->in_loop()) {
@@ -2851,6 +2869,8 @@
 
 class CheckedSmiSlowPath : public TemplateSlowPathCode<CheckedSmiOpInstr> {
  public:
+  static constexpr intptr_t kNumSlowPathArgs = 2;
+
   CheckedSmiSlowPath(CheckedSmiOpInstr* instruction, intptr_t try_index)
       : TemplateSlowPathCode(instruction), try_index_(try_index) {}
 
@@ -2865,7 +2885,8 @@
 
     compiler->SaveLiveRegisters(locs);
     if (instruction()->env() != NULL) {
-      Environment* env = compiler->SlowPathEnvironmentFor(instruction());
+      Environment* env =
+          compiler->SlowPathEnvironmentFor(instruction(), kNumSlowPathArgs);
       compiler->pending_deoptimization_env_ = env;
     }
     __ Push(locs->in(0).reg());
@@ -2876,8 +2897,7 @@
         Array::Handle(instruction()->call()->ic_data()->arguments_descriptor());
     compiler->EmitMegamorphicInstanceCall(
         selector, arguments_descriptor, instruction()->call()->deopt_id(),
-        instruction()->call()->token_pos(), locs, try_index_,
-        /* slow_path_argument_count = */ 2);
+        instruction()->call()->token_pos(), locs, try_index_, kNumSlowPathArgs);
     __ mov(result, R0);
     compiler->RestoreLiveRegisters(locs);
     __ b(exit_label());
@@ -2986,6 +3006,8 @@
 class CheckedSmiComparisonSlowPath
     : public TemplateSlowPathCode<CheckedSmiComparisonInstr> {
  public:
+  static constexpr intptr_t kNumSlowPathArgs = 2;
+
   CheckedSmiComparisonSlowPath(CheckedSmiComparisonInstr* instruction,
                                intptr_t try_index,
                                BranchLabels labels,
@@ -3006,7 +3028,8 @@
 
     compiler->SaveLiveRegisters(locs);
     if (instruction()->env() != NULL) {
-      Environment* env = compiler->SlowPathEnvironmentFor(instruction());
+      Environment* env =
+          compiler->SlowPathEnvironmentFor(instruction(), kNumSlowPathArgs);
       compiler->pending_deoptimization_env_ = env;
     }
     __ Push(locs->in(0).reg());
@@ -3017,8 +3040,7 @@
         Array::Handle(instruction()->call()->ic_data()->arguments_descriptor());
     compiler->EmitMegamorphicInstanceCall(
         selector, arguments_descriptor, instruction()->call()->deopt_id(),
-        instruction()->call()->token_pos(), locs, try_index_,
-        /* slow_path_argument_count = */ 2);
+        instruction()->call()->token_pos(), locs, try_index_, kNumSlowPathArgs);
     __ mov(result, R0);
     compiler->RestoreLiveRegisters(locs);
     compiler->pending_deoptimization_env_ = NULL;
diff --git a/runtime/vm/compiler/backend/il_ia32.cc b/runtime/vm/compiler/backend/il_ia32.cc
index e400614..97e7ac1 100644
--- a/runtime/vm/compiler/backend/il_ia32.cc
+++ b/runtime/vm/compiler/backend/il_ia32.cc
@@ -2537,7 +2537,8 @@
     // pending_deoptimization_env_ is needed to generate a runtime call that
     // may throw an exception.
     ASSERT(compiler->pending_deoptimization_env_ == NULL);
-    Environment* env = compiler->SlowPathEnvironmentFor(instruction());
+    Environment* env = compiler->SlowPathEnvironmentFor(
+        instruction(), /*num_slow_path_args=*/0);
     compiler->pending_deoptimization_env_ = env;
     compiler->GenerateRuntimeCall(
         instruction()->token_pos(), instruction()->deopt_id(),
diff --git a/runtime/vm/compiler/backend/il_x64.cc b/runtime/vm/compiler/backend/il_x64.cc
index 2d410db..f66d347 100644
--- a/runtime/vm/compiler/backend/il_x64.cc
+++ b/runtime/vm/compiler/backend/il_x64.cc
@@ -1093,8 +1093,8 @@
     case kTypedDataInt32ArrayCid:
     case kTypedDataUint32ArrayCid:
       return CompileType::FromCid(kSmiCid);
-
     case kTypedDataInt64ArrayCid:
+    case kTypedDataUint64ArrayCid:
       return CompileType::Int();
 
     default:
@@ -1124,6 +1124,7 @@
     case kTypedDataUint32ArrayCid:
       return kUnboxedUint32;
     case kTypedDataInt64ArrayCid:
+    case kTypedDataUint64ArrayCid:
       return kUnboxedInt64;
     case kTypedDataFloat32ArrayCid:
     case kTypedDataFloat64ArrayCid:
@@ -1229,7 +1230,8 @@
   }
 
   if (representation() == kUnboxedInt64) {
-    ASSERT(class_id() == kTypedDataInt64ArrayCid);
+    ASSERT(class_id() == kTypedDataInt64ArrayCid ||
+           class_id() == kTypedDataUint64ArrayCid);
     if ((index_scale() == 1) && index.IsRegister()) {
       __ SmiUntag(index.reg());
     }
@@ -1361,6 +1363,7 @@
     case kTypedDataUint32ArrayCid:
       return kUnboxedUint32;
     case kTypedDataInt64ArrayCid:
+    case kTypedDataUint64ArrayCid:
       return kUnboxedInt64;
     case kTypedDataFloat32ArrayCid:
     case kTypedDataFloat64ArrayCid:
@@ -1421,6 +1424,7 @@
     case kTypedDataInt32ArrayCid:
     case kTypedDataUint32ArrayCid:
     case kTypedDataInt64ArrayCid:
+    case kTypedDataUint64ArrayCid:
       locs->set_in(2, Location::RequiresRegister());
       break;
     case kTypedDataFloat32ArrayCid:
@@ -1525,7 +1529,8 @@
       __ movl(element_address, value);
       break;
     }
-    case kTypedDataInt64ArrayCid: {
+    case kTypedDataInt64ArrayCid:
+    case kTypedDataUint64ArrayCid: {
       Register value = locs()->in(2).reg();
       __ movq(element_address, value);
       break;
@@ -2612,6 +2617,8 @@
 class CheckStackOverflowSlowPath
     : public TemplateSlowPathCode<CheckStackOverflowInstr> {
  public:
+  static constexpr intptr_t kNumSlowPathArgs = 0;
+
   explicit CheckStackOverflowSlowPath(CheckStackOverflowInstr* instruction)
       : TemplateSlowPathCode(instruction) {}
 
@@ -2628,11 +2635,12 @@
     // pending_deoptimization_env_ is needed to generate a runtime call that
     // may throw an exception.
     ASSERT(compiler->pending_deoptimization_env_ == NULL);
-    Environment* env = compiler->SlowPathEnvironmentFor(instruction());
+    Environment* env =
+        compiler->SlowPathEnvironmentFor(instruction(), kNumSlowPathArgs);
     compiler->pending_deoptimization_env_ = env;
     compiler->GenerateRuntimeCall(
         instruction()->token_pos(), instruction()->deopt_id(),
-        kStackOverflowRuntimeEntry, 0, instruction()->locs());
+        kStackOverflowRuntimeEntry, kNumSlowPathArgs, instruction()->locs());
 
     if (compiler->isolate()->use_osr() && !compiler->is_optimizing() &&
         instruction()->in_loop()) {
@@ -2798,6 +2806,8 @@
   CheckedSmiSlowPath(CheckedSmiOpInstr* instruction, intptr_t try_index)
       : TemplateSlowPathCode(instruction), try_index_(try_index) {}
 
+  static constexpr intptr_t kNumSlowPathArgs = 2;
+
   virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
     if (Assembler::EmittingComments()) {
       __ Comment("slow path smi operation");
@@ -2809,7 +2819,8 @@
 
     compiler->SaveLiveRegisters(locs);
     if (instruction()->env() != NULL) {
-      Environment* env = compiler->SlowPathEnvironmentFor(instruction());
+      Environment* env =
+          compiler->SlowPathEnvironmentFor(instruction(), kNumSlowPathArgs);
       compiler->pending_deoptimization_env_ = env;
     }
     __ pushq(locs->in(0).reg());
@@ -2820,8 +2831,7 @@
         Array::Handle(instruction()->call()->ic_data()->arguments_descriptor());
     compiler->EmitMegamorphicInstanceCall(
         selector, arguments_descriptor, instruction()->call()->deopt_id(),
-        instruction()->call()->token_pos(), locs, try_index_,
-        /* slow_path_argument_count = */ 2);
+        instruction()->call()->token_pos(), locs, try_index_, kNumSlowPathArgs);
     __ MoveRegister(result, RAX);
     compiler->RestoreLiveRegisters(locs);
     __ jmp(exit_label());
@@ -2954,6 +2964,8 @@
 class CheckedSmiComparisonSlowPath
     : public TemplateSlowPathCode<CheckedSmiComparisonInstr> {
  public:
+  static constexpr intptr_t kNumSlowPathArgs = 2;
+
   CheckedSmiComparisonSlowPath(CheckedSmiComparisonInstr* instruction,
                                intptr_t try_index,
                                BranchLabels labels,
@@ -2974,7 +2986,8 @@
 
     compiler->SaveLiveRegisters(locs);
     if (instruction()->env() != NULL) {
-      Environment* env = compiler->SlowPathEnvironmentFor(instruction());
+      Environment* env =
+          compiler->SlowPathEnvironmentFor(instruction(), kNumSlowPathArgs);
       compiler->pending_deoptimization_env_ = env;
     }
     __ pushq(locs->in(0).reg());
@@ -2985,8 +2998,7 @@
         Array::Handle(instruction()->call()->ic_data()->arguments_descriptor());
     compiler->EmitMegamorphicInstanceCall(
         selector, arguments_descriptor, instruction()->call()->deopt_id(),
-        instruction()->call()->token_pos(), locs, try_index_,
-        /* slow_path_argument_count = */ 2);
+        instruction()->call()->token_pos(), locs, try_index_, kNumSlowPathArgs);
     __ MoveRegister(result, RAX);
     compiler->RestoreLiveRegisters(locs);
     compiler->pending_deoptimization_env_ = NULL;
diff --git a/runtime/vm/compiler/backend/inliner.cc b/runtime/vm/compiler/backend/inliner.cc
index 65f2d38..4ef1a33 100644
--- a/runtime/vm/compiler/backend/inliner.cc
+++ b/runtime/vm/compiler/backend/inliner.cc
@@ -3104,6 +3104,7 @@
     }
     // Replace all uses of this definition with the result.
     if (call->HasUses()) {
+      ASSERT(last->IsDefinition());
       call->ReplaceUsesWith(last->AsDefinition());
     }
     // Finally insert the sequence other definition in place of this one in the
@@ -3359,17 +3360,19 @@
                               can_speculate);
     case MethodRecognizer::kInt32ArrayGetIndexed:
     case MethodRecognizer::kUint32ArrayGetIndexed:
-      if (!CanUnboxInt32()) return false;
+      if (!CanUnboxInt32()) {
+        return false;
+      }
       return InlineGetIndexed(flow_graph, kind, call, receiver, entry, last,
                               can_speculate);
-
     case MethodRecognizer::kInt64ArrayGetIndexed:
       if (!ShouldInlineInt64ArrayOps()) {
         return false;
       }
       return InlineGetIndexed(flow_graph, kind, call, receiver, entry, last,
                               can_speculate);
-
+    case MethodRecognizer::kUint64ArrayGetIndexed:
+      break;  // TODO(ajcbik): do this too?
     default:
       break;
   }
@@ -3416,6 +3419,8 @@
       }
       return InlineSetIndexed(flow_graph, kind, target, call, receiver,
                               token_pos, /* value_check = */ NULL, entry, last);
+    case MethodRecognizer::kUint64ArraySetIndexed:
+      return false;  // TODO(ajcbik): do this too?
     case MethodRecognizer::kFloat32ArraySetIndexed:
     case MethodRecognizer::kFloat64ArraySetIndexed: {
       if (!CanUnboxDouble()) {
diff --git a/runtime/vm/compiler/backend/locations.h b/runtime/vm/compiler/backend/locations.h
index ec6ab97..2d66b54 100644
--- a/runtime/vm/compiler/backend/locations.h
+++ b/runtime/vm/compiler/backend/locations.h
@@ -516,6 +516,17 @@
     ASSERT(kNumberOfFpuRegisters <= (kWordSize * kBitsPerByte));
   }
 
+  void AddAllNonReservedRegisters() {
+    for (intptr_t i = kNumberOfFpuRegisters - 1; i >= 0; --i) {
+      Add(Location::FpuRegisterLocation(static_cast<FpuRegister>(i)));
+    }
+
+    for (intptr_t i = kNumberOfCpuRegisters - 1; i >= 0; --i) {
+      if (kReservedCpuRegisters & (1 << i)) continue;
+      Add(Location::RegisterLocation(static_cast<Register>(i)));
+    }
+  }
+
   void Add(Location loc, Representation rep = kTagged) {
     if (loc.IsRegister()) {
       cpu_registers_.Add(loc.reg());
@@ -610,8 +621,10 @@
   enum ContainsCall {
     kNoCall,  // Used registers must be reserved as tmp.
     kCall,    // Registers have been saved and can be used without reservation.
-    kCallCalleeSafe,  // Registers will be saved by the callee.
-    kCallOnSlowPath   // Used registers must be reserved as tmp.
+    kCallCalleeSafe,       // Registers will be saved by the callee.
+    kCallOnSlowPath,       // Used registers must be reserved as tmp.
+    kCallOnSharedSlowPath  // Registers used to invoke shared stub must be
+                           // reserved as tmp.
   };
 
   LocationSummary(Zone* zone,
@@ -702,6 +715,10 @@
 
   bool HasCallOnSlowPath() { return can_call() && !always_calls(); }
 
+  bool call_on_shared_slow_path() const {
+    return contains_call_ == kCallOnSharedSlowPath;
+  }
+
   void PrintTo(BufferFormatter* f) const;
 
   static LocationSummary* Make(Zone* zone,
diff --git a/runtime/vm/compiler/cha.cc b/runtime/vm/compiler/cha.cc
index 32a5146..5a2fcdd 100644
--- a/runtime/vm/compiler/cha.cc
+++ b/runtime/vm/compiler/cha.cc
@@ -7,7 +7,6 @@
 #include "vm/compiler/cha.h"
 #include "vm/class_table.h"
 #include "vm/flags.h"
-#include "vm/freelist.h"
 #include "vm/object.h"
 #include "vm/raw_object.h"
 #include "vm/visitor.h"
diff --git a/runtime/vm/compiler/frontend/flow_graph_builder.cc b/runtime/vm/compiler/frontend/flow_graph_builder.cc
index d950842..6ab263e 100644
--- a/runtime/vm/compiler/frontend/flow_graph_builder.cc
+++ b/runtime/vm/compiler/frontend/flow_graph_builder.cc
@@ -19,7 +19,7 @@
 #include "vm/compiler/jit/compiler.h"
 #include "vm/exceptions.h"
 #include "vm/flags.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/isolate.h"
 #include "vm/object.h"
 #include "vm/object_store.h"
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index 68ac2f7..c440292 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -998,6 +998,7 @@
     kClosureFunction,
     kEndClosureFunctionScope,
     kNativeEntry,
+    kSubtypeTestCache,
   };
 
   enum InvocationKind {
@@ -1100,7 +1101,7 @@
           }
           field = H.LookupFieldByKernelField(target);
           cls = field.Owner();
-          elem = cls.LookupStaticFunction(name);
+          elem = cls.LookupFunctionAllowPrivate(name);
         } else {
           if ((kind == InvocationKind::method) && H.IsGetter(target)) {
             UNIMPLEMENTED();  // TODO(regis): Revisit.
@@ -1340,6 +1341,9 @@
         name = H.DartString(builder_->ReadStringReference()).raw();
         obj = NativeEntry(function, name);
       } break;
+      case ConstantPoolTag::kSubtypeTestCache: {
+        obj = SubtypeTestCache::New();
+      } break;
       default:
         UNREACHABLE();
     }
diff --git a/runtime/vm/compiler/intrinsifier.cc b/runtime/vm/compiler/intrinsifier.cc
index 2e28b70..7547302 100644
--- a/runtime/vm/compiler/intrinsifier.cc
+++ b/runtime/vm/compiler/intrinsifier.cc
@@ -54,6 +54,22 @@
     }
     return false;
   }
+  switch (function.recognized_kind()) {
+    case MethodRecognizer::kInt64ArrayGetIndexed:
+    case MethodRecognizer::kInt64ArraySetIndexed:
+    case MethodRecognizer::kUint64ArrayGetIndexed:
+    case MethodRecognizer::kUint64ArraySetIndexed:
+      // TODO(ajcbik): consider 32-bit as well.
+      if (kBitsPerWord == 64 && FlowGraphCompiler::SupportsUnboxedInt64()) {
+        break;
+      }
+      if (FLAG_trace_intrinsifier) {
+        THR_Print("No, 64-bit int intrinsic on 32-bit platform.\n");
+      }
+      return false;
+    default:
+      break;
+  }
   if (FLAG_trace_intrinsifier) {
     THR_Print("Yes.\n");
   }
@@ -523,6 +539,11 @@
     case kTypedDataUint16ArrayCid:
       // Nothing to do.
       break;
+    case kTypedDataInt64ArrayCid:
+    case kTypedDataUint64ArrayCid:
+      result = builder.AddDefinition(
+          BoxInstr::Create(kUnboxedInt64, new Value(result)));
+      break;
     default:
       UNREACHABLE();
       break;
@@ -572,6 +593,12 @@
       value = builder.AddUnboxInstr(kUnboxedUint32, new Value(value),
                                     /* is_checked = */ false);
       break;
+    case kTypedDataInt64ArrayCid:
+    case kTypedDataUint64ArrayCid:
+      value = builder.AddUnboxInstr(kUnboxedInt64, new Value(value),
+                                    /* is_checked = */ false);
+      break;
+
     case kTypedDataFloat32ArrayCid:
     case kTypedDataFloat64ArrayCid:
     case kTypedDataFloat32x4ArrayCid:
@@ -660,6 +687,8 @@
 DEFINE_ARRAY_GETTER_SETTER_INTRINSICS(Uint16Array)
 DEFINE_ARRAY_GETTER_SETTER_INTRINSICS(Int32Array)
 DEFINE_ARRAY_GETTER_SETTER_INTRINSICS(Uint32Array)
+DEFINE_ARRAY_GETTER_SETTER_INTRINSICS(Int64Array)
+DEFINE_ARRAY_GETTER_SETTER_INTRINSICS(Uint64Array)
 
 #undef DEFINE_ARRAY_GETTER_SETTER_INTRINSICS
 #undef DEFINE_ARRAY_GETTER_INTRINSIC
diff --git a/runtime/vm/compiler/method_recognizer.cc b/runtime/vm/compiler/method_recognizer.cc
index 7505d2d..ecc20f6 100644
--- a/runtime/vm/compiler/method_recognizer.cc
+++ b/runtime/vm/compiler/method_recognizer.cc
@@ -97,6 +97,10 @@
     case kInt64ArraySetIndexed:
       return kTypedDataInt64ArrayCid;
 
+    case kUint64ArrayGetIndexed:
+    case kUint64ArraySetIndexed:
+      return kTypedDataUint64ArrayCid;
+
     case kFloat32x4ArrayGetIndexed:
     case kFloat32x4ArraySetIndexed:
       return kTypedDataFloat32x4ArrayCid;
diff --git a/runtime/vm/compiler/method_recognizer.h b/runtime/vm/compiler/method_recognizer.h
index bb61216..a29f9b4 100644
--- a/runtime/vm/compiler/method_recognizer.h
+++ b/runtime/vm/compiler/method_recognizer.h
@@ -118,8 +118,6 @@
   V(_Int32x4, withFlagY, Int32x4WithFlagY, Int32x4, 0x6485a9c4)                \
   V(_Int32x4, withFlagZ, Int32x4WithFlagZ, Int32x4, 0x267acdfa)                \
   V(_Int32x4, withFlagW, Int32x4WithFlagW, Int32x4, 0x345ac675)                \
-  V(_Int64List, [], Int64ArrayGetIndexed, Dynamic, 0x51eafb97)                 \
-  V(_Int64List, []=, Int64ArraySetIndexed, Dynamic, 0x376181fb)                \
   V(_HashVMBase, get:_index, LinkedHashMap_getIndex, TypedDataUint32Array,     \
       0x02477157)                                                              \
   V(_HashVMBase, set:_index, LinkedHashMap_setIndex, Dynamic, 0x4fc8d5e0)      \
@@ -231,8 +229,8 @@
   V(_IntegerImplementation, <, Integer_lessThan, Bool, 0x365d1eba)             \
   V(_IntegerImplementation, <=, Integer_lessEqualThan, Bool, 0x74b5eb64)       \
   V(_IntegerImplementation, >=, Integer_greaterEqualThan, Bool, 0x4260c184)    \
-  V(_IntegerImplementation, <<, Integer_shl, Dynamic, 0x4db3bf69)              \
-  V(_IntegerImplementation, >>, Integer_sar, Dynamic, 0x70172b76)              \
+  V(_IntegerImplementation, <<, Integer_shl, Dynamic, 0x371c45fa)              \
+  V(_IntegerImplementation, >>, Integer_sar, Dynamic, 0x2b630578)              \
   V(_Double, toInt, DoubleToInteger, Dynamic, 0x26ef344b)                      \
 
 #define MATH_LIB_INTRINSIC_LIST(V)                                             \
@@ -299,6 +297,10 @@
   V(_Int32List, []=, Int32ArraySetIndexed, Dynamic, 0x1adf9823)                \
   V(_Uint32List, [], Uint32ArrayGetIndexed, Dynamic, 0x188658ce)               \
   V(_Uint32List, []=, Uint32ArraySetIndexed, Dynamic, 0x01f51a79)              \
+  V(_Int64List, [], Int64ArrayGetIndexed, Dynamic, 0x51eafb97)                 \
+  V(_Int64List, []=, Int64ArraySetIndexed, Dynamic, 0x376181fb)                \
+  V(_Uint64List, [], Uint64ArrayGetIndexed, Dynamic, 0x4b2a1ba2)               \
+  V(_Uint64List, []=, Uint64ArraySetIndexed, Dynamic, 0x5f881bd4)              \
   V(_Float64List, [], Float64ArrayGetIndexed, Double, 0x0a714486)              \
   V(_Float64List, []=, Float64ArraySetIndexed, Dynamic, 0x04937367)            \
   V(_Float32List, [], Float32ArrayGetIndexed, Double, 0x5ade301f)              \
@@ -495,8 +497,8 @@
   V(_IntegerImplementation, <, Integer_lessThan, 0x365d1eba)                   \
   V(_IntegerImplementation, <=, Integer_lessEqualThan, 0x74b5eb64)             \
   V(_IntegerImplementation, >=, Integer_greaterEqualThan, 0x4260c184)          \
-  V(_IntegerImplementation, <<, Integer_shl, 0x4db3bf69)                       \
-  V(_IntegerImplementation, >>, Integer_sar, 0x70172b76)                       \
+  V(_IntegerImplementation, <<, Integer_shl, 0x371c45fa)                       \
+  V(_IntegerImplementation, >>, Integer_sar, 0x2b630578)                       \
 
 // A list of core functions that internally dispatch based on received id.
 #define POLYMORPHIC_TARGET_LIST(V)                                             \
diff --git a/runtime/vm/compiler_test.cc b/runtime/vm/compiler_test.cc
index c73e135..8eb3586 100644
--- a/runtime/vm/compiler_test.cc
+++ b/runtime/vm/compiler_test.cc
@@ -7,9 +7,9 @@
 #include "vm/class_finalizer.h"
 #include "vm/code_patcher.h"
 #include "vm/dart_api_impl.h"
+#include "vm/heap/safepoint.h"
 #include "vm/kernel_isolate.h"
 #include "vm/object.h"
-#include "vm/safepoint.h"
 #include "vm/symbols.h"
 #include "vm/thread_pool.h"
 #include "vm/unit_test.h"
@@ -208,11 +208,13 @@
     TestCase::LoadTestScript("", NULL);
   }
   Library& lib = Library::Handle(Library::CoreLibrary());
-
   const String& expression = String::Handle(
       String::New("(){ return (){ return (){ return 3 + 4; }(); }(); }()"));
   Object& val = Object::Handle();
-  val = lib.Evaluate(expression, Array::empty_array(), Array::empty_array());
+  val = Api::UnwrapHandle(
+      TestCase::EvaluateExpression(lib, expression,
+                                   /* param_names= */ Array::empty_array(),
+                                   /* param_values= */ Array::empty_array()));
 
   EXPECT(!val.IsNull());
   EXPECT(!val.IsError());
@@ -226,12 +228,13 @@
     TestCase::LoadTestScript("", NULL);
   }
   Library& lib = Library::Handle(Library::CoreLibrary());
-
   const String& expression = String::Handle(String::New("3 + 4"));
   Object& val = Object::Handle();
+  val = Api::UnwrapHandle(
+      TestCase::EvaluateExpression(lib, expression,
+                                   /* param_names= */ Array::empty_array(),
+                                   /* param_values= */ Array::empty_array()));
 
-  // Run once to ensure everything we touch is compiled.
-  val = lib.Evaluate(expression, Array::empty_array(), Array::empty_array());
   EXPECT(!val.IsNull());
   EXPECT(!val.IsError());
   EXPECT(val.IsInteger());
@@ -240,7 +243,10 @@
   intptr_t initial_class_table_size =
       Isolate::Current()->class_table()->NumCids();
 
-  val = lib.Evaluate(expression, Array::empty_array(), Array::empty_array());
+  val = Api::UnwrapHandle(
+      TestCase::EvaluateExpression(lib, expression,
+                                   /* param_names= */ Array::empty_array(),
+                                   /* param_values= */ Array::empty_array()));
   EXPECT(!val.IsNull());
   EXPECT(!val.IsError());
   EXPECT(val.IsInteger());
diff --git a/runtime/vm/constants_x64.h b/runtime/vm/constants_x64.h
index 3032fcf..0038c40 100644
--- a/runtime/vm/constants_x64.h
+++ b/runtime/vm/constants_x64.h
@@ -119,6 +119,7 @@
 
 typedef uint32_t RegList;
 const RegList kAllCpuRegistersList = 0xFFFF;
+const RegList kAllFpuRegistersList = 0xFFFF;
 
 const RegList kReservedCpuRegisters =
     (1 << SPREG) | (1 << FPREG) | (1 << TMP) | (1 << PP) | (1 << THR);
diff --git a/runtime/vm/cpu_arm.cc b/runtime/vm/cpu_arm.cc
index 052f5ed..240bd2d 100644
--- a/runtime/vm/cpu_arm.cc
+++ b/runtime/vm/cpu_arm.cc
@@ -10,7 +10,7 @@
 
 #include "vm/compiler/assembler/assembler.h"
 #include "vm/cpuinfo.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/isolate.h"
 #include "vm/object.h"
 #include "vm/simulator.h"
diff --git a/runtime/vm/cpu_ia32.cc b/runtime/vm/cpu_ia32.cc
index 475f01c..b6d21f2 100644
--- a/runtime/vm/cpu_ia32.cc
+++ b/runtime/vm/cpu_ia32.cc
@@ -11,7 +11,7 @@
 #include "vm/compiler/assembler/assembler.h"
 #include "vm/constants_ia32.h"
 #include "vm/cpuinfo.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/isolate.h"
 #include "vm/object.h"
 
diff --git a/runtime/vm/cpu_x64.cc b/runtime/vm/cpu_x64.cc
index 55b9754..33c04b0 100644
--- a/runtime/vm/cpu_x64.cc
+++ b/runtime/vm/cpu_x64.cc
@@ -11,7 +11,7 @@
 #include "vm/compiler/assembler/assembler.h"
 #include "vm/constants_x64.h"
 #include "vm/cpuinfo.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/isolate.h"
 #include "vm/object.h"
 
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index 06adc84..afedf3b 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -4,7 +4,6 @@
 
 #include "vm/dart.h"
 
-#include "vm/become.h"
 #include "vm/clustered_snapshot.h"
 #include "vm/code_observers.h"
 #include "vm/cpu.h"
@@ -12,9 +11,11 @@
 #include "vm/dart_entry.h"
 #include "vm/debugger.h"
 #include "vm/flags.h"
-#include "vm/freelist.h"
 #include "vm/handles.h"
-#include "vm/heap.h"
+#include "vm/heap/become.h"
+#include "vm/heap/freelist.h"
+#include "vm/heap/heap.h"
+#include "vm/heap/store_buffer.h"
 #include "vm/isolate.h"
 #include "vm/kernel_isolate.h"
 #include "vm/malloc_hooks.h"
@@ -28,7 +29,6 @@
 #include "vm/service_isolate.h"
 #include "vm/simulator.h"
 #include "vm/snapshot.h"
-#include "vm/store_buffer.h"
 #include "vm/stub_code.h"
 #include "vm/symbols.h"
 #include "vm/thread_interrupter.h"
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 3109abd..ebee057 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -24,6 +24,7 @@
 #include "vm/exceptions.h"
 #include "vm/flags.h"
 #include "vm/growable_array.h"
+#include "vm/heap/verifier.h"
 #include "vm/image_snapshot.h"
 #include "vm/isolate_reload.h"
 #include "vm/kernel_isolate.h"
@@ -50,7 +51,6 @@
 #include "vm/timer.h"
 #include "vm/unicode.h"
 #include "vm/uri.h"
-#include "vm/verifier.h"
 #include "vm/version.h"
 
 namespace dart {
diff --git a/runtime/vm/dart_api_impl.h b/runtime/vm/dart_api_impl.h
index 375fc6d..76747d5 100644
--- a/runtime/vm/dart_api_impl.h
+++ b/runtime/vm/dart_api_impl.h
@@ -6,9 +6,9 @@
 #define RUNTIME_VM_DART_API_IMPL_H_
 
 #include "vm/allocation.h"
+#include "vm/heap/safepoint.h"
 #include "vm/native_arguments.h"
 #include "vm/object.h"
-#include "vm/safepoint.h"
 #include "vm/thread_registry.h"
 #include "vm/timeline.h"
 
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index f0ada37..b88dd39 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -14,10 +14,10 @@
 #include "vm/compiler/jit/compiler.h"
 #include "vm/dart_api_state.h"
 #include "vm/debugger_api_impl_test.h"
+#include "vm/heap/verifier.h"
 #include "vm/lockers.h"
 #include "vm/timeline.h"
 #include "vm/unit_test.h"
-#include "vm/verifier.h"
 
 namespace dart {
 
diff --git a/runtime/vm/dart_api_state.cc b/runtime/vm/dart_api_state.cc
index ba2359b..5a8a024 100644
--- a/runtime/vm/dart_api_state.cc
+++ b/runtime/vm/dart_api_state.cc
@@ -6,7 +6,7 @@
 
 #include "platform/assert.h"
 #include "platform/utils.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/isolate.h"
 #include "vm/lockers.h"
 #include "vm/thread.h"
diff --git a/runtime/vm/dart_api_state.h b/runtime/vm/dart_api_state.h
index 84953b9..c27ce69 100644
--- a/runtime/vm/dart_api_state.h
+++ b/runtime/vm/dart_api_state.h
@@ -13,13 +13,13 @@
 #include "vm/flags.h"
 #include "vm/growable_array.h"
 #include "vm/handles.h"
+#include "vm/heap/weak_table.h"
 #include "vm/object.h"
 #include "vm/os.h"
 #include "vm/os_thread.h"
 #include "vm/raw_object.h"
 #include "vm/thread_pool.h"
 #include "vm/visitor.h"
-#include "vm/weak_table.h"
 
 #include "vm/handles_impl.h"
 
diff --git a/runtime/vm/dart_entry.cc b/runtime/vm/dart_entry.cc
index 82afa1e..1ab87c0 100644
--- a/runtime/vm/dart_entry.cc
+++ b/runtime/vm/dart_entry.cc
@@ -8,11 +8,11 @@
 #include "vm/class_finalizer.h"
 #include "vm/compiler/jit/compiler.h"
 #include "vm/debugger.h"
+#include "vm/heap/safepoint.h"
 #include "vm/interpreter.h"
 #include "vm/object_store.h"
 #include "vm/resolver.h"
 #include "vm/runtime_entry.h"
-#include "vm/safepoint.h"
 #include "vm/simulator.h"
 #include "vm/stub_code.h"
 #include "vm/symbols.h"
diff --git a/runtime/vm/debugger_api_impl_test.cc b/runtime/vm/debugger_api_impl_test.cc
index 4b243a8..b597adb 100644
--- a/runtime/vm/debugger_api_impl_test.cc
+++ b/runtime/vm/debugger_api_impl_test.cc
@@ -2,6 +2,7 @@
 // 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 <include/dart_api.h>
 #include "include/dart_tools_api.h"
 
 #include "vm/class_finalizer.h"
@@ -232,39 +233,50 @@
   return Dart_NewInteger(bpt->id());
 }
 
-DART_EXPORT Dart_Handle Dart_EvaluateExpr(Dart_Handle target_in,
-                                          Dart_Handle expr_in) {
+DART_EXPORT Dart_Handle Dart_EvaluateStaticExpr(Dart_Handle lib_handle,
+                                                Dart_Handle expr_in) {
   DARTSCOPE(Thread::Current());
   CHECK_DEBUGGER(T->isolate());
 
-  const Object& target = Object::Handle(Z, Api::UnwrapHandle(target_in));
-  if (target.IsError()) return target_in;
+  const Object& target = Object::Handle(Z, Api::UnwrapHandle(lib_handle));
+  if (target.IsError()) return lib_handle;
   if (target.IsNull()) {
     return Api::NewError("%s expects argument 'target' to be non-null",
                          CURRENT_FUNC);
   }
+  const Library& lib = Library::Cast(target);
   UNWRAP_AND_CHECK_PARAM(String, expr, expr_in);
-  // Type extends Instance, must check first.
-  if (target.IsType()) {
-    const Class& cls = Class::Handle(Z, Type::Cast(target).type_class());
-    return Api::NewHandle(
-        T, cls.Evaluate(expr, Array::empty_array(), Array::empty_array()));
-  } else if (target.IsInstance()) {
-    const Instance& inst = Instance::Cast(target);
-    const Class& receiver_cls = Class::Handle(Z, inst.clazz());
-    return Api::NewHandle(
-        T, inst.Evaluate(receiver_cls, expr, Array::empty_array(),
-                         Array::empty_array()));
-  } else if (target.IsLibrary()) {
-    const Library& lib = Library::Cast(target);
+
+  if (!KernelIsolate::IsRunning()) {
     return Api::NewHandle(
         T, lib.Evaluate(expr, Array::empty_array(), Array::empty_array()));
-  } else if (target.IsClass()) {
-    const Class& cls = Class::Cast(target);
-    return Api::NewHandle(
-        T, cls.Evaluate(expr, Array::empty_array(), Array::empty_array()));
+  } else {
+    Dart_KernelCompilationResult compilation_result;
+    {
+      TransitionVMToNative transition(T);
+      compilation_result = KernelIsolate::CompileExpressionToKernel(
+          expr.ToCString(),
+          /* definitions= */ Array::empty_array(),
+          /* type_defintions= */ Array::empty_array(),
+          String::Handle(lib.url()).ToCString(),
+          /* klass= */ nullptr,
+          /* is_static= */ false);
+    }
+    if (compilation_result.status != Dart_KernelCompilationStatus_Ok) {
+      return Api::NewError("Failed to compile expression.");
+    }
+
+    const uint8_t* kernel_bytes = compilation_result.kernel;
+    intptr_t kernel_length = compilation_result.kernel_size;
+    return Api::NewHandle(T, lib.EvaluateCompiledExpression(
+                                 kernel_bytes, kernel_length,
+                                 /* type_definitions= */
+                                 Array::empty_array(),
+                                 /* param_values= */
+                                 Array::empty_array(),
+                                 /* type_param_values= */
+                                 TypeArguments::null_type_arguments()));
   }
-  return Api::NewError("%s: unsupported target type", CURRENT_FUNC);
 }
 
 DART_EXPORT Dart_Handle Dart_GetLibraryIds() {
diff --git a/runtime/vm/debugger_api_impl_test.h b/runtime/vm/debugger_api_impl_test.h
index 022beaa..f68f645 100644
--- a/runtime/vm/debugger_api_impl_test.h
+++ b/runtime/vm/debugger_api_impl_test.h
@@ -180,23 +180,16 @@
 
 /**
  * Execute the expression given in string \expr in the context
- * of \target.
+ * of \lib_handle library, as if it were a top-level function in it.
  *
  * Requires there to be a current isolate.
  *
- * The expression is evaluated in the context of \target.
- * If \target is a Dart object, the expression is evaluated as if
- * it were an instance method of the class of the object.
- * If \target is a Class, the expression is evaluated as if it
- * were a static method of that class.
- * If \target is a Library, the expression is evaluated as if it
- * were a top-level function in that library.
- *
  * \return A handle to the computed value, or an error object if
  * the compilation of the expression fails, or if the evaluation throws
  * an error.
  */
-DART_EXPORT Dart_Handle Dart_EvaluateExpr(Dart_Handle target, Dart_Handle expr);
+DART_EXPORT Dart_Handle Dart_EvaluateStaticExpr(Dart_Handle lib_handle,
+                                                Dart_Handle expr);
 
 /**
  * Returns a handle to the library \library_id.
diff --git a/runtime/vm/find_code_object_test.cc b/runtime/vm/find_code_object_test.cc
index 0be5a94..1fe3662 100644
--- a/runtime/vm/find_code_object_test.cc
+++ b/runtime/vm/find_code_object_test.cc
@@ -5,8 +5,8 @@
 #include "platform/assert.h"
 #include "vm/class_finalizer.h"
 #include "vm/compiler/jit/compiler.h"
+#include "vm/heap/pages.h"
 #include "vm/object.h"
-#include "vm/pages.h"
 #include "vm/stack_frame.h"
 #include "vm/symbols.h"
 #include "vm/unit_test.h"
diff --git a/runtime/vm/flag_list.h b/runtime/vm/flag_list.h
index 50afd6e..670fd1a 100644
--- a/runtime/vm/flag_list.h
+++ b/runtime/vm/flag_list.h
@@ -159,7 +159,7 @@
   C(stress_async_stacks, false, false, bool, false,                            \
     "Stress test async stack traces")                                          \
   P(strong, bool, false, "Enable strong mode.")                                \
-  P(sync_async, bool, true, "Start `async` functions synchronously.")          \
+  P(sync_async, bool, false, "Start `async` functions synchronously.")         \
   R(support_ast_printer, false, bool, true, "Support the AST printer.")        \
   R(support_compiler_stats, false, bool, true, "Support compiler stats.")      \
   R(support_disassembler, false, bool, true, "Support the disassembler.")      \
@@ -197,6 +197,9 @@
     "Enables heap verification before GC.")                                    \
   D(verify_gc_contains, bool, false,                                           \
     "Enables verification of address contains during GC.")                     \
-  D(verify_on_transition, bool, false, "Verify on dart <==> VM.")
+  D(verify_on_transition, bool, false, "Verify on dart <==> VM.")              \
+  P(enable_slow_path_sharing, bool, true, "Enable sharing of slow-path code.") \
+  P(shared_slow_path_triggers_gc, bool, false,                                 \
+    "TESTING: slow-path triggers a GC.")
 
 #endif  // RUNTIME_VM_FLAG_LIST_H_
diff --git a/runtime/vm/flags_test.cc b/runtime/vm/flags_test.cc
index 476bfb8..c9950db 100644
--- a/runtime/vm/flags_test.cc
+++ b/runtime/vm/flags_test.cc
@@ -4,7 +4,7 @@
 
 #include "vm/flags.h"
 #include "platform/assert.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/unit_test.h"
 
 namespace dart {
diff --git a/runtime/vm/handles_impl.h b/runtime/vm/handles_impl.h
index 9e2d9f9..901a837 100644
--- a/runtime/vm/handles_impl.h
+++ b/runtime/vm/handles_impl.h
@@ -5,7 +5,7 @@
 #ifndef RUNTIME_VM_HANDLES_IMPL_H_
 #define RUNTIME_VM_HANDLES_IMPL_H_
 
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/thread.h"
 #include "vm/visitor.h"
 
diff --git a/runtime/vm/handles_test.cc b/runtime/vm/handles_test.cc
index 0c63482..040225e 100644
--- a/runtime/vm/handles_test.cc
+++ b/runtime/vm/handles_test.cc
@@ -6,7 +6,7 @@
 #include "platform/assert.h"
 #include "vm/dart_api_state.h"
 #include "vm/flags.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/object.h"
 #include "vm/unit_test.h"
 #include "vm/zone.h"
diff --git a/runtime/vm/become.cc b/runtime/vm/heap/become.cc
similarity index 99%
rename from runtime/vm/become.cc
rename to runtime/vm/heap/become.cc
index b6512c6..7c611aa 100644
--- a/runtime/vm/become.cc
+++ b/runtime/vm/heap/become.cc
@@ -2,16 +2,16 @@
 // 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/become.h"
+#include "vm/heap/become.h"
 
 #include "platform/assert.h"
 #include "platform/utils.h"
 
 #include "vm/dart_api_state.h"
+#include "vm/heap/safepoint.h"
 #include "vm/isolate_reload.h"
 #include "vm/object.h"
 #include "vm/raw_object.h"
-#include "vm/safepoint.h"
 #include "vm/timeline.h"
 #include "vm/visitor.h"
 
diff --git a/runtime/vm/become.h b/runtime/vm/heap/become.h
similarity index 96%
rename from runtime/vm/become.h
rename to runtime/vm/heap/become.h
index ca25361..9d3263a2 100644
--- a/runtime/vm/become.h
+++ b/runtime/vm/heap/become.h
@@ -2,8 +2,8 @@
 // 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_BECOME_H_
-#define RUNTIME_VM_BECOME_H_
+#ifndef RUNTIME_VM_HEAP_BECOME_H_
+#define RUNTIME_VM_HEAP_BECOME_H_
 
 #include "vm/allocation.h"
 #include "vm/raw_object.h"
@@ -96,4 +96,4 @@
 
 }  // namespace dart
 
-#endif  // RUNTIME_VM_BECOME_H_
+#endif  // RUNTIME_VM_HEAP_BECOME_H_
diff --git a/runtime/vm/gc_compactor.cc b/runtime/vm/heap/compactor.cc
similarity index 98%
rename from runtime/vm/gc_compactor.cc
rename to runtime/vm/heap/compactor.cc
index b10d0b6..12815bf 100644
--- a/runtime/vm/gc_compactor.cc
+++ b/runtime/vm/heap/compactor.cc
@@ -2,12 +2,12 @@
 // 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/gc_compactor.h"
+#include "vm/heap/compactor.h"
 
-#include "vm/become.h"
 #include "vm/globals.h"
-#include "vm/heap.h"
-#include "vm/pages.h"
+#include "vm/heap/become.h"
+#include "vm/heap/heap.h"
+#include "vm/heap/pages.h"
 #include "vm/thread_barrier.h"
 #include "vm/timeline.h"
 
diff --git a/runtime/vm/gc_compactor.h b/runtime/vm/heap/compactor.h
similarity index 91%
rename from runtime/vm/gc_compactor.h
rename to runtime/vm/heap/compactor.h
index 7ae687f..903bf0e 100644
--- a/runtime/vm/gc_compactor.h
+++ b/runtime/vm/heap/compactor.h
@@ -2,8 +2,8 @@
 // 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_GC_COMPACTOR_H_
-#define RUNTIME_VM_GC_COMPACTOR_H_
+#ifndef RUNTIME_VM_HEAP_COMPACTOR_H_
+#define RUNTIME_VM_HEAP_COMPACTOR_H_
 
 #include "vm/allocation.h"
 #include "vm/dart_api_state.h"
@@ -52,4 +52,4 @@
 
 }  // namespace dart
 
-#endif  // RUNTIME_VM_GC_COMPACTOR_H_
+#endif  // RUNTIME_VM_HEAP_COMPACTOR_H_
diff --git a/runtime/vm/freelist.cc b/runtime/vm/heap/freelist.cc
similarity index 99%
rename from runtime/vm/freelist.cc
rename to runtime/vm/heap/freelist.cc
index c90fead..e4f690f 100644
--- a/runtime/vm/freelist.cc
+++ b/runtime/vm/heap/freelist.cc
@@ -2,7 +2,7 @@
 // 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/freelist.h"
+#include "vm/heap/freelist.h"
 
 #include "vm/bit_set.h"
 #include "vm/hash_map.h"
diff --git a/runtime/vm/freelist.h b/runtime/vm/heap/freelist.h
similarity index 96%
rename from runtime/vm/freelist.h
rename to runtime/vm/heap/freelist.h
index e5fa43d..10e0beb 100644
--- a/runtime/vm/freelist.h
+++ b/runtime/vm/heap/freelist.h
@@ -2,8 +2,8 @@
 // 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_FREELIST_H_
-#define RUNTIME_VM_FREELIST_H_
+#ifndef RUNTIME_VM_HEAP_FREELIST_H_
+#define RUNTIME_VM_HEAP_FREELIST_H_
 
 #include "platform/assert.h"
 #include "vm/allocation.h"
@@ -133,4 +133,4 @@
 
 }  // namespace dart
 
-#endif  // RUNTIME_VM_FREELIST_H_
+#endif  // RUNTIME_VM_HEAP_FREELIST_H_
diff --git a/runtime/vm/freelist_test.cc b/runtime/vm/heap/freelist_test.cc
similarity index 99%
rename from runtime/vm/freelist_test.cc
rename to runtime/vm/heap/freelist_test.cc
index 63137f1..d3a0ae9 100644
--- a/runtime/vm/freelist_test.cc
+++ b/runtime/vm/heap/freelist_test.cc
@@ -2,7 +2,7 @@
 // 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/freelist.h"
+#include "vm/heap/freelist.h"
 #include "platform/assert.h"
 #include "vm/unit_test.h"
 
diff --git a/runtime/vm/heap.cc b/runtime/vm/heap/heap.cc
similarity index 99%
rename from runtime/vm/heap.cc
rename to runtime/vm/heap/heap.cc
index cd47729..376f9b7 100644
--- a/runtime/vm/heap.cc
+++ b/runtime/vm/heap/heap.cc
@@ -2,20 +2,22 @@
 // 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/heap.h"
+#include "vm/heap/heap.h"
 
 #include "platform/assert.h"
 #include "platform/utils.h"
 #include "vm/flags.h"
+#include "vm/heap/pages.h"
+#include "vm/heap/safepoint.h"
+#include "vm/heap/scavenger.h"
+#include "vm/heap/verifier.h"
+#include "vm/heap/weak_table.h"
 #include "vm/isolate.h"
 #include "vm/lockers.h"
 #include "vm/object.h"
 #include "vm/object_set.h"
 #include "vm/os.h"
-#include "vm/pages.h"
 #include "vm/raw_object.h"
-#include "vm/safepoint.h"
-#include "vm/scavenger.h"
 #include "vm/service.h"
 #include "vm/service_event.h"
 #include "vm/service_isolate.h"
@@ -23,9 +25,7 @@
 #include "vm/tags.h"
 #include "vm/thread_pool.h"
 #include "vm/timeline.h"
-#include "vm/verifier.h"
 #include "vm/virtual_memory.h"
-#include "vm/weak_table.h"
 
 namespace dart {
 
diff --git a/runtime/vm/heap.h b/runtime/vm/heap/heap.h
similarity index 97%
rename from runtime/vm/heap.h
rename to runtime/vm/heap/heap.h
index 2edf4cf..d4c2cf1 100644
--- a/runtime/vm/heap.h
+++ b/runtime/vm/heap/heap.h
@@ -2,17 +2,17 @@
 // 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_HEAP_H_
-#define RUNTIME_VM_HEAP_H_
+#ifndef RUNTIME_VM_HEAP_HEAP_H_
+#define RUNTIME_VM_HEAP_HEAP_H_
 
 #include "platform/assert.h"
 #include "vm/allocation.h"
 #include "vm/flags.h"
 #include "vm/globals.h"
-#include "vm/pages.h"
-#include "vm/scavenger.h"
-#include "vm/spaces.h"
-#include "vm/weak_table.h"
+#include "vm/heap/pages.h"
+#include "vm/heap/scavenger.h"
+#include "vm/heap/spaces.h"
+#include "vm/heap/weak_table.h"
 
 namespace dart {
 
@@ -317,8 +317,7 @@
   bool VerifyGC(MarkExpectation mark_expectation = kForbidMarked) const;
 
   // Helper functions for garbage collection.
-  void CollectNewSpaceGarbage(Thread* thread,
-                              GCReason reason);
+  void CollectNewSpaceGarbage(Thread* thread, GCReason reason);
   void CollectOldSpaceGarbage(Thread* thread, GCType type, GCReason reason);
   void EvacuateNewSpace(Thread* thread, GCReason reason);
 
@@ -418,4 +417,4 @@
 
 }  // namespace dart
 
-#endif  // RUNTIME_VM_HEAP_H_
+#endif  // RUNTIME_VM_HEAP_HEAP_H_
diff --git a/runtime/vm/heap/heap_sources.gni b/runtime/vm/heap/heap_sources.gni
new file mode 100644
index 0000000..7fa7986
--- /dev/null
+++ b/runtime/vm/heap/heap_sources.gni
@@ -0,0 +1,42 @@
+# Copyright (c) 2018, 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 file contains all sources (vm and tests) for the compiler pipeline.
+# Unit test files need to have a "_test" suffix appended to the name.
+heap_sources = [
+  "become.cc",
+  "become.h",
+  "compactor.cc",
+  "compactor.h",
+  "freelist.cc",
+  "freelist.h",
+  "heap.cc",
+  "heap.h",
+  "marker.cc",
+  "marker.h",
+  "pages.cc",
+  "pages.h",
+  "safepoint.cc",
+  "safepoint.h",
+  "scavenger.cc",
+  "scavenger.h",
+  "spaces.h",
+  "store_buffer.cc",
+  "store_buffer.h",
+  "sweeper.cc",
+  "sweeper.h",
+  "verifier.cc",
+  "verifier.h",
+  "weak_code.cc",
+  "weak_code.h",
+  "weak_table.cc",
+  "weak_table.h",
+]
+
+heap_sources_tests = [
+  "freelist_test.cc",
+  "heap_test.cc",
+  "pages_test.cc",
+  "scavenger_test.cc",
+]
diff --git a/runtime/vm/heap_test.cc b/runtime/vm/heap/heap_test.cc
similarity index 99%
rename from runtime/vm/heap_test.cc
rename to runtime/vm/heap/heap_test.cc
index 23def28f..1281e13 100644
--- a/runtime/vm/heap_test.cc
+++ b/runtime/vm/heap/heap_test.cc
@@ -5,10 +5,10 @@
 #include "platform/globals.h"
 
 #include "platform/assert.h"
-#include "vm/become.h"
 #include "vm/dart_api_impl.h"
 #include "vm/globals.h"
-#include "vm/heap.h"
+#include "vm/heap/become.h"
+#include "vm/heap/heap.h"
 #include "vm/unit_test.h"
 
 namespace dart {
diff --git a/runtime/vm/gc_marker.cc b/runtime/vm/heap/marker.cc
similarity index 99%
rename from runtime/vm/gc_marker.cc
rename to runtime/vm/heap/marker.cc
index 21aa17d..3d0004d 100644
--- a/runtime/vm/gc_marker.cc
+++ b/runtime/vm/heap/marker.cc
@@ -2,17 +2,17 @@
 // 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/gc_marker.h"
+#include "vm/heap/marker.h"
 
 #include "vm/allocation.h"
 #include "vm/dart_api_state.h"
+#include "vm/heap/pages.h"
+#include "vm/heap/store_buffer.h"
 #include "vm/isolate.h"
 #include "vm/log.h"
 #include "vm/object_id_ring.h"
-#include "vm/pages.h"
 #include "vm/raw_object.h"
 #include "vm/stack_frame.h"
-#include "vm/store_buffer.h"
 #include "vm/thread_barrier.h"
 #include "vm/thread_pool.h"
 #include "vm/thread_registry.h"
diff --git a/runtime/vm/gc_marker.h b/runtime/vm/heap/marker.h
similarity index 88%
rename from runtime/vm/gc_marker.h
rename to runtime/vm/heap/marker.h
index 7bfa182..6926468 100644
--- a/runtime/vm/gc_marker.h
+++ b/runtime/vm/heap/marker.h
@@ -2,8 +2,8 @@
 // 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_GC_MARKER_H_
-#define RUNTIME_VM_GC_MARKER_H_
+#ifndef RUNTIME_VM_HEAP_MARKER_H_
+#define RUNTIME_VM_HEAP_MARKER_H_
 
 #include "vm/allocation.h"
 #include "vm/os_thread.h"  // Mutex.
@@ -25,9 +25,7 @@
   explicit GCMarker(Heap* heap) : heap_(heap), marked_bytes_(0) {}
   ~GCMarker() {}
 
-  void MarkObjects(Isolate* isolate,
-                   PageSpace* page_space,
-                   bool collect_code);
+  void MarkObjects(Isolate* isolate, PageSpace* page_space, bool collect_code);
 
   intptr_t marked_words() { return marked_bytes_ >> kWordSizeLog2; }
 
@@ -60,4 +58,4 @@
 
 }  // namespace dart
 
-#endif  // RUNTIME_VM_GC_MARKER_H_
+#endif  // RUNTIME_VM_HEAP_MARKER_H_
diff --git a/runtime/vm/pages.cc b/runtime/vm/heap/pages.cc
similarity index 99%
rename from runtime/vm/pages.cc
rename to runtime/vm/heap/pages.cc
index 288f8ff..344932e 100644
--- a/runtime/vm/pages.cc
+++ b/runtime/vm/heap/pages.cc
@@ -2,21 +2,21 @@
 // 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/pages.h"
+#include "vm/heap/pages.h"
 
 #include "platform/address_sanitizer.h"
 #include "platform/assert.h"
-#include "vm/become.h"
 #include "vm/compiler_stats.h"
-#include "vm/gc_compactor.h"
-#include "vm/gc_marker.h"
-#include "vm/gc_sweeper.h"
+#include "vm/heap/become.h"
+#include "vm/heap/compactor.h"
+#include "vm/heap/marker.h"
+#include "vm/heap/safepoint.h"
+#include "vm/heap/sweeper.h"
 #include "vm/lockers.h"
 #include "vm/log.h"
 #include "vm/object.h"
 #include "vm/object_set.h"
 #include "vm/os_thread.h"
-#include "vm/safepoint.h"
 #include "vm/virtual_memory.h"
 
 namespace dart {
diff --git a/runtime/vm/pages.h b/runtime/vm/heap/pages.h
similarity index 98%
rename from runtime/vm/pages.h
rename to runtime/vm/heap/pages.h
index b0dfc7a..9901fea 100644
--- a/runtime/vm/pages.h
+++ b/runtime/vm/heap/pages.h
@@ -2,14 +2,14 @@
 // 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_PAGES_H_
-#define RUNTIME_VM_PAGES_H_
+#ifndef RUNTIME_VM_HEAP_PAGES_H_
+#define RUNTIME_VM_HEAP_PAGES_H_
 
-#include "vm/freelist.h"
 #include "vm/globals.h"
+#include "vm/heap/freelist.h"
+#include "vm/heap/spaces.h"
 #include "vm/lockers.h"
 #include "vm/ring_buffer.h"
-#include "vm/spaces.h"
 #include "vm/thread.h"
 #include "vm/virtual_memory.h"
 
@@ -460,4 +460,4 @@
 
 }  // namespace dart
 
-#endif  // RUNTIME_VM_PAGES_H_
+#endif  // RUNTIME_VM_HEAP_PAGES_H_
diff --git a/runtime/vm/pages_test.cc b/runtime/vm/heap/pages_test.cc
similarity index 97%
rename from runtime/vm/pages_test.cc
rename to runtime/vm/heap/pages_test.cc
index 85a0d30..1db6113 100644
--- a/runtime/vm/pages_test.cc
+++ b/runtime/vm/heap/pages_test.cc
@@ -2,7 +2,7 @@
 // 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/pages.h"
+#include "vm/heap/pages.h"
 #include "platform/assert.h"
 #include "vm/unit_test.h"
 
diff --git a/runtime/vm/safepoint.cc b/runtime/vm/heap/safepoint.cc
similarity index 99%
rename from runtime/vm/safepoint.cc
rename to runtime/vm/heap/safepoint.cc
index 4fb88a4..2dbde70 100644
--- a/runtime/vm/safepoint.cc
+++ b/runtime/vm/heap/safepoint.cc
@@ -2,7 +2,7 @@
 // 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/safepoint.h"
+#include "vm/heap/safepoint.h"
 
 #include "vm/thread.h"
 #include "vm/thread_registry.h"
diff --git a/runtime/vm/safepoint.h b/runtime/vm/heap/safepoint.h
similarity index 98%
rename from runtime/vm/safepoint.h
rename to runtime/vm/heap/safepoint.h
index 92f4709..191323f 100644
--- a/runtime/vm/safepoint.h
+++ b/runtime/vm/heap/safepoint.h
@@ -2,8 +2,8 @@
 // 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_SAFEPOINT_H_
-#define RUNTIME_VM_SAFEPOINT_H_
+#ifndef RUNTIME_VM_HEAP_SAFEPOINT_H_
+#define RUNTIME_VM_HEAP_SAFEPOINT_H_
 
 #include "vm/globals.h"
 #include "vm/lockers.h"
@@ -374,4 +374,4 @@
 
 }  // namespace dart
 
-#endif  // RUNTIME_VM_SAFEPOINT_H_
+#endif  // RUNTIME_VM_HEAP_SAFEPOINT_H_
diff --git a/runtime/vm/scavenger.cc b/runtime/vm/heap/scavenger.cc
similarity index 99%
rename from runtime/vm/scavenger.cc
rename to runtime/vm/heap/scavenger.cc
index 3121e86..32462c0 100644
--- a/runtime/vm/scavenger.cc
+++ b/runtime/vm/heap/scavenger.cc
@@ -2,24 +2,24 @@
 // 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/scavenger.h"
+#include "vm/heap/scavenger.h"
 
 #include "vm/dart.h"
 #include "vm/dart_api_state.h"
 #include "vm/flag_list.h"
+#include "vm/heap/safepoint.h"
+#include "vm/heap/store_buffer.h"
+#include "vm/heap/verifier.h"
+#include "vm/heap/weak_table.h"
 #include "vm/isolate.h"
 #include "vm/lockers.h"
 #include "vm/object.h"
 #include "vm/object_id_ring.h"
 #include "vm/object_set.h"
-#include "vm/safepoint.h"
 #include "vm/stack_frame.h"
-#include "vm/store_buffer.h"
 #include "vm/thread_registry.h"
 #include "vm/timeline.h"
-#include "vm/verifier.h"
 #include "vm/visitor.h"
-#include "vm/weak_table.h"
 
 namespace dart {
 
diff --git a/runtime/vm/scavenger.h b/runtime/vm/heap/scavenger.h
similarity index 98%
rename from runtime/vm/scavenger.h
rename to runtime/vm/heap/scavenger.h
index 8945766..45e0c3c 100644
--- a/runtime/vm/scavenger.h
+++ b/runtime/vm/heap/scavenger.h
@@ -2,17 +2,17 @@
 // 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_SCAVENGER_H_
-#define RUNTIME_VM_SCAVENGER_H_
+#ifndef RUNTIME_VM_HEAP_SCAVENGER_H_
+#define RUNTIME_VM_HEAP_SCAVENGER_H_
 
 #include "platform/assert.h"
 #include "platform/utils.h"
 #include "vm/dart.h"
 #include "vm/flags.h"
 #include "vm/globals.h"
+#include "vm/heap/spaces.h"
 #include "vm/raw_object.h"
 #include "vm/ring_buffer.h"
-#include "vm/spaces.h"
 #include "vm/virtual_memory.h"
 #include "vm/visitor.h"
 
@@ -330,4 +330,4 @@
 
 }  // namespace dart
 
-#endif  // RUNTIME_VM_SCAVENGER_H_
+#endif  // RUNTIME_VM_HEAP_SCAVENGER_H_
diff --git a/runtime/vm/scavenger_test.cc b/runtime/vm/heap/scavenger_test.cc
similarity index 97%
rename from runtime/vm/scavenger_test.cc
rename to runtime/vm/heap/scavenger_test.cc
index 80848f6f..64b2a31 100644
--- a/runtime/vm/scavenger_test.cc
+++ b/runtime/vm/heap/scavenger_test.cc
@@ -2,7 +2,7 @@
 // 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/scavenger.h"
+#include "vm/heap/scavenger.h"
 #include "platform/assert.h"
 #include "vm/unit_test.h"
 #include "vm/visitor.h"
diff --git a/runtime/vm/spaces.h b/runtime/vm/heap/spaces.h
similarity index 85%
rename from runtime/vm/spaces.h
rename to runtime/vm/heap/spaces.h
index 33e2031..3325d2f 100644
--- a/runtime/vm/spaces.h
+++ b/runtime/vm/heap/spaces.h
@@ -2,8 +2,8 @@
 // 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_SPACES_H_
-#define RUNTIME_VM_SPACES_H_
+#ifndef RUNTIME_VM_HEAP_SPACES_H_
+#define RUNTIME_VM_HEAP_SPACES_H_
 
 // This file contains utilities shared by old and new space.
 // TODO(koda): Create Space base class with Space::CurrentUsage().
@@ -20,4 +20,4 @@
 
 }  // namespace dart
 
-#endif  // RUNTIME_VM_SPACES_H_
+#endif  // RUNTIME_VM_HEAP_SPACES_H_
diff --git a/runtime/vm/store_buffer.cc b/runtime/vm/heap/store_buffer.cc
similarity index 99%
rename from runtime/vm/store_buffer.cc
rename to runtime/vm/heap/store_buffer.cc
index 851c847..00bf036 100644
--- a/runtime/vm/store_buffer.cc
+++ b/runtime/vm/heap/store_buffer.cc
@@ -2,7 +2,7 @@
 // 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/store_buffer.h"
+#include "vm/heap/store_buffer.h"
 
 #include "platform/assert.h"
 #include "vm/lockers.h"
diff --git a/runtime/vm/store_buffer.h b/runtime/vm/heap/store_buffer.h
similarity index 97%
rename from runtime/vm/store_buffer.h
rename to runtime/vm/heap/store_buffer.h
index 4dab0f7..75aef6f 100644
--- a/runtime/vm/store_buffer.h
+++ b/runtime/vm/heap/store_buffer.h
@@ -2,8 +2,8 @@
 // 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_STORE_BUFFER_H_
-#define RUNTIME_VM_STORE_BUFFER_H_
+#ifndef RUNTIME_VM_HEAP_STORE_BUFFER_H_
+#define RUNTIME_VM_HEAP_STORE_BUFFER_H_
 
 #include "platform/assert.h"
 #include "vm/globals.h"
@@ -175,4 +175,4 @@
 
 }  // namespace dart
 
-#endif  // RUNTIME_VM_STORE_BUFFER_H_
+#endif  // RUNTIME_VM_HEAP_STORE_BUFFER_H_
diff --git a/runtime/vm/gc_sweeper.cc b/runtime/vm/heap/sweeper.cc
similarity index 97%
rename from runtime/vm/gc_sweeper.cc
rename to runtime/vm/heap/sweeper.cc
index a064f2d..092ba69 100644
--- a/runtime/vm/gc_sweeper.cc
+++ b/runtime/vm/heap/sweeper.cc
@@ -2,14 +2,14 @@
 // 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/gc_sweeper.h"
+#include "vm/heap/sweeper.h"
 
-#include "vm/freelist.h"
 #include "vm/globals.h"
-#include "vm/heap.h"
+#include "vm/heap/freelist.h"
+#include "vm/heap/heap.h"
+#include "vm/heap/pages.h"
+#include "vm/heap/safepoint.h"
 #include "vm/lockers.h"
-#include "vm/pages.h"
-#include "vm/safepoint.h"
 #include "vm/thread_pool.h"
 #include "vm/timeline.h"
 
diff --git a/runtime/vm/gc_sweeper.h b/runtime/vm/heap/sweeper.h
similarity index 92%
rename from runtime/vm/gc_sweeper.h
rename to runtime/vm/heap/sweeper.h
index ba9aaef..609b962 100644
--- a/runtime/vm/gc_sweeper.h
+++ b/runtime/vm/heap/sweeper.h
@@ -2,8 +2,8 @@
 // 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_GC_SWEEPER_H_
-#define RUNTIME_VM_GC_SWEEPER_H_
+#ifndef RUNTIME_VM_HEAP_SWEEPER_H_
+#define RUNTIME_VM_HEAP_SWEEPER_H_
 
 #include "vm/globals.h"
 
@@ -43,4 +43,4 @@
 
 }  // namespace dart
 
-#endif  // RUNTIME_VM_GC_SWEEPER_H_
+#endif  // RUNTIME_VM_HEAP_SWEEPER_H_
diff --git a/runtime/vm/verifier.cc b/runtime/vm/heap/verifier.cc
similarity index 97%
rename from runtime/vm/verifier.cc
rename to runtime/vm/heap/verifier.cc
index 65d854b..808036c 100644
--- a/runtime/vm/verifier.cc
+++ b/runtime/vm/heap/verifier.cc
@@ -2,13 +2,12 @@
 // 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/verifier.h"
+#include "vm/heap/verifier.h"
 
 #include "platform/assert.h"
 #include "vm/dart.h"
 #include "vm/dart_api_state.h"
-#include "vm/freelist.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/isolate.h"
 #include "vm/object.h"
 #include "vm/object_set.h"
diff --git a/runtime/vm/verifier.h b/runtime/vm/heap/verifier.h
similarity index 95%
rename from runtime/vm/verifier.h
rename to runtime/vm/heap/verifier.h
index 57b374b..f12ba82 100644
--- a/runtime/vm/verifier.h
+++ b/runtime/vm/heap/verifier.h
@@ -2,8 +2,8 @@
 // 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_VERIFIER_H_
-#define RUNTIME_VM_VERIFIER_H_
+#ifndef RUNTIME_VM_HEAP_VERIFIER_H_
+#define RUNTIME_VM_HEAP_VERIFIER_H_
 
 #include "vm/flags.h"
 #include "vm/globals.h"
@@ -86,4 +86,4 @@
 
 }  // namespace dart
 
-#endif  // RUNTIME_VM_VERIFIER_H_
+#endif  // RUNTIME_VM_HEAP_VERIFIER_H_
diff --git a/runtime/vm/weak_code.cc b/runtime/vm/heap/weak_code.cc
similarity index 98%
rename from runtime/vm/weak_code.cc
rename to runtime/vm/heap/weak_code.cc
index b7a2dda..c1a3d53 100644
--- a/runtime/vm/weak_code.cc
+++ b/runtime/vm/heap/weak_code.cc
@@ -2,7 +2,7 @@
 // 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/weak_code.h"
+#include "vm/heap/weak_code.h"
 
 #include "platform/assert.h"
 
diff --git a/runtime/vm/weak_code.h b/runtime/vm/heap/weak_code.h
similarity index 90%
rename from runtime/vm/weak_code.h
rename to runtime/vm/heap/weak_code.h
index 42da4d7..74b4389 100644
--- a/runtime/vm/weak_code.h
+++ b/runtime/vm/heap/weak_code.h
@@ -2,8 +2,8 @@
 // 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_WEAK_CODE_H_
-#define RUNTIME_VM_WEAK_CODE_H_
+#ifndef RUNTIME_VM_HEAP_WEAK_CODE_H_
+#define RUNTIME_VM_HEAP_WEAK_CODE_H_
 
 #include "vm/allocation.h"
 #include "vm/globals.h"
@@ -39,4 +39,4 @@
 
 }  // namespace dart
 
-#endif  // RUNTIME_VM_WEAK_CODE_H_
+#endif  // RUNTIME_VM_HEAP_WEAK_CODE_H_
diff --git a/runtime/vm/weak_table.cc b/runtime/vm/heap/weak_table.cc
similarity index 98%
rename from runtime/vm/weak_table.cc
rename to runtime/vm/heap/weak_table.cc
index f9f44f1..4fd7917 100644
--- a/runtime/vm/weak_table.cc
+++ b/runtime/vm/heap/weak_table.cc
@@ -2,7 +2,7 @@
 // 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/weak_table.h"
+#include "vm/heap/weak_table.h"
 
 #include "platform/assert.h"
 #include "vm/raw_object.h"
diff --git a/runtime/vm/weak_table.h b/runtime/vm/heap/weak_table.h
similarity index 97%
rename from runtime/vm/weak_table.h
rename to runtime/vm/heap/weak_table.h
index 783013b..c7970cf 100644
--- a/runtime/vm/weak_table.h
+++ b/runtime/vm/heap/weak_table.h
@@ -2,8 +2,8 @@
 // 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_WEAK_TABLE_H_
-#define RUNTIME_VM_WEAK_TABLE_H_
+#ifndef RUNTIME_VM_HEAP_WEAK_TABLE_H_
+#define RUNTIME_VM_HEAP_WEAK_TABLE_H_
 
 #include "vm/globals.h"
 
@@ -188,4 +188,4 @@
 
 }  // namespace dart
 
-#endif  // RUNTIME_VM_WEAK_TABLE_H_
+#endif  // RUNTIME_VM_HEAP_WEAK_TABLE_H_
diff --git a/runtime/vm/image_snapshot.cc b/runtime/vm/image_snapshot.cc
index 162f58b..90fa8fb 100644
--- a/runtime/vm/image_snapshot.cc
+++ b/runtime/vm/image_snapshot.cc
@@ -9,7 +9,7 @@
 #include "vm/dwarf.h"
 #include "vm/hash.h"
 #include "vm/hash_map.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/json_writer.h"
 #include "vm/object.h"
 #include "vm/stub_code.h"
diff --git a/runtime/vm/interpreter.cc b/runtime/vm/interpreter.cc
index 4d58732..5dbbdd5 100644
--- a/runtime/vm/interpreter.cc
+++ b/runtime/vm/interpreter.cc
@@ -599,6 +599,14 @@
 }
 #endif  // defined(DEBUG)
 
+bool Interpreter::IsTracing() const {
+#if defined(DEBUG)
+  return IsTracingExecution();
+#else
+  return false;
+#endif
+}
+
 // Calls into the Dart runtime are based on this interface.
 typedef void (*InterpreterRuntimeCall)(NativeArguments arguments);
 
@@ -909,34 +917,38 @@
                                      RawObject * *arg0, Thread * thread);
     invokestub entrypoint = reinterpret_cast<invokestub>(
         StubCode::InvokeDartCodeFromBytecode_entry()->EntryPoint());
+    RawObject* result;
     Exit(thread, *FP, call_top + 1, *pc);
     {
       InterpreterSetjmpBuffer buffer(this);
       if (!setjmp(buffer.buffer_)) {
         thread->set_vm_tag(reinterpret_cast<uword>(entrypoint));
-        RawObject* result = entrypoint(code, argdesc, call_base, thread);
+        result = entrypoint(code, argdesc, call_base, thread);
         thread->set_vm_tag(VMTag::kDartTagId);
         thread->set_top_exit_frame_info(0);
         ASSERT(thread->execution_state() == Thread::kThreadInGenerated);
-
-        // It is legit to call the constructor of an error object, however a
-        // result of class UnhandledException must be propagated.
-        if (result->IsHeapObject() &&
-            result->GetClassId() == kUnhandledExceptionCid) {
-          // TODO(regis): Shoudn't the callee have set these and thrown?
-          special_[kExceptionSpecialIndex] = result;
-          special_[kStackTraceSpecialIndex] = Object::null();
-          return false;
-        }
-
-        // Pop args and push result.
-        *SP = call_base;
-        **SP = result;
-        return true;
       } else {
         return false;
       }
     }
+    // Pop args and push result.
+    *SP = call_base;
+    **SP = result;
+
+    // It is legit to call the constructor of an error object, however a
+    // result of class UnhandledException must be propagated.
+    if (result->IsHeapObject() &&
+        result->GetClassId() == kUnhandledExceptionCid) {
+      (*SP)[0] = UnhandledException::RawCast(result)->ptr()->exception_;
+      (*SP)[1] = UnhandledException::RawCast(result)->ptr()->stacktrace_;
+      (*SP)[2] = 0;  // Space for result.
+      Exit(thread, *FP, *SP + 3, *pc);
+      NativeArguments args(thread, 2, *SP, *SP + 2);
+      if (!InvokeRuntime(thread, this, DRT_ReThrow, args)) {
+        return false;
+      }
+    }
+    return true;
   }
   ASSERT(Function::HasBytecode(function));
   // Bytecode was loaded in the above compilation step.
@@ -1275,9 +1287,9 @@
       if (IsTracingExecution()) {                                              \
         THR_Print("%" Pu64 " ", icount_);                                      \
         THR_Print("Returning exception from interpreter 0x%" Px                \
-                  " at fp_ 0x%" Px "\n",                                       \
-                  reinterpret_cast<uword>(this),                               \
-                  reinterpret_cast<uword>(fp_));                               \
+                  " at fp_ 0x%" Px " exit 0x%" Px "\n",                        \
+                  reinterpret_cast<uword>(this), reinterpret_cast<uword>(fp_), \
+                  exit_fp);                                                    \
       }                                                                        \
       ASSERT(reinterpret_cast<uword>(fp_) < stack_limit());                    \
       return special_[kExceptionSpecialIndex];                                 \
@@ -1409,9 +1421,10 @@
 #if defined(DEBUG)
   if (IsTracingExecution()) {
     THR_Print("%" Pu64 " ", icount_);
-    THR_Print("%s interpreter 0x%" Px " at fp_ 0x%" Px " %s\n",
+    THR_Print("%s interpreter 0x%" Px " at fp_ 0x%" Px " exit 0x%" Px " %s\n",
               reentering ? "Re-entering" : "Entering",
               reinterpret_cast<uword>(this), reinterpret_cast<uword>(fp_),
+              thread->top_exit_frame_info(),
               Function::Handle(code.function()).ToCString());
   }
 #endif
@@ -3090,8 +3103,10 @@
 #if defined(DEBUG)
       if (IsTracingExecution()) {
         THR_Print("%" Pu64 " ", icount_);
-        THR_Print("Returning from interpreter 0x%" Px " at fp_ 0x%" Px "\n",
-                  reinterpret_cast<uword>(this), reinterpret_cast<uword>(fp_));
+        THR_Print("Returning from interpreter 0x%" Px " at fp_ 0x%" Px
+                  " exit 0x%" Px "\n",
+                  reinterpret_cast<uword>(this), reinterpret_cast<uword>(fp_),
+                  exit_fp);
       }
       ASSERT(reinterpret_cast<uword>(fp_) < stack_limit());
       const intptr_t argc = reinterpret_cast<uword>(pc) >> 2;
@@ -4437,6 +4452,8 @@
     RawObject* raw_exception = thread->active_exception();
     RawObject* raw_stacktrace = thread->active_stacktrace();
     ASSERT(raw_exception != Object::null());
+    thread->set_active_exception(Object::null_object());
+    thread->set_active_stacktrace(Object::null_object());
     special_[kExceptionSpecialIndex] = raw_exception;
     special_[kStackTraceSpecialIndex] = raw_stacktrace;
     pc_ = thread->resume_pc();
diff --git a/runtime/vm/interpreter.h b/runtime/vm/interpreter.h
index 0a87cc4..ef71e71 100644
--- a/runtime/vm/interpreter.h
+++ b/runtime/vm/interpreter.h
@@ -51,12 +51,6 @@
   // High address (KBC stack grows up).
   uword stack_limit() const { return stack_limit_; }
 
-  // The thread's top_exit_frame_info refers to a Dart frame in the interpreter
-  // stack. The interpreter's top_exit_frame_info refers to a C++ frame in the
-  // native stack.
-  uword top_exit_frame_info() const { return top_exit_frame_info_; }
-  void set_top_exit_frame_info(uword value) { top_exit_frame_info_ = value; }
-
   // Returns true if the interpreter's stack contains the given frame.
   // TODO(regis): Once the interpreter shares the native stack, we may rely on
   // a new thread vm_tag to identify an interpreter frame and we will not need
@@ -99,6 +93,8 @@
 
   void VisitObjectPointers(ObjectPointerVisitor* visitor);
 
+  bool IsTracing() const;
+
  private:
   uintptr_t* stack_;
   uword stack_base_;
@@ -187,13 +183,13 @@
                           RawObject*** SP,
                           uint32_t** pc);
 
-#if !defined(PRODUCT)
+#if defined(DEBUG)
   // Returns true if tracing of executed instructions is enabled.
   bool IsTracingExecution() const;
 
   // Prints bytecode instruction at given pc for instruction tracing.
   void TraceInstruction(uint32_t* pc) const;
-#endif  // !defined(PRODUCT)
+#endif  // defined(DEBUG)
 
   // Longjmp support for exceptions.
   InterpreterSetjmpBuffer* last_setjmp_buffer() { return last_setjmp_buffer_; }
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index f0840c0..21ab5e0 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -19,7 +19,10 @@
 #include "vm/debugger.h"
 #include "vm/deopt_instructions.h"
 #include "vm/flags.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
+#include "vm/heap/safepoint.h"
+#include "vm/heap/store_buffer.h"
+#include "vm/heap/verifier.h"
 #include "vm/image_snapshot.h"
 #include "vm/interpreter.h"
 #include "vm/isolate_reload.h"
@@ -34,13 +37,11 @@
 #include "vm/port.h"
 #include "vm/profiler.h"
 #include "vm/reusable_handles.h"
-#include "vm/safepoint.h"
 #include "vm/service.h"
 #include "vm/service_event.h"
 #include "vm/service_isolate.h"
 #include "vm/simulator.h"
 #include "vm/stack_frame.h"
-#include "vm/store_buffer.h"
 #include "vm/stub_code.h"
 #include "vm/symbols.h"
 #include "vm/tags.h"
@@ -49,7 +50,6 @@
 #include "vm/timeline.h"
 #include "vm/timeline_analysis.h"
 #include "vm/timer.h"
-#include "vm/verifier.h"
 #include "vm/visitor.h"
 
 namespace dart {
@@ -1854,6 +1854,10 @@
           "--check-reloaded is enabled.\n");
     }
   }
+
+  // TODO(33514): Ideally this should be moved to Dart_ShutdownIsolate,
+  // next to ServiceIsolate::SendIsolateShutdownMessage().
+  KernelIsolate::NotifyAboutIsolateShutdown(Isolate::Current());
 #endif  // !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
 
   // Then, proceed with low-level teardown.
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index 2dad860..7097f5a 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -14,6 +14,7 @@
 #include "vm/fixed_cache.h"
 #include "vm/growable_array.h"
 #include "vm/handles.h"
+#include "vm/heap/verifier.h"
 #include "vm/megamorphic_cache_table.h"
 #include "vm/metrics.h"
 #include "vm/os_thread.h"
@@ -22,7 +23,6 @@
 #include "vm/thread.h"
 #include "vm/timer.h"
 #include "vm/token_position.h"
-#include "vm/verifier.h"
 
 namespace dart {
 
diff --git a/runtime/vm/isolate_reload.cc b/runtime/vm/isolate_reload.cc
index 4832667..6f7c825 100644
--- a/runtime/vm/isolate_reload.cc
+++ b/runtime/vm/isolate_reload.cc
@@ -4,11 +4,12 @@
 
 #include "vm/isolate_reload.h"
 
-#include "vm/become.h"
 #include "vm/bit_vector.h"
 #include "vm/compiler/jit/compiler.h"
 #include "vm/dart_api_impl.h"
 #include "vm/hash_table.h"
+#include "vm/heap/become.h"
+#include "vm/heap/safepoint.h"
 #include "vm/isolate.h"
 #include "vm/kernel_isolate.h"
 #include "vm/kernel_loader.h"
@@ -17,7 +18,6 @@
 #include "vm/object_store.h"
 #include "vm/parser.h"
 #include "vm/runtime_entry.h"
-#include "vm/safepoint.h"
 #include "vm/service_event.h"
 #include "vm/stack_frame.h"
 #include "vm/thread.h"
@@ -1025,7 +1025,7 @@
     return;
   }
 
-  *modified_sources = new (zone_) Dart_SourceFile[*count];
+  *modified_sources = zone_->Alloc<Dart_SourceFile>(*count);
   for (intptr_t i = 0; i < *count; ++i) {
     (*modified_sources)[i].uri = modified_sources_uris[i];
     (*modified_sources)[i].source = NULL;
diff --git a/runtime/vm/json_stream.cc b/runtime/vm/json_stream.cc
index da65506..c320591 100644
--- a/runtime/vm/json_stream.cc
+++ b/runtime/vm/json_stream.cc
@@ -7,11 +7,11 @@
 #include "include/dart_native_api.h"
 #include "vm/dart_entry.h"
 #include "vm/debugger.h"
+#include "vm/heap/safepoint.h"
 #include "vm/json_stream.h"
 #include "vm/message.h"
 #include "vm/metrics.h"
 #include "vm/object.h"
-#include "vm/safepoint.h"
 #include "vm/service.h"
 #include "vm/service_event.h"
 #include "vm/thread_registry.h"
diff --git a/runtime/vm/kernel_isolate.cc b/runtime/vm/kernel_isolate.cc
index dd39430..b5efb44 100644
--- a/runtime/vm/kernel_isolate.cc
+++ b/runtime/vm/kernel_isolate.cc
@@ -54,6 +54,7 @@
 const int KernelIsolate::kTrainTag = 3;
 const int KernelIsolate::kCompileExpressionTag = 4;
 const int KernelIsolate::kListDependenciesTag = 5;
+const int KernelIsolate::kNotifyIsolateShutdown = 6;
 
 Dart_IsolateCreateCallback KernelIsolate::create_callback_ = NULL;
 Monitor* KernelIsolate::monitor_ = new Monitor();
@@ -89,7 +90,7 @@
     api_flags.enable_error_on_bad_override = false;
     api_flags.reify_generic_functions = false;
     api_flags.strong = false;
-    api_flags.sync_async = true;
+    api_flags.sync_async = false;
 #if !defined(DART_PRECOMPILER) && !defined(TARGET_ARCH_DBC)
     api_flags.use_field_guards = true;
 #endif
@@ -787,6 +788,34 @@
                                         NULL, 0, source_files_count,
                                         source_files, true, NULL);
 }
+
+void KernelIsolate::NotifyAboutIsolateShutdown(const Isolate* isolate) {
+  if (!KernelIsolate::IsRunning()) {
+    return;
+  }
+  Dart_Port kernel_port = WaitForKernelPort();
+  if (kernel_port == ILLEGAL_PORT) {
+    return;
+  }
+
+  Dart_CObject tag;
+  tag.type = Dart_CObject_kInt32;
+  tag.value.as_int32 = KernelIsolate::kNotifyIsolateShutdown;
+
+  Dart_CObject isolate_id;
+  isolate_id.type = Dart_CObject_kInt64;
+  isolate_id.value.as_int64 =
+      isolate != NULL ? static_cast<int64_t>(isolate->main_port()) : 0;
+
+  Dart_CObject message;
+  message.type = Dart_CObject_kArray;
+  Dart_CObject* message_arr[] = {&tag, &isolate_id};
+  message.value.as_array.values = message_arr;
+  message.value.as_array.length = ARRAY_SIZE(message_arr);
+  // Send the message.
+  Dart_PostCObject(kernel_port, &message);
+}
+
 #endif  // DART_PRECOMPILED_RUNTIME
 
 }  // namespace dart
diff --git a/runtime/vm/kernel_isolate.h b/runtime/vm/kernel_isolate.h
index d888630..5275308 100644
--- a/runtime/vm/kernel_isolate.h
+++ b/runtime/vm/kernel_isolate.h
@@ -27,6 +27,7 @@
   static const int kTrainTag;
   static const int kCompileExpressionTag;
   static const int kListDependenciesTag;
+  static const int kNotifyIsolateShutdown;
 
   static void Run();
 
@@ -61,6 +62,8 @@
 
   static Dart_KernelCompilationResult ListDependencies();
 
+  static void NotifyAboutIsolateShutdown(const Isolate* isolate);
+
  protected:
   static Monitor* monitor_;
   static Dart_IsolateCreateCallback create_callback_;
diff --git a/runtime/vm/lockers.cc b/runtime/vm/lockers.cc
index 63104ca..7a43e4a 100644
--- a/runtime/vm/lockers.cc
+++ b/runtime/vm/lockers.cc
@@ -4,7 +4,7 @@
 
 #include "vm/lockers.h"
 #include "platform/assert.h"
-#include "vm/safepoint.h"
+#include "vm/heap/safepoint.h"
 
 namespace dart {
 
diff --git a/runtime/vm/longjump.cc b/runtime/vm/longjump.cc
index e41a8c4..36d5031 100644
--- a/runtime/vm/longjump.cc
+++ b/runtime/vm/longjump.cc
@@ -38,11 +38,6 @@
   // since there can be only one per isolate.
   uword top_exit_frame_info =
       thread->IsMutatorThread() ? sim->top_exit_frame_info() : 0;
-#elif defined(DART_USE_INTERPRETER)
-  Interpreter* interpreter = Interpreter::Current();
-  ASSERT(interpreter->top_exit_frame_info() == 0);
-  uword top_exit_frame_info = 0;
-  // TODO(regis): Determine if top exit frame is jitted or interpreted.
 #else
   uword top_exit_frame_info = thread->top_exit_frame_info();
 #endif
diff --git a/runtime/vm/native_entry.cc b/runtime/vm/native_entry.cc
index 3aaf67e..8b033c5 100644
--- a/runtime/vm/native_entry.cc
+++ b/runtime/vm/native_entry.cc
@@ -10,10 +10,10 @@
 #include "vm/code_patcher.h"
 #include "vm/dart_api_impl.h"
 #include "vm/dart_api_state.h"
+#include "vm/heap/safepoint.h"
 #include "vm/native_symbol.h"
 #include "vm/object_store.h"
 #include "vm/reusable_handles.h"
-#include "vm/safepoint.h"
 #include "vm/stack_frame.h"
 #include "vm/symbols.h"
 #include "vm/tags.h"
diff --git a/runtime/vm/native_entry.h b/runtime/vm/native_entry.h
index 638d1c1..6c1e5ef 100644
--- a/runtime/vm/native_entry.h
+++ b/runtime/vm/native_entry.h
@@ -10,10 +10,10 @@
 #include "vm/allocation.h"
 #include "vm/compiler/assembler/assembler.h"
 #include "vm/exceptions.h"
+#include "vm/heap/verifier.h"
 #include "vm/log.h"
 #include "vm/native_arguments.h"
 #include "vm/runtime_entry.h"
-#include "vm/verifier.h"
 
 #include "include/dart_api.h"
 
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 2428bab..dac4c85 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -6,7 +6,6 @@
 
 #include "include/dart_api.h"
 #include "platform/assert.h"
-#include "vm/become.h"
 #include "vm/bit_vector.h"
 #include "vm/bootstrap.h"
 #include "vm/class_finalizer.h"
@@ -31,7 +30,9 @@
 #include "vm/growable_array.h"
 #include "vm/hash.h"
 #include "vm/hash_table.h"
-#include "vm/heap.h"
+#include "vm/heap/become.h"
+#include "vm/heap/heap.h"
+#include "vm/heap/weak_code.h"
 #include "vm/isolate_reload.h"
 #include "vm/kernel.h"
 #include "vm/kernel_isolate.h"
@@ -54,7 +55,6 @@
 #include "vm/type_table.h"
 #include "vm/type_testing_stubs.h"
 #include "vm/unicode.h"
-#include "vm/weak_code.h"
 #include "vm/zone_text_buffer.h"
 
 namespace dart {
@@ -1215,6 +1215,8 @@
           reinterpret_cast<RawTypedData*>(RawObject::FromAddr(addr));
       uword new_tags = RawObject::ClassIdTag::update(kTypedDataInt8ArrayCid, 0);
       new_tags = RawObject::SizeTag::update(leftover_size, new_tags);
+      new_tags = RawObject::VMHeapObjectTag::update(obj.raw()->IsVMHeapObject(),
+                                                    new_tags);
       uint32_t tags = raw->ptr()->tags_;
       uint32_t old_tags;
       // TODO(iposva): Investigate whether CompareAndSwapWord is necessary.
@@ -1235,6 +1237,8 @@
       RawObject* raw = reinterpret_cast<RawObject*>(RawObject::FromAddr(addr));
       uword new_tags = RawObject::ClassIdTag::update(kInstanceCid, 0);
       new_tags = RawObject::SizeTag::update(leftover_size, new_tags);
+      new_tags = RawObject::VMHeapObjectTag::update(
+          obj.raw()->ptr()->IsVMHeapObject(), new_tags);
       uint32_t tags = raw->ptr()->tags_;
       uint32_t old_tags;
       // TODO(iposva): Investigate whether CompareAndSwapWord is necessary.
@@ -3189,15 +3193,6 @@
   return String::ConcatAll(Array::Handle(Array::MakeFixedLength(src_pieces)));
 }
 
-static RawObject* EvaluateWithDFEHelper(const String& expression,
-                                        const Array& definitions,
-                                        const Array& type_definitions,
-                                        const String& library_url,
-                                        const String& klass,
-                                        bool is_static,
-                                        const Array& arguments,
-                                        const TypeArguments& type_arguments);
-
 RawFunction* Function::EvaluateHelper(const Class& cls,
                                       const String& expr,
                                       const Array& param_names,
@@ -11404,16 +11399,12 @@
                              const Array& param_values,
                              const Array& type_param_names,
                              const TypeArguments& type_param_values) const {
-  if (kernel_data() == TypedData::null() ||
-      !FLAG_enable_kernel_expression_compilation) {
-    // Evaluate the expression as a static function of the toplevel class.
-    Class& top_level_class = Class::Handle(toplevel_class());
-    ASSERT(top_level_class.is_finalized());
-    return top_level_class.Evaluate(expr, param_names, param_values);
-  }
-  return EvaluateWithDFEHelper(expr, param_names, type_param_names,
-                               String::Handle(url()), String::Handle(), false,
-                               param_values, type_param_values);
+  ASSERT(kernel_data() == TypedData::null() ||
+         !FLAG_enable_kernel_expression_compilation);
+  // Evaluate the expression as a static function of the toplevel class.
+  Class& top_level_class = Class::Handle(toplevel_class());
+  ASSERT(top_level_class.is_finalized());
+  return top_level_class.Evaluate(expr, param_names, param_values);
 }
 
 RawObject* Library::EvaluateCompiledExpression(
@@ -11481,135 +11472,6 @@
 };
 typedef UnorderedHashMap<LibraryLookupTraits> LibraryLookupMap;
 
-static RawObject* EvaluateWithDFEHelper(const String& expression,
-                                        const Array& definitions,
-                                        const Array& type_definitions,
-                                        const String& library_url,
-                                        const String& klass,
-                                        bool is_static,
-                                        const Array& arguments,
-                                        const TypeArguments& type_arguments) {
-#if defined(DART_PRECOMPILED_RUNTIME)
-  const String& error_str = String::Handle(
-      String::New("Kernel service isolate not available in precompiled mode."));
-  return ApiError::New(error_str);
-#else
-  Isolate* I = Isolate::Current();
-  Thread* T = Thread::Current();
-
-  Dart_KernelCompilationResult compilation_result;
-  {
-    TransitionVMToNative transition(T);
-    compilation_result = KernelIsolate::CompileExpressionToKernel(
-        expression.ToCString(), definitions, type_definitions,
-        library_url.ToCString(), klass.IsNull() ? NULL : klass.ToCString(),
-        is_static);
-  }
-
-  GrowableObjectArray& libraries =
-      GrowableObjectArray::Handle(T->zone(), I->object_store()->libraries());
-
-  Function& callee = Function::Handle();
-  intptr_t num_cids = I->class_table()->NumCids();
-  intptr_t num_libs = libraries.Length();
-
-  if (compilation_result.status != Dart_KernelCompilationStatus_Ok) {
-    const String& prefix =
-        String::Handle(String::New("Kernel isolate rejected this request:\n"));
-    const String& error_str = String::Handle(String::Concat(
-        prefix, String::Handle(String::New(compilation_result.error))));
-    free(compilation_result.error);
-    return ApiError::New(error_str);
-  }
-
-  const uint8_t* kernel_file = compilation_result.kernel;
-  intptr_t kernel_length = compilation_result.kernel_size;
-  ASSERT(kernel_file != NULL);
-
-  kernel::Program* kernel_pgm =
-      kernel::Program::ReadFromBuffer(kernel_file, kernel_length, true);
-
-  if (kernel_pgm == NULL) {
-    return ApiError::New(String::Handle(
-        String::New("Kernel isolate returned ill-formed kernel.")));
-  }
-
-  kernel_pgm->set_release_buffer_callback(ReleaseFetchedBytes);
-
-  // Load the program with the debug procedure as a regular, independent
-  // program.
-  kernel::KernelLoader loader(kernel_pgm);
-  const Object& result = Object::Handle(loader.LoadProgram());
-  if (result.IsError()) return result.raw();
-  ASSERT(I->class_table()->NumCids() > num_cids &&
-         libraries.Length() == num_libs + 1);
-  const Library& loaded =
-      Library::Handle(Library::LookupLibrary(T, Symbols::EvalSourceUri()));
-  ASSERT(!loaded.IsNull());
-
-  String& debug_name = String::Handle(
-      String::New(Symbols::Symbol(Symbols::kDebugProcedureNameId)));
-  Class& fake_class = Class::Handle();
-  if (!klass.IsNull()) {
-    fake_class = loaded.LookupClass(Symbols::DebugClassName());
-    ASSERT(!fake_class.IsNull());
-    callee = fake_class.LookupFunctionAllowPrivate(debug_name);
-  } else {
-    callee = loaded.LookupFunctionAllowPrivate(debug_name);
-  }
-  ASSERT(!callee.IsNull());
-
-  // Save the loaded library's kernel data to the generic "data" field of the
-  // callee, so it doesn't require access it's parent library during
-  // compilation.
-  callee.SetKernelDataAndScript(Script::Handle(callee.script()),
-                                TypedData::Handle(loaded.kernel_data()),
-                                loaded.kernel_offset());
-
-  // Reparent the callee to the real enclosing class so we can remove the fake
-  // class and library from the object store.
-  const Library& real_library =
-      Library::Handle(Library::LookupLibrary(T, library_url));
-  ASSERT(!real_library.IsNull());
-  Class& real_class = Class::Handle();
-  if (!klass.IsNull()) {
-    real_class = real_library.LookupClassAllowPrivate(klass);
-  } else {
-    real_class = real_library.toplevel_class();
-  }
-  ASSERT(!real_class.IsNull());
-
-  callee.set_owner(real_class);
-
-  // Unlink the fake library and class from the object store.
-  libraries.SetLength(num_libs);
-  I->class_table()->SetNumCids(num_cids);
-  if (!fake_class.IsNull()) {
-    fake_class.set_id(kIllegalCid);
-  }
-  LibraryLookupMap libraries_map(I->object_store()->libraries_map());
-  bool removed = libraries_map.Remove(Symbols::EvalSourceUri());
-  ASSERT(removed);
-  I->object_store()->set_libraries_map(libraries_map.Release());
-
-  if (type_definitions.Length() == 0) {
-    return DartEntry::InvokeFunction(callee, arguments);
-  }
-
-  intptr_t num_type_args = type_arguments.Length();
-  Array& real_arguments = Array::Handle(Array::New(arguments.Length() + 1));
-  real_arguments.SetAt(0, type_arguments);
-  Object& arg = Object::Handle();
-  for (intptr_t i = 0; i < arguments.Length(); ++i) {
-    arg = arguments.At(i);
-    real_arguments.SetAt(i + 1, arg);
-  }
-  const Array& args_desc = Array::Handle(
-      ArgumentsDescriptor::New(num_type_args, arguments.Length()));
-  return DartEntry::InvokeFunction(callee, real_arguments, args_desc);
-#endif
-}
-
 static RawObject* EvaluateCompiledExpressionHelper(
     const uint8_t* kernel_bytes,
     intptr_t kernel_length,
@@ -19287,18 +19149,11 @@
         return Integer::New(left_value + right_value, space);
       case Token::kSUB:
         return Integer::New(left_value - right_value, space);
-      case Token::kMUL: {
-        if (Smi::kBits < 32) {
-          // In 32-bit mode, the product of two Smis fits in a 64-bit result.
-          return Integer::New(static_cast<int64_t>(left_value) *
-                                  static_cast<int64_t>(right_value),
-                              space);
-        } else {
-          ASSERT(sizeof(intptr_t) == sizeof(int64_t));
-          return Integer::New(Utils::MulWithWrapAround(left_value, right_value),
-                              space);
-        }
-      }
+      case Token::kMUL:
+        return Integer::New(
+            Utils::MulWithWrapAround(static_cast<int64_t>(left_value),
+                                     static_cast<int64_t>(right_value)),
+            space);
       case Token::kTRUNCDIV:
         return Integer::New(left_value / right_value, space);
       case Token::kMOD: {
@@ -19396,40 +19251,21 @@
   }
 }
 
-// TODO(srdjan): Clarify handling of negative right operand in a shift op.
-RawInteger* Smi::ShiftOp(Token::Kind kind,
-                         const Smi& other,
-                         Heap::Space space) const {
-  intptr_t result = 0;
-  const intptr_t left_value = Value();
-  const intptr_t right_value = other.Value();
-  ASSERT(right_value >= 0);
+RawInteger* Integer::ShiftOp(Token::Kind kind,
+                             const Integer& other,
+                             Heap::Space space) const {
+  int64_t a = AsInt64Value();
+  int64_t b = other.AsInt64Value();
+  ASSERT(b >= 0);
   switch (kind) {
-    case Token::kSHL: {
-      if ((left_value == 0) || (right_value == 0)) {
-        return raw();
-      }
-      {  // Check for overflow.
-        int cnt = Utils::BitLength(left_value);
-        if (right_value > (Smi::kBits - cnt)) {
-          return Integer::New(
-              Utils::ShiftLeftWithTruncation(left_value, right_value), space);
-        }
-      }
-      result = left_value << right_value;
-      break;
-    }
-    case Token::kSHR: {
-      const intptr_t shift_amount =
-          (right_value >= kBitsPerWord) ? (kBitsPerWord - 1) : right_value;
-      result = left_value >> shift_amount;
-      break;
-    }
+    case Token::kSHL:
+      return Integer::New(Utils::ShiftLeftWithTruncation(a, b), space);
+    case Token::kSHR:
+      return Integer::New(a >> Utils::Minimum<int64_t>(b, Mint::kBits), space);
     default:
       UNIMPLEMENTED();
+      return Integer::null();
   }
-  ASSERT(Smi::IsValid(result));
-  return Smi::New(result);
 }
 
 bool Smi::Equals(const Instance& other) const {
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index e09544a..89513ea 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -15,7 +15,7 @@
 #include "vm/globals.h"
 #include "vm/growable_array.h"
 #include "vm/handles.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/isolate.h"
 #include "vm/json_stream.h"
 #include "vm/os.h"
@@ -6842,6 +6842,9 @@
   RawInteger* BitOp(Token::Kind operation,
                     const Integer& other,
                     Heap::Space space = Heap::kNew) const;
+  RawInteger* ShiftOp(Token::Kind operation,
+                      const Integer& other,
+                      Heap::Space space = Heap::kNew) const;
 
  private:
   OBJECT_IMPLEMENTATION(Integer, Number);
@@ -6895,10 +6898,6 @@
     return (value >= kMinValue) && (value <= kMaxValue);
   }
 
-  RawInteger* ShiftOp(Token::Kind kind,
-                      const Smi& other,
-                      Heap::Space space = Heap::kNew) const;
-
   void operator=(RawSmi* value) {
     raw_ = value;
     CHECK_HANDLE();
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index 6686b52..baf1b79 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -2,6 +2,8 @@
 // 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 "include/dart_api.h"
+
 #include "platform/globals.h"
 
 #include "vm/class_finalizer.h"
@@ -4356,7 +4358,9 @@
   EXPECT(result.IsIdenticalTo(expected));
 }
 
-static void CheckIdenticalHashStructure(const Instance& a, const Instance& b) {
+static void CheckIdenticalHashStructure(Thread* T,
+                                        const Instance& a,
+                                        const Instance& b) {
   const char* kScript =
       "(a, b) {\n"
       "  if (a._usedData != b._usedData ||\n"
@@ -4391,7 +4395,8 @@
   param_values.SetAt(1, b);
   name = String::New(kScript);
   Library& lib = Library::Handle(Library::CollectionLibrary());
-  EXPECT(lib.Evaluate(name, param_names, param_values) == Bool::True().raw());
+  EXPECT(Api::UnwrapHandle(TestCase::EvaluateExpression(
+             lib, name, param_names, param_values)) == Bool::True().raw());
 }
 
 TEST_CASE(LinkedHashMap) {
@@ -4419,7 +4424,7 @@
 
   // 3. Expect them to have identical structure.
   TransitionNativeToVM transition(thread);
-  CheckIdenticalHashStructure(dart_map, cc_map);
+  CheckIdenticalHashStructure(thread, dart_map, cc_map);
 }
 
 TEST_CASE(LinkedHashMap_iteration) {
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index c2090ec..a7a67b3 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -22,7 +22,8 @@
 #include "vm/growable_array.h"
 #include "vm/handles.h"
 #include "vm/hash_table.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
+#include "vm/heap/safepoint.h"
 #include "vm/isolate.h"
 #include "vm/longjump.h"
 #include "vm/native_arguments.h"
@@ -32,7 +33,6 @@
 #include "vm/os.h"
 #include "vm/regexp_assembler.h"
 #include "vm/resolver.h"
-#include "vm/safepoint.h"
 #include "vm/scanner.h"
 #include "vm/scopes.h"
 #include "vm/stack_frame.h"
diff --git a/runtime/vm/raw_object.cc b/runtime/vm/raw_object.cc
index cbe81d8..92833a5 100644
--- a/runtime/vm/raw_object.cc
+++ b/runtime/vm/raw_object.cc
@@ -4,10 +4,10 @@
 
 #include "vm/raw_object.h"
 
-#include "vm/become.h"
 #include "vm/class_table.h"
 #include "vm/dart.h"
-#include "vm/freelist.h"
+#include "vm/heap/become.h"
+#include "vm/heap/freelist.h"
 #include "vm/isolate.h"
 #include "vm/object.h"
 #include "vm/visitor.h"
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index a99794c..9a87566 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -14,6 +14,7 @@
 #include "vm/deopt_instructions.h"
 #include "vm/exceptions.h"
 #include "vm/flags.h"
+#include "vm/heap/verifier.h"
 #include "vm/instructions.h"
 #include "vm/interpreter.h"
 #include "vm/kernel_isolate.h"
@@ -27,7 +28,6 @@
 #include "vm/symbols.h"
 #include "vm/thread_registry.h"
 #include "vm/type_testing_stubs.h"
-#include "vm/verifier.h"
 
 namespace dart {
 
@@ -180,6 +180,10 @@
   const Code& code = Code::Handle(zone, caller_frame->LookupDartCode());
   const uword pc_offset = caller_frame->pc() - code.PayloadStart();
 
+  if (FLAG_shared_slow_path_triggers_gc) {
+    Isolate::Current()->heap()->CollectAllGarbage();
+  }
+
   const CodeSourceMap& map =
       CodeSourceMap::Handle(zone, code.code_source_map());
   ASSERT(!map.IsNull());
@@ -1734,12 +1738,26 @@
   const Code& bytecode = Code::Handle(zone, function.Bytecode());
   Object& result = Object::Handle(zone);
   Interpreter* interpreter = Interpreter::Current();
+#if defined(DEBUG)
+  uword exit_fp = thread->top_exit_frame_info();
+  ASSERT(exit_fp != 0);
+  if (interpreter->IsTracing()) {
+    THR_Print("Interpreting call to %s exit 0x%" Px "\n", function.ToCString(),
+              exit_fp);
+  }
+#endif
   ASSERT(interpreter != NULL);
   {
     TransitionToGenerated transition(thread);
     result = interpreter->Call(bytecode, orig_arguments_desc, orig_arguments,
                                thread);
   }
+#if defined(DEBUG)
+  ASSERT(thread->top_exit_frame_info() == exit_fp);
+  if (interpreter->IsTracing()) {
+    THR_Print("Returning from interpreted function %s\n", function.ToCString());
+  }
+#endif
   if (result.IsError()) {
     if (result.IsLanguageError()) {
       Exceptions::ThrowCompileTimeError(LanguageError::Cast(result));
@@ -1749,7 +1767,7 @@
   }
 #else
   UNREACHABLE();
-#endif
+#endif  // defined(DART_USE_INTERPRETER)
 }
 
 #if !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
diff --git a/runtime/vm/runtime_entry.h b/runtime/vm/runtime_entry.h
index 86c109d..4dd4935 100644
--- a/runtime/vm/runtime_entry.h
+++ b/runtime/vm/runtime_entry.h
@@ -7,9 +7,9 @@
 
 #include "vm/allocation.h"
 #include "vm/flags.h"
+#include "vm/heap/safepoint.h"
 #include "vm/native_arguments.h"
 #include "vm/runtime_entry_list.h"
-#include "vm/safepoint.h"
 #include "vm/tags.h"
 
 namespace dart {
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index 9308a89..fc90307 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -15,6 +15,7 @@
 #include "vm/dart_api_state.h"
 #include "vm/dart_entry.h"
 #include "vm/debugger.h"
+#include "vm/heap/safepoint.h"
 #include "vm/isolate.h"
 #include "vm/kernel_isolate.h"
 #include "vm/lockers.h"
@@ -33,7 +34,6 @@
 #include "vm/profiler.h"
 #include "vm/profiler_service.h"
 #include "vm/reusable_handles.h"
-#include "vm/safepoint.h"
 #include "vm/service_event.h"
 #include "vm/service_isolate.h"
 #include "vm/source_report.h"
@@ -2435,7 +2435,8 @@
 
 static const MethodParameter* build_expression_evaluation_scope_params[] = {
     RUNNABLE_ISOLATE_PARAMETER,
-    new IdParameter("frameIndex", true),
+    new IdParameter("frameIndex", false),
+    new IdParameter("targetId", false),
     NULL,
 };
 
@@ -2457,14 +2458,87 @@
       GrowableObjectArray::Handle(zone, GrowableObjectArray::New());
   const GrowableObjectArray& param_values =
       GrowableObjectArray::Handle(zone, GrowableObjectArray::New());
+  const GrowableObjectArray& type_params_names =
+      GrowableObjectArray::Handle(zone, GrowableObjectArray::New());
+  String& klass_name = String::Handle(zone);
+  String& library_uri = String::Handle(zone);
+  bool isStatic = false;
+
   if (BuildScope(thread, js, param_names, param_values)) {
     return true;
   }
 
-  ActivationFrame* frame = stack->FrameAt(framePos);
-  const GrowableObjectArray& type_params_names =
-      GrowableObjectArray::Handle(zone, GrowableObjectArray::New());
-  frame->BuildParameters(param_names, param_values, type_params_names);
+  if (js->HasParam("frameIndex")) {
+    // building scope in the context of a given frame
+    DebuggerStackTrace* stack = isolate->debugger()->StackTrace();
+    intptr_t framePos = UIntParameter::Parse(js->LookupParam("frameIndex"));
+    if (framePos >= stack->Length()) {
+      PrintInvalidParamError(js, "frameIndex");
+      return true;
+    }
+
+    ActivationFrame* frame = stack->FrameAt(framePos);
+    frame->BuildParameters(param_names, param_values, type_params_names);
+
+    if (frame->function().is_static()) {
+      const Class& cls = Class::Handle(zone, frame->function().Owner());
+      if (!cls.IsTopLevel()) {
+        klass_name ^= cls.UserVisibleName();
+      }
+      library_uri ^= Library::Handle(zone, cls.library()).url();
+      isStatic = !cls.IsTopLevel();
+    } else {
+      const Class& method_cls = Class::Handle(zone, frame->function().origin());
+      library_uri ^= Library::Handle(zone, method_cls.library()).url();
+      klass_name ^= method_cls.UserVisibleName();
+    }
+  } else {
+    // building scope in the context of a given object
+    if (!js->HasParam("targetId")) {
+      js->PrintError(kInvalidParams,
+                     "Either targetId or frameIndex has to be provided.");
+      return true;
+    }
+    const char* target_id = js->LookupParam("targetId");
+
+    ObjectIdRing::LookupResult lookup_result;
+    Object& obj = Object::Handle(
+        zone, LookupHeapObject(thread, target_id, &lookup_result));
+    if (obj.raw() == Object::sentinel().raw()) {
+      PrintInvalidParamError(js, "targetId");
+      return true;
+    }
+    if (obj.IsLibrary()) {
+      const Library& lib = Library::Cast(obj);
+      library_uri ^= lib.url();
+    } else if (obj.IsClass() || ((obj.IsInstance() || obj.IsNull()) &&
+                                 !ContainsNonInstance(obj))) {
+      Class& cls = Class::Handle(zone);
+      if (obj.IsClass()) {
+        cls ^= obj.raw();
+      } else {
+        Instance& instance = Instance::Handle(zone);
+        instance ^= obj.raw();
+        cls ^= instance.clazz();
+      }
+      if (cls.id() < kInstanceCid || cls.id() == kTypeArgumentsCid) {
+        js->PrintError(
+            kInvalidParams,
+            "Expressions can be evaluated only with regular Dart instances");
+        return true;
+      }
+
+      if (!cls.IsTopLevel()) {
+        klass_name ^= cls.UserVisibleName();
+      }
+      library_uri ^= Library::Handle(zone, cls.library()).url();
+    } else {
+      js->PrintError(kInvalidParams,
+                     "%s: invalid 'targetId' parameter: "
+                     "Cannot evaluate against a VM-internal object",
+                     js->method());
+    }
+  }
 
   JSONObject report(js);
   {
@@ -2485,21 +2559,6 @@
       jsonTypeParamsNames.AddValue(type_param_name.ToCString());
     }
   }
-  String& klass_name = String::Handle(zone);
-  String& library_uri = String::Handle(zone);
-  bool isStatic = false;
-  if (frame->function().is_static()) {
-    const Class& cls = Class::Handle(zone, frame->function().Owner());
-    if (!cls.IsTopLevel()) {
-      klass_name ^= cls.UserVisibleName();
-    }
-    library_uri ^= Library::Handle(zone, cls.library()).url();
-    isStatic = !cls.IsTopLevel();
-  } else {
-    const Class& method_cls = Class::Handle(zone, frame->function().origin());
-    library_uri ^= Library::Handle(zone, method_cls.library()).url();
-    klass_name ^= method_cls.UserVisibleName();
-  }
   report.AddProperty("libraryUri", library_uri.ToCString());
   if (!klass_name.IsNull()) {
     report.AddProperty("klass", klass_name.ToCString());
@@ -2622,7 +2681,8 @@
 
 static const MethodParameter* evaluate_compiled_expression_params[] = {
     RUNNABLE_ISOLATE_PARAMETER,
-    new UIntParameter("frameIndex", true),
+    new UIntParameter("frameIndex", false),
+    new IdParameter("targetId", false),
     new StringParameter("kernelBytes", true),
     NULL,
 };
@@ -2647,26 +2707,102 @@
   if (BuildScope(thread, js, param_names, param_values)) {
     return true;
   }
-
-  ActivationFrame* frame = stack->FrameAt(frame_pos);
   const GrowableObjectArray& type_params_names =
       GrowableObjectArray::Handle(zone, GrowableObjectArray::New());
-  TypeArguments& type_arguments = TypeArguments::Handle(
-      zone,
-      frame->BuildParameters(param_names, param_values, type_params_names));
 
   intptr_t kernel_length;
   const char* kernel_bytes_str = js->LookupParam("kernelBytes");
   uint8_t* kernel_bytes = DecodeBase64(zone, kernel_bytes_str, &kernel_length);
 
-  const Object& result = Object::Handle(
-      zone, frame->EvaluateCompiledExpression(
-                kernel_bytes, kernel_length,
-                Array::Handle(zone, Array::MakeFixedLength(type_params_names)),
-                Array::Handle(zone, Array::MakeFixedLength(param_values)),
-                type_arguments));
-  result.PrintJSON(js, true);
-  return true;
+  if (js->HasParam("frameIndex")) {
+    DebuggerStackTrace* stack = isolate->debugger()->StackTrace();
+    intptr_t frame_pos = UIntParameter::Parse(js->LookupParam("frameIndex"));
+    if (frame_pos >= stack->Length()) {
+      PrintInvalidParamError(js, "frameIndex");
+      return true;
+    }
+
+    ActivationFrame* frame = stack->FrameAt(frame_pos);
+    TypeArguments& type_arguments = TypeArguments::Handle(
+        zone,
+        frame->BuildParameters(param_names, param_values, type_params_names));
+
+    const Object& result = Object::Handle(
+        zone,
+        frame->EvaluateCompiledExpression(
+            kernel_bytes, kernel_length,
+            Array::Handle(zone, Array::MakeFixedLength(type_params_names)),
+            Array::Handle(zone, Array::MakeFixedLength(param_values)),
+            type_arguments));
+    result.PrintJSON(js, true);
+    return true;
+  } else {
+    // evaluating expression in the context of a given object
+    if (!js->HasParam("targetId")) {
+      js->PrintError(kInvalidParams,
+                     "Either targetId or frameIndex has to be provided.");
+      return true;
+    }
+    const char* target_id = js->LookupParam("targetId");
+    ObjectIdRing::LookupResult lookup_result;
+    Object& obj = Object::Handle(
+        zone, LookupHeapObject(thread, target_id, &lookup_result));
+    if (obj.raw() == Object::sentinel().raw()) {
+      if (lookup_result == ObjectIdRing::kCollected) {
+        PrintSentinel(js, kCollectedSentinel);
+      } else if (lookup_result == ObjectIdRing::kExpired) {
+        PrintSentinel(js, kExpiredSentinel);
+      } else {
+        PrintInvalidParamError(js, "targetId");
+      }
+      return true;
+    }
+    TypeArguments& type_arguments = TypeArguments::Handle(zone);
+    if (obj.IsLibrary()) {
+      const Library& lib = Library::Cast(obj);
+      const Object& result = Object::Handle(
+          zone,
+          lib.EvaluateCompiledExpression(
+              kernel_bytes, kernel_length,
+              Array::Handle(zone, Array::MakeFixedLength(type_params_names)),
+              Array::Handle(zone, Array::MakeFixedLength(param_values)),
+              type_arguments));
+      result.PrintJSON(js, true);
+      return true;
+    }
+    if (obj.IsClass()) {
+      const Class& cls = Class::Cast(obj);
+      const Object& result = Object::Handle(
+          zone,
+          cls.EvaluateCompiledExpression(
+              kernel_bytes, kernel_length,
+              Array::Handle(zone, Array::MakeFixedLength(type_params_names)),
+              Array::Handle(zone, Array::MakeFixedLength(param_values)),
+              type_arguments));
+      result.PrintJSON(js, true);
+      return true;
+    }
+    if ((obj.IsInstance() || obj.IsNull()) && !ContainsNonInstance(obj)) {
+      // We don't use Instance::Cast here because it doesn't allow null.
+      Instance& instance = Instance::Handle(zone);
+      instance ^= obj.raw();
+      const Class& receiver_cls = Class::Handle(zone, instance.clazz());
+      const Object& result = Object::Handle(
+          zone,
+          instance.EvaluateCompiledExpression(
+              receiver_cls, kernel_bytes, kernel_length,
+              Array::Handle(zone, Array::MakeFixedLength(type_params_names)),
+              Array::Handle(zone, Array::MakeFixedLength(param_values)),
+              type_arguments));
+      result.PrintJSON(js, true);
+      return true;
+    }
+    js->PrintError(kInvalidParams,
+                   "%s: invalid 'targetId' parameter: "
+                   "Cannot evaluate against a VM-internal object",
+                   js->method());
+    return true;
+  }
 }
 
 static const MethodParameter* evaluate_in_frame_params[] = {
diff --git a/runtime/vm/service_event.h b/runtime/vm/service_event.h
index d0db082..2a267f9 100644
--- a/runtime/vm/service_event.h
+++ b/runtime/vm/service_event.h
@@ -6,7 +6,7 @@
 #define RUNTIME_VM_SERVICE_EVENT_H_
 
 #include "vm/globals.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 
 namespace dart {
 
diff --git a/runtime/vm/service_test.cc b/runtime/vm/service_test.cc
index 3a53ad4..7291161 100644
--- a/runtime/vm/service_test.cc
+++ b/runtime/vm/service_test.cc
@@ -10,12 +10,12 @@
 #include "vm/debugger.h"
 #include "vm/debugger_api_impl_test.h"
 #include "vm/globals.h"
+#include "vm/heap/safepoint.h"
 #include "vm/message_handler.h"
 #include "vm/object_id_ring.h"
 #include "vm/os.h"
 #include "vm/port.h"
 #include "vm/profiler.h"
-#include "vm/safepoint.h"
 #include "vm/service.h"
 #include "vm/unit_test.h"
 
@@ -76,7 +76,7 @@
 
 static RawArray* Eval(Dart_Handle lib, const char* expr) {
   const String& dummy_isolate_id = String::Handle(String::New("isolateId"));
-  Dart_Handle expr_val = Dart_EvaluateExpr(lib, NewString(expr));
+  Dart_Handle expr_val = Dart_EvaluateStaticExpr(lib, NewString(expr));
   EXPECT_VALID(expr_val);
   Zone* zone = Thread::Current()->zone();
   const GrowableObjectArray& value =
diff --git a/runtime/vm/simulator_dbc.cc b/runtime/vm/simulator_dbc.cc
index 21d5e11..9c0e5b6 100644
--- a/runtime/vm/simulator_dbc.cc
+++ b/runtime/vm/simulator_dbc.cc
@@ -3947,6 +3947,8 @@
     RawObject* raw_exception = thread->active_exception();
     RawObject* raw_stacktrace = thread->active_stacktrace();
     ASSERT(raw_exception != Object::null());
+    thread->set_active_exception(Object::null_object());
+    thread->set_active_stacktrace(Object::null_object());
     special_[kExceptionSpecialIndex] = raw_exception;
     special_[kStackTraceSpecialIndex] = raw_stacktrace;
     pc_ = thread->resume_pc();
diff --git a/runtime/vm/snapshot.cc b/runtime/vm/snapshot.cc
index 5f97708..26fe952 100644
--- a/runtime/vm/snapshot.cc
+++ b/runtime/vm/snapshot.cc
@@ -9,7 +9,7 @@
 #include "vm/class_finalizer.h"
 #include "vm/dart.h"
 #include "vm/exceptions.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/longjump.h"
 #include "vm/message.h"
 #include "vm/object.h"
diff --git a/runtime/vm/stack_frame.cc b/runtime/vm/stack_frame.cc
index 63e6fb4..940b83c 100644
--- a/runtime/vm/stack_frame.cc
+++ b/runtime/vm/stack_frame.cc
@@ -5,9 +5,9 @@
 #include "vm/stack_frame.h"
 
 #include "platform/memory_sanitizer.h"
-#include "vm/become.h"
 #include "vm/compiler/assembler/assembler.h"
 #include "vm/deopt_instructions.h"
+#include "vm/heap/become.h"
 #include "vm/isolate.h"
 #include "vm/object.h"
 #include "vm/object_store.h"
diff --git a/runtime/vm/stack_frame_test.cc b/runtime/vm/stack_frame_test.cc
index 6facc4f..896c8bd 100644
--- a/runtime/vm/stack_frame_test.cc
+++ b/runtime/vm/stack_frame_test.cc
@@ -9,9 +9,9 @@
 #include "vm/compiler/jit/compiler.h"
 #include "vm/dart_api_impl.h"
 #include "vm/dart_entry.h"
+#include "vm/heap/verifier.h"
 #include "vm/resolver.h"
 #include "vm/unit_test.h"
-#include "vm/verifier.h"
 #include "vm/zone.h"
 
 namespace dart {
diff --git a/runtime/vm/stub_code.cc b/runtime/vm/stub_code.cc
index 05baaee..4069e998 100644
--- a/runtime/vm/stub_code.cc
+++ b/runtime/vm/stub_code.cc
@@ -10,8 +10,8 @@
 #include "vm/compiler/assembler/assembler.h"
 #include "vm/compiler/assembler/disassembler.h"
 #include "vm/flags.h"
+#include "vm/heap/safepoint.h"
 #include "vm/object_store.h"
-#include "vm/safepoint.h"
 #include "vm/snapshot.h"
 #include "vm/virtual_memory.h"
 #include "vm/visitor.h"
diff --git a/runtime/vm/stub_code.h b/runtime/vm/stub_code.h
index 1f836fb..99dd71b 100644
--- a/runtime/vm/stub_code.h
+++ b/runtime/vm/stub_code.h
@@ -77,7 +77,9 @@
   V(LazySpecializeTypeTest)                                                    \
   V(CallClosureNoSuchMethod)                                                   \
   V(FrameAwaitingMaterialization)                                              \
-  V(AsynchronousGapMarker)
+  V(AsynchronousGapMarker)                                                     \
+  V(NullErrorSharedWithFPURegs)                                                \
+  V(NullErrorSharedWithoutFPURegs)
 
 #else
 #define VM_STUB_CODE_LIST(V)                                                   \
@@ -200,6 +202,9 @@
   static RawCode* Generate(const char* name,
                            void (*GenerateStub)(Assembler* assembler));
 
+  static void GenerateNullErrorShared(Assembler* assembler,
+                                      bool save_fpu_registers);
+
   static void GenerateMegamorphicMissStub(Assembler* assembler);
   static void GenerateAllocationStubForClass(Assembler* assembler,
                                              const Class& cls);
diff --git a/runtime/vm/stub_code_arm.cc b/runtime/vm/stub_code_arm.cc
index 70e9cb6..37aa4b6 100644
--- a/runtime/vm/stub_code_arm.cc
+++ b/runtime/vm/stub_code_arm.cc
@@ -11,7 +11,7 @@
 #include "vm/compiler/jit/compiler.h"
 #include "vm/cpu.h"
 #include "vm/dart_entry.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/instructions.h"
 #include "vm/isolate.h"
 #include "vm/object_store.h"
@@ -102,9 +102,26 @@
   __ StoreToOffset(kWord, R2, THR, Thread::top_exit_frame_info_offset());
 
   __ LeaveStubFrame();
+
+  // The following return can jump to a lazy-deopt stub, which assumes R0
+  // contains a return value and will save it in a GC-visible way.  We therefore
+  // have to ensure R0 does not contain any garbage value left from the C
+  // function we called (which has return type "void").
+  // (See GenerateDeoptimizationSequence::saved_result_slot_from_fp.)
+  __ LoadImmediate(R0, 0);
   __ Ret();
 }
 
+void StubCode::GenerateNullErrorSharedWithoutFPURegsStub(Assembler* assembler) {
+  // TODO(sjindel): implement.
+  __ Breakpoint();
+}
+
+void StubCode::GenerateNullErrorSharedWithFPURegsStub(Assembler* assembler) {
+  // TODO(sjindel): implement.
+  __ Breakpoint();
+}
+
 // Input parameters:
 //   R0 : stop message (const char*).
 // Must preserve all registers.
@@ -1677,6 +1694,8 @@
   __ PopList((1 << R4) | (1 << R9));  // Restore arg desc. and IC data.
   __ LeaveStubFrame();
 
+  // When using the interpreter, the function's code may now point to the
+  // InterpretCall stub. Make sure R0, R4, and R9 are preserved.
   __ ldr(CODE_REG, FieldAddress(R0, Function::code_offset()));
   __ ldr(R2, FieldAddress(R0, Function::entry_point_offset()));
   __ bx(R2);
@@ -2121,7 +2140,10 @@
 // Does not return.
 void StubCode::GenerateRunExceptionHandlerStub(Assembler* assembler) {
   __ LoadFromOffset(kWord, LR, THR, Thread::resume_pc_offset());
-  __ LoadImmediate(R2, 0);
+
+  ASSERT(Thread::CanLoadFromThread(Object::null_object()));
+  __ LoadFromOffset(kWord, R2, THR,
+                    Thread::OffsetFromThread(Object::null_object()));
 
   // Exception object.
   __ LoadFromOffset(kWord, R0, THR, Thread::active_exception_offset());
diff --git a/runtime/vm/stub_code_arm64.cc b/runtime/vm/stub_code_arm64.cc
index b7c6f15..647ae0b 100644
--- a/runtime/vm/stub_code_arm64.cc
+++ b/runtime/vm/stub_code_arm64.cc
@@ -9,7 +9,7 @@
 #include "vm/compiler/backend/flow_graph_compiler.h"
 #include "vm/compiler/jit/compiler.h"
 #include "vm/dart_entry.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/instructions.h"
 #include "vm/object_store.h"
 #include "vm/runtime_entry.h"
@@ -121,9 +121,24 @@
   __ StoreToOffset(ZR, THR, Thread::top_exit_frame_info_offset());
 
   __ LeaveStubFrame();
+
+  // The following return can jump to a lazy-deopt stub, which assumes R0
+  // contains a return value and will save it in a GC-visible way.  We therefore
+  // have to ensure R0 does not contain any garbage value left from the C
+  // function we called (which has return type "void").
+  // (See GenerateDeoptimizationSequence::saved_result_slot_from_fp.)
+  __ LoadImmediate(R0, 0);
   __ ret();
 }
 
+void StubCode::GenerateNullErrorSharedWithoutFPURegsStub(Assembler* assembler) {
+  __ Breakpoint();
+}
+
+void StubCode::GenerateNullErrorSharedWithFPURegsStub(Assembler* assembler) {
+  __ Breakpoint();
+}
+
 void StubCode::GeneratePrintStopMessageStub(Assembler* assembler) {
   __ Stop("GeneratePrintStopMessageStub");
 }
@@ -1724,6 +1739,8 @@
   __ Pop(R5);  // Restore IC Data.
   __ LeaveStubFrame();
 
+  // When using the interpreter, the function's code may now point to the
+  // InterpretCall stub. Make sure R0, R4, and R5 are preserved.
   __ LoadFieldFromOffset(CODE_REG, R0, Function::code_offset());
   __ LoadFieldFromOffset(R2, R0, Function::entry_point_offset());
   __ br(R2);
@@ -2171,7 +2188,9 @@
 // Does not return.
 void StubCode::GenerateRunExceptionHandlerStub(Assembler* assembler) {
   __ LoadFromOffset(LR, THR, Thread::resume_pc_offset());
-  __ LoadImmediate(R2, 0);
+
+  ASSERT(Thread::CanLoadFromThread(Object::null_object()));
+  __ LoadFromOffset(R2, THR, Thread::OffsetFromThread(Object::null_object()));
 
   // Exception object.
   __ LoadFromOffset(R0, THR, Thread::active_exception_offset());
diff --git a/runtime/vm/stub_code_dbc.cc b/runtime/vm/stub_code_dbc.cc
index 130e4f8..a6e6a76 100644
--- a/runtime/vm/stub_code_dbc.cc
+++ b/runtime/vm/stub_code_dbc.cc
@@ -10,7 +10,7 @@
 #include "vm/compiler/jit/compiler.h"
 #include "vm/cpu.h"
 #include "vm/dart_entry.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/instructions.h"
 #include "vm/object_store.h"
 #include "vm/runtime_entry.h"
diff --git a/runtime/vm/stub_code_ia32.cc b/runtime/vm/stub_code_ia32.cc
index bae80ce..bdc494b 100644
--- a/runtime/vm/stub_code_ia32.cc
+++ b/runtime/vm/stub_code_ia32.cc
@@ -9,11 +9,11 @@
 #include "vm/compiler/backend/flow_graph_compiler.h"
 #include "vm/compiler/jit/compiler.h"
 #include "vm/dart_entry.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
+#include "vm/heap/scavenger.h"
 #include "vm/instructions.h"
 #include "vm/object_store.h"
 #include "vm/resolver.h"
-#include "vm/scavenger.h"
 #include "vm/stack_frame.h"
 #include "vm/stub_code.h"
 #include "vm/tags.h"
@@ -89,9 +89,24 @@
   __ movl(Address(THR, Thread::top_exit_frame_info_offset()), Immediate(0));
 
   __ LeaveFrame();
+
+  // The following return can jump to a lazy-deopt stub, which assumes EAX
+  // contains a return value and will save it in a GC-visible way.  We therefore
+  // have to ensure EAX does not contain any garbage value left from the C
+  // function we called (which has return type "void").
+  // (See GenerateDeoptimizationSequence::saved_result_slot_from_fp.)
+  __ xorl(EAX, EAX);
   __ ret();
 }
 
+void StubCode::GenerateNullErrorSharedWithoutFPURegsStub(Assembler* assembler) {
+  __ Breakpoint();
+}
+
+void StubCode::GenerateNullErrorSharedWithFPURegsStub(Assembler* assembler) {
+  __ Breakpoint();
+}
+
 // Input parameters:
 //   ESP : points to return address.
 //   EAX : stop message (const char*).
@@ -1606,8 +1621,10 @@
   __ popl(EDX);  // Restore arguments descriptor array.
   __ LeaveFrame();
 
-  __ movl(EAX, FieldAddress(EAX, Function::entry_point_offset()));
-  __ jmp(EAX);
+  // When using the interpreter, the function's code may now point to the
+  // InterpretCall stub. Make sure EAX, ECX, and EDX are preserved.
+  __ movl(EBX, FieldAddress(EAX, Function::entry_point_offset()));
+  __ jmp(EBX);
 }
 
 void StubCode::GenerateInterpretCallStub(Assembler* assembler) {
@@ -1853,15 +1870,18 @@
   ASSERT(kStackTraceObjectReg == EDX);
   __ movl(EBX, Address(THR, Thread::resume_pc_offset()));
 
+  ASSERT(Thread::CanLoadFromThread(Object::null_object()));
+  __ movl(ECX, Address(THR, Thread::OffsetFromThread(Object::null_object())));
+
   // Load the exception from the current thread.
   Address exception_addr(THR, Thread::active_exception_offset());
   __ movl(kExceptionObjectReg, exception_addr);
-  __ movl(exception_addr, Immediate(0));
+  __ movl(exception_addr, ECX);
 
   // Load the stacktrace from the current thread.
   Address stacktrace_addr(THR, Thread::active_stacktrace_offset());
   __ movl(kStackTraceObjectReg, stacktrace_addr);
-  __ movl(stacktrace_addr, Immediate(0));
+  __ movl(stacktrace_addr, ECX);
 
   __ jmp(EBX);  // Jump to continuation point.
 }
diff --git a/runtime/vm/stub_code_x64.cc b/runtime/vm/stub_code_x64.cc
index 532a4ea..111357c 100644
--- a/runtime/vm/stub_code_x64.cc
+++ b/runtime/vm/stub_code_x64.cc
@@ -12,12 +12,13 @@
 #include "vm/compiler/assembler/disassembler.h"
 #include "vm/compiler/backend/flow_graph_compiler.h"
 #include "vm/compiler/jit/compiler.h"
+#include "vm/constants_x64.h"
 #include "vm/dart_entry.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
+#include "vm/heap/scavenger.h"
 #include "vm/instructions.h"
 #include "vm/object_store.h"
 #include "vm/resolver.h"
-#include "vm/scavenger.h"
 #include "vm/stack_frame.h"
 #include "vm/tags.h"
 #include "vm/type_testing_stubs.h"
@@ -97,9 +98,59 @@
   __ movq(Address(THR, Thread::top_exit_frame_info_offset()), Immediate(0));
 
   __ LeaveStubFrame();
+
+  // The following return can jump to a lazy-deopt stub, which assumes RAX
+  // contains a return value and will save it in a GC-visible way.  We therefore
+  // have to ensure RAX does not contain any garbage value left from the C
+  // function we called (which has return type "void").
+  // (See GenerateDeoptimizationSequence::saved_result_slot_from_fp.)
+  __ xorq(RAX, RAX);
   __ ret();
 }
 
+void StubCode::GenerateNullErrorShared(Assembler* assembler,
+                                       bool save_fpu_registers) {
+  // We want the saved registers to appear like part of the caller's frame, so
+  // we push them before calling EnterStubFrame.
+  __ PushRegisters(kDartAvailableCpuRegs,
+                   save_fpu_registers ? kAllFpuRegistersList : 0);
+
+  const intptr_t kSavedCpuRegisterSlots =
+      Utils::CountOneBitsWord(kDartAvailableCpuRegs);
+
+  const intptr_t kSavedFpuRegisterSlots =
+      save_fpu_registers ? kNumberOfFpuRegisters * kFpuRegisterSize / kWordSize
+                         : 0;
+
+  const intptr_t kAllSavedRegistersSlots =
+      kSavedCpuRegisterSlots + kSavedFpuRegisterSlots;
+
+  // Copy down the return address so the stack layout is correct.
+  __ pushq(Address(RSP, kAllSavedRegistersSlots * kWordSize));
+
+  const intptr_t stub_offset =
+      save_fpu_registers
+          ? Thread::null_error_shared_with_fpu_regs_stub_offset()
+          : Thread::null_error_shared_without_fpu_regs_stub_offset();
+  __ movq(CODE_REG, Address(THR, stub_offset));
+
+  __ EnterStubFrame();
+
+  __ movq(CODE_REG, Address(THR, Thread::call_to_runtime_stub_offset()));
+  __ movq(RBX, Address(THR, Thread::OffsetFromThread(&kNullErrorRuntimeEntry)));
+  __ movq(R10, Immediate(/*argument_count=*/0));
+  __ call(Address(THR, Thread::call_to_runtime_entry_point_offset()));
+  __ Breakpoint();
+}
+
+void StubCode::GenerateNullErrorSharedWithoutFPURegsStub(Assembler* assembler) {
+  GenerateNullErrorShared(assembler, false);
+}
+
+void StubCode::GenerateNullErrorSharedWithFPURegsStub(Assembler* assembler) {
+  GenerateNullErrorShared(assembler, true);
+}
+
 // Input parameters:
 //   RSP : points to return address.
 //   RDI : stop message (const char*).
@@ -791,8 +842,8 @@
   __ movq(RAX, Address(THR, Thread::top_exit_frame_info_offset()));
   __ pushq(RAX);
 
-  // The constant kExitLinkSlotFromEntryFp must be kept in sync with the
-  // code below.
+// The constant kExitLinkSlotFromEntryFp must be kept in sync with the
+// code below.
 #if defined(DEBUG)
   {
     Label ok;
@@ -930,8 +981,8 @@
   __ movq(RAX, Address(THR, Thread::top_exit_frame_info_offset()));
   __ pushq(RAX);
 
-  // The constant kExitLinkSlotFromEntryFp must be kept in sync with the
-  // code below.
+// The constant kExitLinkSlotFromEntryFp must be kept in sync with the
+// code below.
 #if defined(DEBUG)
   {
     Label ok;
@@ -1815,14 +1866,41 @@
 // RAX: Function.
 void StubCode::GenerateInterpretCallStub(Assembler* assembler) {
 #if defined(DART_USE_INTERPRETER)
+  const intptr_t thread_offset = NativeArguments::thread_offset();
+  const intptr_t argc_tag_offset = NativeArguments::argc_tag_offset();
+  const intptr_t argv_offset = NativeArguments::argv_offset();
+  const intptr_t retval_offset = NativeArguments::retval_offset();
+
   __ EnterStubFrame();
-  __ movq(RDI, FieldAddress(R10, ArgumentsDescriptor::count_offset()));
+
+  // Save exit frame information to enable stack walking as we are about
+  // to transition to Dart VM C++ code.
+  __ movq(Address(THR, Thread::top_exit_frame_info_offset()), RBP);
+
+#if defined(DEBUG)
+  {
+    Label ok;
+    // Check that we are always entering from Dart code.
+    __ movq(R8, Immediate(VMTag::kDartTagId));
+    __ cmpq(R8, Assembler::VMTagAddress());
+    __ j(EQUAL, &ok, Assembler::kNearJump);
+    __ Stop("Not coming from Dart code.");
+    __ Bind(&ok);
+  }
+#endif
+
+  // Mark that the thread is executing VM code.
+  __ movq(RCX, Immediate(kInterpretCallRuntimeEntry.GetEntryPoint()));
+  __ movq(Assembler::VMTagAddress(), RCX);
+
+  // Push result and first 3 arguments of the interpreted function call.
   __ pushq(Immediate(0));  // Setup space on stack for result.
   __ pushq(RAX);           // Function.
   __ pushq(RBX);           // ICData/MegamorphicCache.
   __ pushq(R10);           // Arguments descriptor array.
 
   // Adjust arguments count.
+  __ movq(RDI, FieldAddress(R10, ArgumentsDescriptor::count_offset()));
   __ cmpq(FieldAddress(R10, ArgumentsDescriptor::type_args_len_offset()),
           Immediate(0));
   __ movq(R10, RDI);
@@ -1831,12 +1909,43 @@
   __ addq(R10, Immediate(Smi::RawValue(1)));  // Include the type arguments.
   __ Bind(&args_count_ok);
 
+  // Push 4th Dart argument of the interpreted function call.
   // R10: Smi-tagged arguments array length.
   PushArrayOfArguments(assembler);
   const intptr_t kNumArgs = 4;
-  __ CallRuntime(kInterpretCallRuntimeEntry, kNumArgs);
-  __ Drop(kNumArgs);
-  __ popq(RAX);  // Return value.
+
+  // Set callee-saved RBX to point to first one of the 4 Dart arguments.
+  __ leaq(RBX, Address(RSP, (kNumArgs - 1) * kWordSize));
+
+  // Reserve space for native args and align frame before entering C++ world.
+  __ subq(RSP, Immediate(sizeof(NativeArguments)));
+  if (OS::ActivationFrameAlignment() > 1) {
+    __ andq(RSP, Immediate(~(OS::ActivationFrameAlignment() - 1)));
+  }
+
+  // Pass NativeArguments structure by value and call runtime.
+  __ movq(Address(RSP, thread_offset), THR);  // Set thread in NativeArgs.
+  __ movq(Address(RSP, argc_tag_offset), Immediate(kNumArgs));  // Set argc.
+  // Compute argv.
+  __ movq(Address(RSP, argv_offset), RBX);    // Set argv in NativeArguments.
+  __ addq(RBX, Immediate(1 * kWordSize));     // Retval is next to 1st argument.
+  __ movq(Address(RSP, retval_offset), RBX);  // Set retval in NativeArguments.
+#if defined(_WIN64)
+  ASSERT(sizeof(NativeArguments) > CallingConventions::kRegisterTransferLimit);
+  __ movq(CallingConventions::kArg1Reg, RSP);
+#endif
+  __ movq(RCX, Immediate(kInterpretCallRuntimeEntry.GetEntryPoint()));
+  __ CallCFunction(RCX);
+
+  // Mark that the thread is executing Dart code.
+  __ movq(Assembler::VMTagAddress(), Immediate(VMTag::kDartTagId));
+
+  // Reset exit frame information in Isolate structure.
+  __ movq(Address(THR, Thread::top_exit_frame_info_offset()), Immediate(0));
+
+  // Load result of interpreted function call into RAX.
+  __ movq(RAX, Address(RBX, 0));
+
   __ LeaveStubFrame();
   __ ret();
 #else
@@ -2282,15 +2391,18 @@
   __ movq(CallingConventions::kArg1Reg,
           Address(THR, Thread::resume_pc_offset()));
 
+  ASSERT(Thread::CanLoadFromThread(Object::null_object()));
+  __ movq(TMP, Address(THR, Thread::OffsetFromThread(Object::null_object())));
+
   // Load the exception from the current thread.
   Address exception_addr(THR, Thread::active_exception_offset());
   __ movq(kExceptionObjectReg, exception_addr);
-  __ movq(exception_addr, Immediate(0));
+  __ movq(exception_addr, TMP);
 
   // Load the stacktrace from the current thread.
   Address stacktrace_addr(THR, Thread::active_stacktrace_offset());
   __ movq(kStackTraceObjectReg, stacktrace_addr);
-  __ movq(stacktrace_addr, Immediate(0));
+  __ movq(stacktrace_addr, TMP);
 
   __ jmp(CallingConventions::kArg1Reg);  // Jump to continuation point.
 }
diff --git a/runtime/vm/thread.cc b/runtime/vm/thread.cc
index 62d93a8..5d62829 100644
--- a/runtime/vm/thread.cc
+++ b/runtime/vm/thread.cc
@@ -248,7 +248,6 @@
 }
 
 void Thread::set_active_exception(const Object& value) {
-  ASSERT(!value.IsNull());
   active_exception_ = value.raw();
 }
 
diff --git a/runtime/vm/thread.h b/runtime/vm/thread.h
index d524b9d..eb81ca54 100644
--- a/runtime/vm/thread.h
+++ b/runtime/vm/thread.h
@@ -12,9 +12,9 @@
 #include "vm/bitfield.h"
 #include "vm/globals.h"
 #include "vm/handles.h"
+#include "vm/heap/store_buffer.h"
 #include "vm/os_thread.h"
 #include "vm/runtime_entry_list.h"
-#include "vm/store_buffer.h"
 
 namespace dart {
 
@@ -94,6 +94,10 @@
     StubCode::InvokeDartCodeFromBytecode_entry()->code(), NULL)                \
   V(RawCode*, call_to_runtime_stub_, StubCode::CallToRuntime_entry()->code(),  \
     NULL)                                                                      \
+  V(RawCode*, null_error_shared_without_fpu_regs_stub_,                        \
+    StubCode::NullErrorSharedWithoutFPURegs_entry()->code(), NULL)             \
+  V(RawCode*, null_error_shared_with_fpu_regs_stub_,                           \
+    StubCode::NullErrorSharedWithFPURegs_entry()->code(), NULL)                \
   V(RawCode*, monomorphic_miss_stub_,                                          \
     StubCode::MonomorphicMiss_entry()->code(), NULL)                           \
   V(RawCode*, ic_lookup_through_code_stub_,                                    \
@@ -134,6 +138,10 @@
     StubCode::UpdateStoreBuffer_entry()->EntryPoint(), 0)                      \
   V(uword, call_to_runtime_entry_point_,                                       \
     StubCode::CallToRuntime_entry()->EntryPoint(), 0)                          \
+  V(uword, null_error_shared_without_fpu_regs_entry_point_,                    \
+    StubCode::NullErrorSharedWithoutFPURegs_entry()->EntryPoint(), 0)          \
+  V(uword, null_error_shared_with_fpu_regs_entry_point_,                       \
+    StubCode::NullErrorSharedWithFPURegs_entry()->EntryPoint(), 0)             \
   V(uword, megamorphic_call_checked_entry_,                                    \
     StubCode::MegamorphicCall_entry()->EntryPoint(), 0)                        \
   V(uword, monomorphic_miss_entry_,                                            \
diff --git a/runtime/vm/thread_test.cc b/runtime/vm/thread_test.cc
index e4155eb..92e04a1 100644
--- a/runtime/vm/thread_test.cc
+++ b/runtime/vm/thread_test.cc
@@ -3,10 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 #include "platform/assert.h"
+#include "vm/heap/safepoint.h"
 #include "vm/isolate.h"
 #include "vm/lockers.h"
 #include "vm/profiler.h"
-#include "vm/safepoint.h"
 #include "vm/stack_frame.h"
 #include "vm/thread_pool.h"
 #include "vm/unit_test.h"
diff --git a/runtime/vm/unit_test.cc b/runtime/vm/unit_test.cc
index 7e3cd7a..836fa3f 100644
--- a/runtime/vm/unit_test.cc
+++ b/runtime/vm/unit_test.cc
@@ -689,6 +689,40 @@
   return Api::Success();
 }
 
+Dart_Handle TestCase::EvaluateExpression(const Library& lib,
+                                         const String& expr,
+                                         const Array& param_names,
+                                         const Array& param_values) {
+  Thread* thread = Thread::Current();
+
+  Object& val = Object::Handle();
+  if (!KernelIsolate::IsRunning()) {
+    val = lib.Evaluate(expr, param_names, param_values);
+  } else {
+    Dart_KernelCompilationResult compilation_result;
+    {
+      TransitionVMToNative transition(thread);
+      compilation_result = KernelIsolate::CompileExpressionToKernel(
+          expr.ToCString(), param_names, Array::empty_array(),
+          String::Handle(lib.url()).ToCString(), /* klass=*/nullptr,
+          /* is_static= */ false);
+    }
+    if (compilation_result.status != Dart_KernelCompilationStatus_Ok) {
+      return Dart_NewApiError(compilation_result.error);
+    }
+
+    const uint8_t* kernel_bytes = compilation_result.kernel;
+    intptr_t kernel_length = compilation_result.kernel_size;
+
+    val = lib.EvaluateCompiledExpression(kernel_bytes, kernel_length,
+                                         Array::empty_array(), param_values,
+                                         TypeArguments::null_type_arguments());
+
+    free(const_cast<uint8_t*>(kernel_bytes));
+  }
+  return Api::NewHandle(thread, val.raw());
+}
+
 #if !defined(PRODUCT)
 static bool IsHex(int c) {
   return ('0' <= c && c <= '9') || ('a' <= c && c <= 'f');
diff --git a/runtime/vm/unit_test.h b/runtime/vm/unit_test.h
index ee2c328..5dd5122 100644
--- a/runtime/vm/unit_test.h
+++ b/runtime/vm/unit_test.h
@@ -13,7 +13,7 @@
 #include "vm/dart.h"
 #include "vm/dart_api_state.h"
 #include "vm/globals.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/isolate.h"
 #include "vm/longjump.h"
 #include "vm/object.h"
@@ -350,6 +350,11 @@
   static Dart_Handle LoadCoreTestScript(const char* script,
                                         Dart_NativeEntryResolver resolver);
 
+  static Dart_Handle EvaluateExpression(const Library& lib,
+                                        const String& expr,
+                                        const Array& param_names,
+                                        const Array& param_values);
+
   static Dart_Handle lib();
   static const char* url();
   static Dart_Isolate CreateTestIsolateFromSnapshot(uint8_t* buffer,
diff --git a/runtime/vm/virtual_memory_test.cc b/runtime/vm/virtual_memory_test.cc
index 7d725d0..9454ecf 100644
--- a/runtime/vm/virtual_memory_test.cc
+++ b/runtime/vm/virtual_memory_test.cc
@@ -4,7 +4,7 @@
 
 #include "vm/virtual_memory.h"
 #include "platform/assert.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/unit_test.h"
 
 namespace dart {
diff --git a/runtime/vm/vm_sources.gni b/runtime/vm/vm_sources.gni
index d227772..93d8ac3 100644
--- a/runtime/vm/vm_sources.gni
+++ b/runtime/vm/vm_sources.gni
@@ -16,8 +16,6 @@
   "base64.cc",
   "base64.h",
   "base_isolate.h",
-  "become.cc",
-  "become.h",
   "bit_vector.cc",
   "bit_vector.h",
   "bitfield.h",
@@ -102,14 +100,6 @@
   "flag_list.h",
   "flags.cc",
   "flags.h",
-  "freelist.cc",
-  "freelist.h",
-  "gc_compactor.cc",
-  "gc_compactor.h",
-  "gc_marker.cc",
-  "gc_marker.h",
-  "gc_sweeper.cc",
-  "gc_sweeper.h",
   "gdb_helpers.cc",
   "globals.h",
   "growable_array.h",
@@ -118,8 +108,6 @@
   "handles_impl.h",
   "hash_map.h",
   "hash_table.h",
-  "heap.cc",
-  "heap.h",
   "image_snapshot.cc",
   "image_snapshot.h",
   "instructions.h",
@@ -215,8 +203,6 @@
   "os_thread_win.cc",
   "os_thread_win.h",
   "os_win.cc",
-  "pages.cc",
-  "pages.h",
   "parser.cc",
   "parser.h",
   "port.cc",
@@ -264,12 +250,8 @@
   "runtime_entry_ia32.cc",
   "runtime_entry_list.h",
   "runtime_entry_x64.cc",
-  "safepoint.cc",
-  "safepoint.h",
   "scanner.cc",
   "scanner.h",
-  "scavenger.cc",
-  "scavenger.h",
   "scope_timer.h",
   "scopes.cc",
   "scopes.h",
@@ -297,7 +279,6 @@
   "snapshot_ids.h",
   "source_report.cc",
   "source_report.h",
-  "spaces.h",
   "stack_frame.cc",
   "stack_frame.h",
   "stack_frame_arm.h",
@@ -308,8 +289,6 @@
   "stack_frame_x64.h",
   "stack_trace.cc",
   "stack_trace.h",
-  "store_buffer.cc",
-  "store_buffer.h",
   "stub_code.cc",
   "stub_code.h",
   "stub_code_arm.cc",
@@ -359,8 +338,6 @@
   "unicode_data.cc",
   "uri.cc",
   "uri.h",
-  "verifier.cc",
-  "verifier.h",
   "virtual_memory.cc",
   "virtual_memory.h",
   "virtual_memory_android.cc",
@@ -369,10 +346,6 @@
   "virtual_memory_macos.cc",
   "virtual_memory_win.cc",
   "visitor.h",
-  "weak_code.cc",
-  "weak_code.h",
-  "weak_table.cc",
-  "weak_table.h",
   "zone.cc",
   "zone.h",
   "zone_text_buffer.cc",
@@ -385,9 +358,9 @@
   "ast_printer_test.cc",
   "ast_test.cc",
   "atomic_test.cc",
+  "base64_test.cc",
   "benchmark_test.cc",
   "benchmark_test.h",
-  "base64_test.cc",
   "bit_set_test.cc",
   "bit_vector_test.cc",
   "bitfield_test.cc",
@@ -410,13 +383,11 @@
   "find_code_object_test.cc",
   "fixed_cache_test.cc",
   "flags_test.cc",
-  "freelist_test.cc",
   "growable_array_test.cc",
   "guard_field_test.cc",
   "handles_test.cc",
   "hash_map_test.cc",
   "hash_table_test.cc",
-  "heap_test.cc",
   "instructions_arm64_test.cc",
   "instructions_arm_test.cc",
   "instructions_ia32_test.cc",
@@ -444,7 +415,6 @@
   "object_test.cc",
   "object_x64_test.cc",
   "os_test.cc",
-  "pages_test.cc",
   "parser_test.cc",
   "port_test.cc",
   "profiler_test.cc",
@@ -452,7 +422,6 @@
   "resolver_test.cc",
   "ring_buffer_test.cc",
   "scanner_test.cc",
-  "scavenger_test.cc",
   "scopes_test.cc",
   "service_test.cc",
   "snapshot_test.cc",
diff --git a/runtime/vm/zone.cc b/runtime/vm/zone.cc
index ef35be1..313e452 100644
--- a/runtime/vm/zone.cc
+++ b/runtime/vm/zone.cc
@@ -9,7 +9,7 @@
 #include "vm/dart_api_state.h"
 #include "vm/flags.h"
 #include "vm/handles_impl.h"
-#include "vm/heap.h"
+#include "vm/heap/heap.h"
 #include "vm/os.h"
 
 namespace dart {
diff --git a/samples/sample_extension/test/sample_extension_test_helper.dart b/samples/sample_extension/test/sample_extension_test_helper.dart
index 6141a88..72819b9 100644
--- a/samples/sample_extension/test/sample_extension_test_helper.dart
+++ b/samples/sample_extension/test/sample_extension_test_helper.dart
@@ -73,11 +73,16 @@
         snapshot = script;
       } else {
         snapshot = join(testDirectory, "$test.snapshot");
-        await run(Platform.executable,
-            ['--snapshot=$snapshot', '--snapshot-kind=$snapshotKind', script]);
+        List<String> args = new List<String>.from(Platform.executableArguments);
+        args.add('--snapshot=$snapshot');
+        args.add('--snapshot-kind=$snapshotKind');
+        args.add(script);
+        await run(Platform.executable, args);
       }
 
-      await run(Platform.executable, [snapshot]);
+      List<String> args = new List<String>.from(Platform.executableArguments);
+      args.add(snapshot);
+      await run(Platform.executable, args);
     }
   } finally {
     await tempDirectory.deleteSync(recursive: true);
diff --git a/samples/samples.status b/samples/samples.status
index c45d91c..aeefd6e 100644
--- a/samples/samples.status
+++ b/samples/samples.status
@@ -5,14 +5,15 @@
 [ $arch == arm ]
 sample_extension/test/*: Skip # Issue 14705
 
+[ $builder_tag == optimization_counter_threshold ]
+sample_extension/test/sample_extension_app_snapshot_test: SkipByDesign # This test is too slow for testing with low optimization counter threshold.
+
+[ $compiler == app_jit ]
+sample_extension/test/sample_extension_app_snapshot_test: RuntimeError
+
 [ $compiler == dart2analyzer ]
 build_dart: Skip
 
-[ $compiler == dartkp ]
-sample_extension/test/sample_extension_app_snapshot_test: RuntimeError
-sample_extension/test/sample_extension_script_snapshot_test: RuntimeError
-sample_extension/test/sample_extension_test: RuntimeError
-
 [ $compiler == precompiler ]
 sample_extension/test/*: Skip # These tests attempt to spawn another script using the precompiled runtime.
 
@@ -28,8 +29,16 @@
 [ $compiler == none && $runtime == vm && $system == fuchsia ]
 *: Skip # Not yet triaged.
 
+[ $compiler == app_jitk || $compiler == dartk || $compiler == dartkp ]
+sample_extension/test/sample_extension_app_snapshot_test: RuntimeError
+sample_extension/test/sample_extension_script_snapshot_test: RuntimeError
+sample_extension/test/sample_extension_test: RuntimeError
+
 # Skip tests that use dart:io
 [ $runtime == d8 || $browser ]
 build_dart/*: Skip
 build_dart_simple/*: Skip
 sample_extension/*: Skip
+
+[ $hot_reload || $hot_reload_rollback ]
+sample_extension/test/sample_extension_script_snapshot_test: SkipByDesign # This test makes a script snapshot, which implies not exercising Dart code.
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index a15213c..c84f526 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -44,7 +44,7 @@
 # ........dartfmt.dart.snapshot
 # ........dartdevc.dart.snapshot
 # ........dartdevk.dart.snapshot
-# ........kernel_summary_worker.dart.snapshot
+# ........kernel_worker.dart.snapshot
 # ........pub.dart.snapshot
 # ........pub2.dart.snapshot
 #.........resources/
@@ -170,8 +170,8 @@
     "../utils/dartfmt",
   ],
   [
-    "kernel_summary_worker",
-    "../utils/bazel:kernel_summary_worker",
+    "kernel_worker",
+    "../utils/bazel:kernel_worker",
   ],
   [
     "pub",
diff --git a/sdk/bin/dart2js b/sdk/bin/dart2js
index 9af877f..b4c1938 100755
--- a/sdk/bin/dart2js
+++ b/sdk/bin/dart2js
@@ -41,7 +41,6 @@
     EXTRA_VM_OPTIONS+=('--enable-asserts')
     ;;
 esac
-EXTRA_VM_OPTIONS+=('--preview-dart-2')
 
 # We allow extra vm options to be passed in through an environment variable.
 if [[ $DART_VM_OPTIONS ]]; then
diff --git a/sdk/bin/dart2js.bat b/sdk/bin/dart2js.bat
index 3f3fd9d..9341ad8 100644
--- a/sdk/bin/dart2js.bat
+++ b/sdk/bin/dart2js.bat
@@ -20,7 +20,7 @@
 set DART=%BIN_DIR%\dart
 
 set EXTRA_OPTIONS=
-set EXTRA_VM_OPTIONS=--preview-dart-2
+set EXTRA_VM_OPTIONS=
 
 if _%DART2JS_DEVELOPER_MODE%_ == _1_ (
   set EXTRA_VM_OPTIONS=%EXTRA_VM_OPTIONS% --enable-asserts
diff --git a/sdk/bin/dart2js_sdk b/sdk/bin/dart2js_sdk
index 3896e71..70c60b7 100755
--- a/sdk/bin/dart2js_sdk
+++ b/sdk/bin/dart2js_sdk
@@ -48,7 +48,6 @@
     EXTRA_VM_OPTIONS+=('--enable-asserts')
     ;;
 esac
-EXTRA_VM_OPTIONS+=('--preview-dart-2')
 
 # We allow extra vm options to be passed in through an environment variable.
 if [[ $DART_VM_OPTIONS ]]; then
diff --git a/sdk/bin/dart2js_sdk.bat b/sdk/bin/dart2js_sdk.bat
index 3b1aa66..acc4e17 100755
--- a/sdk/bin/dart2js_sdk.bat
+++ b/sdk/bin/dart2js_sdk.bat
@@ -21,7 +21,7 @@
 set SNAPSHOT=%BIN_DIR%\snapshots\dart2js.dart.snapshot
 
 set EXTRA_OPTIONS=
-set EXTRA_VM_OPTIONS=--preview-dart-2
+set EXTRA_VM_OPTIONS=
 
 if _%DART2JS_DEVELOPER_MODE%_ == _1_ (
   set EXTRA_VM_OPTIONS=%EXTRA_VM_OPTIONS% --enable-asserts
diff --git a/sdk/bin/dartanalyzer b/sdk/bin/dartanalyzer
index 49f4bcc..7ea062c 100755
--- a/sdk/bin/dartanalyzer
+++ b/sdk/bin/dartanalyzer
@@ -47,4 +47,4 @@
 
 DEV_OPTIONS="--use-analysis-driver-memory-byte-store"
 
-exec "$DART" "--preview-dart-2" "--packages=$DART_ROOT/.packages" "${EXTRA_VM_OPTIONS[@]}" "$ANALYZER" "$DEV_OPTIONS" "$SDK_ARG" "$@"
+exec "$DART" "--packages=$DART_ROOT/.packages" "${EXTRA_VM_OPTIONS[@]}" "$ANALYZER" "$DEV_OPTIONS" "$SDK_ARG" "$@"
diff --git a/sdk/bin/dartanalyzer.bat b/sdk/bin/dartanalyzer.bat
index b4a1de2..efa3a6a 100644
--- a/sdk/bin/dartanalyzer.bat
+++ b/sdk/bin/dartanalyzer.bat
@@ -40,7 +40,7 @@
 
 set ANALYZER=%DART_ROOT%\pkg\analyzer_cli\bin\analyzer.dart
 
-"%DART%" "--preview-dart-2" "--packages=%DART_ROOT%\.packages" %EXTRA_VM_OPTIONS% "%ANALYZER%" "%SDK_ARG%" %*
+"%DART%" "--packages=%DART_ROOT%\.packages" %EXTRA_VM_OPTIONS% "%ANALYZER%" "%SDK_ARG%" %*
 
 endlocal
 
diff --git a/sdk/bin/dartanalyzer_sdk b/sdk/bin/dartanalyzer_sdk
index 90d09de..28f37ab 100755
--- a/sdk/bin/dartanalyzer_sdk
+++ b/sdk/bin/dartanalyzer_sdk
@@ -28,4 +28,4 @@
 
 # We are running the snapshot in the built SDK.
 DART="$BIN_DIR/dart"
-exec "$DART" "--preview-dart-2" "$SNAPSHOT" "$SDK_ARG" "$@"
+exec "$DART" "$SNAPSHOT" "$SDK_ARG" "$@"
diff --git a/sdk/bin/dartanalyzer_sdk.bat b/sdk/bin/dartanalyzer_sdk.bat
index 82125f0..ab66885 100644
--- a/sdk/bin/dartanalyzer_sdk.bat
+++ b/sdk/bin/dartanalyzer_sdk.bat
@@ -22,7 +22,7 @@
 
 set SDK_ARG=--dart-sdk=%SDK_DIR%
 
-"%DART%" "--preview-dart-2" "%SNAPSHOT%" "%SDK_ARG%" %*
+"%DART%" "%SNAPSHOT%" "%SDK_ARG%" %*
 
 endlocal
 
diff --git a/sdk/bin/dartdevc b/sdk/bin/dartdevc
index e0c8e7a..5b75ad2 100755
--- a/sdk/bin/dartdevc
+++ b/sdk/bin/dartdevc
@@ -45,4 +45,4 @@
 
 DEV_COMPILER="$DART_ROOT/pkg/dev_compiler/bin/dartdevc.dart"
 
-exec "$DART" "--preview-dart-2" "--packages=$DART_ROOT/.packages" "${EXTRA_VM_OPTIONS[@]}" "$DEV_COMPILER" "$SDK_ARG" "$@"
+exec "$DART" "--packages=$DART_ROOT/.packages" "${EXTRA_VM_OPTIONS[@]}" "$DEV_COMPILER" "$SDK_ARG" "$@"
diff --git a/sdk/bin/dartdevc.bat b/sdk/bin/dartdevc.bat
index d636eee..fec39e4 100644
--- a/sdk/bin/dartdevc.bat
+++ b/sdk/bin/dartdevc.bat
@@ -36,7 +36,7 @@
 
 set DEV_COMPILER=%DART_ROOT%\third_party\pkg\dev_compiler\bin\dartdevc.dart
 
-"%DART%" "--preview-dart-2" "--packages=%DART_ROOT%\.packages" %EXTRA_VM_OPTIONS% "DEV_COMPILER%" "%SDK_ARG%" %*
+"%DART%" "--packages=%DART_ROOT%\.packages" %EXTRA_VM_OPTIONS% "DEV_COMPILER%" "%SDK_ARG%" %*
 
 endlocal
 
diff --git a/sdk/bin/dartdevc_sdk b/sdk/bin/dartdevc_sdk
index aebe28d..7bc98de 100755
--- a/sdk/bin/dartdevc_sdk
+++ b/sdk/bin/dartdevc_sdk
@@ -28,4 +28,4 @@
 
 # We are running the snapshot in the built SDK.
 DART="$BIN_DIR/dart"
-exec "$DART" "--preview-dart-2" "$SNAPSHOT" "$SDK_ARG" "$@"
+exec "$DART" "$SNAPSHOT" "$SDK_ARG" "$@"
diff --git a/sdk/bin/dartdevc_sdk.bat b/sdk/bin/dartdevc_sdk.bat
index f931a28..5dbf707 100644
--- a/sdk/bin/dartdevc_sdk.bat
+++ b/sdk/bin/dartdevc_sdk.bat
@@ -22,7 +22,7 @@
 
 set SDK_ARG=--dart-sdk=%SDK_DIR%
 
-"%DART%" "--preview-dart-2" "%SNAPSHOT%" "%SDK_ARG%" %*
+"%DART%" "%SNAPSHOT%" "%SDK_ARG%" %*
 
 endlocal
 
diff --git a/sdk/bin/dartdevk b/sdk/bin/dartdevk
index 6d75105..f6111dc 100755
--- a/sdk/bin/dartdevk
+++ b/sdk/bin/dartdevk
@@ -43,4 +43,4 @@
 
 DEV_COMPILER="$DART_ROOT/pkg/dev_compiler/bin/dartdevk.dart"
 
-exec "$DART" "--preview-dart-2" "--packages=$DART_ROOT/.packages" "${EXTRA_VM_OPTIONS[@]}" "$DEV_COMPILER" "$@"
+exec "$DART" "--packages=$DART_ROOT/.packages" "${EXTRA_VM_OPTIONS[@]}" "$DEV_COMPILER" "$@"
diff --git a/sdk/bin/dartdevk.bat b/sdk/bin/dartdevk.bat
index 79c09c5..154162a 100644
--- a/sdk/bin/dartdevk.bat
+++ b/sdk/bin/dartdevk.bat
@@ -34,7 +34,7 @@
 
 set DEV_COMPILER=%DART_ROOT%\pkg\dev_compiler\bin\dartdevk.dart
 
-"%DART%" "--preview-dart-2" "--packages=%DART_ROOT%\.packages" %EXTRA_VM_OPTIONS% "%DEV_COMPILER%" %*
+"%DART%" "--packages=%DART_ROOT%\.packages" %EXTRA_VM_OPTIONS% "%DEV_COMPILER%" %*
 
 endlocal
 
diff --git a/sdk/bin/dartdevk_sdk b/sdk/bin/dartdevk_sdk
index dc790e4..098775a 100755
--- a/sdk/bin/dartdevk_sdk
+++ b/sdk/bin/dartdevk_sdk
@@ -26,4 +26,4 @@
 
 # We are running the snapshot in the built SDK.
 DART="$BIN_DIR/dart"
-exec "$DART" "--preview-dart-2" "$SNAPSHOT" "--packages=$SDK_DIR/../../../.packages" "$@"
+exec "$DART" "$SNAPSHOT" "--packages=$SDK_DIR/../../../.packages" "$@"
diff --git a/sdk/bin/dartdevk_sdk.bat b/sdk/bin/dartdevk_sdk.bat
index 3879afb..8e490ef 100644
--- a/sdk/bin/dartdevk_sdk.bat
+++ b/sdk/bin/dartdevk_sdk.bat
@@ -20,7 +20,7 @@
 rem Remove trailing backslash if there is one
 if %SDK_DIR:~-1%==\ set SDK_DIR=%SDK_DIR:~0,-1%
 
-"%DART%" "--preview-dart-2" "%SNAPSHOT%" "--packages=%SDK_DIR%\..\..\..\.packages" %*
+"%DART%" "%SNAPSHOT%" "--packages=%SDK_DIR%\..\..\..\.packages" %*
 
 endlocal
 
diff --git a/sdk/bin/dartdoc b/sdk/bin/dartdoc
index 73d81e0..d81a581 100755
--- a/sdk/bin/dartdoc
+++ b/sdk/bin/dartdoc
@@ -26,4 +26,4 @@
 
 # We are running the snapshot in the built SDK.
 DART="$BIN_DIR/dart"
-exec "$DART" "--preview-dart-2" --packages="$BIN_DIR/snapshots/resources/dartdoc/.packages" "$SNAPSHOT" "$@"
+exec "$DART" "--packages=$BIN_DIR/snapshots/resources/dartdoc/.packages" "$SNAPSHOT" "$@"
diff --git a/sdk/bin/dartdoc.bat b/sdk/bin/dartdoc.bat
index fdab3b5..8c2c900 100644
--- a/sdk/bin/dartdoc.bat
+++ b/sdk/bin/dartdoc.bat
@@ -14,7 +14,7 @@
 set DART=%BIN_DIR%\dart
 set SNAPSHOT=%BIN_DIR%\snapshots\dartdoc.dart.snapshot
 
-"%DART%" "--preview-dart-2" --packages="%BIN_DIR%/snapshots/resources/dartdoc/.packages" "%SNAPSHOT%" %*
+"%DART%" "--packages=%BIN_DIR%/snapshots/resources/dartdoc/.packages" "%SNAPSHOT%" %*
 
 endlocal
 
diff --git a/sdk/bin/dartfmt b/sdk/bin/dartfmt
index fb58a1e..ad54140 100755
--- a/sdk/bin/dartfmt
+++ b/sdk/bin/dartfmt
@@ -28,4 +28,4 @@
 
 DARTFMT="$DART_ROOT/third_party/pkg_tested/dart_style/bin/format.dart"
 
-exec "$DART" "--preview-dart-2" "--packages=$DART_ROOT/.packages" "$DARTFMT" "$@"
+exec "$DART" "--packages=$DART_ROOT/.packages" "$DARTFMT" "$@"
diff --git a/sdk/bin/dartfmt.bat b/sdk/bin/dartfmt.bat
index f668f56..7a7412b 100644
--- a/sdk/bin/dartfmt.bat
+++ b/sdk/bin/dartfmt.bat
@@ -27,7 +27,7 @@
 
 set DARTFMT=%DART_ROOT%\third_party\pkg_tested\dart_style\bin\format.dart
 
-"%DART%" "--preview-dart-2" "--packages=%DART_ROOT%\.packages" "%DARTFMT%" %*
+"%DART%" "--packages=%DART_ROOT%\.packages" "%DARTFMT%" %*
 
 endlocal
 
diff --git a/sdk/bin/dartfmt_sdk b/sdk/bin/dartfmt_sdk
index b6b98c4..273733c 100755
--- a/sdk/bin/dartfmt_sdk
+++ b/sdk/bin/dartfmt_sdk
@@ -26,4 +26,4 @@
 
 # We are running the snapshot in the built SDK.
 DART="$BIN_DIR/dart"
-exec "$DART" "--preview-dart-2" "$SNAPSHOT" "$@"
+exec "$DART" "$SNAPSHOT" "$@"
diff --git a/sdk/bin/dartfmt_sdk.bat b/sdk/bin/dartfmt_sdk.bat
index f746a72..295b977 100644
--- a/sdk/bin/dartfmt_sdk.bat
+++ b/sdk/bin/dartfmt_sdk.bat
@@ -14,7 +14,7 @@
 set DART=%BIN_DIR%\dart
 set SNAPSHOT=%BIN_DIR%\snapshots\dartfmt.dart.snapshot
 
-"%DART%" "--preview-dart-2" "%SNAPSHOT%" %*
+"%DART%" "%SNAPSHOT%" %*
 
 endlocal
 
diff --git a/sdk/bin/pub_sdk b/sdk/bin/pub_sdk
index 74a86ca..85d3b97 100755
--- a/sdk/bin/pub_sdk
+++ b/sdk/bin/pub_sdk
@@ -41,10 +41,10 @@
 
 # Run the pub snapshot.
 DART="$BIN_DIR/dart"
-if array_contains "--preview-dart-2" "${VM_OPTIONS[@]}"; then
-  SNAPSHOT="$BIN_DIR/snapshots/pub2.dart.snapshot"
+if array_contains "--no-preview-dart-2" "${VM_OPTIONS[@]}"; then
+  SNAPSHOT="$BIN_DIR/snapshots/pub.dart.snapshot"
   exec "$DART" "${VM_OPTIONS[@]}" "$SNAPSHOT" "$@"
 else
-  SNAPSHOT="$BIN_DIR/snapshots/pub.dart.snapshot"
+  SNAPSHOT="$BIN_DIR/snapshots/pub2.dart.snapshot"
   exec "$DART" "${VM_OPTIONS[@]}" "$SNAPSHOT" "$@"
 fi
diff --git a/sdk/bin/pub_sdk.bat b/sdk/bin/pub_sdk.bat
index 1c400bd..564e512 100644
--- a/sdk/bin/pub_sdk.bat
+++ b/sdk/bin/pub_sdk.bat
@@ -18,20 +18,20 @@
 IF %SDK_DIR:~-1%==\ set SDK_DIR=%SDK_DIR:~0,-1%
 
 set VM_OPTIONS=
-set USING_DART_2=
+set USING_DART_1=
 
 rem We allow extra vm options to be passed in through an environment variable.
 if not "_%DART_VM_OPTIONS%_" == "__" (
   set VM_OPTIONS=%VM_OPTIONS% %DART_VM_OPTIONS%
   for %%o in (%DART_VM_OPTIONS%) do (
-    if "%%o" equ "--preview-dart-2" set USING_DART_2=y
+    if "%%o" equ "--no-preview-dart-2" set USING_DART_1=y
   )
 )
 
-if defined USING_DART_2 (
-  "%BIN_DIR%\dart" %VM_OPTIONS% "%BIN_DIR%\snapshots\pub2.dart.snapshot" %*
-) else (
+if defined USING_DART_1 (
   "%BIN_DIR%\dart" %VM_OPTIONS% "%BIN_DIR%\snapshots\pub.dart.snapshot" %*
+) else (
+  "%BIN_DIR%\dart" %VM_OPTIONS% "%BIN_DIR%\snapshots\pub2.dart.snapshot" %*
 )
 
 endlocal
diff --git a/sdk/lib/_internal/js_runtime/lib/core_patch.dart b/sdk/lib/_internal/js_runtime/lib/core_patch.dart
index e590c9c..e27baf5 100644
--- a/sdk/lib/_internal/js_runtime/lib/core_patch.dart
+++ b/sdk/lib/_internal/js_runtime/lib/core_patch.dart
@@ -2947,3 +2947,14 @@
     return _reduce(resultDigits, resultUsed);
   }
 }
+
+/// Creates an invocation object used in noSuchMethod forwarding stubs.
+///
+/// The signature is hardwired to the kernel nodes generated in the
+/// `Dart2jsTarget` and read in the `KernelSsaGraphBuilder`.
+external Invocation _createInvocationMirror(
+    String memberName,
+    List typeArguments,
+    List positionalArguments,
+    Map<String, dynamic> namedArguments,
+    int kind);
diff --git a/sdk/lib/_internal/js_runtime/lib/js_helper.dart b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
index fd9e485..9e2f105 100644
--- a/sdk/lib/_internal/js_runtime/lib/js_helper.dart
+++ b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
@@ -251,9 +251,9 @@
 }
 
 createUnmangledInvocationMirror(
-    Symbol symbol, internalName, kind, arguments, argumentNames) {
+    Symbol symbol, internalName, kind, arguments, argumentNames, types) {
   return new JSInvocationMirror(
-      symbol, internalName, kind, arguments, argumentNames, 0);
+      symbol, internalName, kind, arguments, argumentNames, types);
 }
 
 void throwInvalidReflectionError(String memberName) {
@@ -1258,8 +1258,13 @@
     String selectorName =
         '${JS_GET_NAME(JsGetName.CALL_PREFIX)}\$$argumentCount$names';
 
-    return function.noSuchMethod(createUnmangledInvocationMirror(#call,
-        selectorName, JSInvocationMirror.METHOD, arguments, namedArgumentList));
+    return function.noSuchMethod(createUnmangledInvocationMirror(
+        #call,
+        selectorName,
+        JSInvocationMirror.METHOD,
+        arguments,
+        namedArgumentList,
+        0));
   }
 
   /**
diff --git a/sdk/lib/_internal/js_runtime/lib/js_rti.dart b/sdk/lib/_internal/js_runtime/lib/js_rti.dart
index 795a5f2..74a6352 100644
--- a/sdk/lib/_internal/js_runtime/lib/js_rti.dart
+++ b/sdk/lib/_internal/js_runtime/lib/js_rti.dart
@@ -1343,6 +1343,8 @@
 /// Called from generated code.
 @NoInline()
 instantiatedGenericFunctionType(genericFunctionRti, parameters) {
+  if (genericFunctionRti == null) return null;
+
   assert(isDartFunctionType(genericFunctionRti));
 
   var genericBoundsTag =
diff --git a/sdk/lib/core/int.dart b/sdk/lib/core/int.dart
index 02bca23..a6a9946 100644
--- a/sdk/lib/core/int.dart
+++ b/sdk/lib/core/int.dart
@@ -5,30 +5,36 @@
 part of dart.core;
 
 /**
- * An arbitrarily large integer.
+ * An integer number.
  *
- * **Note:** When compiling to JavaScript, integers are
- * implemented as JavaScript numbers. When compiling to JavaScript,
- * integers are therefore restricted to 53 significant bits because
- * all JavaScript numbers are double-precision floating point
- * values. The behavior of the operators and methods in the [int]
+ * The default implementation of `int` is 64-bit two's complement integers
+ * with operations that wrap to that range on overflow.
+ *
+ * **Note:** When compiling to JavaScript, integers are restricted to valus
+ * that can be represented exactly by double-precision floating point values.
+ * The available integer values include all integers between -2^53 and 2^53,
+ * and some integers with larger magnitude. That includes some integers larger
+ * than 2^63.
+ * The behavior of the operators and methods in the [int]
  * class therefore sometimes differs between the Dart VM and Dart code
- * compiled to JavaScript.
+ * compiled to JavaScript. For example, the bitwise operators truncate their
+ * operands to 32-bit integers when compiled to JavaScript.
  *
- * It is a compile-time error for a class to attempt to extend or implement int.
+ * Classes cannot extend, implement, or mix in `int`.
  */
 abstract class int extends num {
   /**
    * Returns the integer value of the given environment declaration [name].
    *
    * The result is the same as would be returned by:
-   *
-   *     int.parse(const String.fromEnvironment(name, defaultValue: ""),
-   *               (_) => defaultValue)
-   *
+   * ```
+   * int.tryParse(const String.fromEnvironment(name, defaultValue: ""))
+   *     ?? defaultValue
+   * ```
    * Example:
-   *
-   *     const int.fromEnvironment("defaultPort", defaultValue: 80)
+   * ```
+   * const int.fromEnvironment("defaultPort", defaultValue: 80)
+   * ```
    */
   // The .fromEnvironment() constructors are special in that we do not want
   // users to call them using "new". We prohibit that by giving them bodies
@@ -157,17 +163,18 @@
    *
    * To find the number of bits needed to store the value as a signed value,
    * add one, i.e. use `x.bitLength + 1`.
+   * ```
+   * x.bitLength == (-x-1).bitLength
    *
-   *      x.bitLength == (-x-1).bitLength
-   *
-   *      3.bitLength == 2;     // 00000011
-   *      2.bitLength == 2;     // 00000010
-   *      1.bitLength == 1;     // 00000001
-   *      0.bitLength == 0;     // 00000000
-   *      (-1).bitLength == 0;  // 11111111
-   *      (-2).bitLength == 1;  // 11111110
-   *      (-3).bitLength == 2;  // 11111101
-   *      (-4).bitLength == 2;  // 11111100
+   * 3.bitLength == 2;     // 00000011
+   * 2.bitLength == 2;     // 00000010
+   * 1.bitLength == 1;     // 00000001
+   * 0.bitLength == 0;     // 00000000
+   * (-1).bitLength == 0;  // 11111111
+   * (-2).bitLength == 1;  // 11111110
+   * (-3).bitLength == 2;  // 11111101
+   * (-4).bitLength == 2;  // 11111100
+   * ```
    */
   int get bitLength;
 
@@ -175,21 +182,22 @@
    * Returns the least significant [width] bits of this integer as a
    * non-negative number (i.e. unsigned representation).  The returned value has
    * zeros in all bit positions higher than [width].
-   *
-   *     (-1).toUnsigned(5) == 31   // 11111111  ->  00011111
-   *
+   * ```
+   * (-1).toUnsigned(5) == 31   // 11111111  ->  00011111
+   * ```
    * This operation can be used to simulate arithmetic from low level languages.
    * For example, to increment an 8 bit quantity:
-   *
-   *     q = (q + 1).toUnsigned(8);
-   *
+   * ```
+   * q = (q + 1).toUnsigned(8);
+   * ```
    * `q` will count from `0` up to `255` and then wrap around to `0`.
    *
    * If the input fits in [width] bits without truncation, the result is the
    * same as the input.  The minimum width needed to avoid truncation of `x` is
    * given by `x.bitLength`, i.e.
-   *
-   *     x == x.toUnsigned(x.bitLength);
+   * ```
+   * x == x.toUnsigned(x.bitLength);
+   * ```
    */
   int toUnsigned(int width);
 
@@ -199,24 +207,26 @@
    * to fit in [width] bits using an signed 2-s complement representation.  The
    * returned value has the same bit value in all positions higher than [width].
    *
-   *                                    V--sign bit-V
-   *     16.toSigned(5) == -16   //  00010000 -> 11110000
-   *     239.toSigned(5) == 15   //  11101111 -> 00001111
-   *                                    ^           ^
-   *
+   * ```
+   *                                V--sign bit-V
+   * 16.toSigned(5) == -16   //  00010000 -> 11110000
+   * 239.toSigned(5) == 15   //  11101111 -> 00001111
+   *                                ^           ^
+   * ```
    * This operation can be used to simulate arithmetic from low level languages.
    * For example, to increment an 8 bit signed quantity:
-   *
-   *     q = (q + 1).toSigned(8);
-   *
+   * ```
+   * q = (q + 1).toSigned(8);
+   * ```
    * `q` will count from `0` up to `127`, wrap to `-128` and count back up to
    * `127`.
    *
    * If the input value fits in [width] bits without truncation, the result is
    * the same as the input.  The minimum width needed to avoid truncation of `x`
    * is `x.bitLength + 1`, i.e.
-   *
-   *     x == x.toSigned(x.bitLength + 1);
+   * ```
+   * x == x.toSigned(x.bitLength + 1);
+   * ```
    */
   int toSigned(int width);
 
@@ -271,8 +281,8 @@
    * Returns a String-representation of this integer.
    *
    * The returned string is parsable by [parse].
-   * For any `int` [:i:], it is guaranteed that
-   * [:i == int.parse(i.toString()):].
+   * For any `int` `i`, it is guaranteed that
+   * `i == int.parse(i.toString())`.
    */
   String toString();
 
@@ -289,7 +299,7 @@
   /**
    * Parse [source] as a, possibly signed, integer literal and return its value.
    *
-   * The [source] must be a non-empty sequence of base-[radix] digits,
+   * The [source] must be either a non-empty sequence of base-[radix] digits,
    * optionally prefixed with a minus or plus sign ('-' or '+').
    *
    * The [radix] must be in the range 2..36. The digits used are
@@ -299,30 +309,36 @@
    *
    * If no [radix] is given then it defaults to 10. In this case, the [source]
    * digits may also start with `0x`, in which case the number is interpreted
-   * as a hexadecimal literal, which effectively means that the `0x` is ignored
-   * and the radix is instead set to 16.
+   * as a hexadecimal integer literal,
+   * When `int` is implemented by 64-bit signed integers,
+   * hexadecimal integer literals may represent values larger than
+   * 2<sup>63</sup>, in which case the value is parsed as if it is an
+   * *unsigned* number, and the resulting value is the corresponding
+   * signed integer value.
    *
-   * For any int [:n:] and radix [:r:], it is guaranteed that
-   * [:n == int.parse(n.toRadixString(r), radix: r):].
+   * For any int `n` and valid radix `r`, it is guaranteed that
+   * `n == int.parse(n.toRadixString(r), radix: r)`.
    *
-   * If the [source] is not a valid integer literal, optionally prefixed by a
-   * sign, the [onError] is called with the [source] as argument, and its return
-   * value is used instead. If no [onError] is provided, a [FormatException]
-   * is thrown.
+   * If the [source] does not contain a valid integer literal,
+   * optionally prefixed by a sign, a [FormatException] is thrown
+   * (unless the deprecated [onError] parameter is used, see below).
    *
-   * The [onError] handler can be chosen to return `null`.  This is preferable
-   * to to throwing and then immediately catching the [FormatException].
+   * Instead of throwing and immediately catching the [FormatException],
+   * instead use [tryParse] to handle a parsing error.
    * Example:
-   *
-   *     var value = int.parse(text, onError: (source) => null);
-   *     if (value == null) ... handle the problem
-   *
-   * The [onError] function is only invoked if [source] is a [String]. It is
-   * not invoked if the [source] is, for example, `null`.
+   * ```dart
+   * var value = int.tryParse(text);
+   * if (value == null) ... handle the problem
+   * ```
    *
    * The [onError] parameter is deprecated and will be removed.
-   * Instead of `int.parse(string, onError: (string) { ... })`,
+   * Instead of `int.parse(string, onError: (string) => ...)`,
    * you should use `int.tryParse(string) ?? (...)`.
+   *
+   * When source is not valid and [onError] is provided,
+   * whenever a [FormatException] would be thrown,
+   * [onError] is instead called with [source] as argument,
+   * and the result of that call is returned by [parse].
    */
   external static int parse(String source,
       {int radix, @deprecated int onError(String source)});
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index ee8e653..e7fe7d4 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -8,20 +8,6 @@
  * check out the [Element] class, the base class for many of the HTML
  * DOM types.
  *
- * ## Other resources
- *
- * * If you've never written a web app before, try our
- * tutorials&mdash;[A Game of Darts](http://dartlang.org/docs/tutorials).
- *
- * * To see some web-based Dart apps in action and to play with the code,
- * download
- * [Dart Editor](http://www.dartlang.org/#get-started)
- * and run its built-in examples.
- *
- * * For even more examples, see
- * [Dart HTML5 Samples](https://github.com/dart-lang/dart-html5-samples)
- * on Github.
- *
  * {@category Web}
  */
 library dart.dom.html;
@@ -145,7 +131,6 @@
   HtmlElement.created() : super.created();
 
   // From NoncedElement
-  @DomName('HTMLElement.nonce')
   String nonce;
 }
 
@@ -153,17 +138,12 @@
  * Emitted for any setlike IDL entry needs a callback signature.
  * Today there is only one.
  */
-@DomName('FontFaceSetForEachCallback')
-@Experimental() // untriaged
 typedef void FontFaceSetForEachCallback(
     FontFace fontFace, FontFace fontFaceAgain, FontFaceSet set);
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('AbortPaymentEvent')
-@Experimental() // untriaged
 @Native("AbortPaymentEvent")
 class AbortPaymentEvent extends ExtendableEvent {
   // To suppress missing implicit constructor warnings.
@@ -171,8 +151,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AbortPaymentEvent.AbortPaymentEvent')
-  @DocsEditable()
   factory AbortPaymentEvent(String type, Map eventInitDict) {
     var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
     return AbortPaymentEvent._create_1(type, eventInitDict_1);
@@ -180,18 +158,12 @@
   static AbortPaymentEvent _create_1(type, eventInitDict) => JS(
       'AbortPaymentEvent', 'new AbortPaymentEvent(#,#)', type, eventInitDict);
 
-  @DomName('AbortPaymentEvent.respondWith')
-  @DocsEditable()
-  @Experimental() // untriaged
   void respondWith(Future paymentAbortedResponse) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('AbsoluteOrientationSensor')
-@Experimental() // untriaged
 @Native("AbsoluteOrientationSensor")
 class AbsoluteOrientationSensor extends OrientationSensor {
   // To suppress missing implicit constructor warnings.
@@ -199,8 +171,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AbsoluteOrientationSensor.AbsoluteOrientationSensor')
-  @DocsEditable()
   factory AbsoluteOrientationSensor([Map sensorOptions]) {
     if (sensorOptions != null) {
       var sensorOptions_1 = convertDartToNative_Dictionary(sensorOptions);
@@ -219,8 +189,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.
 
-@DocsEditable()
-@DomName('AbstractWorker')
 abstract class AbstractWorker extends Interceptor implements EventTarget {
   // To suppress missing implicit constructor warnings.
   factory AbstractWorker._() {
@@ -233,23 +201,16 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('AbstractWorker.errorEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
   /// Stream of `error` events handled by this [AbstractWorker].
-  @DomName('AbstractWorker.onerror')
-  @DocsEditable()
   Stream<Event> get onError => errorEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('Accelerometer')
-@Experimental() // untriaged
 @Native("Accelerometer")
 class Accelerometer extends Sensor {
   // To suppress missing implicit constructor warnings.
@@ -257,8 +218,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Accelerometer.Accelerometer')
-  @DocsEditable()
   factory Accelerometer([Map sensorOptions]) {
     if (sensorOptions != null) {
       var sensorOptions_1 = convertDartToNative_Dictionary(sensorOptions);
@@ -271,28 +230,16 @@
   static Accelerometer _create_2() =>
       JS('Accelerometer', 'new Accelerometer()');
 
-  @DomName('Accelerometer.x')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num x;
 
-  @DomName('Accelerometer.y')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num y;
 
-  @DomName('Accelerometer.z')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num z;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('AccessibleNode')
-@Experimental() // untriaged
 @Native("AccessibleNode")
 class AccessibleNode extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -300,321 +247,139 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AccessibleNode.accessibleclickEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> accessibleClickEvent =
       const EventStreamProvider<Event>('accessibleclick');
 
-  @DomName('AccessibleNode.accessiblecontextmenuEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> accessibleContextMenuEvent =
       const EventStreamProvider<Event>('accessiblecontextmenu');
 
-  @DomName('AccessibleNode.accessibledecrementEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> accessibleDecrementEvent =
       const EventStreamProvider<Event>('accessibledecrement');
 
-  @DomName('AccessibleNode.accessiblefocusEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> accessibleFocusEvent =
       const EventStreamProvider<Event>('accessiblefocus');
 
-  @DomName('AccessibleNode.accessibleincrementEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> accessibleIncrementEvent =
       const EventStreamProvider<Event>('accessibleincrement');
 
-  @DomName('AccessibleNode.accessiblescrollintoviewEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> accessibleScrollIntoViewEvent =
       const EventStreamProvider<Event>('accessiblescrollintoview');
 
-  @DomName('AccessibleNode.AccessibleNode')
-  @DocsEditable()
   factory AccessibleNode() {
     return AccessibleNode._create_1();
   }
   static AccessibleNode _create_1() =>
       JS('AccessibleNode', 'new AccessibleNode()');
 
-  @DomName('AccessibleNode.activeDescendant')
-  @DocsEditable()
-  @Experimental() // untriaged
   AccessibleNode activeDescendant;
 
-  @DomName('AccessibleNode.atomic')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool atomic;
 
-  @DomName('AccessibleNode.autocomplete')
-  @DocsEditable()
-  @Experimental() // untriaged
   String autocomplete;
 
-  @DomName('AccessibleNode.busy')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool busy;
 
-  @DomName('AccessibleNode.checked')
-  @DocsEditable()
-  @Experimental() // untriaged
   String checked;
 
-  @DomName('AccessibleNode.colCount')
-  @DocsEditable()
-  @Experimental() // untriaged
   int colCount;
 
-  @DomName('AccessibleNode.colIndex')
-  @DocsEditable()
-  @Experimental() // untriaged
   int colIndex;
 
-  @DomName('AccessibleNode.colSpan')
-  @DocsEditable()
-  @Experimental() // untriaged
   int colSpan;
 
-  @DomName('AccessibleNode.controls')
-  @DocsEditable()
-  @Experimental() // untriaged
   AccessibleNodeList controls;
 
-  @DomName('AccessibleNode.current')
-  @DocsEditable()
-  @Experimental() // untriaged
   String current;
 
-  @DomName('AccessibleNode.describedBy')
-  @DocsEditable()
-  @Experimental() // untriaged
   AccessibleNodeList describedBy;
 
-  @DomName('AccessibleNode.details')
-  @DocsEditable()
-  @Experimental() // untriaged
   AccessibleNode details;
 
-  @DomName('AccessibleNode.disabled')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool disabled;
 
-  @DomName('AccessibleNode.errorMessage')
-  @DocsEditable()
-  @Experimental() // untriaged
   AccessibleNode errorMessage;
 
-  @DomName('AccessibleNode.expanded')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool expanded;
 
-  @DomName('AccessibleNode.flowTo')
-  @DocsEditable()
-  @Experimental() // untriaged
   AccessibleNodeList flowTo;
 
-  @DomName('AccessibleNode.hasPopUp')
-  @DocsEditable()
-  @Experimental() // untriaged
   String hasPopUp;
 
-  @DomName('AccessibleNode.hidden')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool hidden;
 
-  @DomName('AccessibleNode.invalid')
-  @DocsEditable()
-  @Experimental() // untriaged
   String invalid;
 
-  @DomName('AccessibleNode.keyShortcuts')
-  @DocsEditable()
-  @Experimental() // untriaged
   String keyShortcuts;
 
-  @DomName('AccessibleNode.label')
-  @DocsEditable()
-  @Experimental() // untriaged
   String label;
 
-  @DomName('AccessibleNode.labeledBy')
-  @DocsEditable()
-  @Experimental() // untriaged
   AccessibleNodeList labeledBy;
 
-  @DomName('AccessibleNode.level')
-  @DocsEditable()
-  @Experimental() // untriaged
   int level;
 
-  @DomName('AccessibleNode.live')
-  @DocsEditable()
-  @Experimental() // untriaged
   String live;
 
-  @DomName('AccessibleNode.modal')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool modal;
 
-  @DomName('AccessibleNode.multiline')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool multiline;
 
-  @DomName('AccessibleNode.multiselectable')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool multiselectable;
 
-  @DomName('AccessibleNode.orientation')
-  @DocsEditable()
-  @Experimental() // untriaged
   String orientation;
 
-  @DomName('AccessibleNode.owns')
-  @DocsEditable()
-  @Experimental() // untriaged
   AccessibleNodeList owns;
 
-  @DomName('AccessibleNode.placeholder')
-  @DocsEditable()
-  @Experimental() // untriaged
   String placeholder;
 
-  @DomName('AccessibleNode.posInSet')
-  @DocsEditable()
-  @Experimental() // untriaged
   int posInSet;
 
-  @DomName('AccessibleNode.pressed')
-  @DocsEditable()
-  @Experimental() // untriaged
   String pressed;
 
-  @DomName('AccessibleNode.readOnly')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool readOnly;
 
-  @DomName('AccessibleNode.relevant')
-  @DocsEditable()
-  @Experimental() // untriaged
   String relevant;
 
-  @DomName('AccessibleNode.required')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool required;
 
-  @DomName('AccessibleNode.role')
-  @DocsEditable()
-  @Experimental() // untriaged
   String role;
 
-  @DomName('AccessibleNode.roleDescription')
-  @DocsEditable()
-  @Experimental() // untriaged
   String roleDescription;
 
-  @DomName('AccessibleNode.rowCount')
-  @DocsEditable()
-  @Experimental() // untriaged
   int rowCount;
 
-  @DomName('AccessibleNode.rowIndex')
-  @DocsEditable()
-  @Experimental() // untriaged
   int rowIndex;
 
-  @DomName('AccessibleNode.rowSpan')
-  @DocsEditable()
-  @Experimental() // untriaged
   int rowSpan;
 
-  @DomName('AccessibleNode.selected')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool selected;
 
-  @DomName('AccessibleNode.setSize')
-  @DocsEditable()
-  @Experimental() // untriaged
   int setSize;
 
-  @DomName('AccessibleNode.sort')
-  @DocsEditable()
-  @Experimental() // untriaged
   String sort;
 
-  @DomName('AccessibleNode.valueMax')
-  @DocsEditable()
-  @Experimental() // untriaged
   num valueMax;
 
-  @DomName('AccessibleNode.valueMin')
-  @DocsEditable()
-  @Experimental() // untriaged
   num valueMin;
 
-  @DomName('AccessibleNode.valueNow')
-  @DocsEditable()
-  @Experimental() // untriaged
   num valueNow;
 
-  @DomName('AccessibleNode.valueText')
-  @DocsEditable()
-  @Experimental() // untriaged
   String valueText;
 
-  @DomName('AccessibleNode.appendChild')
-  @DocsEditable()
-  @Experimental() // untriaged
   void appendChild(AccessibleNode child) native;
 
-  @DomName('AccessibleNode.onaccessibleclick')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onAccessibleClick => accessibleClickEvent.forTarget(this);
 
-  @DomName('AccessibleNode.onaccessiblecontextmenu')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onAccessibleContextMenu =>
       accessibleContextMenuEvent.forTarget(this);
 
-  @DomName('AccessibleNode.onaccessibledecrement')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onAccessibleDecrement =>
       accessibleDecrementEvent.forTarget(this);
 
-  @DomName('AccessibleNode.onaccessiblefocus')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onAccessibleFocus => accessibleFocusEvent.forTarget(this);
 
-  @DomName('AccessibleNode.onaccessibleincrement')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onAccessibleIncrement =>
       accessibleIncrementEvent.forTarget(this);
 
-  @DomName('AccessibleNode.onaccessiblescrollintoview')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onAccessibleScrollIntoView =>
       accessibleScrollIntoViewEvent.forTarget(this);
 }
@@ -622,9 +387,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.
 
-@DocsEditable()
-@DomName('AccessibleNodeList')
-@Experimental() // untriaged
 @Native("AccessibleNodeList")
 class AccessibleNodeList extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -632,8 +394,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AccessibleNodeList.AccessibleNodeList')
-  @DocsEditable()
   factory AccessibleNodeList([List<AccessibleNode> nodes]) {
     if (nodes != null) {
       return AccessibleNodeList._create_1(nodes);
@@ -645,38 +405,20 @@
   static AccessibleNodeList _create_2() =>
       JS('AccessibleNodeList', 'new AccessibleNodeList()');
 
-  @DomName('AccessibleNodeList.length')
-  @DocsEditable()
-  @Experimental() // untriaged
   int length;
 
-  @DomName('AccessibleNodeList.__setter__')
-  @DocsEditable()
-  @Experimental() // untriaged
   void __setter__(int index, AccessibleNode node) native;
 
-  @DomName('AccessibleNodeList.add')
-  @DocsEditable()
-  @Experimental() // untriaged
   void add(AccessibleNode node, AccessibleNode before) native;
 
-  @DomName('AccessibleNodeList.item')
-  @DocsEditable()
-  @Experimental() // untriaged
   AccessibleNode item(int index) native;
 
-  @DomName('AccessibleNodeList.remove')
-  @DocsEditable()
-  @Experimental() // untriaged
   void remove(int index) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('AmbientLightSensor')
-@Experimental() // untriaged
 @Native("AmbientLightSensor")
 class AmbientLightSensor extends Sensor {
   // To suppress missing implicit constructor warnings.
@@ -684,8 +426,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AmbientLightSensor.AmbientLightSensor')
-  @DocsEditable()
   factory AmbientLightSensor([Map sensorOptions]) {
     if (sensorOptions != null) {
       var sensorOptions_1 = convertDartToNative_Dictionary(sensorOptions);
@@ -698,17 +438,12 @@
   static AmbientLightSensor _create_2() =>
       JS('AmbientLightSensor', 'new AmbientLightSensor()');
 
-  @DomName('AmbientLightSensor.illuminance')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num illuminance;
 }
 // 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.
 
-@DocsEditable()
-@DomName('HTMLAnchorElement')
 @Native("HTMLAnchorElement")
 class AnchorElement extends HtmlElement implements HtmlHyperlinkElementUtils {
   // To suppress missing implicit constructor warnings.
@@ -716,8 +451,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLAnchorElement.HTMLAnchorElement')
-  @DocsEditable()
   factory AnchorElement({String href}) {
     AnchorElement e = JS('returns:AnchorElement;creates:AnchorElement;new:true',
         '#.createElement(#)', document, "a");
@@ -731,92 +464,48 @@
    */
   AnchorElement.created() : super.created();
 
-  @DomName('HTMLAnchorElement.download')
-  @DocsEditable()
   String download;
 
-  @DomName('HTMLAnchorElement.hreflang')
-  @DocsEditable()
   String hreflang;
 
-  @DomName('HTMLAnchorElement.referrerPolicy')
-  @DocsEditable()
-  @Experimental() // untriaged
   String referrerPolicy;
 
-  @DomName('HTMLAnchorElement.rel')
-  @DocsEditable()
   String rel;
 
-  @DomName('HTMLAnchorElement.target')
-  @DocsEditable()
   String target;
 
-  @DomName('HTMLAnchorElement.type')
-  @DocsEditable()
   String type;
 
   // From HTMLHyperlinkElementUtils
 
-  @DomName('HTMLAnchorElement.hash')
-  @DocsEditable()
   String hash;
 
-  @DomName('HTMLAnchorElement.host')
-  @DocsEditable()
   String host;
 
-  @DomName('HTMLAnchorElement.hostname')
-  @DocsEditable()
   String hostname;
 
-  @DomName('HTMLAnchorElement.href')
-  @DocsEditable()
   String href;
 
-  @DomName('HTMLAnchorElement.origin')
-  @DocsEditable()
-  // WebKit only
-  @Experimental() // non-standard
   final String origin;
 
-  @DomName('HTMLAnchorElement.password')
-  @DocsEditable()
-  @Experimental() // untriaged
   String password;
 
-  @DomName('HTMLAnchorElement.pathname')
-  @DocsEditable()
   String pathname;
 
-  @DomName('HTMLAnchorElement.port')
-  @DocsEditable()
   String port;
 
-  @DomName('HTMLAnchorElement.protocol')
-  @DocsEditable()
   String protocol;
 
-  @DomName('HTMLAnchorElement.search')
-  @DocsEditable()
   String search;
 
-  @DomName('HTMLAnchorElement.username')
-  @DocsEditable()
-  @Experimental() // untriaged
   String username;
 
-  @DomName('HTMLAnchorElement.toString')
-  @DocsEditable()
   String toString() => JS('String', 'String(#)', this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('Animation')
-@Experimental() // untriaged
 @Native("Animation")
 class Animation extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -824,20 +513,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Animation.cancelEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> cancelEvent =
       const EventStreamProvider<Event>('cancel');
 
-  @DomName('Animation.finishEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> finishEvent =
       const EventStreamProvider<Event>('finish');
 
-  @DomName('Animation.Animation')
-  @DocsEditable()
   factory Animation(
       [AnimationEffectReadOnly effect, AnimationTimeline timeline]) {
     if (timeline != null) {
@@ -857,95 +538,44 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => JS('bool', '!!(document.body.animate)');
 
-  @DomName('Animation.currentTime')
-  @DocsEditable()
-  @Experimental() // untriaged
   num currentTime;
 
-  @DomName('Animation.effect')
-  @DocsEditable()
-  @Experimental() // untriaged
   AnimationEffectReadOnly effect;
 
-  @DomName('Animation.finished')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<Animation> get finished =>
       promiseToFuture<Animation>(JS("", "#.finished", this));
 
-  @DomName('Animation.id')
-  @DocsEditable()
-  @Experimental() // untriaged
   String id;
 
-  @DomName('Animation.playState')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String playState;
 
-  @DomName('Animation.playbackRate')
-  @DocsEditable()
-  @Experimental() // untriaged
   num playbackRate;
 
-  @DomName('Animation.ready')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<Animation> get ready =>
       promiseToFuture<Animation>(JS("", "#.ready", this));
 
-  @DomName('Animation.startTime')
-  @DocsEditable()
-  @Experimental() // untriaged
   num startTime;
 
-  @DomName('Animation.timeline')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AnimationTimeline timeline;
 
-  @DomName('Animation.cancel')
-  @DocsEditable()
-  @Experimental() // untriaged
   void cancel() native;
 
-  @DomName('Animation.finish')
-  @DocsEditable()
-  @Experimental() // untriaged
   void finish() native;
 
-  @DomName('Animation.pause')
-  @DocsEditable()
-  @Experimental() // untriaged
   void pause() native;
 
-  @DomName('Animation.play')
-  @DocsEditable()
-  @Experimental() // untriaged
   void play() native;
 
-  @DomName('Animation.reverse')
-  @DocsEditable()
-  @Experimental() // untriaged
   void reverse() native;
 
-  @DomName('Animation.oncancel')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onCancel => cancelEvent.forTarget(this);
 
-  @DomName('Animation.onfinish')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onFinish => finishEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('AnimationEffectReadOnly')
-@Experimental() // untriaged
 @Native("AnimationEffectReadOnly")
 class AnimationEffectReadOnly extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -953,31 +583,19 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AnimationEffectReadOnly.timing')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AnimationEffectTimingReadOnly timing;
 
-  @DomName('AnimationEffectReadOnly.getComputedTiming')
-  @DocsEditable()
-  @Experimental() // untriaged
   Map getComputedTiming() {
     return convertNativeToDart_Dictionary(_getComputedTiming_1());
   }
 
   @JSName('getComputedTiming')
-  @DomName('AnimationEffectReadOnly.getComputedTiming')
-  @DocsEditable()
-  @Experimental() // untriaged
   _getComputedTiming_1() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('AnimationEffectTiming')
-@Experimental() // untriaged
 @Native("AnimationEffectTiming")
 class AnimationEffectTiming extends AnimationEffectTimingReadOnly {
   // To suppress missing implicit constructor warnings.
@@ -1045,9 +663,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.
 
-@DocsEditable()
-@DomName('AnimationEffectTimingReadOnly')
-@Experimental() // untriaged
 @Native("AnimationEffectTimingReadOnly")
 class AnimationEffectTimingReadOnly extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1055,53 +670,26 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AnimationEffectTimingReadOnly.delay')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num delay;
 
-  @DomName('AnimationEffectTimingReadOnly.direction')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String direction;
 
-  @DomName('AnimationEffectTimingReadOnly.duration')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Object duration;
 
-  @DomName('AnimationEffectTimingReadOnly.easing')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String easing;
 
-  @DomName('AnimationEffectTimingReadOnly.endDelay')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num endDelay;
 
-  @DomName('AnimationEffectTimingReadOnly.fill')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String fill;
 
-  @DomName('AnimationEffectTimingReadOnly.iterationStart')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num iterationStart;
 
-  @DomName('AnimationEffectTimingReadOnly.iterations')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num iterations;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('AnimationEvent')
-@Experimental() // untriaged
 @Native("AnimationEvent")
 class AnimationEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -1109,8 +697,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AnimationEvent.AnimationEvent')
-  @DocsEditable()
   factory AnimationEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -1123,23 +709,14 @@
   static AnimationEvent _create_2(type) =>
       JS('AnimationEvent', 'new AnimationEvent(#)', type);
 
-  @DomName('AnimationEvent.animationName')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String animationName;
 
-  @DomName('AnimationEvent.elapsedTime')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num elapsedTime;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('AnimationPlaybackEvent')
-@Experimental() // untriaged
 @Native("AnimationPlaybackEvent")
 class AnimationPlaybackEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -1147,8 +724,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AnimationPlaybackEvent.AnimationPlaybackEvent')
-  @DocsEditable()
   factory AnimationPlaybackEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -1164,23 +739,14 @@
   static AnimationPlaybackEvent _create_2(type) =>
       JS('AnimationPlaybackEvent', 'new AnimationPlaybackEvent(#)', type);
 
-  @DomName('AnimationPlaybackEvent.currentTime')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num currentTime;
 
-  @DomName('AnimationPlaybackEvent.timelineTime')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num timelineTime;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('AnimationTimeline')
-@Experimental() // untriaged
 @Native("AnimationTimeline")
 class AnimationTimeline extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1188,18 +754,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AnimationTimeline.currentTime')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num currentTime;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('AnimationWorkletGlobalScope')
-@Experimental() // untriaged
 @Native("AnimationWorkletGlobalScope")
 class AnimationWorkletGlobalScope extends WorkletGlobalScope {
   // To suppress missing implicit constructor warnings.
@@ -1207,20 +767,15 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AnimationWorkletGlobalScope.registerAnimator')
-  @DocsEditable()
-  @Experimental() // untriaged
   void registerAnimator(String name, Object animatorConstructor) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
 /**
  * ApplicationCache is accessed via [Window.applicationCache].
  */
-@DomName('ApplicationCache')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -1240,8 +795,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('ApplicationCache.cachedEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> cachedEvent =
       const EventStreamProvider<Event>('cached');
 
@@ -1251,8 +804,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('ApplicationCache.checkingEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> checkingEvent =
       const EventStreamProvider<Event>('checking');
 
@@ -1262,8 +813,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('ApplicationCache.downloadingEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> downloadingEvent =
       const EventStreamProvider<Event>('downloading');
 
@@ -1273,8 +822,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('ApplicationCache.errorEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
@@ -1284,8 +831,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('ApplicationCache.noupdateEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> noUpdateEvent =
       const EventStreamProvider<Event>('noupdate');
 
@@ -1295,8 +840,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('ApplicationCache.obsoleteEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> obsoleteEvent =
       const EventStreamProvider<Event>('obsolete');
 
@@ -1306,8 +849,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('ApplicationCache.progressEvent')
-  @DocsEditable()
   static const EventStreamProvider<ProgressEvent> progressEvent =
       const EventStreamProvider<ProgressEvent>('progress');
 
@@ -1317,101 +858,60 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('ApplicationCache.updatereadyEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> updateReadyEvent =
       const EventStreamProvider<Event>('updateready');
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => JS('bool', '!!(window.applicationCache)');
 
-  @DomName('ApplicationCache.CHECKING')
-  @DocsEditable()
   static const int CHECKING = 2;
 
-  @DomName('ApplicationCache.DOWNLOADING')
-  @DocsEditable()
   static const int DOWNLOADING = 3;
 
-  @DomName('ApplicationCache.IDLE')
-  @DocsEditable()
   static const int IDLE = 1;
 
-  @DomName('ApplicationCache.OBSOLETE')
-  @DocsEditable()
   static const int OBSOLETE = 5;
 
-  @DomName('ApplicationCache.UNCACHED')
-  @DocsEditable()
   static const int UNCACHED = 0;
 
-  @DomName('ApplicationCache.UPDATEREADY')
-  @DocsEditable()
   static const int UPDATEREADY = 4;
 
-  @DomName('ApplicationCache.status')
-  @DocsEditable()
   final int status;
 
-  @DomName('ApplicationCache.abort')
-  @DocsEditable()
   void abort() native;
 
-  @DomName('ApplicationCache.swapCache')
-  @DocsEditable()
   void swapCache() native;
 
-  @DomName('ApplicationCache.update')
-  @DocsEditable()
   void update() native;
 
   /// Stream of `cached` events handled by this [ApplicationCache].
-  @DomName('ApplicationCache.oncached')
-  @DocsEditable()
   Stream<Event> get onCached => cachedEvent.forTarget(this);
 
   /// Stream of `checking` events handled by this [ApplicationCache].
-  @DomName('ApplicationCache.onchecking')
-  @DocsEditable()
   Stream<Event> get onChecking => checkingEvent.forTarget(this);
 
   /// Stream of `downloading` events handled by this [ApplicationCache].
-  @DomName('ApplicationCache.ondownloading')
-  @DocsEditable()
   Stream<Event> get onDownloading => downloadingEvent.forTarget(this);
 
   /// Stream of `error` events handled by this [ApplicationCache].
-  @DomName('ApplicationCache.onerror')
-  @DocsEditable()
   Stream<Event> get onError => errorEvent.forTarget(this);
 
   /// Stream of `noupdate` events handled by this [ApplicationCache].
-  @DomName('ApplicationCache.onnoupdate')
-  @DocsEditable()
   Stream<Event> get onNoUpdate => noUpdateEvent.forTarget(this);
 
   /// Stream of `obsolete` events handled by this [ApplicationCache].
-  @DomName('ApplicationCache.onobsolete')
-  @DocsEditable()
   Stream<Event> get onObsolete => obsoleteEvent.forTarget(this);
 
   /// Stream of `progress` events handled by this [ApplicationCache].
-  @DomName('ApplicationCache.onprogress')
-  @DocsEditable()
   Stream<ProgressEvent> get onProgress => progressEvent.forTarget(this);
 
   /// Stream of `updateready` events handled by this [ApplicationCache].
-  @DomName('ApplicationCache.onupdateready')
-  @DocsEditable()
   Stream<Event> get onUpdateReady => updateReadyEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('ApplicationCacheErrorEvent')
-@Experimental() // untriaged
 @Native("ApplicationCacheErrorEvent")
 class ApplicationCacheErrorEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -1419,8 +919,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ApplicationCacheErrorEvent.ApplicationCacheErrorEvent')
-  @DocsEditable()
   factory ApplicationCacheErrorEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -1436,31 +934,18 @@
   static ApplicationCacheErrorEvent _create_2(type) => JS(
       'ApplicationCacheErrorEvent', 'new ApplicationCacheErrorEvent(#)', type);
 
-  @DomName('ApplicationCacheErrorEvent.message')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String message;
 
-  @DomName('ApplicationCacheErrorEvent.reason')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String reason;
 
-  @DomName('ApplicationCacheErrorEvent.status')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int status;
 
-  @DomName('ApplicationCacheErrorEvent.url')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String url;
 }
 // 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.
 
-@DocsEditable()
 /**
  * DOM Area Element, which links regions of an image map with a hyperlink.
  *
@@ -1471,7 +956,6 @@
  * * [`<area>`](https://developer.mozilla.org/en-US/docs/HTML/Element/area)
  * on MDN.
  */
-@DomName('HTMLAreaElement')
 @Native("HTMLAreaElement")
 class AreaElement extends HtmlElement implements HtmlHyperlinkElementUtils {
   // To suppress missing implicit constructor warnings.
@@ -1479,8 +963,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLAreaElement.HTMLAreaElement')
-  @DocsEditable()
   factory AreaElement() => JS(
       'returns:AreaElement;creates:AreaElement;new:true',
       '#.createElement(#)',
@@ -1493,100 +975,52 @@
    */
   AreaElement.created() : super.created();
 
-  @DomName('HTMLAreaElement.alt')
-  @DocsEditable()
   String alt;
 
-  @DomName('HTMLAreaElement.coords')
-  @DocsEditable()
   String coords;
 
-  @DomName('HTMLAreaElement.download')
-  @DocsEditable()
-  @Experimental() // untriaged
   String download;
 
-  @DomName('HTMLAreaElement.referrerPolicy')
-  @DocsEditable()
-  @Experimental() // untriaged
   String referrerPolicy;
 
-  @DomName('HTMLAreaElement.rel')
-  @DocsEditable()
-  @Experimental() // untriaged
   String rel;
 
-  @DomName('HTMLAreaElement.shape')
-  @DocsEditable()
   String shape;
 
-  @DomName('HTMLAreaElement.target')
-  @DocsEditable()
   String target;
 
   // From HTMLHyperlinkElementUtils
 
-  @DomName('HTMLAreaElement.hash')
-  @DocsEditable()
   String hash;
 
-  @DomName('HTMLAreaElement.host')
-  @DocsEditable()
   String host;
 
-  @DomName('HTMLAreaElement.hostname')
-  @DocsEditable()
   String hostname;
 
-  @DomName('HTMLAreaElement.href')
-  @DocsEditable()
   String href;
 
-  @DomName('HTMLAreaElement.origin')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String origin;
 
-  @DomName('HTMLAreaElement.password')
-  @DocsEditable()
-  @Experimental() // untriaged
   String password;
 
-  @DomName('HTMLAreaElement.pathname')
-  @DocsEditable()
   String pathname;
 
-  @DomName('HTMLAreaElement.port')
-  @DocsEditable()
   String port;
 
-  @DomName('HTMLAreaElement.protocol')
-  @DocsEditable()
   String protocol;
 
-  @DomName('HTMLAreaElement.search')
-  @DocsEditable()
   String search;
 
-  @DomName('HTMLAreaElement.username')
-  @DocsEditable()
-  @Experimental() // untriaged
   String username;
 
-  @DomName('HTMLAreaElement.toString')
-  @DocsEditable()
   String toString() => JS('String', 'String(#)', this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLAudioElement')
 @Native("HTMLAudioElement")
 class AudioElement extends MediaElement {
-  @DomName('HTMLAudioElement.HTMLAudioElement')
-  @DocsEditable()
   factory AudioElement._([String src]) {
     if (src != null) {
       return AudioElement._create_1(src);
@@ -1608,9 +1042,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.
 
-@DocsEditable()
-@DomName('AuthenticatorAssertionResponse')
-@Experimental() // untriaged
 @Native("AuthenticatorAssertionResponse")
 class AuthenticatorAssertionResponse extends AuthenticatorResponse {
   // To suppress missing implicit constructor warnings.
@@ -1618,23 +1049,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AuthenticatorAssertionResponse.authenticatorData')
-  @DocsEditable()
-  @Experimental() // untriaged
   final ByteBuffer authenticatorData;
 
-  @DomName('AuthenticatorAssertionResponse.signature')
-  @DocsEditable()
-  @Experimental() // untriaged
   final ByteBuffer signature;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('AuthenticatorAttestationResponse')
-@Experimental() // untriaged
 @Native("AuthenticatorAttestationResponse")
 class AuthenticatorAttestationResponse extends AuthenticatorResponse {
   // To suppress missing implicit constructor warnings.
@@ -1642,18 +1064,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AuthenticatorAttestationResponse.attestationObject')
-  @DocsEditable()
-  @Experimental() // untriaged
   final ByteBuffer attestationObject;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('AuthenticatorResponse')
-@Experimental() // untriaged
 @Native("AuthenticatorResponse")
 class AuthenticatorResponse extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1662,17 +1078,12 @@
   }
 
   @JSName('clientDataJSON')
-  @DomName('AuthenticatorResponse.clientDataJSON')
-  @DocsEditable()
-  @Experimental() // untriaged
   final ByteBuffer clientDataJson;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLBRElement')
 @Native("HTMLBRElement")
 class BRElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -1680,8 +1091,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLBRElement.HTMLBRElement')
-  @DocsEditable()
   factory BRElement() => JS('returns:BRElement;creates:BRElement;new:true',
       '#.createElement(#)', document, "br");
   /**
@@ -1695,9 +1104,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.
 
-@DocsEditable()
-@DomName('BackgroundFetchClickEvent')
-@Experimental() // untriaged
 @Native("BackgroundFetchClickEvent")
 class BackgroundFetchClickEvent extends BackgroundFetchEvent {
   // To suppress missing implicit constructor warnings.
@@ -1705,8 +1111,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('BackgroundFetchClickEvent.BackgroundFetchClickEvent')
-  @DocsEditable()
   factory BackgroundFetchClickEvent(String type, Map init) {
     var init_1 = convertDartToNative_Dictionary(init);
     return BackgroundFetchClickEvent._create_1(type, init_1);
@@ -1717,18 +1121,12 @@
       type,
       init);
 
-  @DomName('BackgroundFetchClickEvent.state')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String state;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('BackgroundFetchEvent')
-@Experimental() // untriaged
 @Native("BackgroundFetchEvent")
 class BackgroundFetchEvent extends ExtendableEvent {
   // To suppress missing implicit constructor warnings.
@@ -1736,8 +1134,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('BackgroundFetchEvent.BackgroundFetchEvent')
-  @DocsEditable()
   factory BackgroundFetchEvent(String type, Map init) {
     var init_1 = convertDartToNative_Dictionary(init);
     return BackgroundFetchEvent._create_1(type, init_1);
@@ -1745,18 +1141,12 @@
   static BackgroundFetchEvent _create_1(type, init) =>
       JS('BackgroundFetchEvent', 'new BackgroundFetchEvent(#,#)', type, init);
 
-  @DomName('BackgroundFetchEvent.id')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String id;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('BackgroundFetchFailEvent')
-@Experimental() // untriaged
 @Native("BackgroundFetchFailEvent")
 class BackgroundFetchFailEvent extends BackgroundFetchEvent {
   // To suppress missing implicit constructor warnings.
@@ -1764,8 +1154,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('BackgroundFetchFailEvent.BackgroundFetchFailEvent')
-  @DocsEditable()
   factory BackgroundFetchFailEvent(String type, Map init) {
     var init_1 = convertDartToNative_Dictionary(init);
     return BackgroundFetchFailEvent._create_1(type, init_1);
@@ -1776,18 +1164,12 @@
       type,
       init);
 
-  @DomName('BackgroundFetchFailEvent.fetches')
-  @DocsEditable()
-  @Experimental() // untriaged
   final List<BackgroundFetchSettledFetch> fetches;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('BackgroundFetchFetch')
-@Experimental() // untriaged
 @Native("BackgroundFetchFetch")
 class BackgroundFetchFetch extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1795,18 +1177,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('BackgroundFetchFetch.request')
-  @DocsEditable()
-  @Experimental() // untriaged
   final _Request request;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('BackgroundFetchManager')
-@Experimental() // untriaged
 @Native("BackgroundFetchManager")
 class BackgroundFetchManager extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1814,9 +1190,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('BackgroundFetchManager.fetch')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future fetch(String id, Object requests, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -1826,26 +1199,14 @@
   }
 
   @JSName('fetch')
-  @DomName('BackgroundFetchManager.fetch')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _fetch_1(id, requests, options) native;
   @JSName('fetch')
-  @DomName('BackgroundFetchManager.fetch')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _fetch_2(id, requests) native;
 
-  @DomName('BackgroundFetchManager.get')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<BackgroundFetchRegistration> get(String id) =>
       promiseToFuture<BackgroundFetchRegistration>(
           JS("", "#.get(#)", this, id));
 
-  @DomName('BackgroundFetchManager.getIds')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<List<String>> getIds() =>
       promiseToFuture<List<String>>(JS("", "#.getIds()", this));
 }
@@ -1853,9 +1214,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.
 
-@DocsEditable()
-@DomName('BackgroundFetchRegistration')
-@Experimental() // untriaged
 @Native("BackgroundFetchRegistration")
 class BackgroundFetchRegistration extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -1863,53 +1221,26 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('BackgroundFetchRegistration.downloadTotal')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int downloadTotal;
 
-  @DomName('BackgroundFetchRegistration.downloaded')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int downloaded;
 
-  @DomName('BackgroundFetchRegistration.id')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String id;
 
-  @DomName('BackgroundFetchRegistration.title')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String title;
 
-  @DomName('BackgroundFetchRegistration.totalDownloadSize')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int totalDownloadSize;
 
-  @DomName('BackgroundFetchRegistration.uploadTotal')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int uploadTotal;
 
-  @DomName('BackgroundFetchRegistration.uploaded')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int uploaded;
 
-  @DomName('BackgroundFetchRegistration.abort')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<bool> abort() => promiseToFuture<bool>(JS("", "#.abort()", this));
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('BackgroundFetchSettledFetch')
-@Experimental() // untriaged
 @Native("BackgroundFetchSettledFetch")
 class BackgroundFetchSettledFetch extends BackgroundFetchFetch {
   // To suppress missing implicit constructor warnings.
@@ -1917,8 +1248,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('BackgroundFetchSettledFetch.BackgroundFetchSettledFetch')
-  @DocsEditable()
   factory BackgroundFetchSettledFetch(_Request request, _Response response) {
     return BackgroundFetchSettledFetch._create_1(request, response);
   }
@@ -1928,18 +1257,12 @@
       request,
       response);
 
-  @DomName('BackgroundFetchSettledFetch.response')
-  @DocsEditable()
-  @Experimental() // untriaged
   final _Response response;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('BackgroundFetchedEvent')
-@Experimental() // untriaged
 @Native("BackgroundFetchedEvent")
 class BackgroundFetchedEvent extends BackgroundFetchEvent {
   // To suppress missing implicit constructor warnings.
@@ -1947,8 +1270,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('BackgroundFetchedEvent.BackgroundFetchedEvent')
-  @DocsEditable()
   factory BackgroundFetchedEvent(String type, Map init) {
     var init_1 = convertDartToNative_Dictionary(init);
     return BackgroundFetchedEvent._create_1(type, init_1);
@@ -1956,14 +1277,8 @@
   static BackgroundFetchedEvent _create_1(type, init) => JS(
       'BackgroundFetchedEvent', 'new BackgroundFetchedEvent(#,#)', type, init);
 
-  @DomName('BackgroundFetchedEvent.fetches')
-  @DocsEditable()
-  @Experimental() // untriaged
   final List<BackgroundFetchSettledFetch> fetches;
 
-  @DomName('BackgroundFetchedEvent.updateUI')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future updateUI(String title) =>
       promiseToFuture(JS("", "#.updateUI(#)", this, title));
 }
@@ -1971,8 +1286,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.
 
-@DocsEditable()
-@DomName('BarProp')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/browsers.html#barprop
 @deprecated // standard
 @Native("BarProp")
@@ -1982,17 +1295,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('BarProp.visible')
-  @DocsEditable()
   final bool visible;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('BarcodeDetector')
-@Experimental() // untriaged
 @Native("BarcodeDetector")
 class BarcodeDetector extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -2000,17 +1308,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('BarcodeDetector.BarcodeDetector')
-  @DocsEditable()
   factory BarcodeDetector() {
     return BarcodeDetector._create_1();
   }
   static BarcodeDetector _create_1() =>
       JS('BarcodeDetector', 'new BarcodeDetector()');
 
-  @DomName('BarcodeDetector.detect')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<List<DetectedBarcode>> detect(/*ImageBitmapSource*/ image) =>
       promiseToFuture<List<DetectedBarcode>>(
           JS("", "#.detect(#)", this, image));
@@ -2019,8 +1322,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.
 
-@DocsEditable()
-@DomName('HTMLBaseElement')
 @Native("HTMLBaseElement")
 class BaseElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -2028,8 +1329,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLBaseElement.HTMLBaseElement')
-  @DocsEditable()
   factory BaseElement() => JS(
       'returns:BaseElement;creates:BaseElement;new:true',
       '#.createElement(#)',
@@ -2042,22 +1341,14 @@
    */
   BaseElement.created() : super.created();
 
-  @DomName('HTMLBaseElement.href')
-  @DocsEditable()
   String href;
 
-  @DomName('HTMLBaseElement.target')
-  @DocsEditable()
   String target;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('BatteryManager')
-// https://dvcs.w3.org/hg/dap/raw-file/default/battery/Overview.html#batterymanager-interface
-@Experimental() // stable
 @Native("BatteryManager")
 class BatteryManager extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -2065,29 +1356,18 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('BatteryManager.charging')
-  @DocsEditable()
   final bool charging;
 
-  @DomName('BatteryManager.chargingTime')
-  @DocsEditable()
   final num chargingTime;
 
-  @DomName('BatteryManager.dischargingTime')
-  @DocsEditable()
   final num dischargingTime;
 
-  @DomName('BatteryManager.level')
-  @DocsEditable()
   final num level;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('BeforeInstallPromptEvent')
-@Experimental() // untriaged
 @Native("BeforeInstallPromptEvent")
 class BeforeInstallPromptEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -2095,8 +1375,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('BeforeInstallPromptEvent.BeforeInstallPromptEvent')
-  @DocsEditable()
   factory BeforeInstallPromptEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -2112,28 +1390,17 @@
   static BeforeInstallPromptEvent _create_2(type) =>
       JS('BeforeInstallPromptEvent', 'new BeforeInstallPromptEvent(#)', type);
 
-  @DomName('BeforeInstallPromptEvent.platforms')
-  @DocsEditable()
-  @Experimental() // untriaged
   final List<String> platforms;
 
-  @DomName('BeforeInstallPromptEvent.userChoice')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<Map<String, dynamic>> get userChoice =>
       promiseToFutureAsMap(JS("", "#.userChoice", this));
 
-  @DomName('BeforeInstallPromptEvent.prompt')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future prompt() => promiseToFuture(JS("", "#.prompt()", this));
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('BeforeUnloadEvent')
 @Native("BeforeUnloadEvent")
 class BeforeUnloadEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -2152,7 +1419,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.
 
-@DomName('Blob')
 @Native("Blob")
 class Blob extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -2160,16 +1426,10 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Blob.size')
-  @DocsEditable()
   final int size;
 
-  @DomName('Blob.type')
-  @DocsEditable()
   final String type;
 
-  @DomName('Blob.slice')
-  @DocsEditable()
   Blob slice([int start, int end, String contentType]) native;
 
   factory Blob(List blobParts, [String type, String endings]) {
@@ -2199,16 +1459,11 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('BlobCallback')
-@Experimental() // untriaged
 typedef void BlobCallback(Blob blob);
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('BlobEvent')
-@Experimental() // untriaged
 @Native("BlobEvent")
 class BlobEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -2216,8 +1471,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('BlobEvent.BlobEvent')
-  @DocsEditable()
   factory BlobEvent(String type, Map eventInitDict) {
     var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
     return BlobEvent._create_1(type, eventInitDict_1);
@@ -2225,23 +1478,14 @@
   static BlobEvent _create_1(type, eventInitDict) =>
       JS('BlobEvent', 'new BlobEvent(#,#)', type, eventInitDict);
 
-  @DomName('BlobEvent.data')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Blob data;
 
-  @DomName('BlobEvent.timecode')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num timecode;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('BluetoothRemoteGATTDescriptor')
-@Experimental() // untriaged
 @Native("BluetoothRemoteGATTDescriptor")
 class BluetoothRemoteGattDescriptor extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -2249,29 +1493,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('BluetoothRemoteGATTDescriptor.characteristic')
-  @DocsEditable()
-  @Experimental() // untriaged
   final _BluetoothRemoteGATTCharacteristic characteristic;
 
-  @DomName('BluetoothRemoteGATTDescriptor.uuid')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String uuid;
 
-  @DomName('BluetoothRemoteGATTDescriptor.value')
-  @DocsEditable()
-  @Experimental() // untriaged
   final ByteData value;
 
-  @DomName('BluetoothRemoteGATTDescriptor.readValue')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future readValue() => promiseToFuture(JS("", "#.readValue()", this));
 
-  @DomName('BluetoothRemoteGATTDescriptor.writeValue')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future writeValue(/*BufferSource*/ value) =>
       promiseToFuture(JS("", "#.writeValue(#)", this, value));
 }
@@ -2279,9 +1508,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.
 
-@DocsEditable()
-@DomName('Body')
-@Experimental() // untriaged
 @Native("Body")
 class Body extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -2289,43 +1515,23 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Body.bodyUsed')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool bodyUsed;
 
-  @DomName('Body.arrayBuffer')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future arrayBuffer() => promiseToFuture(JS("", "#.arrayBuffer()", this));
 
-  @DomName('Body.blob')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<Blob> blob() => promiseToFuture<Blob>(JS("", "#.blob()", this));
 
-  @DomName('Body.formData')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<FormData> formData() =>
       promiseToFuture<FormData>(JS("", "#.formData()", this));
 
-  @DomName('Body.json')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future json() => promiseToFuture(JS("", "#.json()", this));
 
-  @DomName('Body.text')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<String> text() => promiseToFuture<String>(JS("", "#.text()", this));
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLBodyElement')
 @Native("HTMLBodyElement")
 class BodyElement extends HtmlElement implements WindowEventHandlers {
   // To suppress missing implicit constructor warnings.
@@ -2339,8 +1545,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('HTMLBodyElement.blurEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> blurEvent =
       const EventStreamProvider<Event>('blur');
 
@@ -2350,8 +1554,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('HTMLBodyElement.errorEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
@@ -2361,8 +1563,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('HTMLBodyElement.focusEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> focusEvent =
       const EventStreamProvider<Event>('focus');
 
@@ -2372,8 +1572,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('HTMLBodyElement.hashchangeEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> hashChangeEvent =
       const EventStreamProvider<Event>('hashchange');
 
@@ -2383,8 +1581,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('HTMLBodyElement.loadEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> loadEvent =
       const EventStreamProvider<Event>('load');
 
@@ -2394,8 +1590,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('HTMLBodyElement.messageEvent')
-  @DocsEditable()
   static const EventStreamProvider<MessageEvent> messageEvent =
       const EventStreamProvider<MessageEvent>('message');
 
@@ -2405,8 +1599,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('HTMLBodyElement.offlineEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> offlineEvent =
       const EventStreamProvider<Event>('offline');
 
@@ -2416,8 +1608,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('HTMLBodyElement.onlineEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> onlineEvent =
       const EventStreamProvider<Event>('online');
 
@@ -2427,8 +1617,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('HTMLBodyElement.popstateEvent')
-  @DocsEditable()
   static const EventStreamProvider<PopStateEvent> popStateEvent =
       const EventStreamProvider<PopStateEvent>('popstate');
 
@@ -2438,14 +1626,9 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('HTMLBodyElement.resizeEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> resizeEvent =
       const EventStreamProvider<Event>('resize');
 
-  @DomName('HTMLBodyElement.scrollEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> scrollEvent =
       const EventStreamProvider<Event>('scroll');
 
@@ -2455,8 +1638,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('HTMLBodyElement.storageEvent')
-  @DocsEditable()
   static const EventStreamProvider<StorageEvent> storageEvent =
       const EventStreamProvider<StorageEvent>('storage');
 
@@ -2466,13 +1647,9 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('HTMLBodyElement.unloadEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> unloadEvent =
       const EventStreamProvider<Event>('unload');
 
-  @DomName('HTMLBodyElement.HTMLBodyElement')
-  @DocsEditable()
   factory BodyElement() => JS(
       'returns:BodyElement;creates:BodyElement;new:true',
       '#.createElement(#)',
@@ -2486,77 +1663,47 @@
   BodyElement.created() : super.created();
 
   /// Stream of `blur` events handled by this [BodyElement].
-  @DomName('HTMLBodyElement.onblur')
-  @DocsEditable()
   ElementStream<Event> get onBlur => blurEvent.forElement(this);
 
   /// Stream of `error` events handled by this [BodyElement].
-  @DomName('HTMLBodyElement.onerror')
-  @DocsEditable()
   ElementStream<Event> get onError => errorEvent.forElement(this);
 
   /// Stream of `focus` events handled by this [BodyElement].
-  @DomName('HTMLBodyElement.onfocus')
-  @DocsEditable()
   ElementStream<Event> get onFocus => focusEvent.forElement(this);
 
   /// Stream of `hashchange` events handled by this [BodyElement].
-  @DomName('HTMLBodyElement.onhashchange')
-  @DocsEditable()
   ElementStream<Event> get onHashChange => hashChangeEvent.forElement(this);
 
   /// Stream of `load` events handled by this [BodyElement].
-  @DomName('HTMLBodyElement.onload')
-  @DocsEditable()
   ElementStream<Event> get onLoad => loadEvent.forElement(this);
 
   /// Stream of `message` events handled by this [BodyElement].
-  @DomName('HTMLBodyElement.onmessage')
-  @DocsEditable()
   ElementStream<MessageEvent> get onMessage => messageEvent.forElement(this);
 
   /// Stream of `offline` events handled by this [BodyElement].
-  @DomName('HTMLBodyElement.onoffline')
-  @DocsEditable()
   ElementStream<Event> get onOffline => offlineEvent.forElement(this);
 
   /// Stream of `online` events handled by this [BodyElement].
-  @DomName('HTMLBodyElement.ononline')
-  @DocsEditable()
   ElementStream<Event> get onOnline => onlineEvent.forElement(this);
 
   /// Stream of `popstate` events handled by this [BodyElement].
-  @DomName('HTMLBodyElement.onpopstate')
-  @DocsEditable()
   ElementStream<PopStateEvent> get onPopState => popStateEvent.forElement(this);
 
   /// Stream of `resize` events handled by this [BodyElement].
-  @DomName('HTMLBodyElement.onresize')
-  @DocsEditable()
   ElementStream<Event> get onResize => resizeEvent.forElement(this);
 
-  @DomName('HTMLBodyElement.onscroll')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onScroll => scrollEvent.forElement(this);
 
   /// Stream of `storage` events handled by this [BodyElement].
-  @DomName('HTMLBodyElement.onstorage')
-  @DocsEditable()
   ElementStream<StorageEvent> get onStorage => storageEvent.forElement(this);
 
   /// Stream of `unload` events handled by this [BodyElement].
-  @DomName('HTMLBodyElement.onunload')
-  @DocsEditable()
   ElementStream<Event> get onUnload => unloadEvent.forElement(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('BroadcastChannel')
-@Experimental() // untriaged
 @Native("BroadcastChannel")
 class BroadcastChannel extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -2564,47 +1711,27 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('BroadcastChannel.messageEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MessageEvent> messageEvent =
       const EventStreamProvider<MessageEvent>('message');
 
-  @DomName('BroadcastChannel.BroadcastChannel')
-  @DocsEditable()
   factory BroadcastChannel(String name) {
     return BroadcastChannel._create_1(name);
   }
   static BroadcastChannel _create_1(name) =>
       JS('BroadcastChannel', 'new BroadcastChannel(#)', name);
 
-  @DomName('BroadcastChannel.name')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String name;
 
-  @DomName('BroadcastChannel.close')
-  @DocsEditable()
-  @Experimental() // untriaged
   void close() native;
 
-  @DomName('BroadcastChannel.postMessage')
-  @DocsEditable()
-  @Experimental() // untriaged
   void postMessage(Object message) native;
 
-  @DomName('BroadcastChannel.onmessage')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('BudgetState')
-@Experimental() // untriaged
 @Native("BudgetState")
 class BudgetState extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -2612,22 +1739,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('BudgetState.budgetAt')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num budgetAt;
 
-  @DomName('BudgetState.time')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int time;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLButtonElement')
 @Native("HTMLButtonElement")
 class ButtonElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -2635,8 +1754,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLButtonElement.HTMLButtonElement')
-  @DocsEditable()
   factory ButtonElement() => JS(
       'returns:ButtonElement;creates:ButtonElement;new:true',
       '#.createElement(#)',
@@ -2649,88 +1766,49 @@
    */
   ButtonElement.created() : super.created();
 
-  @DomName('HTMLButtonElement.autofocus')
-  @DocsEditable()
   bool autofocus;
 
-  @DomName('HTMLButtonElement.disabled')
-  @DocsEditable()
   bool disabled;
 
-  @DomName('HTMLButtonElement.form')
-  @DocsEditable()
   final FormElement form;
 
-  @DomName('HTMLButtonElement.formAction')
-  @DocsEditable()
   String formAction;
 
-  @DomName('HTMLButtonElement.formEnctype')
-  @DocsEditable()
   String formEnctype;
 
-  @DomName('HTMLButtonElement.formMethod')
-  @DocsEditable()
   String formMethod;
 
-  @DomName('HTMLButtonElement.formNoValidate')
-  @DocsEditable()
   bool formNoValidate;
 
-  @DomName('HTMLButtonElement.formTarget')
-  @DocsEditable()
   String formTarget;
 
-  @DomName('HTMLButtonElement.labels')
-  @DocsEditable()
   @Unstable()
   @Returns('NodeList|Null')
   @Creates('NodeList')
   final List<Node> labels;
 
-  @DomName('HTMLButtonElement.name')
-  @DocsEditable()
   String name;
 
-  @DomName('HTMLButtonElement.type')
-  @DocsEditable()
   String type;
 
-  @DomName('HTMLButtonElement.validationMessage')
-  @DocsEditable()
   final String validationMessage;
 
-  @DomName('HTMLButtonElement.validity')
-  @DocsEditable()
   final ValidityState validity;
 
-  @DomName('HTMLButtonElement.value')
-  @DocsEditable()
   String value;
 
-  @DomName('HTMLButtonElement.willValidate')
-  @DocsEditable()
   final bool willValidate;
 
-  @DomName('HTMLButtonElement.checkValidity')
-  @DocsEditable()
   bool checkValidity() native;
 
-  @DomName('HTMLButtonElement.reportValidity')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool reportValidity() native;
 
-  @DomName('HTMLButtonElement.setCustomValidity')
-  @DocsEditable()
   void setCustomValidity(String error) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CDATASection')
 // http://dom.spec.whatwg.org/#cdatasection
 @deprecated // deprecated
 @Native("CDATASection")
@@ -2744,9 +1822,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.
 
-@DocsEditable()
-@DomName('CacheStorage')
-@Experimental() // untriaged
 @Native("CacheStorage")
 class CacheStorage extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -2754,26 +1829,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CacheStorage.delete')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future delete(String cacheName) =>
       promiseToFuture(JS("", "#.delete(#)", this, cacheName));
 
-  @DomName('CacheStorage.has')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future has(String cacheName) =>
       promiseToFuture(JS("", "#.has(#)", this, cacheName));
 
-  @DomName('CacheStorage.keys')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future keys() => promiseToFuture(JS("", "#.keys()", this));
 
-  @DomName('CacheStorage.match')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future match(/*RequestInfo*/ request, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -2783,19 +1846,10 @@
   }
 
   @JSName('match')
-  @DomName('CacheStorage.match')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _match_1(request, options) native;
   @JSName('match')
-  @DomName('CacheStorage.match')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _match_2(request) native;
 
-  @DomName('CacheStorage.open')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future open(String cacheName) =>
       promiseToFuture(JS("", "#.open(#)", this, cacheName));
 }
@@ -2803,9 +1857,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.
 
-@DocsEditable()
-@DomName('CanMakePaymentEvent')
-@Experimental() // untriaged
 @Native("CanMakePaymentEvent")
 class CanMakePaymentEvent extends ExtendableEvent {
   // To suppress missing implicit constructor warnings.
@@ -2813,8 +1864,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CanMakePaymentEvent.CanMakePaymentEvent')
-  @DocsEditable()
   factory CanMakePaymentEvent(String type, Map eventInitDict) {
     var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
     return CanMakePaymentEvent._create_1(type, eventInitDict_1);
@@ -2825,38 +1874,20 @@
       type,
       eventInitDict);
 
-  @DomName('CanMakePaymentEvent.methodData')
-  @DocsEditable()
-  @Experimental() // untriaged
   final List methodData;
 
-  @DomName('CanMakePaymentEvent.modifiers')
-  @DocsEditable()
-  @Experimental() // untriaged
   final List modifiers;
 
-  @DomName('CanMakePaymentEvent.paymentRequestOrigin')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String paymentRequestOrigin;
 
-  @DomName('CanMakePaymentEvent.topLevelOrigin')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String topLevelOrigin;
 
-  @DomName('CanMakePaymentEvent.respondWith')
-  @DocsEditable()
-  @Experimental() // untriaged
   void respondWith(Future canMakePaymentResponse) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CanvasCaptureMediaStreamTrack')
-@Experimental() // untriaged
 @Native("CanvasCaptureMediaStreamTrack")
 class CanvasCaptureMediaStreamTrack extends MediaStreamTrack {
   // To suppress missing implicit constructor warnings.
@@ -2864,21 +1895,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CanvasCaptureMediaStreamTrack.canvas')
-  @DocsEditable()
-  @Experimental() // untriaged
   final CanvasElement canvas;
 
-  @DomName('CanvasCaptureMediaStreamTrack.requestFrame')
-  @DocsEditable()
-  @Experimental() // untriaged
   void requestFrame() native;
 }
 // Copyright (c) 2012, 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.
 
-@DomName('HTMLCanvasElement')
 @Native("HTMLCanvasElement")
 class CanvasElement extends HtmlElement implements CanvasImageSource {
   // To suppress missing implicit constructor warnings.
@@ -2892,8 +1916,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('HTMLCanvasElement.webglcontextlostEvent')
-  @DocsEditable()
   static const EventStreamProvider<gl.ContextEvent> webGlContextLostEvent =
       const EventStreamProvider<gl.ContextEvent>('webglcontextlost');
 
@@ -2903,13 +1925,9 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('HTMLCanvasElement.webglcontextrestoredEvent')
-  @DocsEditable()
   static const EventStreamProvider<gl.ContextEvent> webGlContextRestoredEvent =
       const EventStreamProvider<gl.ContextEvent>('webglcontextrestored');
 
-  @DomName('HTMLCanvasElement.HTMLCanvasElement')
-  @DocsEditable()
   factory CanvasElement({int width, int height}) {
     CanvasElement e = JS('returns:CanvasElement;creates:CanvasElement;new:true',
         '#.createElement(#)', document, "canvas");
@@ -2925,22 +1943,13 @@
   CanvasElement.created() : super.created();
 
   /// The height of this canvas element in CSS pixels.
-  @DomName('HTMLCanvasElement.height')
-  @DocsEditable()
   int height;
 
   /// The width of this canvas element in CSS pixels.
-  @DomName('HTMLCanvasElement.width')
-  @DocsEditable()
   int width;
 
-  @DomName('HTMLCanvasElement.captureStream')
-  @DocsEditable()
-  @Experimental() // untriaged
   MediaStream captureStream([num frameRate]) native;
 
-  @DomName('HTMLCanvasElement.getContext')
-  @DocsEditable()
   @Creates('CanvasRenderingContext2D|RenderingContext|RenderingContext2')
   @Returns('CanvasRenderingContext2D|RenderingContext|RenderingContext2|Null')
   Object getContext(String contextId, [Map attributes]) {
@@ -2952,42 +1961,26 @@
   }
 
   @JSName('getContext')
-  @DomName('HTMLCanvasElement.getContext')
-  @DocsEditable()
   @Creates('CanvasRenderingContext2D|RenderingContext|RenderingContext2')
   @Returns('CanvasRenderingContext2D|RenderingContext|RenderingContext2|Null')
   Object _getContext_1(contextId, attributes) native;
   @JSName('getContext')
-  @DomName('HTMLCanvasElement.getContext')
-  @DocsEditable()
   @Creates('CanvasRenderingContext2D|RenderingContext|RenderingContext2')
   @Returns('CanvasRenderingContext2D|RenderingContext|RenderingContext2|Null')
   Object _getContext_2(contextId) native;
 
-  @DomName('HTMLCanvasElement.toBlob')
-  @DocsEditable()
-  @Experimental() // untriaged
   void toBlob(BlobCallback callback, String type, [Object arguments]) native;
 
   @JSName('toDataURL')
-  @DomName('HTMLCanvasElement.toDataURL')
-  @DocsEditable()
   String _toDataUrl(String type, [arguments_OR_quality]) native;
 
-  @DomName('HTMLCanvasElement.transferControlToOffscreen')
-  @DocsEditable()
-  @Experimental() // untriaged
   OffscreenCanvas transferControlToOffscreen() native;
 
   /// Stream of `webglcontextlost` events handled by this [CanvasElement].
-  @DomName('HTMLCanvasElement.onwebglcontextlost')
-  @DocsEditable()
   ElementStream<gl.ContextEvent> get onWebGlContextLost =>
       webGlContextLostEvent.forElement(this);
 
   /// Stream of `webglcontextrestored` events handled by this [CanvasElement].
-  @DomName('HTMLCanvasElement.onwebglcontextrestored')
-  @DocsEditable()
   ElementStream<gl.ContextEvent> get onWebGlContextRestored =>
       webGlContextRestoredEvent.forElement(this);
 
@@ -3006,7 +1999,6 @@
    */
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
-  @Experimental()
   gl.RenderingContext getContext3d(
       {alpha: true,
       depth: true,
@@ -3077,7 +2069,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.
 
-@DocsEditable()
 /**
  * An opaque canvas object representing a gradient.
  *
@@ -3108,7 +2099,6 @@
  *   from WHATWG.
  * * [CanvasGradient](http://www.w3.org/TR/2010/WD-2dcontext-20100304/#canvasgradient) from W3C.
  */
-@DomName('CanvasGradient')
 @Native("CanvasGradient")
 class CanvasGradient extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -3125,15 +2115,12 @@
    *
    * * [Multiple Color Stops](https://developer.mozilla.org/en-US/docs/CSS/linear-gradient#Gradient_with_multiple_color_stops) from MDN.
    */
-  @DomName('CanvasGradient.addColorStop')
-  @DocsEditable()
   void addColorStop(num offset, String color) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
 /**
  * An opaque object representing a pattern of image, canvas, or video.
  *
@@ -3162,7 +2149,6 @@
  *   from WHATWG.
  * * [CanvasPattern](http://www.w3.org/TR/2010/WD-2dcontext-20100304/#canvaspattern) from W3C.
  */
-@DomName('CanvasPattern')
 @Native("CanvasPattern")
 class CanvasPattern extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -3170,9 +2156,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CanvasPattern.setTransform')
-  @DocsEditable()
-  @Experimental() // untriaged
   void setTransform(Matrix transform) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3183,7 +2166,6 @@
   CanvasElement get canvas;
 }
 
-@DomName('CanvasRenderingContext2D')
 @Native("CanvasRenderingContext2D")
 class CanvasRenderingContext2D extends Interceptor
     implements CanvasRenderingContext {
@@ -3192,42 +2174,22 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CanvasRenderingContext2D.canvas')
-  @DocsEditable()
-  @Experimental() // untriaged
   final CanvasElement canvas;
 
-  @DomName('CanvasRenderingContext2D.currentTransform')
-  @DocsEditable()
-  @Experimental() // untriaged
   Matrix currentTransform;
 
-  @DomName('CanvasRenderingContext2D.direction')
-  @DocsEditable()
-  @Experimental() // untriaged
   String direction;
 
-  @DomName('CanvasRenderingContext2D.fillStyle')
-  @DocsEditable()
   @Creates('String|CanvasGradient|CanvasPattern')
   @Returns('String|CanvasGradient|CanvasPattern')
   Object fillStyle;
 
-  @DomName('CanvasRenderingContext2D.filter')
-  @DocsEditable()
-  @Experimental() // untriaged
   String filter;
 
-  @DomName('CanvasRenderingContext2D.font')
-  @DocsEditable()
   String font;
 
-  @DomName('CanvasRenderingContext2D.globalAlpha')
-  @DocsEditable()
   num globalAlpha;
 
-  @DomName('CanvasRenderingContext2D.globalCompositeOperation')
-  @DocsEditable()
   String globalCompositeOperation;
 
   /**
@@ -3240,65 +2202,34 @@
    *   smoothing](https://html.spec.whatwg.org/multipage/scripting.html#image-smoothing)
    *   from WHATWG.
    */
-  @DomName('CanvasRenderingContext2D.imageSmoothingEnabled')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool imageSmoothingEnabled;
 
-  @DomName('CanvasRenderingContext2D.imageSmoothingQuality')
-  @DocsEditable()
-  @Experimental() // untriaged
   String imageSmoothingQuality;
 
-  @DomName('CanvasRenderingContext2D.lineCap')
-  @DocsEditable()
   String lineCap;
 
-  @DomName('CanvasRenderingContext2D.lineJoin')
-  @DocsEditable()
   String lineJoin;
 
-  @DomName('CanvasRenderingContext2D.lineWidth')
-  @DocsEditable()
   num lineWidth;
 
-  @DomName('CanvasRenderingContext2D.miterLimit')
-  @DocsEditable()
   num miterLimit;
 
-  @DomName('CanvasRenderingContext2D.shadowBlur')
-  @DocsEditable()
   num shadowBlur;
 
-  @DomName('CanvasRenderingContext2D.shadowColor')
-  @DocsEditable()
   String shadowColor;
 
-  @DomName('CanvasRenderingContext2D.shadowOffsetX')
-  @DocsEditable()
   num shadowOffsetX;
 
-  @DomName('CanvasRenderingContext2D.shadowOffsetY')
-  @DocsEditable()
   num shadowOffsetY;
 
-  @DomName('CanvasRenderingContext2D.strokeStyle')
-  @DocsEditable()
   @Creates('String|CanvasGradient|CanvasPattern')
   @Returns('String|CanvasGradient|CanvasPattern')
   Object strokeStyle;
 
-  @DomName('CanvasRenderingContext2D.textAlign')
-  @DocsEditable()
   String textAlign;
 
-  @DomName('CanvasRenderingContext2D.textBaseline')
-  @DocsEditable()
   String textBaseline;
 
-  @DomName('CanvasRenderingContext2D.addHitRegion')
-  @DocsEditable()
-  @Experimental() // untriaged
   void addHitRegion([Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -3310,35 +2241,18 @@
   }
 
   @JSName('addHitRegion')
-  @DomName('CanvasRenderingContext2D.addHitRegion')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _addHitRegion_1(options) native;
   @JSName('addHitRegion')
-  @DomName('CanvasRenderingContext2D.addHitRegion')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _addHitRegion_2() native;
 
-  @DomName('CanvasRenderingContext2D.beginPath')
-  @DocsEditable()
   void beginPath() native;
 
-  @DomName('CanvasRenderingContext2D.clearHitRegions')
-  @DocsEditable()
-  @Experimental() // untriaged
   void clearHitRegions() native;
 
-  @DomName('CanvasRenderingContext2D.clearRect')
-  @DocsEditable()
   void clearRect(num x, num y, num width, num height) native;
 
-  @DomName('CanvasRenderingContext2D.clip')
-  @DocsEditable()
   void clip([path_OR_winding, String winding]) native;
 
-  @DomName('CanvasRenderingContext2D.createImageData')
-  @DocsEditable()
   @Creates('ImageData|=Object')
   ImageData createImageData(data_OR_imagedata_OR_sw,
       [int sh_OR_sw,
@@ -3390,106 +2304,62 @@
   }
 
   @JSName('createImageData')
-  @DomName('CanvasRenderingContext2D.createImageData')
-  @DocsEditable()
   @Creates('ImageData|=Object')
   _createImageData_1(imagedata) native;
   @JSName('createImageData')
-  @DomName('CanvasRenderingContext2D.createImageData')
-  @DocsEditable()
   @Creates('ImageData|=Object')
   _createImageData_2(int sw, sh) native;
   @JSName('createImageData')
-  @DomName('CanvasRenderingContext2D.createImageData')
-  @DocsEditable()
   @Creates('ImageData|=Object')
   _createImageData_3(int sw, sh, imageDataColorSettings) native;
   @JSName('createImageData')
-  @DomName('CanvasRenderingContext2D.createImageData')
-  @DocsEditable()
   @Creates('ImageData|=Object')
   _createImageData_4(data, sw, int sh) native;
   @JSName('createImageData')
-  @DomName('CanvasRenderingContext2D.createImageData')
-  @DocsEditable()
   @Creates('ImageData|=Object')
   _createImageData_5(data, sw, int sh, imageDataColorSettings) native;
 
-  @DomName('CanvasRenderingContext2D.createLinearGradient')
-  @DocsEditable()
   CanvasGradient createLinearGradient(num x0, num y0, num x1, num y1) native;
 
-  @DomName('CanvasRenderingContext2D.createPattern')
-  @DocsEditable()
   CanvasPattern createPattern(Object image, String repetitionType) native;
 
-  @DomName('CanvasRenderingContext2D.createRadialGradient')
-  @DocsEditable()
   CanvasGradient createRadialGradient(
       num x0, num y0, num r0, num x1, num y1, num r1) native;
 
-  @DomName('CanvasRenderingContext2D.drawFocusIfNeeded')
-  @DocsEditable()
-  @Experimental() // untriaged
   void drawFocusIfNeeded(element_OR_path, [Element element]) native;
 
-  @DomName('CanvasRenderingContext2D.fillRect')
-  @DocsEditable()
+  void fill([path_OR_winding, String winding]) native;
+
   void fillRect(num x, num y, num width, num height) native;
 
-  @DomName('CanvasRenderingContext2D.getContextAttributes')
-  @DocsEditable()
-  // http://wiki.whatwg.org/wiki/CanvasOpaque#Suggested_IDL
-  @Experimental()
   Map getContextAttributes() {
     return convertNativeToDart_Dictionary(_getContextAttributes_1());
   }
 
   @JSName('getContextAttributes')
-  @DomName('CanvasRenderingContext2D.getContextAttributes')
-  @DocsEditable()
-  // http://wiki.whatwg.org/wiki/CanvasOpaque#Suggested_IDL
-  @Experimental()
   _getContextAttributes_1() native;
 
-  @DomName('CanvasRenderingContext2D.getImageData')
-  @DocsEditable()
   @Creates('ImageData|=Object')
   ImageData getImageData(int sx, int sy, int sw, int sh) {
     return convertNativeToDart_ImageData(_getImageData_1(sx, sy, sw, sh));
   }
 
   @JSName('getImageData')
-  @DomName('CanvasRenderingContext2D.getImageData')
-  @DocsEditable()
   @Creates('ImageData|=Object')
   _getImageData_1(sx, sy, sw, sh) native;
 
   @JSName('getLineDash')
-  @DomName('CanvasRenderingContext2D.getLineDash')
-  @DocsEditable()
   List<num> _getLineDash() native;
 
-  @DomName('CanvasRenderingContext2D.isContextLost')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool isContextLost() native;
 
-  @DomName('CanvasRenderingContext2D.isPointInPath')
-  @DocsEditable()
   bool isPointInPath(path_OR_x, num x_OR_y, [winding_OR_y, String winding])
       native;
 
-  @DomName('CanvasRenderingContext2D.isPointInStroke')
-  @DocsEditable()
   bool isPointInStroke(path_OR_x, num x_OR_y, [num y]) native;
 
-  @DomName('CanvasRenderingContext2D.measureText')
-  @DocsEditable()
   TextMetrics measureText(String text) native;
 
-  @DomName('CanvasRenderingContext2D.putImageData')
-  @DocsEditable()
   void putImageData(ImageData imagedata, int dx, int dy,
       [int dirtyX, int dirtyY, int dirtyWidth, int dirtyHeight]) {
     if (dirtyX == null &&
@@ -3513,115 +2383,61 @@
   }
 
   @JSName('putImageData')
-  @DomName('CanvasRenderingContext2D.putImageData')
-  @DocsEditable()
   void _putImageData_1(imagedata, dx, dy) native;
   @JSName('putImageData')
-  @DomName('CanvasRenderingContext2D.putImageData')
-  @DocsEditable()
   void _putImageData_2(
       imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) native;
 
-  @DomName('CanvasRenderingContext2D.removeHitRegion')
-  @DocsEditable()
-  @Experimental() // untriaged
   void removeHitRegion(String id) native;
 
-  @DomName('CanvasRenderingContext2D.resetTransform')
-  @DocsEditable()
-  @Experimental() // untriaged
   void resetTransform() native;
 
-  @DomName('CanvasRenderingContext2D.restore')
-  @DocsEditable()
   void restore() native;
 
-  @DomName('CanvasRenderingContext2D.rotate')
-  @DocsEditable()
   void rotate(num angle) native;
 
-  @DomName('CanvasRenderingContext2D.save')
-  @DocsEditable()
   void save() native;
 
-  @DomName('CanvasRenderingContext2D.scale')
-  @DocsEditable()
   void scale(num x, num y) native;
 
-  @DomName('CanvasRenderingContext2D.scrollPathIntoView')
-  @DocsEditable()
-  @Experimental() // untriaged
   void scrollPathIntoView([Path2D path]) native;
 
-  @DomName('CanvasRenderingContext2D.setTransform')
-  @DocsEditable()
   void setTransform(num a, num b, num c, num d, num e, num f) native;
 
-  @DomName('CanvasRenderingContext2D.stroke')
-  @DocsEditable()
   void stroke([Path2D path]) native;
 
-  @DomName('CanvasRenderingContext2D.strokeRect')
-  @DocsEditable()
   void strokeRect(num x, num y, num width, num height) native;
 
-  @DomName('CanvasRenderingContext2D.strokeText')
-  @DocsEditable()
   void strokeText(String text, num x, num y, [num maxWidth]) native;
 
-  @DomName('CanvasRenderingContext2D.transform')
-  @DocsEditable()
   void transform(num a, num b, num c, num d, num e, num f) native;
 
-  @DomName('CanvasRenderingContext2D.translate')
-  @DocsEditable()
   void translate(num x, num y) native;
 
   // From CanvasPath
 
   @JSName('arc')
-  @DomName('CanvasRenderingContext2D.arc')
-  @DocsEditable()
   void _arc(num x, num y, num radius, num startAngle, num endAngle,
       bool anticlockwise) native;
 
-  @DomName('CanvasRenderingContext2D.arcTo')
-  @DocsEditable()
   void arcTo(num x1, num y1, num x2, num y2, num radius) native;
 
-  @DomName('CanvasRenderingContext2D.bezierCurveTo')
-  @DocsEditable()
   void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y)
       native;
 
-  @DomName('CanvasRenderingContext2D.closePath')
-  @DocsEditable()
   void closePath() native;
 
-  @DomName('CanvasRenderingContext2D.ellipse')
-  @DocsEditable()
-  @Experimental() // untriaged
   void ellipse(num x, num y, num radiusX, num radiusY, num rotation,
       num startAngle, num endAngle, bool anticlockwise) native;
 
-  @DomName('CanvasRenderingContext2D.lineTo')
-  @DocsEditable()
   void lineTo(num x, num y) native;
 
-  @DomName('CanvasRenderingContext2D.moveTo')
-  @DocsEditable()
   void moveTo(num x, num y) native;
 
-  @DomName('CanvasRenderingContext2D.quadraticCurveTo')
-  @DocsEditable()
   void quadraticCurveTo(num cpx, num cpy, num x, num y) native;
 
-  @DomName('CanvasRenderingContext2D.rect')
-  @DocsEditable()
   void rect(num x, num y, num width, num height) native;
 
-  @DomName('CanvasRenderingContext2D.createImageDataFromImageData')
-  @DocsEditable()
   ImageData createImageDataFromImageData(ImageData imagedata) =>
       JS('ImageData', '#.createImageData(#)', this, imagedata);
 
@@ -3661,7 +2477,6 @@
     this.strokeStyle = 'hsla($h, $s%, $l%, $a)';
   }
 
-  @DomName('CanvasRenderingContext2D.arc')
   void arc(num x, num y, num radius, num startAngle, num endAngle,
       [bool anticlockwise = false]) {
     // TODO(terry): This should not be needed: dartbug.com/20939.
@@ -3669,7 +2484,6 @@
         endAngle, anticlockwise);
   }
 
-  @DomName('CanvasRenderingContext2D.createPatternFromImage')
   CanvasPattern createPatternFromImage(
           ImageElement image, String repetitionType) =>
       JS('CanvasPattern', '#.createPattern(#, #)', this, image, repetitionType);
@@ -3714,7 +2528,6 @@
    *   * [drawImage](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-drawimage)
    * from the WHATWG.
    */
-  @DomName('CanvasRenderingContext2D.drawImage')
   void drawImageToRect(CanvasImageSource source, Rectangle destRect,
       {Rectangle sourceRect}) {
     if (sourceRect == null) {
@@ -3763,7 +2576,6 @@
    *   * [drawImage](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-drawimage)
    * from the WHATWG.
    */
-  @DomName('CanvasRenderingContext2D.drawImage')
   @JSName('drawImage')
   void drawImage(CanvasImageSource source, num destX, num destY) native;
 
@@ -3793,7 +2605,6 @@
    *   * [drawImage](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-drawimage)
    * from the WHATWG.
    */
-  @DomName('CanvasRenderingContext2D.drawImage')
   @JSName('drawImage')
   void drawImageScaled(CanvasImageSource source, num destX, num destY,
       num destWidth, num destHeight) native;
@@ -3827,7 +2638,6 @@
    *   * [drawImage](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-drawimage)
    * from the WHATWG.
    */
-  @DomName('CanvasRenderingContext2D.drawImage')
   @JSName('drawImage')
   void drawImageScaledFromSource(
       CanvasImageSource source,
@@ -3844,7 +2654,6 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @SupportedBrowser(SupportedBrowser.IE, '11')
   @Unstable()
-  @DomName('CanvasRenderingContext2D.lineDashOffset')
   // TODO(14316): Firefox has this functionality with mozDashOffset, but it
   // needs to be polyfilled.
   num get lineDashOffset =>
@@ -3854,7 +2663,6 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @SupportedBrowser(SupportedBrowser.IE, '11')
   @Unstable()
-  @DomName('CanvasRenderingContext2D.lineDashOffset')
   // TODO(14316): Firefox has this functionality with mozDashOffset, but it
   // needs to be polyfilled.
   set lineDashOffset(num value) {
@@ -3873,7 +2681,6 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @SupportedBrowser(SupportedBrowser.IE, '11')
   @Unstable()
-  @DomName('CanvasRenderingContext2D.getLineDash')
   List<num> getLineDash() {
     // TODO(14316): Firefox has this functionality with mozDash, but it's a bit
     // different.
@@ -3888,7 +2695,6 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @SupportedBrowser(SupportedBrowser.IE, '11')
   @Unstable()
-  @DomName('CanvasRenderingContext2D.setLineDash')
   void setLineDash(List<num> dash) {
     // TODO(14316): Firefox has this functionality with mozDash, but it's a bit
     // different.
@@ -3913,7 +2719,6 @@
    * [CanvasRenderingContext2D.textBaseLine] properties are also applied to the
    * drawn text.
    */
-  @DomName('CanvasRenderingContext2D.fillText')
   void fillText(String text, num x, num y, [num maxWidth]) {
     if (maxWidth != null) {
       JS('void', '#.fillText(#, #, #, #)', this, text, x, y, maxWidth);
@@ -3922,14 +2727,7 @@
     }
   }
 
-  @DomName('CanvasRenderingContext2D.fill')
-  void fill([String winding = 'nonzero']) {
-    JS('void', '#.fill(#)', this, winding);
-  }
-
   /** Deprecated always returns 1.0 */
-  @DomName('CanvasRenderingContext2D.webkitBackingStorePixelRation')
-  @Experimental()
   @deprecated
   double get backingStorePixelRatio => 1.0;
 }
@@ -3937,8 +2735,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.
 
-@DocsEditable()
-@DomName('CharacterData')
 @Native("CharacterData")
 class CharacterData extends Node
     implements NonDocumentTypeChildNode, ChildNode {
@@ -3947,63 +2743,36 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CharacterData.data')
-  @DocsEditable()
   String data;
 
-  @DomName('CharacterData.length')
-  @DocsEditable()
   final int length;
 
-  @DomName('CharacterData.appendData')
-  @DocsEditable()
   void appendData(String data) native;
 
-  @DomName('CharacterData.deleteData')
-  @DocsEditable()
   void deleteData(int offset, int count) native;
 
-  @DomName('CharacterData.insertData')
-  @DocsEditable()
   void insertData(int offset, String data) native;
 
-  @DomName('CharacterData.replaceData')
-  @DocsEditable()
   void replaceData(int offset, int count, String data) native;
 
-  @DomName('CharacterData.substringData')
-  @DocsEditable()
   String substringData(int offset, int count) native;
 
   // From ChildNode
 
-  @DomName('CharacterData.after')
-  @DocsEditable()
-  @Experimental() // untriaged
   void after(Object nodes) native;
 
-  @DomName('CharacterData.before')
-  @DocsEditable()
-  @Experimental() // untriaged
   void before(Object nodes) native;
 
   // From NonDocumentTypeChildNode
 
-  @DomName('CharacterData.nextElementSibling')
-  @DocsEditable()
   final Element nextElementSibling;
 
-  @DomName('CharacterData.previousElementSibling')
-  @DocsEditable()
   final Element previousElementSibling;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('ChildNode')
-@Experimental() // untriaged
 abstract class ChildNode extends Interceptor {
   // To suppress missing implicit constructor warnings.
   factory ChildNode._() {
@@ -4020,9 +2789,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.
 
-@DocsEditable()
-@DomName('Client')
-@Experimental() // untriaged
 @Native("Client")
 class Client extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -4030,38 +2796,20 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Client.frameType')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String frameType;
 
-  @DomName('Client.id')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String id;
 
-  @DomName('Client.type')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String type;
 
-  @DomName('Client.url')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String url;
 
-  @DomName('Client.postMessage')
-  @DocsEditable()
-  @Experimental() // untriaged
   void postMessage(Object message, [List<Object> transfer]) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('Clients')
-@Experimental() // untriaged
 @Native("Clients")
 class Clients extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -4069,19 +2817,10 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Clients.claim')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future claim() => promiseToFuture(JS("", "#.claim()", this));
 
-  @DomName('Clients.get')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future get(String id) => promiseToFuture(JS("", "#.get(#)", this, id));
 
-  @DomName('Clients.matchAll')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future matchAll([Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -4091,19 +2830,10 @@
   }
 
   @JSName('matchAll')
-  @DomName('Clients.matchAll')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _matchAll_1(options) native;
   @JSName('matchAll')
-  @DomName('Clients.matchAll')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _matchAll_2() native;
 
-  @DomName('Clients.openWindow')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<WindowClient> openWindow(String url) =>
       promiseToFuture<WindowClient>(JS("", "#.openWindow(#)", this, url));
 }
@@ -4111,9 +2841,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.
 
-@DocsEditable()
-@DomName('ClipboardEvent')
-@Experimental() // untriaged
 @Native("ClipboardEvent")
 class ClipboardEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -4121,8 +2848,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ClipboardEvent.ClipboardEvent')
-  @DocsEditable()
   factory ClipboardEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -4135,17 +2860,12 @@
   static ClipboardEvent _create_2(type) =>
       JS('ClipboardEvent', 'new ClipboardEvent(#)', type);
 
-  @DomName('ClipboardEvent.clipboardData')
-  @DocsEditable()
-  @Experimental() // untriaged
   final DataTransfer clipboardData;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CloseEvent')
 @Native("CloseEvent")
 class CloseEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -4153,8 +2873,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CloseEvent.CloseEvent')
-  @DocsEditable()
   factory CloseEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -4167,24 +2885,16 @@
   static CloseEvent _create_2(type) =>
       JS('CloseEvent', 'new CloseEvent(#)', type);
 
-  @DomName('CloseEvent.code')
-  @DocsEditable()
   final int code;
 
-  @DomName('CloseEvent.reason')
-  @DocsEditable()
   final String reason;
 
-  @DomName('CloseEvent.wasClean')
-  @DocsEditable()
   final bool wasClean;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('Comment')
 @Native("Comment")
 class Comment extends CharacterData {
   factory Comment([String data]) {
@@ -4202,7 +2912,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('CompositionEvent')
 @Native("CompositionEvent")
 class CompositionEvent extends UIEvent {
   factory CompositionEvent(String type,
@@ -4227,8 +2936,6 @@
     return e;
   }
 
-  @DomName('CompositionEvent.CompositionEvent')
-  @DocsEditable()
   factory CompositionEvent._(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -4241,13 +2948,9 @@
   static CompositionEvent _create_2(type) =>
       JS('CompositionEvent', 'new CompositionEvent(#)', type);
 
-  @DomName('CompositionEvent.data')
-  @DocsEditable()
   final String data;
 
   @JSName('initCompositionEvent')
-  @DomName('CompositionEvent.initCompositionEvent')
-  @DocsEditable()
   void _initCompositionEvent(String type, bool bubbles, bool cancelable,
       Window view, String data) native;
 }
@@ -4255,11 +2958,7 @@
 // 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.
 
-@DocsEditable()
-@DomName('HTMLContentElement')
 @SupportedBrowser(SupportedBrowser.CHROME, '26')
-@Experimental()
-// https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#content-element
 @Native("HTMLContentElement")
 class ContentElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -4267,8 +2966,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLContentElement.HTMLContentElement')
-  @DocsEditable()
   factory ContentElement() => document.createElement("content");
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
@@ -4280,12 +2977,8 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('content');
 
-  @DomName('HTMLContentElement.select')
-  @DocsEditable()
   String select;
 
-  @DomName('HTMLContentElement.getDistributedNodes')
-  @DocsEditable()
   @Returns('NodeList|Null')
   @Creates('NodeList')
   List<Node> getDistributedNodes() native;
@@ -4294,9 +2987,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.
 
-@DocsEditable()
-@DomName('CookieStore')
-@Experimental() // untriaged
 @Native("CookieStore")
 class CookieStore extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -4304,9 +2994,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CookieStore.getAll')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future getAll([Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -4316,19 +3003,10 @@
   }
 
   @JSName('getAll')
-  @DomName('CookieStore.getAll')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _getAll_1(options) native;
   @JSName('getAll')
-  @DomName('CookieStore.getAll')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _getAll_2() native;
 
-  @DomName('CookieStore.set')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future set(String name, String value, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -4338,22 +3016,14 @@
   }
 
   @JSName('set')
-  @DomName('CookieStore.set')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _set_1(name, value, options) native;
   @JSName('set')
-  @DomName('CookieStore.set')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _set_2(name, value) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('Coordinates')
 @Native("Coordinates")
 class Coordinates extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -4361,41 +3031,24 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Coordinates.accuracy')
-  @DocsEditable()
   final num accuracy;
 
-  @DomName('Coordinates.altitude')
-  @DocsEditable()
   final num altitude;
 
-  @DomName('Coordinates.altitudeAccuracy')
-  @DocsEditable()
   final num altitudeAccuracy;
 
-  @DomName('Coordinates.heading')
-  @DocsEditable()
   final num heading;
 
-  @DomName('Coordinates.latitude')
-  @DocsEditable()
   final num latitude;
 
-  @DomName('Coordinates.longitude')
-  @DocsEditable()
   final num longitude;
 
-  @DomName('Coordinates.speed')
-  @DocsEditable()
   final num speed;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('Credential')
-@Experimental() // untriaged
 @Native("Credential")
 class Credential extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -4403,23 +3056,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Credential.id')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String id;
 
-  @DomName('Credential.type')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String type;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CredentialUserData')
-@Experimental() // untriaged
 @Native("CredentialUserData")
 class CredentialUserData extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -4428,23 +3072,14 @@
   }
 
   @JSName('iconURL')
-  @DomName('CredentialUserData.iconURL')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String iconUrl;
 
-  @DomName('CredentialUserData.name')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String name;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CredentialsContainer')
-@Experimental() // untriaged
 @Native("CredentialsContainer")
 class CredentialsContainer extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -4452,9 +3087,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CredentialsContainer.create')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future create([Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -4464,19 +3096,10 @@
   }
 
   @JSName('create')
-  @DomName('CredentialsContainer.create')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _create_1(options) native;
   @JSName('create')
-  @DomName('CredentialsContainer.create')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _create_2() native;
 
-  @DomName('CredentialsContainer.get')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future get([Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -4486,31 +3109,16 @@
   }
 
   @JSName('get')
-  @DomName('CredentialsContainer.get')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _get_1(options) native;
   @JSName('get')
-  @DomName('CredentialsContainer.get')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _get_2() native;
 
-  @DomName('CredentialsContainer.preventSilentAccess')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future preventSilentAccess() =>
       promiseToFuture(JS("", "#.preventSilentAccess()", this));
 
-  @DomName('CredentialsContainer.requireUserMediation')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future requireUserMediation() =>
       promiseToFuture(JS("", "#.requireUserMediation()", this));
 
-  @DomName('CredentialsContainer.store')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future store(Credential credential) =>
       promiseToFuture(JS("", "#.store(#)", this, credential));
 }
@@ -4518,11 +3126,8 @@
 // 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.
 
-@DomName('Crypto')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.SAFARI)
-@Experimental()
-// http://www.w3.org/TR/WebCryptoAPI/
 @Native("Crypto")
 class Crypto extends Interceptor {
   TypedData getRandomValues(TypedData array) {
@@ -4538,14 +3143,9 @@
   static bool get supported =>
       JS('bool', '!!(window.crypto && window.crypto.getRandomValues)');
 
-  @DomName('Crypto.subtle')
-  @DocsEditable()
-  @Experimental() // untriaged
   final _SubtleCrypto subtle;
 
   @JSName('getRandomValues')
-  @DomName('Crypto.getRandomValues')
-  @DocsEditable()
   @Creates('TypedData')
   @Returns('TypedData|Null')
   TypedData _getRandomValues(TypedData array) native;
@@ -4554,9 +3154,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.
 
-@DocsEditable()
-@DomName('CryptoKey')
-@Experimental() // untriaged
 @Native("CryptoKey")
 class CryptoKey extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -4564,35 +3161,19 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CryptoKey.algorithm')
-  @DocsEditable()
-  @Experimental() // untriaged
   @Creates('Null')
   final Object algorithm;
 
-  @DomName('CryptoKey.extractable')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool extractable;
 
-  @DomName('CryptoKey.type')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String type;
 
-  @DomName('CryptoKey.usages')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Object usages;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSS')
-// http://www.w3.org/TR/css3-conditional/#the-css-interface
-@Experimental() // None
 @Native("CSS")
 class Css extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -4600,125 +3181,53 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSS.paintWorklet')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final _Worklet paintWorklet;
+  static final _Worklet paintWorklet;
 
-  @DomName('CSS.Hz')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue Hz(num value) native;
 
-  @DomName('CSS.ch')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue ch(num value) native;
 
-  @DomName('CSS.cm')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue cm(num value) native;
 
-  @DomName('CSS.deg')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue deg(num value) native;
 
-  @DomName('CSS.dpcm')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue dpcm(num value) native;
 
-  @DomName('CSS.dpi')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue dpi(num value) native;
 
-  @DomName('CSS.dppx')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue dppx(num value) native;
 
-  @DomName('CSS.em')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue em(num value) native;
 
-  @DomName('CSS.escape')
-  @DocsEditable()
-  @Experimental() // untriaged
   static String escape(String ident) native;
 
-  @DomName('CSS.ex')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue ex(num value) native;
 
-  @DomName('CSS.fr')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue fr(num value) native;
 
-  @DomName('CSS.grad')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue grad(num value) native;
 
   @JSName('in')
-  @DomName('CSS.in')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue inch(num value) native;
 
-  @DomName('CSS.kHz')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue kHz(num value) native;
 
-  @DomName('CSS.mm')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue mm(num value) native;
 
-  @DomName('CSS.ms')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue ms(num value) native;
 
-  @DomName('CSS.number')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue number(num value) native;
 
-  @DomName('CSS.pc')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue pc(num value) native;
 
-  @DomName('CSS.percent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue percent(num value) native;
 
-  @DomName('CSS.pt')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue pt(num value) native;
 
-  @DomName('CSS.px')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue px(num value) native;
 
-  @DomName('CSS.rad')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue rad(num value) native;
 
-  @DomName('CSS.registerProperty')
-  @DocsEditable()
-  @Experimental() // untriaged
   static void registerProperty(Map descriptor) {
     var descriptor_1 = convertDartToNative_Dictionary(descriptor);
     _registerProperty_1(descriptor_1);
@@ -4726,63 +3235,31 @@
   }
 
   @JSName('registerProperty')
-  @DomName('CSS.registerProperty')
-  @DocsEditable()
-  @Experimental() // untriaged
   static void _registerProperty_1(descriptor) native;
 
-  @DomName('CSS.rem')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue rem(num value) native;
 
-  @DomName('CSS.s')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue s(num value) native;
 
-  @DomName('CSS.supports')
-  @DocsEditable()
   static bool supports(String property, String value) native;
 
   @JSName('supports')
-  @DomName('CSS.supports')
-  @DocsEditable()
   static bool supportsCondition(String conditionText) native;
 
-  @DomName('CSS.turn')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue turn(num value) native;
 
-  @DomName('CSS.vh')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue vh(num value) native;
 
-  @DomName('CSS.vmax')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue vmax(num value) native;
 
-  @DomName('CSS.vmin')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue vmin(num value) native;
 
-  @DomName('CSS.vw')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssUnitValue vw(num value) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSCharsetRule')
-// http://dev.w3.org/csswg/cssom/#the-csscharsetrule-interface
-@Experimental()
 @Native("CSSCharsetRule")
 class CssCharsetRule extends CssRule {
   // To suppress missing implicit constructor warnings.
@@ -4790,17 +3267,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSCharsetRule.encoding')
-  @DocsEditable()
   String encoding;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSConditionRule')
-@Experimental() // untriaged
 @Native("CSSConditionRule")
 class CssConditionRule extends CssGroupingRule {
   // To suppress missing implicit constructor warnings.
@@ -4808,17 +3280,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSConditionRule.conditionText')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String conditionText;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSFontFaceRule')
 @Native("CSSFontFaceRule")
 class CssFontFaceRule extends CssRule {
   // To suppress missing implicit constructor warnings.
@@ -4826,17 +3293,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSFontFaceRule.style')
-  @DocsEditable()
   final CssStyleDeclaration style;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSGroupingRule')
-@Experimental() // untriaged
 @Native("CSSGroupingRule")
 class CssGroupingRule extends CssRule {
   // To suppress missing implicit constructor warnings.
@@ -4844,30 +3306,18 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSGroupingRule.cssRules')
-  @DocsEditable()
-  @Experimental() // untriaged
   @Returns('_CssRuleList|Null')
   @Creates('_CssRuleList')
   final List<CssRule> cssRules;
 
-  @DomName('CSSGroupingRule.deleteRule')
-  @DocsEditable()
-  @Experimental() // untriaged
   void deleteRule(int index) native;
 
-  @DomName('CSSGroupingRule.insertRule')
-  @DocsEditable()
-  @Experimental() // untriaged
   int insertRule(String rule, int index) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSImageValue')
-@Experimental() // untriaged
 @Native("CSSImageValue")
 class CssImageValue extends CssResourceValue {
   // To suppress missing implicit constructor warnings.
@@ -4875,27 +3325,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSImageValue.intrinsicHeight')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num intrinsicHeight;
 
-  @DomName('CSSImageValue.intrinsicRatio')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num intrinsicRatio;
 
-  @DomName('CSSImageValue.intrinsicWidth')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num intrinsicWidth;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSImportRule')
 @Native("CSSImportRule")
 class CssImportRule extends CssRule {
   // To suppress missing implicit constructor warnings.
@@ -4903,25 +3342,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSImportRule.href')
-  @DocsEditable()
   final String href;
 
-  @DomName('CSSImportRule.media')
-  @DocsEditable()
   final MediaList media;
 
-  @DomName('CSSImportRule.styleSheet')
-  @DocsEditable()
   final CssStyleSheet styleSheet;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSKeyframeRule')
-@Experimental() // untriaged
 @Native("CSSKeyframeRule,MozCSSKeyframeRule,WebKitCSSKeyframeRule")
 class CssKeyframeRule extends CssRule {
   // To suppress missing implicit constructor warnings.
@@ -4929,23 +3359,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSKeyframeRule.keyText')
-  @DocsEditable()
-  @Experimental() // untriaged
   String keyText;
 
-  @DomName('CSSKeyframeRule.style')
-  @DocsEditable()
-  @Experimental() // untriaged
   final CssStyleDeclaration style;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSKeyframesRule')
-@Experimental() // untriaged
 @Native("CSSKeyframesRule,MozCSSKeyframesRule,WebKitCSSKeyframesRule")
 class CssKeyframesRule extends CssRule {
   // To suppress missing implicit constructor warnings.
@@ -4953,45 +3374,24 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSKeyframesRule.cssRules')
-  @DocsEditable()
-  @Experimental() // untriaged
   @Returns('_CssRuleList|Null')
   @Creates('_CssRuleList')
   final List<CssRule> cssRules;
 
-  @DomName('CSSKeyframesRule.name')
-  @DocsEditable()
-  @Experimental() // untriaged
   String name;
 
-  @DomName('CSSKeyframesRule.__getter__')
-  @DocsEditable()
-  @Experimental() // untriaged
   CssKeyframeRule __getter__(int index) native;
 
-  @DomName('CSSKeyframesRule.appendRule')
-  @DocsEditable()
-  @Experimental() // untriaged
   void appendRule(String rule) native;
 
-  @DomName('CSSKeyframesRule.deleteRule')
-  @DocsEditable()
-  @Experimental() // untriaged
   void deleteRule(String select) native;
 
-  @DomName('CSSKeyframesRule.findRule')
-  @DocsEditable()
-  @Experimental() // untriaged
   CssKeyframeRule findRule(String select) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSKeywordValue')
-@Experimental() // untriaged
 @Native("CSSKeywordValue")
 class CssKeywordValue extends CssStyleValue {
   // To suppress missing implicit constructor warnings.
@@ -4999,26 +3399,18 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSKeywordValue.CSSKeywordValue')
-  @DocsEditable()
   factory CssKeywordValue(String keyword) {
     return CssKeywordValue._create_1(keyword);
   }
   static CssKeywordValue _create_1(keyword) =>
       JS('CssKeywordValue', 'new CSSKeywordValue(#)', keyword);
 
-  @DomName('CSSKeywordValue.value')
-  @DocsEditable()
-  @Experimental() // untriaged
   String value;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSMatrixComponent')
-@Experimental() // untriaged
 @Native("CSSMatrixComponent")
 class CssMatrixComponent extends CssTransformComponent {
   // To suppress missing implicit constructor warnings.
@@ -5026,8 +3418,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSMatrixComponent.CSSMatrixComponent')
-  @DocsEditable()
   factory CssMatrixComponent(DomMatrixReadOnly matrix, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -5040,17 +3430,12 @@
   static CssMatrixComponent _create_2(matrix) =>
       JS('CssMatrixComponent', 'new CSSMatrixComponent(#)', matrix);
 
-  @DomName('CSSMatrixComponent.matrix')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix matrix;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSMediaRule')
 @Native("CSSMediaRule")
 class CssMediaRule extends CssConditionRule {
   // To suppress missing implicit constructor warnings.
@@ -5058,17 +3443,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSMediaRule.media')
-  @DocsEditable()
   final MediaList media;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSNamespaceRule')
-@Experimental() // untriaged
 @Native("CSSNamespaceRule")
 class CssNamespaceRule extends CssRule {
   // To suppress missing implicit constructor warnings.
@@ -5077,23 +3457,14 @@
   }
 
   @JSName('namespaceURI')
-  @DomName('CSSNamespaceRule.namespaceURI')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String namespaceUri;
 
-  @DomName('CSSNamespaceRule.prefix')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String prefix;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSNumericValue')
-@Experimental() // untriaged
 @Native("CSSNumericValue")
 class CssNumericValue extends CssStyleValue {
   // To suppress missing implicit constructor warnings.
@@ -5101,42 +3472,22 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSNumericValue.add')
-  @DocsEditable()
-  @Experimental() // untriaged
   CssNumericValue add(CssNumericValue value) native;
 
-  @DomName('CSSNumericValue.div')
-  @DocsEditable()
-  @Experimental() // untriaged
   CssNumericValue div(num value) native;
 
-  @DomName('CSSNumericValue.mul')
-  @DocsEditable()
-  @Experimental() // untriaged
   CssNumericValue mul(num value) native;
 
-  @DomName('CSSNumericValue.parse')
-  @DocsEditable()
-  @Experimental() // untriaged
   static CssNumericValue parse(String cssText) native;
 
-  @DomName('CSSNumericValue.sub')
-  @DocsEditable()
-  @Experimental() // untriaged
   CssNumericValue sub(CssNumericValue value) native;
 
-  @DomName('CSSNumericValue.to')
-  @DocsEditable()
-  @Experimental() // untriaged
   CssNumericValue to(String unit) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSPageRule')
 @Native("CSSPageRule")
 class CssPageRule extends CssRule {
   // To suppress missing implicit constructor warnings.
@@ -5144,21 +3495,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSPageRule.selectorText')
-  @DocsEditable()
   String selectorText;
 
-  @DomName('CSSPageRule.style')
-  @DocsEditable()
   final CssStyleDeclaration style;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSPerspective')
-@Experimental() // untriaged
 @Native("CSSPerspective")
 class CssPerspective extends CssTransformComponent {
   // To suppress missing implicit constructor warnings.
@@ -5166,26 +3510,18 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSPerspective.CSSPerspective')
-  @DocsEditable()
   factory CssPerspective(CssNumericValue length) {
     return CssPerspective._create_1(length);
   }
   static CssPerspective _create_1(length) =>
       JS('CssPerspective', 'new CSSPerspective(#)', length);
 
-  @DomName('CSSPerspective.length')
-  @DocsEditable()
-  @Experimental() // untriaged
   CssNumericValue length;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSPositionValue')
-@Experimental() // untriaged
 @Native("CSSPositionValue")
 class CssPositionValue extends CssStyleValue {
   // To suppress missing implicit constructor warnings.
@@ -5193,31 +3529,20 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSPositionValue.CSSPositionValue')
-  @DocsEditable()
   factory CssPositionValue(CssNumericValue x, CssNumericValue y) {
     return CssPositionValue._create_1(x, y);
   }
   static CssPositionValue _create_1(x, y) =>
       JS('CssPositionValue', 'new CSSPositionValue(#,#)', x, y);
 
-  @DomName('CSSPositionValue.x')
-  @DocsEditable()
-  @Experimental() // untriaged
   CssNumericValue x;
 
-  @DomName('CSSPositionValue.y')
-  @DocsEditable()
-  @Experimental() // untriaged
   CssNumericValue y;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSResourceValue')
-@Experimental() // untriaged
 @Native("CSSResourceValue")
 class CssResourceValue extends CssStyleValue {
   // To suppress missing implicit constructor warnings.
@@ -5225,18 +3550,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSResourceValue.state')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String state;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSRotation')
-@Experimental() // untriaged
 @Native("CSSRotation")
 class CssRotation extends CssTransformComponent {
   // To suppress missing implicit constructor warnings.
@@ -5244,8 +3563,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSRotation.CSSRotation')
-  @DocsEditable()
   factory CssRotation(angleValue_OR_x, [num y, num z, CssNumericValue angle]) {
     if ((angleValue_OR_x is CssNumericValue) &&
         y == null &&
@@ -5266,32 +3583,18 @@
   static CssRotation _create_2(angleValue_OR_x, y, z, angle) => JS(
       'CssRotation', 'new CSSRotation(#,#,#,#)', angleValue_OR_x, y, z, angle);
 
-  @DomName('CSSRotation.angle')
-  @DocsEditable()
-  @Experimental() // untriaged
   CssNumericValue angle;
 
-  @DomName('CSSRotation.x')
-  @DocsEditable()
-  @Experimental() // untriaged
   num x;
 
-  @DomName('CSSRotation.y')
-  @DocsEditable()
-  @Experimental() // untriaged
   num y;
 
-  @DomName('CSSRotation.z')
-  @DocsEditable()
-  @Experimental() // untriaged
   num z;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSRule')
 @Native("CSSRule")
 class CssRule extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -5299,77 +3602,40 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSRule.CHARSET_RULE')
-  @DocsEditable()
   static const int CHARSET_RULE = 2;
 
-  @DomName('CSSRule.FONT_FACE_RULE')
-  @DocsEditable()
   static const int FONT_FACE_RULE = 5;
 
-  @DomName('CSSRule.IMPORT_RULE')
-  @DocsEditable()
   static const int IMPORT_RULE = 3;
 
-  @DomName('CSSRule.KEYFRAMES_RULE')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int KEYFRAMES_RULE = 7;
 
-  @DomName('CSSRule.KEYFRAME_RULE')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int KEYFRAME_RULE = 8;
 
-  @DomName('CSSRule.MEDIA_RULE')
-  @DocsEditable()
   static const int MEDIA_RULE = 4;
 
-  @DomName('CSSRule.NAMESPACE_RULE')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int NAMESPACE_RULE = 10;
 
-  @DomName('CSSRule.PAGE_RULE')
-  @DocsEditable()
   static const int PAGE_RULE = 6;
 
-  @DomName('CSSRule.STYLE_RULE')
-  @DocsEditable()
   static const int STYLE_RULE = 1;
 
-  @DomName('CSSRule.SUPPORTS_RULE')
-  @DocsEditable()
   static const int SUPPORTS_RULE = 12;
 
-  @DomName('CSSRule.VIEWPORT_RULE')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int VIEWPORT_RULE = 15;
 
-  @DomName('CSSRule.cssText')
-  @DocsEditable()
   String cssText;
 
-  @DomName('CSSRule.parentRule')
-  @DocsEditable()
   final CssRule parentRule;
 
-  @DomName('CSSRule.parentStyleSheet')
-  @DocsEditable()
   final CssStyleSheet parentStyleSheet;
 
-  @DomName('CSSRule.type')
-  @DocsEditable()
   final int type;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSScale')
-@Experimental() // untriaged
 @Native("CSSScale")
 class CssScale extends CssTransformComponent {
   // To suppress missing implicit constructor warnings.
@@ -5377,8 +3643,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSScale.CSSScale')
-  @DocsEditable()
   factory CssScale(num x, num y, [num z]) {
     if ((y is num) && (x is num) && z == null) {
       return CssScale._create_1(x, y);
@@ -5392,28 +3656,16 @@
   static CssScale _create_2(x, y, z) =>
       JS('CssScale', 'new CSSScale(#,#,#)', x, y, z);
 
-  @DomName('CSSScale.x')
-  @DocsEditable()
-  @Experimental() // untriaged
   num x;
 
-  @DomName('CSSScale.y')
-  @DocsEditable()
-  @Experimental() // untriaged
   num y;
 
-  @DomName('CSSScale.z')
-  @DocsEditable()
-  @Experimental() // untriaged
   num z;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSSkew')
-@Experimental() // untriaged
 @Native("CSSSkew")
 class CssSkew extends CssTransformComponent {
   // To suppress missing implicit constructor warnings.
@@ -5421,21 +3673,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSSkew.CSSSkew')
-  @DocsEditable()
   factory CssSkew(CssNumericValue ax, CssNumericValue ay) {
     return CssSkew._create_1(ax, ay);
   }
   static CssSkew _create_1(ax, ay) => JS('CssSkew', 'new CSSSkew(#,#)', ax, ay);
 
-  @DomName('CSSSkew.ax')
-  @DocsEditable()
-  @Experimental() // untriaged
   CssNumericValue ax;
 
-  @DomName('CSSSkew.ay')
-  @DocsEditable()
-  @Experimental() // untriaged
   CssNumericValue ay;
 }
 
@@ -5449,7 +3693,6 @@
 // Source of CSS properties:
 //   CSSPropertyNames.in
 
-@DomName('CSSStyleDeclaration')
 @Native("CSSStyleDeclaration,MSStyleCSSProperties,CSS2Properties")
 class CssStyleDeclaration extends Interceptor with CssStyleDeclarationBase {
   factory CssStyleDeclaration() => new CssStyleDeclaration.css('');
@@ -5491,7 +3734,6 @@
     return JS('bool', '# in #', propertyName, this);
   }
 
-  @DomName('CSSStyleDeclaration.setProperty')
   void setProperty(String propertyName, String value, [String priority]) {
     return _setPropertyHelper(
         _browserPropertyName(propertyName), value, priority);
@@ -5552,38 +3794,21 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSStyleDeclaration.cssFloat')
-  @DocsEditable()
-  @Experimental() // untriaged
   String cssFloat;
 
-  @DomName('CSSStyleDeclaration.cssText')
-  @DocsEditable()
   String cssText;
 
-  @DomName('CSSStyleDeclaration.length')
-  @DocsEditable()
   final int length;
 
-  @DomName('CSSStyleDeclaration.parentRule')
-  @DocsEditable()
   final CssRule parentRule;
 
-  @DomName('CSSStyleDeclaration.getPropertyPriority')
-  @DocsEditable()
   String getPropertyPriority(String property) native;
 
   @JSName('getPropertyValue')
-  @DomName('CSSStyleDeclaration.getPropertyValue')
-  @DocsEditable()
   String _getPropertyValue(String property) native;
 
-  @DomName('CSSStyleDeclaration.item')
-  @DocsEditable()
   String item(int index) native;
 
-  @DomName('CSSStyleDeclaration.removeProperty')
-  @DocsEditable()
   String removeProperty(String property) native;
 
   /** Gets the value of "background" */
@@ -9914,8 +8139,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.
 
-@DocsEditable()
-@DomName('CSSStyleRule')
 @Native("CSSStyleRule")
 class CssStyleRule extends CssRule {
   // To suppress missing implicit constructor warnings.
@@ -9923,20 +8146,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSStyleRule.selectorText')
-  @DocsEditable()
   String selectorText;
 
-  @DomName('CSSStyleRule.style')
-  @DocsEditable()
   final CssStyleDeclaration style;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSStyleSheet')
 @Native("CSSStyleSheet")
 class CssStyleSheet extends StyleSheet {
   // To suppress missing implicit constructor warnings.
@@ -9944,48 +8161,28 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSStyleSheet.cssRules')
-  @DocsEditable()
   @Returns('_CssRuleList|Null')
   @Creates('_CssRuleList')
   final List<CssRule> cssRules;
 
-  @DomName('CSSStyleSheet.ownerRule')
-  @DocsEditable()
   final CssRule ownerRule;
 
-  @DomName('CSSStyleSheet.rules')
-  @DocsEditable()
-  @Experimental() // non-standard
   @Returns('_CssRuleList|Null')
   @Creates('_CssRuleList')
   final List<CssRule> rules;
 
-  @DomName('CSSStyleSheet.addRule')
-  @DocsEditable()
-  @Experimental() // non-standard
   int addRule(String selector, String style, [int index]) native;
 
-  @DomName('CSSStyleSheet.deleteRule')
-  @DocsEditable()
   void deleteRule(int index) native;
 
-  @DomName('CSSStyleSheet.insertRule')
-  @DocsEditable()
   int insertRule(String rule, [int index]) native;
 
-  @DomName('CSSStyleSheet.removeRule')
-  @DocsEditable()
-  @Experimental() // non-standard
   void removeRule(int index) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSStyleValue')
-@Experimental() // untriaged
 @Native("CSSStyleValue")
 class CssStyleValue extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -9993,17 +8190,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSStyleValue.parse')
-  @DocsEditable()
-  @Experimental() // untriaged
   static Object parse(String property, String cssText) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSSupportsRule')
 @Native("CSSSupportsRule")
 class CssSupportsRule extends CssConditionRule {
   // To suppress missing implicit constructor warnings.
@@ -10015,9 +8207,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.
 
-@DocsEditable()
-@DomName('CSSTransformComponent')
-@Experimental() // untriaged
 @Native("CSSTransformComponent")
 class CssTransformComponent extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -10025,18 +8214,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSTransformComponent.is2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool is2D;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSTransformValue')
-@Experimental() // untriaged
 @Native("CSSTransformValue")
 class CssTransformValue extends CssStyleValue {
   // To suppress missing implicit constructor warnings.
@@ -10044,8 +8227,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSTransformValue.CSSTransformValue')
-  @DocsEditable()
   factory CssTransformValue([List<CssTransformComponent> transformComponents]) {
     if (transformComponents == null) {
       return CssTransformValue._create_1();
@@ -10060,33 +8241,18 @@
   static CssTransformValue _create_2(transformComponents) =>
       JS('CssTransformValue', 'new CSSTransformValue(#)', transformComponents);
 
-  @DomName('CSSTransformValue.is2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool is2D;
 
-  @DomName('CSSTransformValue.length')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int length;
 
-  @DomName('CSSTransformValue.componentAtIndex')
-  @DocsEditable()
-  @Experimental() // untriaged
   CssTransformComponent componentAtIndex(int index) native;
 
-  @DomName('CSSTransformValue.toMatrix')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix toMatrix() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSTranslation')
-@Experimental() // untriaged
 @Native("CSSTranslation")
 class CssTranslation extends CssTransformComponent {
   // To suppress missing implicit constructor warnings.
@@ -10094,8 +8260,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSTranslation.CSSTranslation')
-  @DocsEditable()
   factory CssTranslation(CssNumericValue x, CssNumericValue y,
       [CssNumericValue z]) {
     if ((y is CssNumericValue) && (x is CssNumericValue) && z == null) {
@@ -10113,28 +8277,16 @@
   static CssTranslation _create_2(x, y, z) =>
       JS('CssTranslation', 'new CSSTranslation(#,#,#)', x, y, z);
 
-  @DomName('CSSTranslation.x')
-  @DocsEditable()
-  @Experimental() // untriaged
   CssNumericValue x;
 
-  @DomName('CSSTranslation.y')
-  @DocsEditable()
-  @Experimental() // untriaged
   CssNumericValue y;
 
-  @DomName('CSSTranslation.z')
-  @DocsEditable()
-  @Experimental() // untriaged
   CssNumericValue z;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSUnitValue')
-@Experimental() // untriaged
 @Native("CSSUnitValue")
 class CssUnitValue extends CssNumericValue {
   // To suppress missing implicit constructor warnings.
@@ -10142,36 +8294,22 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSUnitValue.CSSUnitValue')
-  @DocsEditable()
   factory CssUnitValue(num value, String unit) {
     return CssUnitValue._create_1(value, unit);
   }
   static CssUnitValue _create_1(value, unit) =>
       JS('CssUnitValue', 'new CSSUnitValue(#,#)', value, unit);
 
-  @DomName('CSSUnitValue.type')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String type;
 
-  @DomName('CSSUnitValue.unit')
-  @DocsEditable()
-  @Experimental() // untriaged
   String unit;
 
-  @DomName('CSSUnitValue.value')
-  @DocsEditable()
-  @Experimental() // untriaged
   num value;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSUnparsedValue')
-@Experimental() // untriaged
 @Native("CSSUnparsedValue")
 class CssUnparsedValue extends CssStyleValue {
   // To suppress missing implicit constructor warnings.
@@ -10179,23 +8317,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSUnparsedValue.length')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int length;
 
-  @DomName('CSSUnparsedValue.fragmentAtIndex')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object fragmentAtIndex(int index) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSVariableReferenceValue')
-@Experimental() // untriaged
 @Native("CSSVariableReferenceValue")
 class CssVariableReferenceValue extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -10203,23 +8332,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSVariableReferenceValue.fallback')
-  @DocsEditable()
-  @Experimental() // untriaged
   final CssUnparsedValue fallback;
 
-  @DomName('CSSVariableReferenceValue.variable')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String variable;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSViewportRule')
-@Experimental() // untriaged
 @Native("CSSViewportRule")
 class CssViewportRule extends CssRule {
   // To suppress missing implicit constructor warnings.
@@ -10227,18 +8347,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSViewportRule.style')
-  @DocsEditable()
-  @Experimental() // untriaged
   final CssStyleDeclaration style;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('CSSURLImageValue')
-@Experimental() // untriaged
 @Native("CSSURLImageValue")
 class CssurlImageValue extends CssImageValue {
   // To suppress missing implicit constructor warnings.
@@ -10246,17 +8360,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSURLImageValue.CSSURLImageValue')
-  @DocsEditable()
   factory CssurlImageValue(String url) {
     return CssurlImageValue._create_1(url);
   }
   static CssurlImageValue _create_1(url) =>
       JS('CssurlImageValue', 'new CSSURLImageValue(#)', url);
 
-  @DomName('CSSURLImageValue.url')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String url;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10265,7 +8374,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('CustomElementConstructor')
 // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/index.html#dfn-custom-element-constructor-generation
 @deprecated // experimental
 typedef void CustomElementConstructor();
@@ -10273,9 +8381,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.
 
-@DocsEditable()
-@DomName('CustomElementRegistry')
-@Experimental() // untriaged
 @Native("CustomElementRegistry")
 class CustomElementRegistry extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -10283,9 +8388,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CustomElementRegistry.define')
-  @DocsEditable()
-  @Experimental() // untriaged
   void define(String name, Object constructor, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -10297,24 +8399,12 @@
   }
 
   @JSName('define')
-  @DomName('CustomElementRegistry.define')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _define_1(name, constructor, options) native;
   @JSName('define')
-  @DomName('CustomElementRegistry.define')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _define_2(name, constructor) native;
 
-  @DomName('CustomElementRegistry.get')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object get(String name) native;
 
-  @DomName('CustomElementRegistry.whenDefined')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future whenDefined(String name) =>
       promiseToFuture(JS("", "#.whenDefined(#)", this, name));
 }
@@ -10324,7 +8414,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('CustomEvent')
 @Native("CustomEvent")
 class CustomEvent extends Event {
   @Creates('Null') // Set from Dart code; does not instantiate a native type.
@@ -10352,7 +8441,6 @@
     return e;
   }
 
-  @DomName('CustomEvent.detail')
   get detail {
     if (_dartDetail != null) {
       return _dartDetail;
@@ -10360,8 +8448,6 @@
     return _detail;
   }
 
-  @DomName('CustomEvent.CustomEvent')
-  @DocsEditable()
   factory CustomEvent._(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -10374,21 +8460,13 @@
   static CustomEvent _create_2(type) =>
       JS('CustomEvent', 'new CustomEvent(#)', type);
 
-  @DomName('CustomEvent._detail')
-  @DocsEditable()
-  @Experimental() // untriaged
   dynamic get _detail =>
       convertNativeToDart_SerializedScriptValue(this._get__detail);
   @JSName('detail')
-  @DomName('CustomEvent._detail')
-  @DocsEditable()
-  @Experimental() // untriaged
   @Creates('Null')
   final dynamic _get__detail;
 
   @JSName('initCustomEvent')
-  @DomName('CustomEvent.initCustomEvent')
-  @DocsEditable()
   void _initCustomEvent(String type,
       [bool bubbles, bool cancelable, Object detail]) native;
 }
@@ -10396,8 +8474,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.
 
-@DocsEditable()
-@DomName('HTMLDListElement')
 @Native("HTMLDListElement")
 class DListElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -10405,8 +8481,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLDListElement.HTMLDListElement')
-  @DocsEditable()
   factory DListElement() => JS(
       'returns:DListElement;creates:DListElement;new:true',
       '#.createElement(#)',
@@ -10423,9 +8497,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.
 
-@DocsEditable()
-@DomName('HTMLDataElement')
-@Experimental() // untriaged
 @Native("HTMLDataElement")
 class DataElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -10439,17 +8510,12 @@
    */
   DataElement.created() : super.created();
 
-  @DomName('HTMLDataElement.value')
-  @DocsEditable()
-  @Experimental() // untriaged
   String value;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLDataListElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -10461,8 +8527,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLDataListElement.HTMLDataListElement')
-  @DocsEditable()
   factory DataListElement() => document.createElement("datalist");
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
@@ -10474,8 +8538,6 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('datalist');
 
-  @DomName('HTMLDataListElement.options')
-  @DocsEditable()
   @Returns('HtmlCollection|Null')
   @Creates('HtmlCollection')
   final List<Node> options;
@@ -10484,9 +8546,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.
 
-@DocsEditable()
-@DomName('DataTransfer')
-@Experimental() // untriaged
 @Native("DataTransfer")
 class DataTransfer extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -10494,68 +8553,35 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DataTransfer.DataTransfer')
-  @DocsEditable()
   factory DataTransfer() {
     return DataTransfer._create_1();
   }
   static DataTransfer _create_1() => JS('DataTransfer', 'new DataTransfer()');
 
-  @DomName('DataTransfer.dropEffect')
-  @DocsEditable()
-  @Experimental() // untriaged
   String dropEffect;
 
-  @DomName('DataTransfer.effectAllowed')
-  @DocsEditable()
-  @Experimental() // untriaged
   String effectAllowed;
 
-  @DomName('DataTransfer.files')
-  @DocsEditable()
-  @Experimental() // untriaged
   @Returns('FileList|Null')
   @Creates('FileList')
   final List<File> files;
 
-  @DomName('DataTransfer.items')
-  @DocsEditable()
-  @Experimental() // untriaged
   final DataTransferItemList items;
 
-  @DomName('DataTransfer.types')
-  @DocsEditable()
-  @Experimental() // untriaged
   final List<String> types;
 
-  @DomName('DataTransfer.clearData')
-  @DocsEditable()
-  @Experimental() // untriaged
   void clearData([String format]) native;
 
-  @DomName('DataTransfer.getData')
-  @DocsEditable()
-  @Experimental() // untriaged
   String getData(String format) native;
 
-  @DomName('DataTransfer.setData')
-  @DocsEditable()
-  @Experimental() // untriaged
   void setData(String format, String data) native;
 
-  @DomName('DataTransfer.setDragImage')
-  @DocsEditable()
-  @Experimental() // untriaged
   void setDragImage(Element image, int x, int y) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('DataTransferItem')
-// http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html#the-datatransferitem-interface
-@Experimental()
 @Native("DataTransferItem")
 class DataTransferItem extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -10563,34 +8589,21 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DataTransferItem.kind')
-  @DocsEditable()
   final String kind;
 
-  @DomName('DataTransferItem.type')
-  @DocsEditable()
   final String type;
 
-  @DomName('DataTransferItem.getAsFile')
-  @DocsEditable()
   File getAsFile() native;
 
   @JSName('webkitGetAsEntry')
-  @DomName('DataTransferItem.webkitGetAsEntry')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
   Entry getAsEntry() native;
 }
 // Copyright (c) 2013, 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.
 
-@DocsEditable()
-@DomName('DataTransferItemList')
-// http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#the-datatransferitemlist-interface
-@Experimental()
 @Native("DataTransferItemList")
 class DataTransferItemList extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -10598,35 +8611,20 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DataTransferItemList.length')
-  @DocsEditable()
   final int length;
 
-  @DomName('DataTransferItemList.add')
-  @DocsEditable()
   DataTransferItem add(data_OR_file, [String type]) native;
 
   @JSName('add')
-  @DomName('DataTransferItemList.add')
-  @DocsEditable()
   DataTransferItem addData(String data, String type) native;
 
   @JSName('add')
-  @DomName('DataTransferItemList.add')
-  @DocsEditable()
   DataTransferItem addFile(File file) native;
 
-  @DomName('DataTransferItemList.clear')
-  @DocsEditable()
   void clear() native;
 
-  @DomName('DataTransferItemList.item')
-  @DocsEditable()
   DataTransferItem item(int index) native;
 
-  @DomName('DataTransferItemList.remove')
-  @DocsEditable()
-  @Experimental() // untriaged
   void remove(int index) native;
 
   DataTransferItem operator [](int index) {
@@ -10639,9 +8637,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('DatabaseCallback')
-// http://www.w3.org/TR/webdatabase/#databasecallback
-@Experimental() // deprecated
 typedef void DatabaseCallback(SqlDatabase database);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -10649,8 +8644,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('DecodeErrorCallback')
-@Experimental() // untriaged
 typedef void DecodeErrorCallback(DomException error);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -10658,16 +8651,11 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('DecodeSuccessCallback')
-@Experimental() // untriaged
 typedef void DecodeSuccessCallback(AudioBuffer decodedData);
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('DedicatedWorkerGlobalScope')
-@Experimental() // untriaged
 @Native("DedicatedWorkerGlobalScope")
 class DedicatedWorkerGlobalScope extends WorkerGlobalScope {
   // To suppress missing implicit constructor warnings.
@@ -10681,30 +8669,15 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('DedicatedWorkerGlobalScope.messageEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MessageEvent> messageEvent =
       const EventStreamProvider<MessageEvent>('message');
 
-  @DomName('DedicatedWorkerGlobalScope.PERSISTENT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int PERSISTENT = 1;
 
-  @DomName('DedicatedWorkerGlobalScope.TEMPORARY')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int TEMPORARY = 0;
 
-  @DomName('DedicatedWorkerGlobalScope.close')
-  @DocsEditable()
-  @Experimental() // untriaged
   void close() native;
 
-  @DomName('DedicatedWorkerGlobalScope.postMessage')
-  @DocsEditable()
-  @Experimental() // untriaged
   void postMessage(/*any*/ message, [List<Object> transfer]) {
     if (transfer != null) {
       var message_1 = convertDartToNative_SerializedScriptValue(message);
@@ -10717,69 +8690,41 @@
   }
 
   @JSName('postMessage')
-  @DomName('DedicatedWorkerGlobalScope.postMessage')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _postMessage_1(message, List<Object> transfer) native;
   @JSName('postMessage')
-  @DomName('DedicatedWorkerGlobalScope.postMessage')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _postMessage_2(message) native;
 
   @JSName('webkitRequestFileSystem')
-  @DomName('DedicatedWorkerGlobalScope.webkitRequestFileSystem')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  @Experimental() // untriaged
   void _webkitRequestFileSystem(int type, int size,
       [_FileSystemCallback successCallback,
       _ErrorCallback errorCallback]) native;
 
   @JSName('webkitRequestFileSystemSync')
-  @DomName('DedicatedWorkerGlobalScope.webkitRequestFileSystemSync')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  @Experimental() // untriaged
   _DOMFileSystemSync requestFileSystemSync(int type, int size) native;
 
   @JSName('webkitResolveLocalFileSystemSyncURL')
-  @DomName('DedicatedWorkerGlobalScope.webkitResolveLocalFileSystemSyncURL')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  @Experimental() // untriaged
   _EntrySync resolveLocalFileSystemSyncUrl(String url) native;
 
   @JSName('webkitResolveLocalFileSystemURL')
-  @DomName('DedicatedWorkerGlobalScope.webkitResolveLocalFileSystemURL')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  @Experimental() // untriaged
   void _webkitResolveLocalFileSystemUrl(
       String url, _EntryCallback successCallback,
       [_ErrorCallback errorCallback]) native;
 
   /// Stream of `message` events handled by this [DedicatedWorkerGlobalScope].
-  @DomName('DedicatedWorkerGlobalScope.onmessage')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('DeprecatedStorageInfo')
-@Experimental() // untriaged
 @Native("DeprecatedStorageInfo")
 class DeprecatedStorageInfo extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -10787,26 +8732,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DeprecatedStorageInfo.PERSISTENT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int PERSISTENT = 1;
 
-  @DomName('DeprecatedStorageInfo.TEMPORARY')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int TEMPORARY = 0;
 
-  @DomName('DeprecatedStorageInfo.queryUsageAndQuota')
-  @DocsEditable()
-  @Experimental() // untriaged
   void queryUsageAndQuota(int storageType,
       [StorageUsageCallback usageCallback,
       StorageErrorCallback errorCallback]) native;
 
-  @DomName('DeprecatedStorageInfo.requestQuota')
-  @DocsEditable()
-  @Experimental() // untriaged
   void requestQuota(int storageType, int newQuotaInBytes,
       [StorageQuotaCallback quotaCallback,
       StorageErrorCallback errorCallback]) native;
@@ -10815,9 +8748,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.
 
-@DocsEditable()
-@DomName('DeprecatedStorageQuota')
-@Experimental() // untriaged
 @Native("DeprecatedStorageQuota")
 class DeprecatedStorageQuota extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -10825,15 +8755,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DeprecatedStorageQuota.queryUsageAndQuota')
-  @DocsEditable()
-  @Experimental() // untriaged
   void queryUsageAndQuota(StorageUsageCallback usageCallback,
       [StorageErrorCallback errorCallback]) native;
 
-  @DomName('DeprecatedStorageQuota.requestQuota')
-  @DocsEditable()
-  @Experimental() // untriaged
   void requestQuota(int newQuotaInBytes,
       [StorageQuotaCallback quotaCallback,
       StorageErrorCallback errorCallback]) native;
@@ -10842,9 +8766,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.
 
-@DocsEditable()
-@DomName('DeprecationReport')
-@Experimental() // untriaged
 @Native("DeprecationReport")
 class DeprecationReport extends ReportBody {
   // To suppress missing implicit constructor warnings.
@@ -10852,30 +8773,18 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DeprecationReport.lineNumber')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int lineNumber;
 
-  @DomName('DeprecationReport.message')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String message;
 
-  @DomName('DeprecationReport.sourceFile')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String sourceFile;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLDetailsElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.SAFARI)
-@Experimental()
 @Native("HTMLDetailsElement")
 class DetailsElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -10883,8 +8792,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLDetailsElement.HTMLDetailsElement')
-  @DocsEditable()
   factory DetailsElement() => document.createElement("details");
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
@@ -10896,17 +8803,12 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('details');
 
-  @DomName('HTMLDetailsElement.open')
-  @DocsEditable()
   bool open;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('DetectedBarcode')
-@Experimental() // untriaged
 @Native("DetectedBarcode")
 class DetectedBarcode extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -10914,36 +8816,22 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DetectedBarcode.DetectedBarcode')
-  @DocsEditable()
   factory DetectedBarcode() {
     return DetectedBarcode._create_1();
   }
   static DetectedBarcode _create_1() =>
       JS('DetectedBarcode', 'new DetectedBarcode()');
 
-  @DomName('DetectedBarcode.boundingBox')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Rectangle boundingBox;
 
-  @DomName('DetectedBarcode.cornerPoints')
-  @DocsEditable()
-  @Experimental() // untriaged
   final List cornerPoints;
 
-  @DomName('DetectedBarcode.rawValue')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String rawValue;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('DetectedFace')
-@Experimental() // untriaged
 @Native("DetectedFace")
 class DetectedFace extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -10951,30 +8839,19 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DetectedFace.DetectedFace')
-  @DocsEditable()
   factory DetectedFace() {
     return DetectedFace._create_1();
   }
   static DetectedFace _create_1() => JS('DetectedFace', 'new DetectedFace()');
 
-  @DomName('DetectedFace.boundingBox')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Rectangle boundingBox;
 
-  @DomName('DetectedFace.landmarks')
-  @DocsEditable()
-  @Experimental() // untriaged
   final List landmarks;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('DetectedText')
-@Experimental() // untriaged
 @Native("DetectedText")
 class DetectedText extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -10982,36 +8859,21 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DetectedText.DetectedText')
-  @DocsEditable()
   factory DetectedText() {
     return DetectedText._create_1();
   }
   static DetectedText _create_1() => JS('DetectedText', 'new DetectedText()');
 
-  @DomName('DetectedText.boundingBox')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Rectangle boundingBox;
 
-  @DomName('DetectedText.cornerPoints')
-  @DocsEditable()
-  @Experimental() // untriaged
   final List cornerPoints;
 
-  @DomName('DetectedText.rawValue')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String rawValue;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('DeviceAcceleration')
-// http://dev.w3.org/geo/api/spec-source-orientation.html#devicemotion
-@Experimental()
 @Native("DeviceAcceleration")
 class DeviceAcceleration extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -11019,26 +8881,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DeviceAcceleration.x')
-  @DocsEditable()
   final num x;
 
-  @DomName('DeviceAcceleration.y')
-  @DocsEditable()
   final num y;
 
-  @DomName('DeviceAcceleration.z')
-  @DocsEditable()
   final num z;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('DeviceMotionEvent')
-// http://dev.w3.org/geo/api/spec-source-orientation.html#devicemotion
-@Experimental()
 @Native("DeviceMotionEvent")
 class DeviceMotionEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -11046,8 +8898,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DeviceMotionEvent.DeviceMotionEvent')
-  @DocsEditable()
   factory DeviceMotionEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -11060,30 +8910,18 @@
   static DeviceMotionEvent _create_2(type) =>
       JS('DeviceMotionEvent', 'new DeviceMotionEvent(#)', type);
 
-  @DomName('DeviceMotionEvent.acceleration')
-  @DocsEditable()
   final DeviceAcceleration acceleration;
 
-  @DomName('DeviceMotionEvent.accelerationIncludingGravity')
-  @DocsEditable()
   final DeviceAcceleration accelerationIncludingGravity;
 
-  @DomName('DeviceMotionEvent.interval')
-  @DocsEditable()
   final num interval;
 
-  @DomName('DeviceMotionEvent.rotationRate')
-  @DocsEditable()
   final DeviceRotationRate rotationRate;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('DeviceOrientationEvent')
-// http://dev.w3.org/geo/api/spec-source-orientation.html#devicemotion
-@Experimental()
 @Native("DeviceOrientationEvent")
 class DeviceOrientationEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -11091,8 +8929,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DeviceOrientationEvent.DeviceOrientationEvent')
-  @DocsEditable()
   factory DeviceOrientationEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -11108,30 +8944,18 @@
   static DeviceOrientationEvent _create_2(type) =>
       JS('DeviceOrientationEvent', 'new DeviceOrientationEvent(#)', type);
 
-  @DomName('DeviceOrientationEvent.absolute')
-  @DocsEditable()
   final bool absolute;
 
-  @DomName('DeviceOrientationEvent.alpha')
-  @DocsEditable()
   final num alpha;
 
-  @DomName('DeviceOrientationEvent.beta')
-  @DocsEditable()
   final num beta;
 
-  @DomName('DeviceOrientationEvent.gamma')
-  @DocsEditable()
   final num gamma;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('DeviceRotationRate')
-// http://dev.w3.org/geo/api/spec-source-orientation.html#devicemotion
-@Experimental()
 @Native("DeviceRotationRate")
 class DeviceRotationRate extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -11139,24 +8963,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DeviceRotationRate.alpha')
-  @DocsEditable()
   final num alpha;
 
-  @DomName('DeviceRotationRate.beta')
-  @DocsEditable()
   final num beta;
 
-  @DomName('DeviceRotationRate.gamma')
-  @DocsEditable()
   final num gamma;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLDialogElement')
 @Unstable()
 @Native("HTMLDialogElement")
 class DialogElement extends HtmlElement {
@@ -11171,34 +8987,20 @@
    */
   DialogElement.created() : super.created();
 
-  @DomName('HTMLDialogElement.open')
-  @DocsEditable()
   bool open;
 
-  @DomName('HTMLDialogElement.returnValue')
-  @DocsEditable()
-  @Experimental() // untriaged
   String returnValue;
 
-  @DomName('HTMLDialogElement.close')
-  @DocsEditable()
   void close([String returnValue]) native;
 
-  @DomName('HTMLDialogElement.show')
-  @DocsEditable()
   void show() native;
 
-  @DomName('HTMLDialogElement.showModal')
-  @DocsEditable()
   void showModal() native;
 }
 // Copyright (c) 2013, 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.
 
-@DomName('DirectoryEntry')
-// http://www.w3.org/TR/file-system-api/#the-directoryentry-interface
-@Experimental()
 @Native("DirectoryEntry")
 class DirectoryEntry extends Entry {
   /**
@@ -11250,12 +9052,8 @@
   }
 
   @JSName('createReader')
-  @DomName('DirectoryEntry.createReader')
-  @DocsEditable()
   DirectoryReader _createReader() native;
 
-  @DomName('DirectoryEntry.getDirectory')
-  @DocsEditable()
   void __getDirectory(String path,
       [Map options,
       _EntryCallback successCallback,
@@ -11280,26 +9078,16 @@
   }
 
   @JSName('getDirectory')
-  @DomName('DirectoryEntry.getDirectory')
-  @DocsEditable()
   void __getDirectory_1(path, options, _EntryCallback successCallback,
       _ErrorCallback errorCallback) native;
   @JSName('getDirectory')
-  @DomName('DirectoryEntry.getDirectory')
-  @DocsEditable()
   void __getDirectory_2(path, options, _EntryCallback successCallback) native;
   @JSName('getDirectory')
-  @DomName('DirectoryEntry.getDirectory')
-  @DocsEditable()
   void __getDirectory_3(path, options) native;
   @JSName('getDirectory')
-  @DomName('DirectoryEntry.getDirectory')
-  @DocsEditable()
   void __getDirectory_4(path) native;
 
   @JSName('getDirectory')
-  @DomName('DirectoryEntry.getDirectory')
-  @DocsEditable()
   Future<Entry> _getDirectory(String path, {Map options}) {
     var completer = new Completer<Entry>();
     __getDirectory(path, options, (value) {
@@ -11310,8 +9098,6 @@
     return completer.future;
   }
 
-  @DomName('DirectoryEntry.getFile')
-  @DocsEditable()
   void __getFile(String path,
       [Map options,
       _EntryCallback successCallback,
@@ -11336,26 +9122,16 @@
   }
 
   @JSName('getFile')
-  @DomName('DirectoryEntry.getFile')
-  @DocsEditable()
   void __getFile_1(path, options, _EntryCallback successCallback,
       _ErrorCallback errorCallback) native;
   @JSName('getFile')
-  @DomName('DirectoryEntry.getFile')
-  @DocsEditable()
   void __getFile_2(path, options, _EntryCallback successCallback) native;
   @JSName('getFile')
-  @DomName('DirectoryEntry.getFile')
-  @DocsEditable()
   void __getFile_3(path, options) native;
   @JSName('getFile')
-  @DomName('DirectoryEntry.getFile')
-  @DocsEditable()
   void __getFile_4(path) native;
 
   @JSName('getFile')
-  @DomName('DirectoryEntry.getFile')
-  @DocsEditable()
   Future<Entry> _getFile(String path, {Map options}) {
     var completer = new Completer<Entry>();
     __getFile(path, options, (value) {
@@ -11368,14 +9144,10 @@
   }
 
   @JSName('removeRecursively')
-  @DomName('DirectoryEntry.removeRecursively')
-  @DocsEditable()
   void _removeRecursively(VoidCallback successCallback,
       [_ErrorCallback errorCallback]) native;
 
   @JSName('removeRecursively')
-  @DomName('DirectoryEntry.removeRecursively')
-  @DocsEditable()
   Future removeRecursively() {
     var completer = new Completer();
     _removeRecursively(() {
@@ -11390,9 +9162,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.
 
-@DomName('DirectoryReader')
-// http://www.w3.org/TR/file-system-api/#the-directoryreader-interface
-@Experimental()
 @Native("DirectoryReader")
 class DirectoryReader extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -11401,13 +9170,9 @@
   }
 
   @JSName('readEntries')
-  @DomName('DirectoryReader.readEntries')
-  @DocsEditable()
   void _readEntries(_EntriesCallback successCallback,
       [_ErrorCallback errorCallback]) native;
 
-  @DomName('DirectoryReader.readEntries')
-  @DocsEditable()
   Future<List<Entry>> readEntries() {
     var completer = new Completer<List<Entry>>();
     _readEntries((value) {
@@ -11423,7 +9188,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.
 
-@DocsEditable()
 /**
  * A generic container for content on an HTML page;
  * corresponds to the &lt;div&gt; tag.
@@ -11446,7 +9210,6 @@
  * * [Block-level element](http://www.w3.org/TR/CSS2/visuren.html#block-boxes) from W3C.
  * * [Inline-level element](http://www.w3.org/TR/CSS2/visuren.html#inline-boxes) from W3C.
  */
-@DomName('HTMLDivElement')
 @Native("HTMLDivElement")
 class DivElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -11454,8 +9217,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLDivElement.HTMLDivElement')
-  @DocsEditable()
   factory DivElement() => JS('returns:DivElement;creates:DivElement;new:true',
       '#.createElement(#)', document, "div");
   /**
@@ -11469,7 +9230,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.
 
-@DocsEditable()
 /**
  * The base class for all documents.
  *
@@ -11479,7 +9239,6 @@
  * If you aren't comfortable with DOM concepts, see the Dart tutorial
  * [Target 2: Connect Dart & HTML](http://www.dartlang.org/docs/tutorials/connect-dart-html/).
  */
-@DomName('Document')
 @Native("Document")
 class Document extends Node {
   // To suppress missing implicit constructor warnings.
@@ -11487,15 +9246,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Document.pointerlockchangeEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> pointerLockChangeEvent =
       const EventStreamProvider<Event>('pointerlockchange');
 
-  @DomName('Document.pointerlockerrorEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> pointerLockErrorEvent =
       const EventStreamProvider<Event>('pointerlockerror');
 
@@ -11505,8 +9258,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Document.readystatechangeEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> readyStateChangeEvent =
       const EventStreamProvider<Event>('readystatechange');
 
@@ -11516,10 +9267,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Document.securitypolicyviolationEvent')
-  @DocsEditable()
-  // https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html#widl-Document-onsecuritypolicyviolation
-  @Experimental()
   static const EventStreamProvider<SecurityPolicyViolationEvent>
       securityPolicyViolationEvent =
       const EventStreamProvider<SecurityPolicyViolationEvent>(
@@ -11531,229 +9278,121 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Document.selectionchangeEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> selectionChangeEvent =
       const EventStreamProvider<Event>('selectionchange');
 
-  @DomName('Document.Document')
-  @DocsEditable()
   factory Document() {
     return Document._create_1();
   }
   static Document _create_1() => JS('Document', 'new Document()');
 
-  @DomName('Document.addressSpace')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String addressSpace;
 
   @JSName('body')
-  @DomName('Document.body')
-  @DocsEditable()
   HtmlElement _body;
 
-  @DomName('Document.contentType')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String contentType;
 
-  @DomName('Document.cookie')
-  @DocsEditable()
   String cookie;
 
-  @DomName('Document.currentScript')
-  @DocsEditable()
-  @Experimental() // untriaged
   final ScriptElement currentScript;
 
-  @DomName('Document.window')
-  @DocsEditable()
-  @Experimental() // untriaged
   WindowBase get window => _convertNativeToDart_Window(this._get_window);
   @JSName('defaultView')
-  @DomName('Document.window')
-  @DocsEditable()
-  @Experimental() // untriaged
   @Creates('Window|=Object')
   @Returns('Window|=Object')
   @Creates('Window|=Object|Null')
   @Returns('Window|=Object|Null')
   final dynamic _get_window;
 
-  @DomName('Document.documentElement')
-  @DocsEditable()
   final Element documentElement;
 
-  @DomName('Document.domain')
-  @DocsEditable()
   final String domain;
 
-  @DomName('Document.fullscreenEnabled')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool fullscreenEnabled;
 
   @JSName('head')
-  @DomName('Document.head')
-  @DocsEditable()
   final HeadElement _head;
 
-  @DomName('Document.hidden')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool hidden;
 
-  @DomName('Document.implementation')
-  @DocsEditable()
   final DomImplementation implementation;
 
   @JSName('lastModified')
-  @DomName('Document.lastModified')
-  @DocsEditable()
   final String _lastModified;
 
-  @DomName('Document.origin')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String origin;
 
   @JSName('preferredStylesheetSet')
-  @DomName('Document.preferredStylesheetSet')
-  @DocsEditable()
   final String _preferredStylesheetSet;
 
-  @DomName('Document.readyState')
-  @DocsEditable()
   final String readyState;
 
   @JSName('referrer')
-  @DomName('Document.referrer')
-  @DocsEditable()
   final String _referrer;
 
-  @DomName('Document.rootElement')
-  @DocsEditable()
-  @Experimental() // untriaged
   final SvgSvgElement rootElement;
 
-  @DomName('Document.rootScroller')
-  @DocsEditable()
-  @Experimental() // untriaged
   Element rootScroller;
 
-  @DomName('Document.scrollingElement')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Element scrollingElement;
 
   @JSName('selectedStylesheetSet')
-  @DomName('Document.selectedStylesheetSet')
-  @DocsEditable()
   String _selectedStylesheetSet;
 
-  @DomName('Document.suborigin')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String suborigin;
 
-  @DomName('Document.timeline')
-  @DocsEditable()
-  @Experimental() // untriaged
   final DocumentTimeline timeline;
 
   @JSName('title')
-  @DomName('Document.title')
-  @DocsEditable()
   String _title;
 
   @JSName('visibilityState')
-  @DomName('Document.visibilityState')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String _visibilityState;
 
   @JSName('webkitFullscreenElement')
-  @DomName('Document.webkitFullscreenElement')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#dom-document-fullscreenelement
   final Element _webkitFullscreenElement;
 
   @JSName('webkitFullscreenEnabled')
-  @DomName('Document.webkitFullscreenEnabled')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#dom-document-fullscreenenabled
   final bool _webkitFullscreenEnabled;
 
   @JSName('webkitHidden')
-  @DomName('Document.webkitHidden')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  // https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/PageVisibility/Overview.html#document
   final bool _webkitHidden;
 
   @JSName('webkitVisibilityState')
-  @DomName('Document.webkitVisibilityState')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  // https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/PageVisibility/Overview.html#dom-document-visibilitystate
   final String _webkitVisibilityState;
 
-  @DomName('Document.adoptNode')
-  @DocsEditable()
   Node adoptNode(Node node) native;
 
   @JSName('caretRangeFromPoint')
-  @DomName('Document.caretRangeFromPoint')
-  @DocsEditable()
-  // http://www.w3.org/TR/2009/WD-cssom-view-20090804/#dom-documentview-caretrangefrompoint
-  @Experimental()
   Range _caretRangeFromPoint(int x, int y) native;
 
-  @DomName('Document.createDocumentFragment')
-  @DocsEditable()
   DocumentFragment createDocumentFragment() native;
 
   @JSName('createElement')
-  @DomName('Document.createElement')
-  @DocsEditable()
   Element _createElement(String localName_OR_tagName,
       [options_OR_typeExtension]) native;
 
   @JSName('createElementNS')
-  @DomName('Document.createElementNS')
-  @DocsEditable()
   Element _createElementNS(String namespaceURI, String qualifiedName,
       [options_OR_typeExtension]) native;
 
   @JSName('createEvent')
-  @DomName('Document.createEvent')
-  @DocsEditable()
   Event _createEvent(String eventType) native;
 
-  @DomName('Document.createRange')
-  @DocsEditable()
   Range createRange() native;
 
   @JSName('createTextNode')
-  @DomName('Document.createTextNode')
-  @DocsEditable()
   Text _createTextNode(String data) native;
 
-  @DomName('Document.createTouch')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   Touch _createTouch(Window view, EventTarget target, int identifier, num pageX,
       num pageY, num screenX, num screenY,
       [num radiusX, num radiusY, num rotationAngle, num force]) {
@@ -11783,112 +9422,56 @@
   }
 
   @JSName('createTouch')
-  @DomName('Document.createTouch')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   Touch _createTouch_1(Window view, target, identifier, pageX, pageY, screenX,
       screenY, radiusX, radiusY, rotationAngle, force) native;
   @JSName('createTouch')
-  @DomName('Document.createTouch')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   Touch _createTouch_2(Window view, target, identifier, pageX, pageY, screenX,
       screenY, radiusX, radiusY, rotationAngle) native;
   @JSName('createTouch')
-  @DomName('Document.createTouch')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   Touch _createTouch_3(Window view, target, identifier, pageX, pageY, screenX,
       screenY, radiusX, radiusY) native;
   @JSName('createTouch')
-  @DomName('Document.createTouch')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   Touch _createTouch_4(Window view, target, identifier, pageX, pageY, screenX,
       screenY, radiusX) native;
   @JSName('createTouch')
-  @DomName('Document.createTouch')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   Touch _createTouch_5(
       Window view, target, identifier, pageX, pageY, screenX, screenY) native;
 
   @JSName('createTouchList')
-  @DomName('Document.createTouchList')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   TouchList _createTouchList(Touch touches) native;
 
-  @DomName('Document.execCommand')
-  @DocsEditable()
   bool execCommand(String commandId, [bool showUI, String value]) native;
 
-  @DomName('Document.exitFullscreen')
-  @DocsEditable()
-  @Experimental() // untriaged
   void exitFullscreen() native;
 
-  @DomName('Document.exitPointerLock')
-  @DocsEditable()
-  @Experimental() // untriaged
   void exitPointerLock() native;
 
-  @DomName('Document.getAnimations')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<Animation> getAnimations() native;
 
-  @DomName('Document.getElementsByClassName')
-  @DocsEditable()
   @Creates('NodeList|HtmlCollection')
   @Returns('NodeList|HtmlCollection')
   List<Node> getElementsByClassName(String classNames) native;
 
-  @DomName('Document.getElementsByName')
-  @DocsEditable()
   @Creates('NodeList|HtmlCollection')
   @Returns('NodeList|HtmlCollection')
   List<Node> getElementsByName(String elementName) native;
 
-  @DomName('Document.getElementsByTagName')
-  @DocsEditable()
   @Creates('NodeList|HtmlCollection')
   @Returns('NodeList|HtmlCollection')
   List<Node> getElementsByTagName(String localName) native;
 
-  @DomName('Document.importNode')
-  @DocsEditable()
   Node importNode(Node node, [bool deep]) native;
 
-  @DomName('Document.queryCommandEnabled')
-  @DocsEditable()
   bool queryCommandEnabled(String commandId) native;
 
-  @DomName('Document.queryCommandIndeterm')
-  @DocsEditable()
   bool queryCommandIndeterm(String commandId) native;
 
-  @DomName('Document.queryCommandState')
-  @DocsEditable()
   bool queryCommandState(String commandId) native;
 
-  @DomName('Document.queryCommandSupported')
-  @DocsEditable()
   bool queryCommandSupported(String commandId) native;
 
-  @DomName('Document.queryCommandValue')
-  @DocsEditable()
   String queryCommandValue(String commandId) native;
 
-  @DomName('Document.registerElement')
-  @DocsEditable()
-  @Experimental() // untriaged
   Function registerElement2(String type, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -11898,94 +9481,55 @@
   }
 
   @JSName('registerElement')
-  @DomName('Document.registerElement')
-  @DocsEditable()
-  @Experimental() // untriaged
   Function _registerElement2_1(type, options) native;
   @JSName('registerElement')
-  @DomName('Document.registerElement')
-  @DocsEditable()
-  @Experimental() // untriaged
   Function _registerElement2_2(type) native;
 
   @JSName('webkitExitFullscreen')
-  @DomName('Document.webkitExitFullscreen')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#dom-document-exitfullscreen
   void _webkitExitFullscreen() native;
 
   // From NonElementParentNode
 
-  @DomName('Document.getElementById')
-  @DocsEditable()
   Element getElementById(String elementId) native;
 
   // From DocumentOrShadowRoot
 
-  @DomName('Document.activeElement')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Element activeElement;
 
-  @DomName('Document.fullscreenElement')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Element fullscreenElement;
 
-  @DomName('Document.pointerLockElement')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Element pointerLockElement;
 
   @JSName('styleSheets')
-  @DomName('Document.styleSheets')
-  @DocsEditable()
   @Returns('_StyleSheetList|Null')
   @Creates('_StyleSheetList')
   final List<StyleSheet> _styleSheets;
 
   @JSName('elementFromPoint')
-  @DomName('Document.elementFromPoint')
-  @DocsEditable()
   Element _elementFromPoint(int x, int y) native;
 
-  @DomName('Document.elementsFromPoint')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<Element> elementsFromPoint(int x, int y) native;
 
   // From FontFaceSource
 
-  @DomName('Document.fonts')
-  @DocsEditable()
-  @Experimental() // untriaged
   final FontFaceSet fonts;
 
   // From ParentNode
 
   @JSName('childElementCount')
-  @DomName('Document.childElementCount')
-  @DocsEditable()
   final int _childElementCount;
 
   @JSName('children')
-  @DomName('Document.children')
-  @DocsEditable()
   @Returns('HtmlCollection|Null')
   @Creates('HtmlCollection')
   final List<Node> _children;
 
   @JSName('firstElementChild')
-  @DomName('Document.firstElementChild')
-  @DocsEditable()
   final Element _firstElementChild;
 
   @JSName('lastElementChild')
-  @DomName('Document.lastElementChild')
-  @DocsEditable()
   final Element _lastElementChild;
 
   /**
@@ -12005,400 +9549,215 @@
    * For details about CSS selector syntax, see the
    * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
    */
-  @DomName('Document.querySelector')
-  @DocsEditable()
   Element querySelector(String selectors) native;
 
   @JSName('querySelectorAll')
-  @DomName('Document.querySelectorAll')
-  @DocsEditable()
   @Creates('NodeList')
   @Returns('NodeList')
   List<Node> _querySelectorAll(String selectors) native;
 
   /// Stream of `abort` events handled by this [Document].
-  @DomName('Document.onabort')
-  @DocsEditable()
   Stream<Event> get onAbort => Element.abortEvent.forTarget(this);
 
   /// Stream of `beforecopy` events handled by this [Document].
-  @DomName('Document.onbeforecopy')
-  @DocsEditable()
   Stream<Event> get onBeforeCopy => Element.beforeCopyEvent.forTarget(this);
 
   /// Stream of `beforecut` events handled by this [Document].
-  @DomName('Document.onbeforecut')
-  @DocsEditable()
   Stream<Event> get onBeforeCut => Element.beforeCutEvent.forTarget(this);
 
   /// Stream of `beforepaste` events handled by this [Document].
-  @DomName('Document.onbeforepaste')
-  @DocsEditable()
   Stream<Event> get onBeforePaste => Element.beforePasteEvent.forTarget(this);
 
   /// Stream of `blur` events handled by this [Document].
-  @DomName('Document.onblur')
-  @DocsEditable()
   Stream<Event> get onBlur => Element.blurEvent.forTarget(this);
 
-  @DomName('Document.oncanplay')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onCanPlay => Element.canPlayEvent.forTarget(this);
 
-  @DomName('Document.oncanplaythrough')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onCanPlayThrough =>
       Element.canPlayThroughEvent.forTarget(this);
 
   /// Stream of `change` events handled by this [Document].
-  @DomName('Document.onchange')
-  @DocsEditable()
   Stream<Event> get onChange => Element.changeEvent.forTarget(this);
 
   /// Stream of `click` events handled by this [Document].
-  @DomName('Document.onclick')
-  @DocsEditable()
   Stream<MouseEvent> get onClick => Element.clickEvent.forTarget(this);
 
   /// Stream of `contextmenu` events handled by this [Document].
-  @DomName('Document.oncontextmenu')
-  @DocsEditable()
   Stream<MouseEvent> get onContextMenu =>
       Element.contextMenuEvent.forTarget(this);
 
   /// Stream of `copy` events handled by this [Document].
-  @DomName('Document.oncopy')
-  @DocsEditable()
   Stream<ClipboardEvent> get onCopy => Element.copyEvent.forTarget(this);
 
   /// Stream of `cut` events handled by this [Document].
-  @DomName('Document.oncut')
-  @DocsEditable()
   Stream<ClipboardEvent> get onCut => Element.cutEvent.forTarget(this);
 
   /// Stream of `doubleclick` events handled by this [Document].
-  @DomName('Document.ondblclick')
-  @DocsEditable()
   Stream<Event> get onDoubleClick => Element.doubleClickEvent.forTarget(this);
 
   /// Stream of `drag` events handled by this [Document].
-  @DomName('Document.ondrag')
-  @DocsEditable()
   Stream<MouseEvent> get onDrag => Element.dragEvent.forTarget(this);
 
   /// Stream of `dragend` events handled by this [Document].
-  @DomName('Document.ondragend')
-  @DocsEditable()
   Stream<MouseEvent> get onDragEnd => Element.dragEndEvent.forTarget(this);
 
   /// Stream of `dragenter` events handled by this [Document].
-  @DomName('Document.ondragenter')
-  @DocsEditable()
   Stream<MouseEvent> get onDragEnter => Element.dragEnterEvent.forTarget(this);
 
   /// Stream of `dragleave` events handled by this [Document].
-  @DomName('Document.ondragleave')
-  @DocsEditable()
   Stream<MouseEvent> get onDragLeave => Element.dragLeaveEvent.forTarget(this);
 
   /// Stream of `dragover` events handled by this [Document].
-  @DomName('Document.ondragover')
-  @DocsEditable()
   Stream<MouseEvent> get onDragOver => Element.dragOverEvent.forTarget(this);
 
   /// Stream of `dragstart` events handled by this [Document].
-  @DomName('Document.ondragstart')
-  @DocsEditable()
   Stream<MouseEvent> get onDragStart => Element.dragStartEvent.forTarget(this);
 
   /// Stream of `drop` events handled by this [Document].
-  @DomName('Document.ondrop')
-  @DocsEditable()
   Stream<MouseEvent> get onDrop => Element.dropEvent.forTarget(this);
 
-  @DomName('Document.ondurationchange')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onDurationChange =>
       Element.durationChangeEvent.forTarget(this);
 
-  @DomName('Document.onemptied')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onEmptied => Element.emptiedEvent.forTarget(this);
 
-  @DomName('Document.onended')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onEnded => Element.endedEvent.forTarget(this);
 
   /// Stream of `error` events handled by this [Document].
-  @DomName('Document.onerror')
-  @DocsEditable()
   Stream<Event> get onError => Element.errorEvent.forTarget(this);
 
   /// Stream of `focus` events handled by this [Document].
-  @DomName('Document.onfocus')
-  @DocsEditable()
   Stream<Event> get onFocus => Element.focusEvent.forTarget(this);
 
   /// Stream of `input` events handled by this [Document].
-  @DomName('Document.oninput')
-  @DocsEditable()
   Stream<Event> get onInput => Element.inputEvent.forTarget(this);
 
   /// Stream of `invalid` events handled by this [Document].
-  @DomName('Document.oninvalid')
-  @DocsEditable()
   Stream<Event> get onInvalid => Element.invalidEvent.forTarget(this);
 
   /// Stream of `keydown` events handled by this [Document].
-  @DomName('Document.onkeydown')
-  @DocsEditable()
   Stream<KeyboardEvent> get onKeyDown => Element.keyDownEvent.forTarget(this);
 
   /// Stream of `keypress` events handled by this [Document].
-  @DomName('Document.onkeypress')
-  @DocsEditable()
   Stream<KeyboardEvent> get onKeyPress => Element.keyPressEvent.forTarget(this);
 
   /// Stream of `keyup` events handled by this [Document].
-  @DomName('Document.onkeyup')
-  @DocsEditable()
   Stream<KeyboardEvent> get onKeyUp => Element.keyUpEvent.forTarget(this);
 
   /// Stream of `load` events handled by this [Document].
-  @DomName('Document.onload')
-  @DocsEditable()
   Stream<Event> get onLoad => Element.loadEvent.forTarget(this);
 
-  @DomName('Document.onloadeddata')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onLoadedData => Element.loadedDataEvent.forTarget(this);
 
-  @DomName('Document.onloadedmetadata')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onLoadedMetadata =>
       Element.loadedMetadataEvent.forTarget(this);
 
   /// Stream of `mousedown` events handled by this [Document].
-  @DomName('Document.onmousedown')
-  @DocsEditable()
   Stream<MouseEvent> get onMouseDown => Element.mouseDownEvent.forTarget(this);
 
   /// Stream of `mouseenter` events handled by this [Document].
-  @DomName('Document.onmouseenter')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MouseEvent> get onMouseEnter =>
       Element.mouseEnterEvent.forTarget(this);
 
   /// Stream of `mouseleave` events handled by this [Document].
-  @DomName('Document.onmouseleave')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MouseEvent> get onMouseLeave =>
       Element.mouseLeaveEvent.forTarget(this);
 
   /// Stream of `mousemove` events handled by this [Document].
-  @DomName('Document.onmousemove')
-  @DocsEditable()
   Stream<MouseEvent> get onMouseMove => Element.mouseMoveEvent.forTarget(this);
 
   /// Stream of `mouseout` events handled by this [Document].
-  @DomName('Document.onmouseout')
-  @DocsEditable()
   Stream<MouseEvent> get onMouseOut => Element.mouseOutEvent.forTarget(this);
 
   /// Stream of `mouseover` events handled by this [Document].
-  @DomName('Document.onmouseover')
-  @DocsEditable()
   Stream<MouseEvent> get onMouseOver => Element.mouseOverEvent.forTarget(this);
 
   /// Stream of `mouseup` events handled by this [Document].
-  @DomName('Document.onmouseup')
-  @DocsEditable()
   Stream<MouseEvent> get onMouseUp => Element.mouseUpEvent.forTarget(this);
 
   /// Stream of `mousewheel` events handled by this [Document].
-  @DomName('Document.onmousewheel')
-  @DocsEditable()
   Stream<WheelEvent> get onMouseWheel =>
       Element.mouseWheelEvent.forTarget(this);
 
   /// Stream of `paste` events handled by this [Document].
-  @DomName('Document.onpaste')
-  @DocsEditable()
   Stream<ClipboardEvent> get onPaste => Element.pasteEvent.forTarget(this);
 
-  @DomName('Document.onpause')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onPause => Element.pauseEvent.forTarget(this);
 
-  @DomName('Document.onplay')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onPlay => Element.playEvent.forTarget(this);
 
-  @DomName('Document.onplaying')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onPlaying => Element.playingEvent.forTarget(this);
 
-  @DomName('Document.onpointerlockchange')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onPointerLockChange =>
       pointerLockChangeEvent.forTarget(this);
 
-  @DomName('Document.onpointerlockerror')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onPointerLockError => pointerLockErrorEvent.forTarget(this);
 
-  @DomName('Document.onratechange')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onRateChange => Element.rateChangeEvent.forTarget(this);
 
   /// Stream of `readystatechange` events handled by this [Document].
-  @DomName('Document.onreadystatechange')
-  @DocsEditable()
   Stream<Event> get onReadyStateChange => readyStateChangeEvent.forTarget(this);
 
   /// Stream of `reset` events handled by this [Document].
-  @DomName('Document.onreset')
-  @DocsEditable()
   Stream<Event> get onReset => Element.resetEvent.forTarget(this);
 
-  @DomName('Document.onresize')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onResize => Element.resizeEvent.forTarget(this);
 
   /// Stream of `scroll` events handled by this [Document].
-  @DomName('Document.onscroll')
-  @DocsEditable()
   Stream<Event> get onScroll => Element.scrollEvent.forTarget(this);
 
   /// Stream of `search` events handled by this [Document].
-  @DomName('Document.onsearch')
-  @DocsEditable()
-  // http://www.w3.org/TR/html-markup/input.search.html
-  @Experimental()
   Stream<Event> get onSearch => Element.searchEvent.forTarget(this);
 
   /// Stream of `securitypolicyviolation` events handled by this [Document].
-  @DomName('Document.onsecuritypolicyviolation')
-  @DocsEditable()
-  // https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html#widl-Document-onsecuritypolicyviolation
-  @Experimental()
   Stream<SecurityPolicyViolationEvent> get onSecurityPolicyViolation =>
       securityPolicyViolationEvent.forTarget(this);
 
-  @DomName('Document.onseeked')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onSeeked => Element.seekedEvent.forTarget(this);
 
-  @DomName('Document.onseeking')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onSeeking => Element.seekingEvent.forTarget(this);
 
   /// Stream of `select` events handled by this [Document].
-  @DomName('Document.onselect')
-  @DocsEditable()
   Stream<Event> get onSelect => Element.selectEvent.forTarget(this);
 
   /// Stream of `selectionchange` events handled by this [Document].
-  @DomName('Document.onselectionchange')
-  @DocsEditable()
   Stream<Event> get onSelectionChange => selectionChangeEvent.forTarget(this);
 
   /// Stream of `selectstart` events handled by this [Document].
-  @DomName('Document.onselectstart')
-  @DocsEditable()
   Stream<Event> get onSelectStart => Element.selectStartEvent.forTarget(this);
 
-  @DomName('Document.onstalled')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onStalled => Element.stalledEvent.forTarget(this);
 
   /// Stream of `submit` events handled by this [Document].
-  @DomName('Document.onsubmit')
-  @DocsEditable()
   Stream<Event> get onSubmit => Element.submitEvent.forTarget(this);
 
-  @DomName('Document.onsuspend')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onSuspend => Element.suspendEvent.forTarget(this);
 
-  @DomName('Document.ontimeupdate')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onTimeUpdate => Element.timeUpdateEvent.forTarget(this);
 
   /// Stream of `touchcancel` events handled by this [Document].
-  @DomName('Document.ontouchcancel')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   Stream<TouchEvent> get onTouchCancel =>
       Element.touchCancelEvent.forTarget(this);
 
   /// Stream of `touchend` events handled by this [Document].
-  @DomName('Document.ontouchend')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   Stream<TouchEvent> get onTouchEnd => Element.touchEndEvent.forTarget(this);
 
   /// Stream of `touchmove` events handled by this [Document].
-  @DomName('Document.ontouchmove')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   Stream<TouchEvent> get onTouchMove => Element.touchMoveEvent.forTarget(this);
 
   /// Stream of `touchstart` events handled by this [Document].
-  @DomName('Document.ontouchstart')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   Stream<TouchEvent> get onTouchStart =>
       Element.touchStartEvent.forTarget(this);
 
-  @DomName('Document.onvolumechange')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onVolumeChange => Element.volumeChangeEvent.forTarget(this);
 
-  @DomName('Document.onwaiting')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onWaiting => Element.waitingEvent.forTarget(this);
 
   /// Stream of `fullscreenchange` events handled by this [Document].
-  @DomName('Document.onwebkitfullscreenchange')
-  @DocsEditable()
-  // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html
-  @Experimental()
   Stream<Event> get onFullscreenChange =>
       Element.fullscreenChangeEvent.forTarget(this);
 
   /// Stream of `fullscreenerror` events handled by this [Document].
-  @DomName('Document.onwebkitfullscreenerror')
-  @DocsEditable()
-  // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html
-  @Experimental()
   Stream<Event> get onFullscreenError =>
       Element.fullscreenErrorEvent.forTarget(this);
 
@@ -12436,7 +9795,6 @@
         tag, {'prototype': customElementClass, 'extends': extendsTag});
   }
 
-  @DomName('Document.createElement')
   @ForceInline() // Almost all call sites have one argument.
   Element createElement(String tagName, [String typeExtension]) {
     return (typeExtension == null)
@@ -12446,18 +9804,14 @@
 
   // The two-argument version of this is automatically generated, but we need to
   // omit the typeExtension if it's null on Firefox or we get an is="null" attribute.
-  @DomName('Document.createElement')
   _createElement_2(String tagName) =>
       JS('Element', '#.createElement(#)', this, tagName);
 
   // The three-argument version of this is automatically generated, but we need to
   // omit the typeExtension if it's null on Firefox or we get an is="null" attribute.
-  @DomName('Document.createElementNS')
   _createElementNS_2(String namespaceURI, String qualifiedName) => JS(
       'Element', '#.createElementNS(#, #)', this, namespaceURI, qualifiedName);
 
-  @DomName('Document.createElementNS')
-  @DocsEditable()
   Element createElementNS(String namespaceURI, String qualifiedName,
       [String typeExtension]) {
     return (typeExtension == null)
@@ -12465,23 +9819,19 @@
         : _createElementNS(namespaceURI, qualifiedName, typeExtension);
   }
 
-  @DomName('Document.createNodeIterator')
   NodeIterator _createNodeIterator(Node root,
           [int whatToShow, NodeFilter filter]) =>
       JS('NodeIterator', '#.createNodeIterator(#, #, #, false)', this, root,
           whatToShow, filter);
 
-  @DomName('Document.createTreeWalker')
   TreeWalker _createTreeWalker(Node root,
           [int whatToShow, NodeFilter filter]) =>
       JS('TreeWalker', '#.createTreeWalker(#, #, #, false)', this, root,
           whatToShow, filter);
 
-  @DomName('Document.visibilityState')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
-  @Experimental()
   String get visibilityState => JS(
       'String',
       '(#.visibilityState || #.mozVisibilityState || #.msVisibilityState ||'
@@ -12495,7 +9845,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.
 
-@DomName('DocumentFragment')
 @Native("DocumentFragment")
 class DocumentFragment extends Node
     implements NonElementParentNode, ParentNode {
@@ -12592,26 +9941,17 @@
 
   // From NonElementParentNode
 
-  @DomName('DocumentFragment.getElementById')
-  @DocsEditable()
-  @Experimental() // untriaged
   Element getElementById(String elementId) native;
 
   // From ParentNode
 
   @JSName('childElementCount')
-  @DomName('DocumentFragment.childElementCount')
-  @DocsEditable()
   final int _childElementCount;
 
   @JSName('firstElementChild')
-  @DomName('DocumentFragment.firstElementChild')
-  @DocsEditable()
   final Element _firstElementChild;
 
   @JSName('lastElementChild')
-  @DomName('DocumentFragment.lastElementChild')
-  @DocsEditable()
   final Element _lastElementChild;
 
   /**
@@ -12626,13 +9966,9 @@
    * For details about CSS selector syntax, see the
    * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
    */
-  @DomName('DocumentFragment.querySelector')
-  @DocsEditable()
   Element querySelector(String selectors) native;
 
   @JSName('querySelectorAll')
-  @DomName('DocumentFragment.querySelectorAll')
-  @DocsEditable()
   @Creates('NodeList')
   @Returns('NodeList')
   List<Node> _querySelectorAll(String selectors) native;
@@ -12641,9 +9977,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.
 
-@DocsEditable()
-@DomName('DocumentOrShadowRoot')
-@Experimental() // untriaged
 @Native("DocumentOrShadowRoot")
 class DocumentOrShadowRoot extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -12651,50 +9984,26 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DocumentOrShadowRoot.activeElement')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Element activeElement;
 
-  @DomName('DocumentOrShadowRoot.fullscreenElement')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Element fullscreenElement;
 
-  @DomName('DocumentOrShadowRoot.pointerLockElement')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Element pointerLockElement;
 
-  @DomName('DocumentOrShadowRoot.styleSheets')
-  @DocsEditable()
-  @Experimental() // untriaged
   @Returns('_StyleSheetList|Null')
   @Creates('_StyleSheetList')
   final List<StyleSheet> styleSheets;
 
-  @DomName('DocumentOrShadowRoot.elementFromPoint')
-  @DocsEditable()
-  @Experimental() // untriaged
   Element elementFromPoint(int x, int y) native;
 
-  @DomName('DocumentOrShadowRoot.elementsFromPoint')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<Element> elementsFromPoint(int x, int y) native;
 
-  @DomName('DocumentOrShadowRoot.getSelection')
-  @DocsEditable()
-  @Experimental() // untriaged
   Selection getSelection() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('DocumentTimeline')
-@Experimental() // untriaged
 @Native("DocumentTimeline")
 class DocumentTimeline extends AnimationTimeline {
   // To suppress missing implicit constructor warnings.
@@ -12702,8 +10011,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DocumentTimeline.DocumentTimeline')
-  @DocsEditable()
   factory DocumentTimeline([Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -12720,8 +10027,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.
 
-@DocsEditable()
-@DomName('DOMError')
 @Native("DOMError")
 class DomError extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -12729,8 +10034,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DOMError.DOMError')
-  @DocsEditable()
   factory DomError(String name, [String message]) {
     if (message != null) {
       return DomError._create_1(name, message);
@@ -12741,20 +10044,14 @@
       JS('DomError', 'new DOMError(#,#)', name, message);
   static DomError _create_2(name) => JS('DomError', 'new DOMError(#)', name);
 
-  @DomName('DOMError.message')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String message;
 
-  @DomName('DOMError.name')
-  @DocsEditable()
   final String name;
 }
 // Copyright (c) 2013, 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.
 
-@DomName('DOMException')
 @Unstable()
 @Native("DOMException")
 class DomException extends Interceptor {
@@ -12798,20 +10095,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DOMException.message')
-  @DocsEditable()
   final String message;
 
-  @DomName('DOMException.toString')
-  @DocsEditable()
   String toString() => JS('String', 'String(#)', this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('DOMImplementation')
 @Native("DOMImplementation")
 class DomImplementation extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -12819,32 +10110,21 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DOMImplementation.createDocument')
-  @DocsEditable()
   XmlDocument createDocument(
       String namespaceURI, String qualifiedName, _DocumentType doctype) native;
 
-  @DomName('DOMImplementation.createDocumentType')
-  @DocsEditable()
   _DocumentType createDocumentType(
       String qualifiedName, String publicId, String systemId) native;
 
   @JSName('createHTMLDocument')
-  @DomName('DOMImplementation.createHTMLDocument')
-  @DocsEditable()
   HtmlDocument createHtmlDocument([String title]) native;
 
-  @DomName('DOMImplementation.hasFeature')
-  @DocsEditable()
   bool hasFeature() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('Iterator')
-@Experimental() // untriaged
 @Native("Iterator")
 class DomIterator extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -12852,18 +10132,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Iterator.next')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object next([Object value]) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('DOMMatrix')
-@Experimental() // untriaged
 @Native("DOMMatrix")
 class DomMatrix extends DomMatrixReadOnly {
   // To suppress missing implicit constructor warnings.
@@ -12871,8 +10145,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DOMMatrix.DOMMatrix')
-  @DocsEditable()
   factory DomMatrix([Object init]) {
     if (init != null) {
       return DomMatrix._create_1(init);
@@ -13036,19 +10308,10 @@
     JS("void", "#.m44 = #", this, value);
   }
 
-  @DomName('DOMMatrix.fromFloat32Array')
-  @DocsEditable()
-  @Experimental() // untriaged
   static DomMatrix fromFloat32Array(Float32List array32) native;
 
-  @DomName('DOMMatrix.fromFloat64Array')
-  @DocsEditable()
-  @Experimental() // untriaged
   static DomMatrix fromFloat64Array(Float64List array64) native;
 
-  @DomName('DOMMatrix.fromMatrix')
-  @DocsEditable()
-  @Experimental() // untriaged
   static DomMatrix fromMatrix([Map other]) {
     if (other != null) {
       var other_1 = convertDartToNative_Dictionary(other);
@@ -13058,24 +10321,12 @@
   }
 
   @JSName('fromMatrix')
-  @DomName('DOMMatrix.fromMatrix')
-  @DocsEditable()
-  @Experimental() // untriaged
   static DomMatrix _fromMatrix_1(other) native;
   @JSName('fromMatrix')
-  @DomName('DOMMatrix.fromMatrix')
-  @DocsEditable()
-  @Experimental() // untriaged
   static DomMatrix _fromMatrix_2() native;
 
-  @DomName('DOMMatrix.invertSelf')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix invertSelf() native;
 
-  @DomName('DOMMatrix.multiplySelf')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix multiplySelf([Map other]) {
     if (other != null) {
       var other_1 = convertDartToNative_Dictionary(other);
@@ -13085,19 +10336,10 @@
   }
 
   @JSName('multiplySelf')
-  @DomName('DOMMatrix.multiplySelf')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix _multiplySelf_1(other) native;
   @JSName('multiplySelf')
-  @DomName('DOMMatrix.multiplySelf')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix _multiplySelf_2() native;
 
-  @DomName('DOMMatrix.preMultiplySelf')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix preMultiplySelf([Map other]) {
     if (other != null) {
       var other_1 = convertDartToNative_Dictionary(other);
@@ -13107,40 +10349,19 @@
   }
 
   @JSName('preMultiplySelf')
-  @DomName('DOMMatrix.preMultiplySelf')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix _preMultiplySelf_1(other) native;
   @JSName('preMultiplySelf')
-  @DomName('DOMMatrix.preMultiplySelf')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix _preMultiplySelf_2() native;
 
-  @DomName('DOMMatrix.rotateAxisAngleSelf')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix rotateAxisAngleSelf([num x, num y, num z, num angle]) native;
 
-  @DomName('DOMMatrix.rotateFromVectorSelf')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix rotateFromVectorSelf([num x, num y]) native;
 
-  @DomName('DOMMatrix.rotateSelf')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix rotateSelf([num rotX, num rotY, num rotZ]) native;
 
-  @DomName('DOMMatrix.scale3dSelf')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix scale3dSelf([num scale, num originX, num originY, num originZ])
       native;
 
-  @DomName('DOMMatrix.scaleSelf')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix scaleSelf(
       [num scaleX,
       num scaleY,
@@ -13149,33 +10370,18 @@
       num originY,
       num originZ]) native;
 
-  @DomName('DOMMatrix.setMatrixValue')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix setMatrixValue(String transformList) native;
 
-  @DomName('DOMMatrix.skewXSelf')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix skewXSelf([num sx]) native;
 
-  @DomName('DOMMatrix.skewYSelf')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix skewYSelf([num sy]) native;
 
-  @DomName('DOMMatrix.translateSelf')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix translateSelf([num tx, num ty, num tz]) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('DOMMatrixReadOnly')
-@Experimental() // untriaged
 @Native("DOMMatrixReadOnly")
 class DomMatrixReadOnly extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -13183,8 +10389,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DOMMatrixReadOnly.DOMMatrixReadOnly')
-  @DocsEditable()
   factory DomMatrixReadOnly([Object init]) {
     if (init != null) {
       return DomMatrixReadOnly._create_1(init);
@@ -13244,29 +10448,14 @@
 
   num get m44 => JS("num", "#.m44", this);
 
-  @DomName('DOMMatrixReadOnly.flipX')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix flipX() native;
 
-  @DomName('DOMMatrixReadOnly.flipY')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix flipY() native;
 
-  @DomName('DOMMatrixReadOnly.fromFloat32Array')
-  @DocsEditable()
-  @Experimental() // untriaged
   static DomMatrixReadOnly fromFloat32Array(Float32List array32) native;
 
-  @DomName('DOMMatrixReadOnly.fromFloat64Array')
-  @DocsEditable()
-  @Experimental() // untriaged
   static DomMatrixReadOnly fromFloat64Array(Float64List array64) native;
 
-  @DomName('DOMMatrixReadOnly.fromMatrix')
-  @DocsEditable()
-  @Experimental() // untriaged
   static DomMatrixReadOnly fromMatrix([Map other]) {
     if (other != null) {
       var other_1 = convertDartToNative_Dictionary(other);
@@ -13276,24 +10465,12 @@
   }
 
   @JSName('fromMatrix')
-  @DomName('DOMMatrixReadOnly.fromMatrix')
-  @DocsEditable()
-  @Experimental() // untriaged
   static DomMatrixReadOnly _fromMatrix_1(other) native;
   @JSName('fromMatrix')
-  @DomName('DOMMatrixReadOnly.fromMatrix')
-  @DocsEditable()
-  @Experimental() // untriaged
   static DomMatrixReadOnly _fromMatrix_2() native;
 
-  @DomName('DOMMatrixReadOnly.inverse')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix inverse() native;
 
-  @DomName('DOMMatrixReadOnly.multiply')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix multiply([Map other]) {
     if (other != null) {
       var other_1 = convertDartToNative_Dictionary(other);
@@ -13303,34 +10480,16 @@
   }
 
   @JSName('multiply')
-  @DomName('DOMMatrixReadOnly.multiply')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix _multiply_1(other) native;
   @JSName('multiply')
-  @DomName('DOMMatrixReadOnly.multiply')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix _multiply_2() native;
 
-  @DomName('DOMMatrixReadOnly.rotate')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix rotate([num rotX, num rotY, num rotZ]) native;
 
-  @DomName('DOMMatrixReadOnly.rotateAxisAngle')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix rotateAxisAngle([num x, num y, num z, num angle]) native;
 
-  @DomName('DOMMatrixReadOnly.rotateFromVector')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix rotateFromVector([num x, num y]) native;
 
-  @DomName('DOMMatrixReadOnly.scale')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix scale(
       [num scaleX,
       num scaleY,
@@ -13339,34 +10498,16 @@
       num originY,
       num originZ]) native;
 
-  @DomName('DOMMatrixReadOnly.scale3d')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix scale3d([num scale, num originX, num originY, num originZ]) native;
 
-  @DomName('DOMMatrixReadOnly.skewX')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix skewX([num sx]) native;
 
-  @DomName('DOMMatrixReadOnly.skewY')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix skewY([num sy]) native;
 
-  @DomName('DOMMatrixReadOnly.toFloat32Array')
-  @DocsEditable()
-  @Experimental() // untriaged
   Float32List toFloat32Array() native;
 
-  @DomName('DOMMatrixReadOnly.toFloat64Array')
-  @DocsEditable()
-  @Experimental() // untriaged
   Float64List toFloat64Array() native;
 
-  @DomName('DOMMatrixReadOnly.transformPoint')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomPoint transformPoint([Map point]) {
     if (point != null) {
       var point_1 = convertDartToNative_Dictionary(point);
@@ -13376,27 +10517,16 @@
   }
 
   @JSName('transformPoint')
-  @DomName('DOMMatrixReadOnly.transformPoint')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomPoint _transformPoint_1(point) native;
   @JSName('transformPoint')
-  @DomName('DOMMatrixReadOnly.transformPoint')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomPoint _transformPoint_2() native;
 
-  @DomName('DOMMatrixReadOnly.translate')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomMatrix translate([num tx, num ty, num tz]) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('DOMParser')
 @Native("DOMParser")
 class DomParser extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -13404,24 +10534,17 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DOMParser.DOMParser')
-  @DocsEditable()
   factory DomParser() {
     return DomParser._create_1();
   }
   static DomParser _create_1() => JS('DomParser', 'new DOMParser()');
 
-  @DomName('DOMParser.parseFromString')
-  @DocsEditable()
   Document parseFromString(String str, String type) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('DOMPoint')
-@Experimental() // untriaged
 @Native("DOMPoint")
 class DomPoint extends DomPointReadOnly {
   // To suppress missing implicit constructor warnings.
@@ -13429,8 +10552,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DOMPoint.DOMPoint')
-  @DocsEditable()
   factory DomPoint([num x, num y, num z, num w]) {
     if (w != null) {
       return DomPoint._create_1(x, y, z, w);
@@ -13486,9 +10607,6 @@
     JS("void", "#.z = #", this, value);
   }
 
-  @DomName('DOMPoint.fromPoint')
-  @DocsEditable()
-  @Experimental() // untriaged
   static DomPoint fromPoint([Map other]) {
     if (other != null) {
       var other_1 = convertDartToNative_Dictionary(other);
@@ -13498,23 +10616,14 @@
   }
 
   @JSName('fromPoint')
-  @DomName('DOMPoint.fromPoint')
-  @DocsEditable()
-  @Experimental() // untriaged
   static DomPoint _fromPoint_1(other) native;
   @JSName('fromPoint')
-  @DomName('DOMPoint.fromPoint')
-  @DocsEditable()
-  @Experimental() // untriaged
   static DomPoint _fromPoint_2() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('DOMPointReadOnly')
-@Experimental() // untriaged
 @Native("DOMPointReadOnly")
 class DomPointReadOnly extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -13522,8 +10631,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DOMPointReadOnly.DOMPointReadOnly')
-  @DocsEditable()
   factory DomPointReadOnly([num x, num y, num z, num w]) {
     if (w != null) {
       return DomPointReadOnly._create_1(x, y, z, w);
@@ -13558,9 +10665,6 @@
 
   num get z => JS("num", "#.z", this);
 
-  @DomName('DOMPointReadOnly.fromPoint')
-  @DocsEditable()
-  @Experimental() // untriaged
   static DomPointReadOnly fromPoint([Map other]) {
     if (other != null) {
       var other_1 = convertDartToNative_Dictionary(other);
@@ -13570,19 +10674,10 @@
   }
 
   @JSName('fromPoint')
-  @DomName('DOMPointReadOnly.fromPoint')
-  @DocsEditable()
-  @Experimental() // untriaged
   static DomPointReadOnly _fromPoint_1(other) native;
   @JSName('fromPoint')
-  @DomName('DOMPointReadOnly.fromPoint')
-  @DocsEditable()
-  @Experimental() // untriaged
   static DomPointReadOnly _fromPoint_2() native;
 
-  @DomName('DOMPointReadOnly.matrixTransform')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomPoint matrixTransform([Map matrix]) {
     if (matrix != null) {
       var matrix_1 = convertDartToNative_Dictionary(matrix);
@@ -13592,23 +10687,14 @@
   }
 
   @JSName('matrixTransform')
-  @DomName('DOMPointReadOnly.matrixTransform')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomPoint _matrixTransform_1(matrix) native;
   @JSName('matrixTransform')
-  @DomName('DOMPointReadOnly.matrixTransform')
-  @DocsEditable()
-  @Experimental() // untriaged
   DomPoint _matrixTransform_2() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('DOMQuad')
-@Experimental() // untriaged
 @Native("DOMQuad")
 class DomQuad extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -13616,8 +10702,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DOMQuad.DOMQuad')
-  @DocsEditable()
   factory DomQuad([Map p1, Map p2, Map p3, Map p4]) {
     if (p4 != null) {
       var p1_1 = convertDartToNative_Dictionary(p1);
@@ -13651,29 +10735,14 @@
   static DomQuad _create_4(p1) => JS('DomQuad', 'new DOMQuad(#)', p1);
   static DomQuad _create_5() => JS('DomQuad', 'new DOMQuad()');
 
-  @DomName('DOMQuad.p1')
-  @DocsEditable()
-  @Experimental() // untriaged
   final DomPoint p1;
 
-  @DomName('DOMQuad.p2')
-  @DocsEditable()
-  @Experimental() // untriaged
   final DomPoint p2;
 
-  @DomName('DOMQuad.p3')
-  @DocsEditable()
-  @Experimental() // untriaged
   final DomPoint p3;
 
-  @DomName('DOMQuad.p4')
-  @DocsEditable()
-  @Experimental() // untriaged
   final DomPoint p4;
 
-  @DomName('DOMQuad.fromQuad')
-  @DocsEditable()
-  @Experimental() // untriaged
   static DomQuad fromQuad([Map other]) {
     if (other != null) {
       var other_1 = convertDartToNative_Dictionary(other);
@@ -13683,19 +10752,10 @@
   }
 
   @JSName('fromQuad')
-  @DomName('DOMQuad.fromQuad')
-  @DocsEditable()
-  @Experimental() // untriaged
   static DomQuad _fromQuad_1(other) native;
   @JSName('fromQuad')
-  @DomName('DOMQuad.fromQuad')
-  @DocsEditable()
-  @Experimental() // untriaged
   static DomQuad _fromQuad_2() native;
 
-  @DomName('DOMQuad.fromRect')
-  @DocsEditable()
-  @Experimental() // untriaged
   static DomQuad fromRect([Map other]) {
     if (other != null) {
       var other_1 = convertDartToNative_Dictionary(other);
@@ -13705,28 +10765,16 @@
   }
 
   @JSName('fromRect')
-  @DomName('DOMQuad.fromRect')
-  @DocsEditable()
-  @Experimental() // untriaged
   static DomQuad _fromRect_1(other) native;
   @JSName('fromRect')
-  @DomName('DOMQuad.fromRect')
-  @DocsEditable()
-  @Experimental() // untriaged
   static DomQuad _fromRect_2() native;
 
-  @DomName('DOMQuad.getBounds')
-  @DocsEditable()
-  @Experimental() // untriaged
   Rectangle getBounds() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('DOMRectList')
-@Experimental() // untriaged
 @Native("ClientRectList,DOMRectList")
 class DomRectList extends Interceptor
     with ListMixin<Rectangle>, ImmutableListMixin<Rectangle>
@@ -13736,9 +10784,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DOMRectList.length')
-  @DocsEditable()
-  @Experimental() // untriaged
   int get length => JS("int", "#.length", this);
 
   Rectangle operator [](int index) {
@@ -13784,18 +10829,12 @@
   Rectangle elementAt(int index) => this[index];
   // -- end List<Rectangle> mixins.
 
-  @DomName('DOMRectList.item')
-  @DocsEditable()
-  @Experimental() // untriaged
   Rectangle item(int index) native;
 }
 // Copyright (c) 2013, 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.
 
-@DocsEditable()
-@DomName('DOMRectReadOnly')
-@Experimental() // untriaged
 @Native("DOMRectReadOnly")
 class DomRectReadOnly extends Interceptor implements Rectangle {
   // NOTE! All code below should be common with RectangleBase.
@@ -13892,8 +10931,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DOMRectReadOnly.DOMRectReadOnly')
-  @DocsEditable()
   factory DomRectReadOnly([num x, num y, num width, num height]) {
     if (height != null) {
       return DomRectReadOnly._create_1(x, y, width, height);
@@ -13936,9 +10973,6 @@
 
   num get y => JS("num", "#.y", this);
 
-  @DomName('DOMRectReadOnly.fromRect')
-  @DocsEditable()
-  @Experimental() // untriaged
   static DomRectReadOnly fromRect([Map other]) {
     if (other != null) {
       var other_1 = convertDartToNative_Dictionary(other);
@@ -13948,14 +10982,8 @@
   }
 
   @JSName('fromRect')
-  @DomName('DOMRectReadOnly.fromRect')
-  @DocsEditable()
-  @Experimental() // untriaged
   static DomRectReadOnly _fromRect_1(other) native;
   @JSName('fromRect')
-  @DomName('DOMRectReadOnly.fromRect')
-  @DocsEditable()
-  @Experimental() // untriaged
   static DomRectReadOnly _fromRect_2() native;
 }
 
@@ -13963,8 +10991,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.
 
-@DocsEditable()
-@DomName('DOMStringList')
 @Native("DOMStringList")
 class DomStringList extends Interceptor
     with ListMixin<String>, ImmutableListMixin<String>
@@ -13974,8 +11000,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DOMStringList.length')
-  @DocsEditable()
   int get length => JS("int", "#.length", this);
 
   String operator [](int index) {
@@ -14021,16 +11045,12 @@
   String elementAt(int index) => this[index];
   // -- end List<String> mixins.
 
-  @DomName('DOMStringList.item')
-  @DocsEditable()
   String item(int index) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('DOMStringMap')
 @Native("DOMStringMap")
 class DomStringMap extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -14038,25 +11058,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DOMStringMap.__delete__')
-  @DocsEditable()
   void __delete__(String name) native;
 
-  @DomName('DOMStringMap.__setter__')
-  @DocsEditable()
   void __setter__(String name, String value) native;
 
-  @DomName('DOMStringMap.item')
-  @DocsEditable()
-  @Experimental() // untriaged
   String item(String name) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('DOMTokenList')
 @Native("DOMTokenList")
 class DomTokenList extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -14064,45 +11075,22 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DOMTokenList.length')
-  @DocsEditable()
   final int length;
 
-  @DomName('DOMTokenList.value')
-  @DocsEditable()
-  @Experimental() // untriaged
   String value;
 
-  @DomName('DOMTokenList.add')
-  @DocsEditable()
-  @Experimental() // untriaged
   void add(String tokens) native;
 
-  @DomName('DOMTokenList.contains')
-  @DocsEditable()
   bool contains(String token) native;
 
-  @DomName('DOMTokenList.item')
-  @DocsEditable()
   String item(int index) native;
 
-  @DomName('DOMTokenList.remove')
-  @DocsEditable()
-  @Experimental() // untriaged
   void remove(String tokens) native;
 
-  @DomName('DOMTokenList.replace')
-  @DocsEditable()
-  @Experimental() // untriaged
   void replace(String token, String newToken) native;
 
-  @DomName('DOMTokenList.supports')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool supports(String token) native;
 
-  @DomName('DOMTokenList.toggle')
-  @DocsEditable()
   bool toggle(String token, [bool force]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14314,7 +11302,6 @@
    * Unlike [getBoundingClientRect], the dimensions of this rectangle
    * will return the same numerical height if the element is hidden or not.
    */
-  @Experimental()
   CssRect get contentEdge;
 
   /**
@@ -14329,7 +11316,6 @@
    * is also a rectangle equalling the dimensions of clientHeight and
    * clientWidth.
    */
-  @Experimental()
   CssRect get paddingEdge;
 
   /**
@@ -14342,7 +11328,6 @@
    * will return the same numerical height if the element is hidden or not. This
    * can be used to retrieve jQuery's `outerHeight` value for an element.
    */
-  @Experimental()
   CssRect get borderEdge;
 
   /**
@@ -14355,72 +11340,43 @@
    * will return the same numerical height if the element is hidden or not. This
    * can be used to retrieve jQuery's `outerHeight` value for an element.
    */
-  @Experimental()
   CssRect get marginEdge;
 
   /// Stream of `abort` events handled by this [Element].
-  @DomName('Element.onabort')
-  @DocsEditable()
   ElementStream<Event> get onAbort;
 
   /// Stream of `beforecopy` events handled by this [Element].
-  @DomName('Element.onbeforecopy')
-  @DocsEditable()
   ElementStream<Event> get onBeforeCopy;
 
   /// Stream of `beforecut` events handled by this [Element].
-  @DomName('Element.onbeforecut')
-  @DocsEditable()
   ElementStream<Event> get onBeforeCut;
 
   /// Stream of `beforepaste` events handled by this [Element].
-  @DomName('Element.onbeforepaste')
-  @DocsEditable()
   ElementStream<Event> get onBeforePaste;
 
   /// Stream of `blur` events handled by this [Element].
-  @DomName('Element.onblur')
-  @DocsEditable()
   ElementStream<Event> get onBlur;
 
-  @DomName('Element.oncanplay')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onCanPlay;
 
-  @DomName('Element.oncanplaythrough')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onCanPlayThrough;
 
   /// Stream of `change` events handled by this [Element].
-  @DomName('Element.onchange')
-  @DocsEditable()
   ElementStream<Event> get onChange;
 
   /// Stream of `click` events handled by this [Element].
-  @DomName('Element.onclick')
-  @DocsEditable()
   ElementStream<MouseEvent> get onClick;
 
   /// Stream of `contextmenu` events handled by this [Element].
-  @DomName('Element.oncontextmenu')
-  @DocsEditable()
   ElementStream<MouseEvent> get onContextMenu;
 
   /// Stream of `copy` events handled by this [Element].
-  @DomName('Element.oncopy')
-  @DocsEditable()
   ElementStream<ClipboardEvent> get onCopy;
 
   /// Stream of `cut` events handled by this [Element].
-  @DomName('Element.oncut')
-  @DocsEditable()
   ElementStream<ClipboardEvent> get onCut;
 
   /// Stream of `doubleclick` events handled by this [Element].
-  @DomName('Element.ondblclick')
-  @DocsEditable()
   ElementStream<Event> get onDoubleClick;
 
   /**
@@ -14440,8 +11396,6 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.ondrag')
-  @DocsEditable()
   ElementStream<MouseEvent> get onDrag;
 
   /**
@@ -14458,8 +11412,6 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.ondragend')
-  @DocsEditable()
   ElementStream<MouseEvent> get onDragEnd;
 
   /**
@@ -14476,8 +11428,6 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.ondragenter')
-  @DocsEditable()
   ElementStream<MouseEvent> get onDragEnter;
 
   /**
@@ -14494,8 +11444,6 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.ondragleave')
-  @DocsEditable()
   ElementStream<MouseEvent> get onDragLeave;
 
   /**
@@ -14512,8 +11460,6 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.ondragover')
-  @DocsEditable()
   ElementStream<MouseEvent> get onDragOver;
 
   /**
@@ -14530,8 +11476,6 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.ondragstart')
-  @DocsEditable()
   ElementStream<MouseEvent> get onDragStart;
 
   /**
@@ -14548,285 +11492,142 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.ondrop')
-  @DocsEditable()
   ElementStream<MouseEvent> get onDrop;
 
-  @DomName('Element.ondurationchange')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onDurationChange;
 
-  @DomName('Element.onemptied')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onEmptied;
 
-  @DomName('Element.onended')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onEnded;
 
   /// Stream of `error` events handled by this [Element].
-  @DomName('Element.onerror')
-  @DocsEditable()
   ElementStream<Event> get onError;
 
   /// Stream of `focus` events handled by this [Element].
-  @DomName('Element.onfocus')
-  @DocsEditable()
   ElementStream<Event> get onFocus;
 
   /// Stream of `input` events handled by this [Element].
-  @DomName('Element.oninput')
-  @DocsEditable()
   ElementStream<Event> get onInput;
 
   /// Stream of `invalid` events handled by this [Element].
-  @DomName('Element.oninvalid')
-  @DocsEditable()
   ElementStream<Event> get onInvalid;
 
   /// Stream of `keydown` events handled by this [Element].
-  @DomName('Element.onkeydown')
-  @DocsEditable()
   ElementStream<KeyboardEvent> get onKeyDown;
 
   /// Stream of `keypress` events handled by this [Element].
-  @DomName('Element.onkeypress')
-  @DocsEditable()
   ElementStream<KeyboardEvent> get onKeyPress;
 
   /// Stream of `keyup` events handled by this [Element].
-  @DomName('Element.onkeyup')
-  @DocsEditable()
   ElementStream<KeyboardEvent> get onKeyUp;
 
   /// Stream of `load` events handled by this [Element].
-  @DomName('Element.onload')
-  @DocsEditable()
   ElementStream<Event> get onLoad;
 
-  @DomName('Element.onloadeddata')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onLoadedData;
 
-  @DomName('Element.onloadedmetadata')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onLoadedMetadata;
 
   /// Stream of `mousedown` events handled by this [Element].
-  @DomName('Element.onmousedown')
-  @DocsEditable()
   ElementStream<MouseEvent> get onMouseDown;
 
   /// Stream of `mouseenter` events handled by this [Element].
-  @DomName('Element.onmouseenter')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<MouseEvent> get onMouseEnter;
 
   /// Stream of `mouseleave` events handled by this [Element].
-  @DomName('Element.onmouseleave')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<MouseEvent> get onMouseLeave;
 
   /// Stream of `mousemove` events handled by this [Element].
-  @DomName('Element.onmousemove')
-  @DocsEditable()
   ElementStream<MouseEvent> get onMouseMove;
 
   /// Stream of `mouseout` events handled by this [Element].
-  @DomName('Element.onmouseout')
-  @DocsEditable()
   ElementStream<MouseEvent> get onMouseOut;
 
   /// Stream of `mouseover` events handled by this [Element].
-  @DomName('Element.onmouseover')
-  @DocsEditable()
   ElementStream<MouseEvent> get onMouseOver;
 
   /// Stream of `mouseup` events handled by this [Element].
-  @DomName('Element.onmouseup')
-  @DocsEditable()
   ElementStream<MouseEvent> get onMouseUp;
 
   /// Stream of `mousewheel` events handled by this [Element].
-  @DomName('Element.onmousewheel')
-  @DocsEditable()
-  // http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents
-  @Experimental() // non-standard
   ElementStream<WheelEvent> get onMouseWheel;
 
   /// Stream of `paste` events handled by this [Element].
-  @DomName('Element.onpaste')
-  @DocsEditable()
   ElementStream<ClipboardEvent> get onPaste;
 
-  @DomName('Element.onpause')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onPause;
 
-  @DomName('Element.onplay')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onPlay;
 
-  @DomName('Element.onplaying')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onPlaying;
 
-  @DomName('Element.onratechange')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onRateChange;
 
   /// Stream of `reset` events handled by this [Element].
-  @DomName('Element.onreset')
-  @DocsEditable()
   ElementStream<Event> get onReset;
 
-  @DomName('Element.onresize')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onResize;
 
   /// Stream of `scroll` events handled by this [Element].
-  @DomName('Element.onscroll')
-  @DocsEditable()
   ElementStream<Event> get onScroll;
 
   /// Stream of `search` events handled by this [Element].
-  @DomName('Element.onsearch')
-  @DocsEditable()
-  // http://www.w3.org/TR/html-markup/input.search.html
-  @Experimental()
   ElementStream<Event> get onSearch;
 
-  @DomName('Element.onseeked')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onSeeked;
 
-  @DomName('Element.onseeking')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onSeeking;
 
   /// Stream of `select` events handled by this [Element].
-  @DomName('Element.onselect')
-  @DocsEditable()
   ElementStream<Event> get onSelect;
 
   /// Stream of `selectstart` events handled by this [Element].
-  @DomName('Element.onselectstart')
-  @DocsEditable()
-  @Experimental() // nonstandard
   ElementStream<Event> get onSelectStart;
 
-  @DomName('Element.onstalled')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onStalled;
 
   /// Stream of `submit` events handled by this [Element].
-  @DomName('Element.onsubmit')
-  @DocsEditable()
   ElementStream<Event> get onSubmit;
 
-  @DomName('Element.onsuspend')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onSuspend;
 
-  @DomName('Element.ontimeupdate')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onTimeUpdate;
 
   /// Stream of `touchcancel` events handled by this [Element].
-  @DomName('Element.ontouchcancel')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   ElementStream<TouchEvent> get onTouchCancel;
 
   /// Stream of `touchend` events handled by this [Element].
-  @DomName('Element.ontouchend')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   ElementStream<TouchEvent> get onTouchEnd;
 
   /// Stream of `touchenter` events handled by this [Element].
-  @DomName('Element.ontouchenter')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   ElementStream<TouchEvent> get onTouchEnter;
 
   /// Stream of `touchleave` events handled by this [Element].
-  @DomName('Element.ontouchleave')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   ElementStream<TouchEvent> get onTouchLeave;
 
   /// Stream of `touchmove` events handled by this [Element].
-  @DomName('Element.ontouchmove')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   ElementStream<TouchEvent> get onTouchMove;
 
   /// Stream of `touchstart` events handled by this [Element].
-  @DomName('Element.ontouchstart')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   ElementStream<TouchEvent> get onTouchStart;
 
   /// Stream of `transitionend` events handled by this [Element].
-  @DomName('Element.ontransitionend')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
   @SupportedBrowser(SupportedBrowser.SAFARI)
   ElementStream<TransitionEvent> get onTransitionEnd;
 
-  @DomName('Element.onvolumechange')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onVolumeChange;
 
-  @DomName('Element.onwaiting')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onWaiting;
 
   /// Stream of `fullscreenchange` events handled by this [Element].
-  @DomName('Element.onwebkitfullscreenchange')
-  @DocsEditable()
-  // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html
-  @Experimental()
   ElementStream<Event> get onFullscreenChange;
 
   /// Stream of `fullscreenerror` events handled by this [Element].
-  @DomName('Element.onwebkitfullscreenerror')
-  @DocsEditable()
-  // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html
-  @Experimental()
   ElementStream<Event> get onFullscreenError;
 
-  @DomName('Element.onwheel')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<WheelEvent> get onWheel;
 }
 
@@ -14893,78 +11694,50 @@
   List<Node> get rawList => _nodeList;
 
   /// Stream of `abort` events handled by this [Element].
-  @DomName('Element.onabort')
-  @DocsEditable()
   ElementStream<Event> get onAbort => Element.abortEvent._forElementList(this);
 
   /// Stream of `beforecopy` events handled by this [Element].
-  @DomName('Element.onbeforecopy')
-  @DocsEditable()
   ElementStream<Event> get onBeforeCopy =>
       Element.beforeCopyEvent._forElementList(this);
 
   /// Stream of `beforecut` events handled by this [Element].
-  @DomName('Element.onbeforecut')
-  @DocsEditable()
   ElementStream<Event> get onBeforeCut =>
       Element.beforeCutEvent._forElementList(this);
 
   /// Stream of `beforepaste` events handled by this [Element].
-  @DomName('Element.onbeforepaste')
-  @DocsEditable()
   ElementStream<Event> get onBeforePaste =>
       Element.beforePasteEvent._forElementList(this);
 
   /// Stream of `blur` events handled by this [Element].
-  @DomName('Element.onblur')
-  @DocsEditable()
   ElementStream<Event> get onBlur => Element.blurEvent._forElementList(this);
 
-  @DomName('Element.oncanplay')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onCanPlay =>
       Element.canPlayEvent._forElementList(this);
 
-  @DomName('Element.oncanplaythrough')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onCanPlayThrough =>
       Element.canPlayThroughEvent._forElementList(this);
 
   /// Stream of `change` events handled by this [Element].
-  @DomName('Element.onchange')
-  @DocsEditable()
   ElementStream<Event> get onChange =>
       Element.changeEvent._forElementList(this);
 
   /// Stream of `click` events handled by this [Element].
-  @DomName('Element.onclick')
-  @DocsEditable()
   ElementStream<MouseEvent> get onClick =>
       Element.clickEvent._forElementList(this);
 
   /// Stream of `contextmenu` events handled by this [Element].
-  @DomName('Element.oncontextmenu')
-  @DocsEditable()
   ElementStream<MouseEvent> get onContextMenu =>
       Element.contextMenuEvent._forElementList(this);
 
   /// Stream of `copy` events handled by this [Element].
-  @DomName('Element.oncopy')
-  @DocsEditable()
   ElementStream<ClipboardEvent> get onCopy =>
       Element.copyEvent._forElementList(this);
 
   /// Stream of `cut` events handled by this [Element].
-  @DomName('Element.oncut')
-  @DocsEditable()
   ElementStream<ClipboardEvent> get onCut =>
       Element.cutEvent._forElementList(this);
 
   /// Stream of `doubleclick` events handled by this [Element].
-  @DomName('Element.ondblclick')
-  @DocsEditable()
   ElementStream<Event> get onDoubleClick =>
       Element.doubleClickEvent._forElementList(this);
 
@@ -14985,8 +11758,6 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.ondrag')
-  @DocsEditable()
   ElementStream<MouseEvent> get onDrag =>
       Element.dragEvent._forElementList(this);
 
@@ -15004,8 +11775,6 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.ondragend')
-  @DocsEditable()
   ElementStream<MouseEvent> get onDragEnd =>
       Element.dragEndEvent._forElementList(this);
 
@@ -15023,8 +11792,6 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.ondragenter')
-  @DocsEditable()
   ElementStream<MouseEvent> get onDragEnter =>
       Element.dragEnterEvent._forElementList(this);
 
@@ -15042,8 +11809,6 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.ondragleave')
-  @DocsEditable()
   ElementStream<MouseEvent> get onDragLeave =>
       Element.dragLeaveEvent._forElementList(this);
 
@@ -15061,8 +11826,6 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.ondragover')
-  @DocsEditable()
   ElementStream<MouseEvent> get onDragOver =>
       Element.dragOverEvent._forElementList(this);
 
@@ -15080,8 +11843,6 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.ondragstart')
-  @DocsEditable()
   ElementStream<MouseEvent> get onDragStart =>
       Element.dragStartEvent._forElementList(this);
 
@@ -15099,289 +11860,163 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.ondrop')
-  @DocsEditable()
   ElementStream<MouseEvent> get onDrop =>
       Element.dropEvent._forElementList(this);
 
-  @DomName('Element.ondurationchange')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onDurationChange =>
       Element.durationChangeEvent._forElementList(this);
 
-  @DomName('Element.onemptied')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onEmptied =>
       Element.emptiedEvent._forElementList(this);
 
-  @DomName('Element.onended')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onEnded => Element.endedEvent._forElementList(this);
 
   /// Stream of `error` events handled by this [Element].
-  @DomName('Element.onerror')
-  @DocsEditable()
   ElementStream<Event> get onError => Element.errorEvent._forElementList(this);
 
   /// Stream of `focus` events handled by this [Element].
-  @DomName('Element.onfocus')
-  @DocsEditable()
   ElementStream<Event> get onFocus => Element.focusEvent._forElementList(this);
 
   /// Stream of `input` events handled by this [Element].
-  @DomName('Element.oninput')
-  @DocsEditable()
   ElementStream<Event> get onInput => Element.inputEvent._forElementList(this);
 
   /// Stream of `invalid` events handled by this [Element].
-  @DomName('Element.oninvalid')
-  @DocsEditable()
   ElementStream<Event> get onInvalid =>
       Element.invalidEvent._forElementList(this);
 
   /// Stream of `keydown` events handled by this [Element].
-  @DomName('Element.onkeydown')
-  @DocsEditable()
   ElementStream<KeyboardEvent> get onKeyDown =>
       Element.keyDownEvent._forElementList(this);
 
   /// Stream of `keypress` events handled by this [Element].
-  @DomName('Element.onkeypress')
-  @DocsEditable()
   ElementStream<KeyboardEvent> get onKeyPress =>
       Element.keyPressEvent._forElementList(this);
 
   /// Stream of `keyup` events handled by this [Element].
-  @DomName('Element.onkeyup')
-  @DocsEditable()
   ElementStream<KeyboardEvent> get onKeyUp =>
       Element.keyUpEvent._forElementList(this);
 
   /// Stream of `load` events handled by this [Element].
-  @DomName('Element.onload')
-  @DocsEditable()
   ElementStream<Event> get onLoad => Element.loadEvent._forElementList(this);
 
-  @DomName('Element.onloadeddata')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onLoadedData =>
       Element.loadedDataEvent._forElementList(this);
 
-  @DomName('Element.onloadedmetadata')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onLoadedMetadata =>
       Element.loadedMetadataEvent._forElementList(this);
 
   /// Stream of `mousedown` events handled by this [Element].
-  @DomName('Element.onmousedown')
-  @DocsEditable()
   ElementStream<MouseEvent> get onMouseDown =>
       Element.mouseDownEvent._forElementList(this);
 
   /// Stream of `mouseenter` events handled by this [Element].
-  @DomName('Element.onmouseenter')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<MouseEvent> get onMouseEnter =>
       Element.mouseEnterEvent._forElementList(this);
 
   /// Stream of `mouseleave` events handled by this [Element].
-  @DomName('Element.onmouseleave')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<MouseEvent> get onMouseLeave =>
       Element.mouseLeaveEvent._forElementList(this);
 
   /// Stream of `mousemove` events handled by this [Element].
-  @DomName('Element.onmousemove')
-  @DocsEditable()
   ElementStream<MouseEvent> get onMouseMove =>
       Element.mouseMoveEvent._forElementList(this);
 
   /// Stream of `mouseout` events handled by this [Element].
-  @DomName('Element.onmouseout')
-  @DocsEditable()
   ElementStream<MouseEvent> get onMouseOut =>
       Element.mouseOutEvent._forElementList(this);
 
   /// Stream of `mouseover` events handled by this [Element].
-  @DomName('Element.onmouseover')
-  @DocsEditable()
   ElementStream<MouseEvent> get onMouseOver =>
       Element.mouseOverEvent._forElementList(this);
 
   /// Stream of `mouseup` events handled by this [Element].
-  @DomName('Element.onmouseup')
-  @DocsEditable()
   ElementStream<MouseEvent> get onMouseUp =>
       Element.mouseUpEvent._forElementList(this);
 
   /// Stream of `mousewheel` events handled by this [Element].
-  @DomName('Element.onmousewheel')
-  @DocsEditable()
-  // http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents
-  @Experimental() // non-standard
   ElementStream<WheelEvent> get onMouseWheel =>
       Element.mouseWheelEvent._forElementList(this);
 
   /// Stream of `paste` events handled by this [Element].
-  @DomName('Element.onpaste')
-  @DocsEditable()
   ElementStream<ClipboardEvent> get onPaste =>
       Element.pasteEvent._forElementList(this);
 
-  @DomName('Element.onpause')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onPause => Element.pauseEvent._forElementList(this);
 
-  @DomName('Element.onplay')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onPlay => Element.playEvent._forElementList(this);
 
-  @DomName('Element.onplaying')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onPlaying =>
       Element.playingEvent._forElementList(this);
 
-  @DomName('Element.onratechange')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onRateChange =>
       Element.rateChangeEvent._forElementList(this);
 
   /// Stream of `reset` events handled by this [Element].
-  @DomName('Element.onreset')
-  @DocsEditable()
   ElementStream<Event> get onReset => Element.resetEvent._forElementList(this);
 
-  @DomName('Element.onresize')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onResize =>
       Element.resizeEvent._forElementList(this);
 
   /// Stream of `scroll` events handled by this [Element].
-  @DomName('Element.onscroll')
-  @DocsEditable()
   ElementStream<Event> get onScroll =>
       Element.scrollEvent._forElementList(this);
 
   /// Stream of `search` events handled by this [Element].
-  @DomName('Element.onsearch')
-  @DocsEditable()
-  // http://www.w3.org/TR/html-markup/input.search.html
-  @Experimental()
   ElementStream<Event> get onSearch =>
       Element.searchEvent._forElementList(this);
 
-  @DomName('Element.onseeked')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onSeeked =>
       Element.seekedEvent._forElementList(this);
 
-  @DomName('Element.onseeking')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onSeeking =>
       Element.seekingEvent._forElementList(this);
 
   /// Stream of `select` events handled by this [Element].
-  @DomName('Element.onselect')
-  @DocsEditable()
   ElementStream<Event> get onSelect =>
       Element.selectEvent._forElementList(this);
 
   /// Stream of `selectstart` events handled by this [Element].
-  @DomName('Element.onselectstart')
-  @DocsEditable()
-  @Experimental() // nonstandard
   ElementStream<Event> get onSelectStart =>
       Element.selectStartEvent._forElementList(this);
 
-  @DomName('Element.onstalled')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onStalled =>
       Element.stalledEvent._forElementList(this);
 
   /// Stream of `submit` events handled by this [Element].
-  @DomName('Element.onsubmit')
-  @DocsEditable()
   ElementStream<Event> get onSubmit =>
       Element.submitEvent._forElementList(this);
 
-  @DomName('Element.onsuspend')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onSuspend =>
       Element.suspendEvent._forElementList(this);
 
-  @DomName('Element.ontimeupdate')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onTimeUpdate =>
       Element.timeUpdateEvent._forElementList(this);
 
   /// Stream of `touchcancel` events handled by this [Element].
-  @DomName('Element.ontouchcancel')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   ElementStream<TouchEvent> get onTouchCancel =>
       Element.touchCancelEvent._forElementList(this);
 
   /// Stream of `touchend` events handled by this [Element].
-  @DomName('Element.ontouchend')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   ElementStream<TouchEvent> get onTouchEnd =>
       Element.touchEndEvent._forElementList(this);
 
   /// Stream of `touchenter` events handled by this [Element].
-  @DomName('Element.ontouchenter')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   ElementStream<TouchEvent> get onTouchEnter =>
       Element.touchEnterEvent._forElementList(this);
 
   /// Stream of `touchleave` events handled by this [Element].
-  @DomName('Element.ontouchleave')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   ElementStream<TouchEvent> get onTouchLeave =>
       Element.touchLeaveEvent._forElementList(this);
 
   /// Stream of `touchmove` events handled by this [Element].
-  @DomName('Element.ontouchmove')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   ElementStream<TouchEvent> get onTouchMove =>
       Element.touchMoveEvent._forElementList(this);
 
   /// Stream of `touchstart` events handled by this [Element].
-  @DomName('Element.ontouchstart')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   ElementStream<TouchEvent> get onTouchStart =>
       Element.touchStartEvent._forElementList(this);
 
   /// Stream of `transitionend` events handled by this [Element].
-  @DomName('Element.ontransitionend')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -15389,46 +12024,27 @@
   ElementStream<TransitionEvent> get onTransitionEnd =>
       Element.transitionEndEvent._forElementList(this);
 
-  @DomName('Element.onvolumechange')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onVolumeChange =>
       Element.volumeChangeEvent._forElementList(this);
 
-  @DomName('Element.onwaiting')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onWaiting =>
       Element.waitingEvent._forElementList(this);
 
   /// Stream of `fullscreenchange` events handled by this [Element].
-  @DomName('Element.onwebkitfullscreenchange')
-  @DocsEditable()
-  // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html
-  @Experimental()
   ElementStream<Event> get onFullscreenChange =>
       Element.fullscreenChangeEvent._forElementList(this);
 
   /// Stream of `fullscreenerror` events handled by this [Element].
-  @DomName('Element.onwebkitfullscreenerror')
-  @DocsEditable()
-  // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html
-  @Experimental()
   ElementStream<Event> get onFullscreenError =>
       Element.fullscreenErrorEvent._forElementList(this);
 
-  @DomName('Element.onwheel')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<WheelEvent> get onWheel =>
       Element.wheelEvent._forElementList(this);
 }
 
-@DocsEditable()
 /**
  * An abstract class, which all HTML elements extend.
  */
-@DomName('Element')
 @Native("Element")
 class Element extends Node
     implements
@@ -15708,7 +12324,6 @@
    * For details about CSS selector syntax, see the
    * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
    */
-  @DomName('Element.querySelectorAll')
   ElementList<T> querySelectorAll<T extends Element>(String selectors) =>
       new _FrozenElementList<T>._wrap(_querySelectorAll(selectors));
 
@@ -15847,7 +12462,6 @@
    * [Custom Elements](http://w3c.github.io/webcomponents/spec/custom/#dfn-attached-callback)
    * draft specification.
    */
-  @Experimental()
   void attached() {
     // For the deprecation period, call the old callback.
     enteredView();
@@ -15861,19 +12475,15 @@
    * [Custom Elements](http://w3c.github.io/webcomponents/spec/custom/#dfn-detached-callback)
    * draft specification.
    */
-  @Experimental()
   void detached() {
     // For the deprecation period, call the old callback.
     leftView();
   }
 
   /** *Deprecated*: override [attached] instead. */
-  @Experimental()
   @deprecated
   void enteredView() {}
 
-  @DomName('Element.getClientRects')
-  @DocsEditable()
   List<Rectangle> getClientRects() {
     var value = _getClientRects();
 
@@ -15889,7 +12499,6 @@
   }
 
   /** *Deprecated*: override [detached] instead. */
-  @Experimental()
   @deprecated
   void leftView() {}
 
@@ -15915,7 +12524,6 @@
    * for the transition, or a Map with fields corresponding to those
    * of the [Timing] object.
   **/
-  @Experimental()
   @SupportedBrowser(SupportedBrowser.CHROME, '36')
   Animation animate(Iterable<Map<String, dynamic>> frames, [timing]) {
     if (frames is! Iterable || !(frames.every((x) => x is Map))) {
@@ -15935,17 +12543,13 @@
         : _animate(convertedFrames, convertedTiming);
   }
 
-  @DomName('Element.animate')
   @JSName('animate')
-  @Experimental() // untriaged
   Animation _animate(Object effect, [timing]) native;
   /**
    * Called by the DOM whenever an attribute on this has been changed.
    */
   void attributeChanged(String name, String oldValue, String newValue) {}
 
-  @DomName('Element.localName')
-  @DocsEditable()
   @Returns('String')
   // Non-null for Elements.
   String get localName => JS('String', '#', _localName);
@@ -15960,7 +12564,6 @@
    * * [Node.namespaceURI](http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeNSname)
    *   from W3C.
    */
-  @DomName('Element.namespaceUri')
   String get namespaceUri => _namespaceUri;
 
   /**
@@ -16012,7 +12615,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.mouseWheelEvent')
   static const EventStreamProvider<WheelEvent> mouseWheelEvent =
       const _CustomEventStreamProvider<WheelEvent>(
           Element._determineMouseWheelEventType);
@@ -16025,7 +12627,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.transitionEndEvent')
   static const EventStreamProvider<TransitionEvent> transitionEndEvent =
       const _CustomEventStreamProvider<TransitionEvent>(
           Element._determineTransitionEventType);
@@ -16143,7 +12744,6 @@
   /**
    * Checks if this element matches the CSS selectors.
    */
-  @Experimental()
   bool matches(String selectors) {
     if (JS('bool', '!!#.matches', this)) {
       return JS('bool', '#.matches(#)', this, selectors);
@@ -16161,7 +12761,6 @@
   }
 
   /** Checks if this element or any of its parents match the CSS selectors. */
-  @Experimental()
   bool matchesWithAncestors(String selectors) {
     var elem = this;
     do {
@@ -16180,9 +12779,7 @@
    *   from HTML5Rocks.
    * * [Shadow DOM specification](http://www.w3.org/TR/shadow-dom/) from W3C.
    */
-  @DomName('Element.createShadowRoot')
   @SupportedBrowser(SupportedBrowser.CHROME, '25')
-  @Experimental()
   ShadowRoot createShadowRoot() {
     return JS(
         'ShadowRoot',
@@ -16202,9 +12799,7 @@
    * * [Shadow DOM specification](http://www.w3.org/TR/shadow-dom/)
    *   from W3C.
    */
-  @DomName('Element.shadowRoot')
   @SupportedBrowser(SupportedBrowser.CHROME, '25')
-  @Experimental()
   ShadowRoot get shadowRoot =>
       JS('ShadowRoot|Null', '#.shadowRoot || #.webkitShadowRoot', this, this);
 
@@ -16221,7 +12816,6 @@
    * animation frame is discouraged. See also:
    * [Browser Reflow](https://developers.google.com/speed/articles/reflow)
    */
-  @Experimental()
   CssRect get contentEdge => new _ContentCssRect(this);
 
   /**
@@ -16241,7 +12835,6 @@
    * animation frame is discouraged. See also:
    * [Browser Reflow](https://developers.google.com/speed/articles/reflow)
    */
-  @Experimental()
   CssRect get paddingEdge => new _PaddingCssRect(this);
 
   /**
@@ -16260,7 +12853,6 @@
    * animation frame is discouraged. See also:
    * [Browser Reflow](https://developers.google.com/speed/articles/reflow)
    */
-  @Experimental()
   CssRect get borderEdge => new _BorderCssRect(this);
 
   /**
@@ -16279,7 +12871,6 @@
    * animation frame is discouraged. See also:
    * [Browser Reflow](https://developers.google.com/speed/articles/reflow)
    */
-  @Experimental()
   CssRect get marginEdge => new _MarginCssRect(this);
 
   /**
@@ -16289,7 +12880,6 @@
    * This method is the Dart equivalent to jQuery's
    * [offset](http://api.jquery.com/offset/) method.
    */
-  @Experimental()
   Point get documentOffset => offsetTo(document.documentElement);
 
   /**
@@ -16303,7 +12893,6 @@
    * element is _not_ an offset parent or transitive offset parent to this
    * element, an [ArgumentError] is thrown.
    */
-  @Experimental()
   Point offsetTo(Element parent) {
     return Element._offsetToHelper(this, parent);
   }
@@ -16567,52 +13156,29 @@
     return result;
   }
 
-  @DomName('Element.offsetParent')
-  @DocsEditable()
   final Element offsetParent;
 
-  @DomName('Element.offsetHeight')
-  @DocsEditable()
   int get offsetHeight => JS('num', '#.offsetHeight', this).round();
 
-  @DomName('Element.offsetLeft')
-  @DocsEditable()
   int get offsetLeft => JS('num', '#.offsetLeft', this).round();
 
-  @DomName('Element.offsetTop')
-  @DocsEditable()
   int get offsetTop => JS('num', '#.offsetTop', this).round();
 
-  @DomName('Element.offsetWidth')
-  @DocsEditable()
   int get offsetWidth => JS('num', '#.offsetWidth', this).round();
 
-  @DomName('Element.scrollHeight')
-  @DocsEditable()
   int get scrollHeight => JS('num', '#.scrollHeight', this).round();
-
-  @DomName('Element.scrollLeft')
-  @DocsEditable()
   int get scrollLeft => JS('num', '#.scrollLeft', this).round();
 
-  @DomName('Element.scrollLeft')
-  @DocsEditable()
   set scrollLeft(int value) {
     JS("void", "#.scrollLeft = #", this, value.round());
   }
 
-  @DomName('Element.scrollTop')
-  @DocsEditable()
   int get scrollTop => JS('num', '#.scrollTop', this).round();
 
-  @DomName('Element.scrollTop')
-  @DocsEditable()
   set scrollTop(int value) {
     JS("void", "#.scrollTop = #", this, value.round());
   }
 
-  @DomName('Element.scrollWidth')
-  @DocsEditable()
   int get scrollWidth => JS('num', '#.scrollWidth', this).round();
 
   // To suppress missing implicit constructor warnings.
@@ -16626,8 +13192,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.abortEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> abortEvent =
       const EventStreamProvider<Event>('abort');
 
@@ -16637,8 +13201,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.beforecopyEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> beforeCopyEvent =
       const EventStreamProvider<Event>('beforecopy');
 
@@ -16648,8 +13210,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.beforecutEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> beforeCutEvent =
       const EventStreamProvider<Event>('beforecut');
 
@@ -16659,8 +13219,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.beforepasteEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> beforePasteEvent =
       const EventStreamProvider<Event>('beforepaste');
 
@@ -16670,20 +13228,12 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.blurEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> blurEvent =
       const EventStreamProvider<Event>('blur');
 
-  @DomName('Element.canplayEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> canPlayEvent =
       const EventStreamProvider<Event>('canplay');
 
-  @DomName('Element.canplaythroughEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> canPlayThroughEvent =
       const EventStreamProvider<Event>('canplaythrough');
 
@@ -16693,8 +13243,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.changeEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> changeEvent =
       const EventStreamProvider<Event>('change');
 
@@ -16704,8 +13252,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.clickEvent')
-  @DocsEditable()
   static const EventStreamProvider<MouseEvent> clickEvent =
       const EventStreamProvider<MouseEvent>('click');
 
@@ -16715,8 +13261,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.contextmenuEvent')
-  @DocsEditable()
   static const EventStreamProvider<MouseEvent> contextMenuEvent =
       const EventStreamProvider<MouseEvent>('contextmenu');
 
@@ -16726,8 +13270,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.copyEvent')
-  @DocsEditable()
   static const EventStreamProvider<ClipboardEvent> copyEvent =
       const EventStreamProvider<ClipboardEvent>('copy');
 
@@ -16737,8 +13279,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.cutEvent')
-  @DocsEditable()
   static const EventStreamProvider<ClipboardEvent> cutEvent =
       const EventStreamProvider<ClipboardEvent>('cut');
 
@@ -16748,8 +13288,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.dblclickEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> doubleClickEvent =
       const EventStreamProvider<Event>('dblclick');
 
@@ -16770,8 +13308,6 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.dragEvent')
-  @DocsEditable()
   static const EventStreamProvider<MouseEvent> dragEvent =
       const EventStreamProvider<MouseEvent>('drag');
 
@@ -16789,8 +13325,6 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.dragendEvent')
-  @DocsEditable()
   static const EventStreamProvider<MouseEvent> dragEndEvent =
       const EventStreamProvider<MouseEvent>('dragend');
 
@@ -16808,8 +13342,6 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.dragenterEvent')
-  @DocsEditable()
   static const EventStreamProvider<MouseEvent> dragEnterEvent =
       const EventStreamProvider<MouseEvent>('dragenter');
 
@@ -16827,8 +13359,6 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.dragleaveEvent')
-  @DocsEditable()
   static const EventStreamProvider<MouseEvent> dragLeaveEvent =
       const EventStreamProvider<MouseEvent>('dragleave');
 
@@ -16846,8 +13376,6 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.dragoverEvent')
-  @DocsEditable()
   static const EventStreamProvider<MouseEvent> dragOverEvent =
       const EventStreamProvider<MouseEvent>('dragover');
 
@@ -16864,8 +13392,6 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.dragstartEvent')
-  @DocsEditable()
   static const EventStreamProvider<MouseEvent> dragStartEvent =
       const EventStreamProvider<MouseEvent>('dragstart');
 
@@ -16883,26 +13409,15 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.dropEvent')
-  @DocsEditable()
   static const EventStreamProvider<MouseEvent> dropEvent =
       const EventStreamProvider<MouseEvent>('drop');
 
-  @DomName('Element.durationchangeEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> durationChangeEvent =
       const EventStreamProvider<Event>('durationchange');
 
-  @DomName('Element.emptiedEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> emptiedEvent =
       const EventStreamProvider<Event>('emptied');
 
-  @DomName('Element.endedEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> endedEvent =
       const EventStreamProvider<Event>('ended');
 
@@ -16912,8 +13427,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.errorEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
@@ -16923,8 +13436,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.focusEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> focusEvent =
       const EventStreamProvider<Event>('focus');
 
@@ -16934,8 +13445,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.inputEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> inputEvent =
       const EventStreamProvider<Event>('input');
 
@@ -16945,8 +13454,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.invalidEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> invalidEvent =
       const EventStreamProvider<Event>('invalid');
 
@@ -16956,8 +13463,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.keydownEvent')
-  @DocsEditable()
   static const EventStreamProvider<KeyboardEvent> keyDownEvent =
       const EventStreamProvider<KeyboardEvent>('keydown');
 
@@ -16967,8 +13472,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.keypressEvent')
-  @DocsEditable()
   static const EventStreamProvider<KeyboardEvent> keyPressEvent =
       const EventStreamProvider<KeyboardEvent>('keypress');
 
@@ -16978,8 +13481,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.keyupEvent')
-  @DocsEditable()
   static const EventStreamProvider<KeyboardEvent> keyUpEvent =
       const EventStreamProvider<KeyboardEvent>('keyup');
 
@@ -16989,20 +13490,12 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.loadEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> loadEvent =
       const EventStreamProvider<Event>('load');
 
-  @DomName('Element.loadeddataEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> loadedDataEvent =
       const EventStreamProvider<Event>('loadeddata');
 
-  @DomName('Element.loadedmetadataEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> loadedMetadataEvent =
       const EventStreamProvider<Event>('loadedmetadata');
 
@@ -17012,8 +13505,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.mousedownEvent')
-  @DocsEditable()
   static const EventStreamProvider<MouseEvent> mouseDownEvent =
       const EventStreamProvider<MouseEvent>('mousedown');
 
@@ -17023,9 +13514,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.mouseenterEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> mouseEnterEvent =
       const EventStreamProvider<MouseEvent>('mouseenter');
 
@@ -17035,9 +13523,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.mouseleaveEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> mouseLeaveEvent =
       const EventStreamProvider<MouseEvent>('mouseleave');
 
@@ -17047,8 +13532,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.mousemoveEvent')
-  @DocsEditable()
   static const EventStreamProvider<MouseEvent> mouseMoveEvent =
       const EventStreamProvider<MouseEvent>('mousemove');
 
@@ -17058,8 +13541,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.mouseoutEvent')
-  @DocsEditable()
   static const EventStreamProvider<MouseEvent> mouseOutEvent =
       const EventStreamProvider<MouseEvent>('mouseout');
 
@@ -17069,8 +13550,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.mouseoverEvent')
-  @DocsEditable()
   static const EventStreamProvider<MouseEvent> mouseOverEvent =
       const EventStreamProvider<MouseEvent>('mouseover');
 
@@ -17080,8 +13559,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.mouseupEvent')
-  @DocsEditable()
   static const EventStreamProvider<MouseEvent> mouseUpEvent =
       const EventStreamProvider<MouseEvent>('mouseup');
 
@@ -17091,32 +13568,18 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.pasteEvent')
-  @DocsEditable()
   static const EventStreamProvider<ClipboardEvent> pasteEvent =
       const EventStreamProvider<ClipboardEvent>('paste');
 
-  @DomName('Element.pauseEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> pauseEvent =
       const EventStreamProvider<Event>('pause');
 
-  @DomName('Element.playEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> playEvent =
       const EventStreamProvider<Event>('play');
 
-  @DomName('Element.playingEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> playingEvent =
       const EventStreamProvider<Event>('playing');
 
-  @DomName('Element.ratechangeEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> rateChangeEvent =
       const EventStreamProvider<Event>('ratechange');
 
@@ -17126,14 +13589,9 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.resetEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> resetEvent =
       const EventStreamProvider<Event>('reset');
 
-  @DomName('Element.resizeEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> resizeEvent =
       const EventStreamProvider<Event>('resize');
 
@@ -17143,8 +13601,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.scrollEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> scrollEvent =
       const EventStreamProvider<Event>('scroll');
 
@@ -17154,22 +13610,12 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.searchEvent')
-  @DocsEditable()
-  // http://www.w3.org/TR/html-markup/input.search.html
-  @Experimental()
   static const EventStreamProvider<Event> searchEvent =
       const EventStreamProvider<Event>('search');
 
-  @DomName('Element.seekedEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> seekedEvent =
       const EventStreamProvider<Event>('seeked');
 
-  @DomName('Element.seekingEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> seekingEvent =
       const EventStreamProvider<Event>('seeking');
 
@@ -17179,8 +13625,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.selectEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> selectEvent =
       const EventStreamProvider<Event>('select');
 
@@ -17190,15 +13634,9 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.selectstartEvent')
-  @DocsEditable()
-  @Experimental() // nonstandard
   static const EventStreamProvider<Event> selectStartEvent =
       const EventStreamProvider<Event>('selectstart');
 
-  @DomName('Element.stalledEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> stalledEvent =
       const EventStreamProvider<Event>('stalled');
 
@@ -17208,20 +13646,12 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.submitEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> submitEvent =
       const EventStreamProvider<Event>('submit');
 
-  @DomName('Element.suspendEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> suspendEvent =
       const EventStreamProvider<Event>('suspend');
 
-  @DomName('Element.timeupdateEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> timeUpdateEvent =
       const EventStreamProvider<Event>('timeupdate');
 
@@ -17231,10 +13661,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.touchcancelEvent')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   static const EventStreamProvider<TouchEvent> touchCancelEvent =
       const EventStreamProvider<TouchEvent>('touchcancel');
 
@@ -17244,10 +13670,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.touchendEvent')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   static const EventStreamProvider<TouchEvent> touchEndEvent =
       const EventStreamProvider<TouchEvent>('touchend');
 
@@ -17257,10 +13679,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.touchenterEvent')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   static const EventStreamProvider<TouchEvent> touchEnterEvent =
       const EventStreamProvider<TouchEvent>('touchenter');
 
@@ -17270,10 +13688,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.touchleaveEvent')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   static const EventStreamProvider<TouchEvent> touchLeaveEvent =
       const EventStreamProvider<TouchEvent>('touchleave');
 
@@ -17283,10 +13697,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.touchmoveEvent')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   static const EventStreamProvider<TouchEvent> touchMoveEvent =
       const EventStreamProvider<TouchEvent>('touchmove');
 
@@ -17296,22 +13706,12 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.touchstartEvent')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   static const EventStreamProvider<TouchEvent> touchStartEvent =
       const EventStreamProvider<TouchEvent>('touchstart');
 
-  @DomName('Element.volumechangeEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> volumeChangeEvent =
       const EventStreamProvider<Event>('volumechange');
 
-  @DomName('Element.waitingEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> waitingEvent =
       const EventStreamProvider<Event>('waiting');
 
@@ -17321,12 +13721,8 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.webkitfullscreenchangeEvent')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html
   static const EventStreamProvider<Event> fullscreenChangeEvent =
       const EventStreamProvider<Event>('webkitfullscreenchange');
 
@@ -17336,27 +13732,16 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.webkitfullscreenerrorEvent')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html
   static const EventStreamProvider<Event> fullscreenErrorEvent =
       const EventStreamProvider<Event>('webkitfullscreenerror');
 
-  @DomName('Element.wheelEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<WheelEvent> wheelEvent =
       const EventStreamProvider<WheelEvent>('wheel');
 
-  @DomName('Element.contentEditable')
-  @DocsEditable()
   String contentEditable;
 
-  @DomName('Element.dir')
-  @DocsEditable()
   String dir;
 
   /**
@@ -17372,8 +13757,6 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.draggable')
-  @DocsEditable()
   bool draggable;
 
   /**
@@ -17385,43 +13768,23 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#the-hidden-attribute)
    *   from WHATWG.
    */
-  @DomName('Element.hidden')
-  @DocsEditable()
   bool hidden;
 
-  @DomName('Element.inert')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool inert;
 
-  @DomName('Element.inputMode')
-  @DocsEditable()
-  @Experimental() // untriaged
   String inputMode;
 
   // Using property as subclass shadows.
   bool get isContentEditable => JS("bool", "#.isContentEditable", this);
 
-  @DomName('Element.lang')
-  @DocsEditable()
   String lang;
 
-  @DomName('Element.spellcheck')
-  @DocsEditable()
-  // http://blog.whatwg.org/the-road-to-html-5-spellchecking
-  @Experimental() // nonstandard
   bool spellcheck;
 
-  @DomName('Element.style')
-  @DocsEditable()
   final CssStyleDeclaration style;
 
-  @DomName('Element.tabIndex')
-  @DocsEditable()
   int tabIndex;
 
-  @DomName('Element.title')
-  @DocsEditable()
   String title;
 
   /**
@@ -17434,130 +13797,67 @@
    *   attribute](https://html.spec.whatwg.org/multipage/dom.html#the-translate-attribute)
    *   from WHATWG.
    */
-  @DomName('Element.translate')
-  @DocsEditable()
-  // http://www.whatwg.org/specs/web-apps/current-work/multipage/elements.html#the-translate-attribute
-  @Experimental()
   bool translate;
 
-  @DomName('Element.blur')
-  @DocsEditable()
   void blur() native;
 
-  @DomName('Element.click')
-  @DocsEditable()
   void click() native;
 
-  @DomName('Element.focus')
-  @DocsEditable()
   void focus() native;
 
-  @DomName('Element.accessibleNode')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AccessibleNode accessibleNode;
 
-  @DomName('Element.assignedSlot')
-  @DocsEditable()
-  @Experimental() // untriaged
   final SlotElement assignedSlot;
 
   @JSName('attributes')
-  @DomName('Element.attributes')
-  @DocsEditable()
   final _NamedNodeMap _attributes;
 
-  @DomName('Element.className')
-  @DocsEditable()
   String className;
 
-  @DomName('Element.clientHeight')
-  @DocsEditable()
   final int clientHeight;
 
-  @DomName('Element.clientLeft')
-  @DocsEditable()
   final int clientLeft;
 
-  @DomName('Element.clientTop')
-  @DocsEditable()
   final int clientTop;
 
-  @DomName('Element.clientWidth')
-  @DocsEditable()
   final int clientWidth;
 
-  @DomName('Element.computedName')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String computedName;
 
-  @DomName('Element.computedRole')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String computedRole;
 
-  @DomName('Element.id')
-  @DocsEditable()
   String id;
 
   @JSName('innerHTML')
-  @DomName('Element.innerHTML')
-  @DocsEditable()
   String _innerHtml;
 
   @JSName('localName')
-  @DomName('Element.localName')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String _localName;
 
   @JSName('namespaceURI')
-  @DomName('Element.namespaceURI')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String _namespaceUri;
 
   // Using property as subclass shadows.
   String get outerHtml => JS("String", "#.outerHTML", this);
 
   @JSName('scrollHeight')
-  @DomName('Element.scrollHeight')
-  @DocsEditable()
   final int _scrollHeight;
 
   @JSName('scrollLeft')
-  @DomName('Element.scrollLeft')
-  @DocsEditable()
   num _scrollLeft;
 
   @JSName('scrollTop')
-  @DomName('Element.scrollTop')
-  @DocsEditable()
   num _scrollTop;
 
   @JSName('scrollWidth')
-  @DomName('Element.scrollWidth')
-  @DocsEditable()
   final int _scrollWidth;
 
-  @DomName('Element.slot')
-  @DocsEditable()
-  @Experimental() // untriaged
   String slot;
 
-  @DomName('Element.styleMap')
-  @DocsEditable()
-  @Experimental() // untriaged
   final StylePropertyMap styleMap;
 
-  @DomName('Element.tagName')
-  @DocsEditable()
   final String tagName;
 
-  @DomName('Element.attachShadow')
-  @DocsEditable()
-  @Experimental() // untriaged
   ShadowRoot attachShadow(Map shadowRootInitDict) {
     var shadowRootInitDict_1 =
         convertDartToNative_Dictionary(shadowRootInitDict);
@@ -17565,34 +13865,16 @@
   }
 
   @JSName('attachShadow')
-  @DomName('Element.attachShadow')
-  @DocsEditable()
-  @Experimental() // untriaged
   ShadowRoot _attachShadow_1(shadowRootInitDict) native;
 
-  @DomName('Element.closest')
-  @DocsEditable()
-  @Experimental() // untriaged
   Element closest(String selectors) native;
 
-  @DomName('Element.getAnimations')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<Animation> getAnimations() native;
 
-  @DomName('Element.getAttribute')
-  @DocsEditable()
-  @Experimental() // untriaged
   String getAttribute(String name) native;
 
-  @DomName('Element.getAttributeNS')
-  @DocsEditable()
-  @Experimental() // untriaged
   String getAttributeNS(String namespaceURI, String localName) native;
 
-  @DomName('Element.getAttributeNames')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<String> getAttributeNames() native;
 
   /**
@@ -17607,8 +13889,6 @@
    *   method](http://www.w3.org/TR/cssom-view/#the-getclientrects()-and-getboundingclientrect()-methods)
    *   from W3C.
    */
-  @DomName('Element.getBoundingClientRect')
-  @DocsEditable()
   @Creates('_DomRect')
   @Returns('_DomRect|Null')
   Rectangle getBoundingClientRect() native;
@@ -17626,8 +13906,6 @@
    *   method](http://www.w3.org/TR/cssom-view/#the-getclientrects()-and-getboundingclientrect()-methods)
    *   from W3C.
    */
-  @DomName('Element.getClientRects')
-  @DocsEditable()
   @Creates('DomRectList')
   @Returns('DomRectList|Null')
   List<Rectangle> _getClientRects() native;
@@ -17642,9 +13920,6 @@
    *   specification](https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html)
    *   from W3C.
    */
-  @DomName('Element.getDestinationInsertionPoints')
-  @DocsEditable()
-  @Experimental() // untriaged
   @Returns('NodeList|Null')
   @Creates('NodeList')
   List<Node> getDestinationInsertionPoints() native;
@@ -17658,62 +13933,35 @@
    *   from MDN.
    * * [DOM specification](http://www.w3.org/TR/domcore/) from W3C.
    */
-  @DomName('Element.getElementsByClassName')
-  @DocsEditable()
   @Creates('NodeList|HtmlCollection')
   @Returns('NodeList|HtmlCollection')
   List<Node> getElementsByClassName(String classNames) native;
 
   @JSName('getElementsByTagName')
-  @DomName('Element.getElementsByTagName')
-  @DocsEditable()
   @Creates('NodeList|HtmlCollection')
   @Returns('NodeList|HtmlCollection')
   List<Node> _getElementsByTagName(String localName) native;
 
   @JSName('hasAttribute')
-  @DomName('Element.hasAttribute')
-  @DocsEditable()
   bool _hasAttribute(String name) native;
 
   @JSName('hasAttributeNS')
-  @DomName('Element.hasAttributeNS')
-  @DocsEditable()
   bool _hasAttributeNS(String namespaceURI, String localName) native;
 
-  @DomName('Element.hasPointerCapture')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool hasPointerCapture(int pointerId) native;
 
-  @DomName('Element.releasePointerCapture')
-  @DocsEditable()
-  @Experimental() // untriaged
   void releasePointerCapture(int pointerId) native;
 
   @JSName('removeAttribute')
-  @DomName('Element.removeAttribute')
-  @DocsEditable()
   void _removeAttribute(String name) native;
 
   @JSName('removeAttributeNS')
-  @DomName('Element.removeAttributeNS')
-  @DocsEditable()
   void _removeAttributeNS(String namespaceURI, String localName) native;
 
-  @DomName('Element.requestFullscreen')
-  @DocsEditable()
-  @Experimental() // untriaged
   void requestFullscreen() native;
 
-  @DomName('Element.requestPointerLock')
-  @DocsEditable()
-  @Experimental() // untriaged
   void requestPointerLock() native;
 
-  @DomName('Element.scroll')
-  @DocsEditable()
-  @Experimental() // untriaged
   void scroll([options_OR_x, num y]) {
     if (options_OR_x == null && y == null) {
       _scroll_1();
@@ -17732,24 +13980,12 @@
   }
 
   @JSName('scroll')
-  @DomName('Element.scroll')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _scroll_1() native;
   @JSName('scroll')
-  @DomName('Element.scroll')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _scroll_2(options) native;
   @JSName('scroll')
-  @DomName('Element.scroll')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _scroll_3(num x, y) native;
 
-  @DomName('Element.scrollBy')
-  @DocsEditable()
-  @Experimental() // untriaged
   void scrollBy([options_OR_x, num y]) {
     if (options_OR_x == null && y == null) {
       _scrollBy_1();
@@ -17768,36 +14004,18 @@
   }
 
   @JSName('scrollBy')
-  @DomName('Element.scrollBy')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _scrollBy_1() native;
   @JSName('scrollBy')
-  @DomName('Element.scrollBy')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _scrollBy_2(options) native;
   @JSName('scrollBy')
-  @DomName('Element.scrollBy')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _scrollBy_3(num x, y) native;
 
   @JSName('scrollIntoView')
-  @DomName('Element.scrollIntoView')
-  @DocsEditable()
   void _scrollIntoView([Object arg]) native;
 
   @JSName('scrollIntoViewIfNeeded')
-  @DomName('Element.scrollIntoViewIfNeeded')
-  @DocsEditable()
-  // http://docs.webplatform.org/wiki/dom/methods/scrollIntoViewIfNeeded
-  @Experimental() // non-standard
   void _scrollIntoViewIfNeeded([bool centerIfNeeded]) native;
 
-  @DomName('Element.scrollTo')
-  @DocsEditable()
-  @Experimental() // untriaged
   void scrollTo([options_OR_x, num y]) {
     if (options_OR_x == null && y == null) {
       _scrollTo_1();
@@ -17816,90 +14034,50 @@
   }
 
   @JSName('scrollTo')
-  @DomName('Element.scrollTo')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _scrollTo_1() native;
   @JSName('scrollTo')
-  @DomName('Element.scrollTo')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _scrollTo_2(options) native;
   @JSName('scrollTo')
-  @DomName('Element.scrollTo')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _scrollTo_3(num x, y) native;
 
-  @DomName('Element.setApplyScroll')
-  @DocsEditable()
-  @Experimental() // untriaged
   void setApplyScroll(ScrollStateCallback scrollStateCallback,
       String nativeScrollBehavior) native;
 
-  @DomName('Element.setAttribute')
-  @DocsEditable()
   void setAttribute(String name, String value) native;
 
-  @DomName('Element.setAttributeNS')
-  @DocsEditable()
   void setAttributeNS(String namespaceURI, String name, String value) native;
 
-  @DomName('Element.setDistributeScroll')
-  @DocsEditable()
-  @Experimental() // untriaged
   void setDistributeScroll(ScrollStateCallback scrollStateCallback,
       String nativeScrollBehavior) native;
 
-  @DomName('Element.setPointerCapture')
-  @DocsEditable()
-  @Experimental() // untriaged
   void setPointerCapture(int pointerId) native;
 
   // From ChildNode
 
-  @DomName('Element.after')
-  @DocsEditable()
-  @Experimental() // untriaged
   void after(Object nodes) native;
 
-  @DomName('Element.before')
-  @DocsEditable()
-  @Experimental() // untriaged
   void before(Object nodes) native;
 
   // From NonDocumentTypeChildNode
 
-  @DomName('Element.nextElementSibling')
-  @DocsEditable()
   final Element nextElementSibling;
 
-  @DomName('Element.previousElementSibling')
-  @DocsEditable()
   final Element previousElementSibling;
 
   // From ParentNode
 
   @JSName('childElementCount')
-  @DomName('Element.childElementCount')
-  @DocsEditable()
   final int _childElementCount;
 
   @JSName('children')
-  @DomName('Element.children')
-  @DocsEditable()
   @Returns('HtmlCollection|Null')
   @Creates('HtmlCollection')
   final List<Node> _children;
 
   @JSName('firstElementChild')
-  @DomName('Element.firstElementChild')
-  @DocsEditable()
   final Element _firstElementChild;
 
   @JSName('lastElementChild')
-  @DomName('Element.lastElementChild')
-  @DocsEditable()
   final Element _lastElementChild;
 
   /**
@@ -17918,82 +14096,50 @@
    * For details about CSS selector syntax, see the
    * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
    */
-  @DomName('Element.querySelector')
-  @DocsEditable()
   Element querySelector(String selectors) native;
 
   @JSName('querySelectorAll')
-  @DomName('Element.querySelectorAll')
-  @DocsEditable()
   @Creates('NodeList')
   @Returns('NodeList')
   List<Node> _querySelectorAll(String selectors) native;
 
   /// Stream of `abort` events handled by this [Element].
-  @DomName('Element.onabort')
-  @DocsEditable()
   ElementStream<Event> get onAbort => abortEvent.forElement(this);
 
   /// Stream of `beforecopy` events handled by this [Element].
-  @DomName('Element.onbeforecopy')
-  @DocsEditable()
   ElementStream<Event> get onBeforeCopy => beforeCopyEvent.forElement(this);
 
   /// Stream of `beforecut` events handled by this [Element].
-  @DomName('Element.onbeforecut')
-  @DocsEditable()
   ElementStream<Event> get onBeforeCut => beforeCutEvent.forElement(this);
 
   /// Stream of `beforepaste` events handled by this [Element].
-  @DomName('Element.onbeforepaste')
-  @DocsEditable()
   ElementStream<Event> get onBeforePaste => beforePasteEvent.forElement(this);
 
   /// Stream of `blur` events handled by this [Element].
-  @DomName('Element.onblur')
-  @DocsEditable()
   ElementStream<Event> get onBlur => blurEvent.forElement(this);
 
-  @DomName('Element.oncanplay')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onCanPlay => canPlayEvent.forElement(this);
 
-  @DomName('Element.oncanplaythrough')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onCanPlayThrough =>
       canPlayThroughEvent.forElement(this);
 
   /// Stream of `change` events handled by this [Element].
-  @DomName('Element.onchange')
-  @DocsEditable()
   ElementStream<Event> get onChange => changeEvent.forElement(this);
 
   /// Stream of `click` events handled by this [Element].
-  @DomName('Element.onclick')
-  @DocsEditable()
   ElementStream<MouseEvent> get onClick => clickEvent.forElement(this);
 
   /// Stream of `contextmenu` events handled by this [Element].
-  @DomName('Element.oncontextmenu')
-  @DocsEditable()
   ElementStream<MouseEvent> get onContextMenu =>
       contextMenuEvent.forElement(this);
 
   /// Stream of `copy` events handled by this [Element].
-  @DomName('Element.oncopy')
-  @DocsEditable()
   ElementStream<ClipboardEvent> get onCopy => copyEvent.forElement(this);
 
   /// Stream of `cut` events handled by this [Element].
-  @DomName('Element.oncut')
-  @DocsEditable()
   ElementStream<ClipboardEvent> get onCut => cutEvent.forElement(this);
 
   /// Stream of `doubleclick` events handled by this [Element].
-  @DomName('Element.ondblclick')
-  @DocsEditable()
   ElementStream<Event> get onDoubleClick => doubleClickEvent.forElement(this);
 
   /**
@@ -18013,8 +14159,6 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.ondrag')
-  @DocsEditable()
   ElementStream<MouseEvent> get onDrag => dragEvent.forElement(this);
 
   /**
@@ -18031,8 +14175,6 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.ondragend')
-  @DocsEditable()
   ElementStream<MouseEvent> get onDragEnd => dragEndEvent.forElement(this);
 
   /**
@@ -18049,8 +14191,6 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.ondragenter')
-  @DocsEditable()
   ElementStream<MouseEvent> get onDragEnter => dragEnterEvent.forElement(this);
 
   /**
@@ -18067,8 +14207,6 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.ondragleave')
-  @DocsEditable()
   ElementStream<MouseEvent> get onDragLeave => dragLeaveEvent.forElement(this);
 
   /**
@@ -18085,8 +14223,6 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.ondragover')
-  @DocsEditable()
   ElementStream<MouseEvent> get onDragOver => dragOverEvent.forElement(this);
 
   /**
@@ -18103,8 +14239,6 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.ondragstart')
-  @DocsEditable()
   ElementStream<MouseEvent> get onDragStart => dragStartEvent.forElement(this);
 
   /**
@@ -18121,261 +14255,135 @@
    *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
    *   from WHATWG.
    */
-  @DomName('Element.ondrop')
-  @DocsEditable()
   ElementStream<MouseEvent> get onDrop => dropEvent.forElement(this);
 
-  @DomName('Element.ondurationchange')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onDurationChange =>
       durationChangeEvent.forElement(this);
 
-  @DomName('Element.onemptied')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onEmptied => emptiedEvent.forElement(this);
 
-  @DomName('Element.onended')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onEnded => endedEvent.forElement(this);
 
   /// Stream of `error` events handled by this [Element].
-  @DomName('Element.onerror')
-  @DocsEditable()
   ElementStream<Event> get onError => errorEvent.forElement(this);
 
   /// Stream of `focus` events handled by this [Element].
-  @DomName('Element.onfocus')
-  @DocsEditable()
   ElementStream<Event> get onFocus => focusEvent.forElement(this);
 
   /// Stream of `input` events handled by this [Element].
-  @DomName('Element.oninput')
-  @DocsEditable()
   ElementStream<Event> get onInput => inputEvent.forElement(this);
 
   /// Stream of `invalid` events handled by this [Element].
-  @DomName('Element.oninvalid')
-  @DocsEditable()
   ElementStream<Event> get onInvalid => invalidEvent.forElement(this);
 
   /// Stream of `keydown` events handled by this [Element].
-  @DomName('Element.onkeydown')
-  @DocsEditable()
   ElementStream<KeyboardEvent> get onKeyDown => keyDownEvent.forElement(this);
 
   /// Stream of `keypress` events handled by this [Element].
-  @DomName('Element.onkeypress')
-  @DocsEditable()
   ElementStream<KeyboardEvent> get onKeyPress => keyPressEvent.forElement(this);
 
   /// Stream of `keyup` events handled by this [Element].
-  @DomName('Element.onkeyup')
-  @DocsEditable()
   ElementStream<KeyboardEvent> get onKeyUp => keyUpEvent.forElement(this);
 
   /// Stream of `load` events handled by this [Element].
-  @DomName('Element.onload')
-  @DocsEditable()
   ElementStream<Event> get onLoad => loadEvent.forElement(this);
 
-  @DomName('Element.onloadeddata')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onLoadedData => loadedDataEvent.forElement(this);
 
-  @DomName('Element.onloadedmetadata')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onLoadedMetadata =>
       loadedMetadataEvent.forElement(this);
 
   /// Stream of `mousedown` events handled by this [Element].
-  @DomName('Element.onmousedown')
-  @DocsEditable()
   ElementStream<MouseEvent> get onMouseDown => mouseDownEvent.forElement(this);
 
   /// Stream of `mouseenter` events handled by this [Element].
-  @DomName('Element.onmouseenter')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<MouseEvent> get onMouseEnter =>
       mouseEnterEvent.forElement(this);
 
   /// Stream of `mouseleave` events handled by this [Element].
-  @DomName('Element.onmouseleave')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<MouseEvent> get onMouseLeave =>
       mouseLeaveEvent.forElement(this);
 
   /// Stream of `mousemove` events handled by this [Element].
-  @DomName('Element.onmousemove')
-  @DocsEditable()
   ElementStream<MouseEvent> get onMouseMove => mouseMoveEvent.forElement(this);
 
   /// Stream of `mouseout` events handled by this [Element].
-  @DomName('Element.onmouseout')
-  @DocsEditable()
   ElementStream<MouseEvent> get onMouseOut => mouseOutEvent.forElement(this);
 
   /// Stream of `mouseover` events handled by this [Element].
-  @DomName('Element.onmouseover')
-  @DocsEditable()
   ElementStream<MouseEvent> get onMouseOver => mouseOverEvent.forElement(this);
 
   /// Stream of `mouseup` events handled by this [Element].
-  @DomName('Element.onmouseup')
-  @DocsEditable()
   ElementStream<MouseEvent> get onMouseUp => mouseUpEvent.forElement(this);
 
   /// Stream of `mousewheel` events handled by this [Element].
-  @DomName('Element.onmousewheel')
-  @DocsEditable()
-  // http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents
-  @Experimental() // non-standard
   ElementStream<WheelEvent> get onMouseWheel =>
       mouseWheelEvent.forElement(this);
 
   /// Stream of `paste` events handled by this [Element].
-  @DomName('Element.onpaste')
-  @DocsEditable()
   ElementStream<ClipboardEvent> get onPaste => pasteEvent.forElement(this);
 
-  @DomName('Element.onpause')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onPause => pauseEvent.forElement(this);
 
-  @DomName('Element.onplay')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onPlay => playEvent.forElement(this);
 
-  @DomName('Element.onplaying')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onPlaying => playingEvent.forElement(this);
 
-  @DomName('Element.onratechange')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onRateChange => rateChangeEvent.forElement(this);
 
   /// Stream of `reset` events handled by this [Element].
-  @DomName('Element.onreset')
-  @DocsEditable()
   ElementStream<Event> get onReset => resetEvent.forElement(this);
 
-  @DomName('Element.onresize')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onResize => resizeEvent.forElement(this);
 
   /// Stream of `scroll` events handled by this [Element].
-  @DomName('Element.onscroll')
-  @DocsEditable()
   ElementStream<Event> get onScroll => scrollEvent.forElement(this);
 
   /// Stream of `search` events handled by this [Element].
-  @DomName('Element.onsearch')
-  @DocsEditable()
-  // http://www.w3.org/TR/html-markup/input.search.html
-  @Experimental()
   ElementStream<Event> get onSearch => searchEvent.forElement(this);
 
-  @DomName('Element.onseeked')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onSeeked => seekedEvent.forElement(this);
 
-  @DomName('Element.onseeking')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onSeeking => seekingEvent.forElement(this);
 
   /// Stream of `select` events handled by this [Element].
-  @DomName('Element.onselect')
-  @DocsEditable()
   ElementStream<Event> get onSelect => selectEvent.forElement(this);
 
   /// Stream of `selectstart` events handled by this [Element].
-  @DomName('Element.onselectstart')
-  @DocsEditable()
-  @Experimental() // nonstandard
   ElementStream<Event> get onSelectStart => selectStartEvent.forElement(this);
 
-  @DomName('Element.onstalled')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onStalled => stalledEvent.forElement(this);
 
   /// Stream of `submit` events handled by this [Element].
-  @DomName('Element.onsubmit')
-  @DocsEditable()
   ElementStream<Event> get onSubmit => submitEvent.forElement(this);
 
-  @DomName('Element.onsuspend')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onSuspend => suspendEvent.forElement(this);
 
-  @DomName('Element.ontimeupdate')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onTimeUpdate => timeUpdateEvent.forElement(this);
 
   /// Stream of `touchcancel` events handled by this [Element].
-  @DomName('Element.ontouchcancel')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   ElementStream<TouchEvent> get onTouchCancel =>
       touchCancelEvent.forElement(this);
 
   /// Stream of `touchend` events handled by this [Element].
-  @DomName('Element.ontouchend')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   ElementStream<TouchEvent> get onTouchEnd => touchEndEvent.forElement(this);
 
   /// Stream of `touchenter` events handled by this [Element].
-  @DomName('Element.ontouchenter')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   ElementStream<TouchEvent> get onTouchEnter =>
       touchEnterEvent.forElement(this);
 
   /// Stream of `touchleave` events handled by this [Element].
-  @DomName('Element.ontouchleave')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   ElementStream<TouchEvent> get onTouchLeave =>
       touchLeaveEvent.forElement(this);
 
   /// Stream of `touchmove` events handled by this [Element].
-  @DomName('Element.ontouchmove')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   ElementStream<TouchEvent> get onTouchMove => touchMoveEvent.forElement(this);
 
   /// Stream of `touchstart` events handled by this [Element].
-  @DomName('Element.ontouchstart')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   ElementStream<TouchEvent> get onTouchStart =>
       touchStartEvent.forElement(this);
 
   /// Stream of `transitionend` events handled by this [Element].
-  @DomName('Element.ontransitionend')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -18383,40 +14391,22 @@
   ElementStream<TransitionEvent> get onTransitionEnd =>
       transitionEndEvent.forElement(this);
 
-  @DomName('Element.onvolumechange')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onVolumeChange => volumeChangeEvent.forElement(this);
 
-  @DomName('Element.onwaiting')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onWaiting => waitingEvent.forElement(this);
 
   /// Stream of `fullscreenchange` events handled by this [Element].
-  @DomName('Element.onwebkitfullscreenchange')
-  @DocsEditable()
-  // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html
-  @Experimental()
   ElementStream<Event> get onFullscreenChange =>
       fullscreenChangeEvent.forElement(this);
 
   /// Stream of `fullscreenerror` events handled by this [Element].
-  @DomName('Element.onwebkitfullscreenerror')
-  @DocsEditable()
-  // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html
-  @Experimental()
   ElementStream<Event> get onFullscreenError =>
       fullscreenErrorEvent.forElement(this);
 
-  @DomName('Element.onwheel')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<WheelEvent> get onWheel => wheelEvent.forElement(this);
 }
 
 class _ElementFactoryProvider {
-  @DomName('Document.createElement')
   // Optimization to improve performance until the dart2js compiler inlines this
   // method.
   static dynamic createElement_tag(String tag, String typeExtension) {
@@ -18454,8 +14444,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.
 
-@DocsEditable()
-@DomName('HTMLEmbedElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.IE)
 @SupportedBrowser(SupportedBrowser.SAFARI)
@@ -18467,8 +14455,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLEmbedElement.HTMLEmbedElement')
-  @DocsEditable()
   factory EmbedElement() => document.createElement("embed");
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
@@ -18480,32 +14466,18 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('embed');
 
-  @DomName('HTMLEmbedElement.height')
-  @DocsEditable()
   String height;
 
-  @DomName('HTMLEmbedElement.name')
-  @DocsEditable()
   String name;
 
-  @DomName('HTMLEmbedElement.src')
-  @DocsEditable()
   String src;
 
-  @DomName('HTMLEmbedElement.type')
-  @DocsEditable()
   String type;
 
-  @DomName('HTMLEmbedElement.width')
-  @DocsEditable()
   String width;
 
-  @DomName('HTMLEmbedElement.__getter__')
-  @DocsEditable()
   Node __getter__(String name) native;
 
-  @DomName('HTMLEmbedElement.__setter__')
-  @DocsEditable()
   void __setter__(String name, Node value) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18514,18 +14486,11 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('EntriesCallback')
-// http://www.w3.org/TR/file-system-api/#the-entriescallback-interface
-@Experimental()
 typedef void _EntriesCallback(List<Entry> entries);
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('Entry')
-// http://www.w3.org/TR/file-system-api/#the-entry-interface
-@Experimental()
 @Native("Entry")
 class Entry extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -18533,37 +14498,23 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Entry.filesystem')
-  @DocsEditable()
   final FileSystem filesystem;
 
-  @DomName('Entry.fullPath')
-  @DocsEditable()
   final String fullPath;
 
-  @DomName('Entry.isDirectory')
-  @DocsEditable()
   final bool isDirectory;
 
-  @DomName('Entry.isFile')
-  @DocsEditable()
   final bool isFile;
 
-  @DomName('Entry.name')
-  @DocsEditable()
   final String name;
 
   @JSName('copyTo')
-  @DomName('Entry.copyTo')
-  @DocsEditable()
   void _copyTo(DirectoryEntry parent,
       [String name,
       _EntryCallback successCallback,
       _ErrorCallback errorCallback]) native;
 
   @JSName('copyTo')
-  @DomName('Entry.copyTo')
-  @DocsEditable()
   Future<Entry> copyTo(DirectoryEntry parent, {String name}) {
     var completer = new Completer<Entry>();
     _copyTo(parent, name, (value) {
@@ -18575,14 +14526,10 @@
   }
 
   @JSName('getMetadata')
-  @DomName('Entry.getMetadata')
-  @DocsEditable()
   void _getMetadata(MetadataCallback successCallback,
       [_ErrorCallback errorCallback]) native;
 
   @JSName('getMetadata')
-  @DomName('Entry.getMetadata')
-  @DocsEditable()
   Future<Metadata> getMetadata() {
     var completer = new Completer<Metadata>();
     _getMetadata((value) {
@@ -18595,14 +14542,10 @@
   }
 
   @JSName('getParent')
-  @DomName('Entry.getParent')
-  @DocsEditable()
   void _getParent(
       [_EntryCallback successCallback, _ErrorCallback errorCallback]) native;
 
   @JSName('getParent')
-  @DomName('Entry.getParent')
-  @DocsEditable()
   Future<Entry> getParent() {
     var completer = new Completer<Entry>();
     _getParent((value) {
@@ -18614,16 +14557,12 @@
   }
 
   @JSName('moveTo')
-  @DomName('Entry.moveTo')
-  @DocsEditable()
   void _moveTo(DirectoryEntry parent,
       [String name,
       _EntryCallback successCallback,
       _ErrorCallback errorCallback]) native;
 
   @JSName('moveTo')
-  @DomName('Entry.moveTo')
-  @DocsEditable()
   Future<Entry> moveTo(DirectoryEntry parent, {String name}) {
     var completer = new Completer<Entry>();
     _moveTo(parent, name, (value) {
@@ -18635,14 +14574,10 @@
   }
 
   @JSName('remove')
-  @DomName('Entry.remove')
-  @DocsEditable()
   void _remove(VoidCallback successCallback, [_ErrorCallback errorCallback])
       native;
 
   @JSName('remove')
-  @DomName('Entry.remove')
-  @DocsEditable()
   Future remove() {
     var completer = new Completer();
     _remove(() {
@@ -18654,8 +14589,6 @@
   }
 
   @JSName('toURL')
-  @DomName('Entry.toURL')
-  @DocsEditable()
   String toUrl() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18664,9 +14597,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('EntryCallback')
-// http://www.w3.org/TR/file-system-api/#the-entrycallback-interface
-@Experimental()
 typedef void _EntryCallback(Entry entry);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -18674,16 +14604,11 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('ErrorCallback')
-// http://www.w3.org/TR/file-system-api/#the-errorcallback-interface
-@Experimental()
 typedef void _ErrorCallback(DomException error);
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('ErrorEvent')
 @Unstable()
 @Native("ErrorEvent")
 class ErrorEvent extends Event {
@@ -18692,8 +14617,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ErrorEvent.ErrorEvent')
-  @DocsEditable()
   factory ErrorEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -18706,27 +14629,15 @@
   static ErrorEvent _create_2(type) =>
       JS('ErrorEvent', 'new ErrorEvent(#)', type);
 
-  @DomName('ErrorEvent.colno')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int colno;
 
-  @DomName('ErrorEvent.error')
-  @DocsEditable()
-  @Experimental() // untriaged
   @Creates('Null')
   final Object error;
 
-  @DomName('ErrorEvent.filename')
-  @DocsEditable()
   final String filename;
 
-  @DomName('ErrorEvent.lineno')
-  @DocsEditable()
   final int lineno;
 
-  @DomName('ErrorEvent.message')
-  @DocsEditable()
   final String message;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18735,7 +14646,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('Event')
 @Native("Event,InputEvent")
 class Event extends Interceptor {
   // In JS, canBubble and cancelable are technically required parameters to
@@ -18787,14 +14697,9 @@
     throw new StateError('No selector matched for populating matchedTarget.');
   }
 
-  @DomName('Event.path')
-  @DocsEditable()
-  @Experimental()
   List<EventTarget> get path =>
       JS('bool', '!!#.composedPath', this) ? composedPath() : [];
 
-  @DomName('Event.Event')
-  @DocsEditable()
   factory Event._(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -18814,8 +14719,6 @@
    * * [Target phase](http://www.w3.org/TR/DOM-Level-3-Events/#target-phase)
    *   from W3C.
    */
-  @DomName('Event.AT_TARGET')
-  @DocsEditable()
   static const int AT_TARGET = 2;
 
   /**
@@ -18826,8 +14729,6 @@
    * * [Bubble phase](http://www.w3.org/TR/DOM-Level-3-Events/#bubble-phase)
    *   from W3C.
    */
-  @DomName('Event.BUBBLING_PHASE')
-  @DocsEditable()
   static const int BUBBLING_PHASE = 3;
 
   /**
@@ -18839,94 +14740,52 @@
    * * [Bubble phase](http://www.w3.org/TR/DOM-Level-3-Events/#bubble-phase)
    *   from W3C.
    */
-  @DomName('Event.CAPTURING_PHASE')
-  @DocsEditable()
   static const int CAPTURING_PHASE = 1;
 
-  @DomName('Event.bubbles')
-  @DocsEditable()
   final bool bubbles;
 
-  @DomName('Event.cancelable')
-  @DocsEditable()
   final bool cancelable;
 
-  @DomName('Event.composed')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool composed;
 
-  @DomName('Event.currentTarget')
-  @DocsEditable()
   EventTarget get currentTarget =>
       _convertNativeToDart_EventTarget(this._get_currentTarget);
   @JSName('currentTarget')
-  @DomName('Event.currentTarget')
-  @DocsEditable()
   @Creates('Null')
   @Returns('EventTarget|=Object')
   final dynamic _get_currentTarget;
 
-  @DomName('Event.defaultPrevented')
-  @DocsEditable()
   final bool defaultPrevented;
 
-  @DomName('Event.eventPhase')
-  @DocsEditable()
   final int eventPhase;
 
-  @DomName('Event.isTrusted')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool isTrusted;
 
-  @DomName('Event.target')
-  @DocsEditable()
   EventTarget get target => _convertNativeToDart_EventTarget(this._get_target);
   @JSName('target')
-  @DomName('Event.target')
-  @DocsEditable()
   @Creates('Node')
   @Returns('EventTarget|=Object')
   final dynamic _get_target;
 
-  @DomName('Event.timeStamp')
-  @DocsEditable()
   final num timeStamp;
 
-  @DomName('Event.type')
-  @DocsEditable()
   final String type;
 
-  @DomName('Event.composedPath')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<EventTarget> composedPath() native;
 
   @JSName('initEvent')
-  @DomName('Event.initEvent')
-  @DocsEditable()
   void _initEvent(String type, [bool bubbles, bool cancelable]) native;
 
-  @DomName('Event.preventDefault')
-  @DocsEditable()
   void preventDefault() native;
 
-  @DomName('Event.stopImmediatePropagation')
-  @DocsEditable()
   void stopImmediatePropagation() native;
 
-  @DomName('Event.stopPropagation')
-  @DocsEditable()
   void stopPropagation() native;
 }
 // Copyright (c) 2013, 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.
 
-@DomName('EventSource')
-// http://www.w3.org/TR/eventsource/#the-eventsource-interface
-@Experimental() // stable
 @Native("EventSource")
 class EventSource extends EventTarget {
   factory EventSource(String url, {withCredentials: false}) {
@@ -18946,8 +14805,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('EventSource.errorEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
@@ -18957,8 +14814,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('EventSource.messageEvent')
-  @DocsEditable()
   static const EventStreamProvider<MessageEvent> messageEvent =
       const EventStreamProvider<MessageEvent>('message');
 
@@ -18968,13 +14823,9 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('EventSource.openEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> openEvent =
       const EventStreamProvider<Event>('open');
 
-  @DomName('EventSource.EventSource')
-  @DocsEditable()
   static EventSource _factoryEventSource(String url,
       [Map eventSourceInitDict]) {
     if (eventSourceInitDict != null) {
@@ -18990,47 +14841,27 @@
   static EventSource _create_2(url) =>
       JS('EventSource', 'new EventSource(#)', url);
 
-  @DomName('EventSource.CLOSED')
-  @DocsEditable()
   static const int CLOSED = 2;
 
-  @DomName('EventSource.CONNECTING')
-  @DocsEditable()
   static const int CONNECTING = 0;
 
-  @DomName('EventSource.OPEN')
-  @DocsEditable()
   static const int OPEN = 1;
 
-  @DomName('EventSource.readyState')
-  @DocsEditable()
   final int readyState;
 
-  @DomName('EventSource.url')
-  @DocsEditable()
   final String url;
 
-  @DomName('EventSource.withCredentials')
-  @DocsEditable()
   final bool withCredentials;
 
-  @DomName('EventSource.close')
-  @DocsEditable()
   void close() native;
 
   /// Stream of `error` events handled by this [EventSource].
-  @DomName('EventSource.onerror')
-  @DocsEditable()
   Stream<Event> get onError => errorEvent.forTarget(this);
 
   /// Stream of `message` events handled by this [EventSource].
-  @DomName('EventSource.onmessage')
-  @DocsEditable()
   Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
 
   /// Stream of `open` events handled by this [EventSource].
-  @DomName('EventSource.onopen')
-  @DocsEditable()
   Stream<Event> get onOpen => openEvent.forTarget(this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19121,7 +14952,6 @@
  * Use the [on] property to add, and remove events
  * for compile-time type checks and a more concise API.
  */
-@DomName('EventTarget')
 @Native("EventTarget")
 class EventTarget extends Interceptor {
   // Custom element created callback.
@@ -19159,18 +14989,12 @@
   }
 
   @JSName('addEventListener')
-  @DomName('EventTarget.addEventListener')
-  @DocsEditable()
   void _addEventListener(String type, EventListener listener, [bool options])
       native;
 
-  @DomName('EventTarget.dispatchEvent')
-  @DocsEditable()
   bool dispatchEvent(Event event) native;
 
   @JSName('removeEventListener')
-  @DomName('EventTarget.removeEventListener')
-  @DocsEditable()
   void _removeEventListener(String type, EventListener listener, [bool options])
       native;
 }
@@ -19178,9 +15002,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.
 
-@DocsEditable()
-@DomName('ExtendableEvent')
-@Experimental() // untriaged
 @Native("ExtendableEvent")
 class ExtendableEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -19188,8 +15009,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ExtendableEvent.ExtendableEvent')
-  @DocsEditable()
   factory ExtendableEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -19202,18 +15021,12 @@
   static ExtendableEvent _create_2(type) =>
       JS('ExtendableEvent', 'new ExtendableEvent(#)', type);
 
-  @DomName('ExtendableEvent.waitUntil')
-  @DocsEditable()
-  @Experimental() // untriaged
   void waitUntil(Future f) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('ExtendableMessageEvent')
-@Experimental() // untriaged
 @Native("ExtendableMessageEvent")
 class ExtendableMessageEvent extends ExtendableEvent {
   // To suppress missing implicit constructor warnings.
@@ -19221,31 +15034,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ExtendableMessageEvent.data')
-  @DocsEditable()
-  @Experimental() // untriaged
   @annotation_Creates_SerializedScriptValue
   @annotation_Returns_SerializedScriptValue
   final Object data;
 
-  @DomName('ExtendableMessageEvent.lastEventId')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String lastEventId;
 
-  @DomName('ExtendableMessageEvent.origin')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String origin;
 
-  @DomName('ExtendableMessageEvent.ports')
-  @DocsEditable()
-  @Experimental() // untriaged
   final List<MessagePort> ports;
 
-  @DomName('ExtendableMessageEvent.source')
-  @DocsEditable()
-  @Experimental() // untriaged
   @Creates('Client|ServiceWorker|MessagePort')
   @Returns('Client|ServiceWorker|MessagePort|Null')
   final Object source;
@@ -19254,9 +15052,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.
 
-@DocsEditable()
-@DomName('External')
-@Experimental() // untriaged
 @Native("External")
 class External extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -19264,23 +15059,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('External.AddSearchProvider')
-  @DocsEditable()
-  @Experimental() // untriaged
   void AddSearchProvider() native;
 
-  @DomName('External.IsSearchProviderInstalled')
-  @DocsEditable()
-  @Experimental() // untriaged
   void IsSearchProviderInstalled() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('FaceDetector')
-@Experimental() // untriaged
 @Native("FaceDetector")
 class FaceDetector extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -19288,8 +15074,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('FaceDetector.FaceDetector')
-  @DocsEditable()
   factory FaceDetector([Map faceDetectorOptions]) {
     if (faceDetectorOptions != null) {
       var faceDetectorOptions_1 =
@@ -19302,9 +15086,6 @@
       JS('FaceDetector', 'new FaceDetector(#)', faceDetectorOptions);
   static FaceDetector _create_2() => JS('FaceDetector', 'new FaceDetector()');
 
-  @DomName('FaceDetector.detect')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<List<DetectedFace>> detect(/*ImageBitmapSource*/ image) =>
       promiseToFuture<List<DetectedFace>>(JS("", "#.detect(#)", this, image));
 }
@@ -19312,9 +15093,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.
 
-@DocsEditable()
-@DomName('FederatedCredential')
-@Experimental() // untriaged
 @Native("FederatedCredential")
 class FederatedCredential extends Credential implements CredentialUserData {
   // To suppress missing implicit constructor warnings.
@@ -19322,8 +15100,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('FederatedCredential.FederatedCredential')
-  @DocsEditable()
   factory FederatedCredential(Map data) {
     var data_1 = convertDartToNative_Dictionary(data);
     return FederatedCredential._create_1(data_1);
@@ -19331,36 +15107,21 @@
   static FederatedCredential _create_1(data) =>
       JS('FederatedCredential', 'new FederatedCredential(#)', data);
 
-  @DomName('FederatedCredential.protocol')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String protocol;
 
-  @DomName('FederatedCredential.provider')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String provider;
 
   // From CredentialUserData
 
   @JSName('iconURL')
-  @DomName('FederatedCredential.iconURL')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String iconUrl;
 
-  @DomName('FederatedCredential.name')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String name;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('FetchEvent')
-@Experimental() // untriaged
 @Native("FetchEvent")
 class FetchEvent extends ExtendableEvent {
   // To suppress missing implicit constructor warnings.
@@ -19368,8 +15129,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('FetchEvent.FetchEvent')
-  @DocsEditable()
   factory FetchEvent(String type, Map eventInitDict) {
     var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
     return FetchEvent._create_1(type, eventInitDict_1);
@@ -19377,38 +15136,21 @@
   static FetchEvent _create_1(type, eventInitDict) =>
       JS('FetchEvent', 'new FetchEvent(#,#)', type, eventInitDict);
 
-  @DomName('FetchEvent.clientId')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String clientId;
 
-  @DomName('FetchEvent.isReload')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool isReload;
 
-  @DomName('FetchEvent.preloadResponse')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future get preloadResponse =>
       promiseToFuture(JS("", "#.preloadResponse", this));
 
-  @DomName('FetchEvent.request')
-  @DocsEditable()
-  @Experimental() // untriaged
   final _Request request;
 
-  @DomName('FetchEvent.respondWith')
-  @DocsEditable()
-  @Experimental() // untriaged
   void respondWith(Future r) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLFieldSetElement')
 @Unstable()
 @Native("HTMLFieldSetElement")
 class FieldSetElement extends HtmlElement {
@@ -19417,8 +15159,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLFieldSetElement.HTMLFieldSetElement')
-  @DocsEditable()
   factory FieldSetElement() => JS(
       'returns:FieldSetElement;creates:FieldSetElement;new:true',
       '#.createElement(#)',
@@ -19431,59 +15171,34 @@
    */
   FieldSetElement.created() : super.created();
 
-  @DomName('HTMLFieldSetElement.disabled')
-  @DocsEditable()
   bool disabled;
 
-  @DomName('HTMLFieldSetElement.elements')
-  @DocsEditable()
   @Returns('HtmlCollection|Null')
   @Creates('HtmlCollection')
   final List<Node> elements;
 
-  @DomName('HTMLFieldSetElement.form')
-  @DocsEditable()
   final FormElement form;
 
-  @DomName('HTMLFieldSetElement.name')
-  @DocsEditable()
   String name;
 
-  @DomName('HTMLFieldSetElement.type')
-  @DocsEditable()
   final String type;
 
-  @DomName('HTMLFieldSetElement.validationMessage')
-  @DocsEditable()
   final String validationMessage;
 
-  @DomName('HTMLFieldSetElement.validity')
-  @DocsEditable()
   final ValidityState validity;
 
-  @DomName('HTMLFieldSetElement.willValidate')
-  @DocsEditable()
   final bool willValidate;
 
-  @DomName('HTMLFieldSetElement.checkValidity')
-  @DocsEditable()
   bool checkValidity() native;
 
-  @DomName('HTMLFieldSetElement.reportValidity')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool reportValidity() native;
 
-  @DomName('HTMLFieldSetElement.setCustomValidity')
-  @DocsEditable()
   void setCustomValidity(String error) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('File')
 @Native("File")
 class File extends Blob {
   // To suppress missing implicit constructor warnings.
@@ -19491,8 +15206,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('File.File')
-  @DocsEditable()
   factory File(List<Object> fileBits, String fileName, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -19505,32 +15218,19 @@
   static File _create_2(fileBits, fileName) =>
       JS('File', 'new File(#,#)', fileBits, fileName);
 
-  @DomName('File.lastModified')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int lastModified;
 
-  @DomName('File.lastModifiedDate')
-  @DocsEditable()
   DateTime get lastModifiedDate =>
       convertNativeToDart_DateTime(this._get_lastModifiedDate);
   @JSName('lastModifiedDate')
-  @DomName('File.lastModifiedDate')
-  @DocsEditable()
   @Creates('Null')
   final dynamic _get_lastModifiedDate;
 
-  @DomName('File.name')
-  @DocsEditable()
   final String name;
 
   @JSName('webkitRelativePath')
-  @DomName('File.webkitRelativePath')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  // https://plus.sandbox.google.com/+AddyOsmani/posts/Dk5UhZ6zfF3
   final String relativePath;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19539,18 +15239,11 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('FileCallback')
-// http://www.w3.org/TR/file-system-api/#the-filecallback-interface
-@Experimental()
 typedef void _FileCallback(File file);
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('FileEntry')
-// http://www.w3.org/TR/file-system-api/#the-fileentry-interface
-@Experimental()
 @Native("FileEntry")
 class FileEntry extends Entry {
   // To suppress missing implicit constructor warnings.
@@ -19559,14 +15252,10 @@
   }
 
   @JSName('createWriter')
-  @DomName('FileEntry.createWriter')
-  @DocsEditable()
   void _createWriter(_FileWriterCallback successCallback,
       [_ErrorCallback errorCallback]) native;
 
   @JSName('createWriter')
-  @DomName('FileEntry.createWriter')
-  @DocsEditable()
   Future<FileWriter> createWriter() {
     var completer = new Completer<FileWriter>();
     _createWriter((value) {
@@ -19579,14 +15268,10 @@
   }
 
   @JSName('file')
-  @DomName('FileEntry.file')
-  @DocsEditable()
   void _file(_FileCallback successCallback, [_ErrorCallback errorCallback])
       native;
 
   @JSName('file')
-  @DomName('FileEntry.file')
-  @DocsEditable()
   Future<File> file() {
     var completer = new Completer<File>();
     _file((value) {
@@ -19602,8 +15287,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.
 
-@DocsEditable()
-@DomName('FileList')
 @Native("FileList")
 class FileList extends Interceptor
     with ListMixin<File>, ImmutableListMixin<File>
@@ -19613,8 +15296,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('FileList.length')
-  @DocsEditable()
   int get length => JS("int", "#.length", this);
 
   File operator [](int index) {
@@ -19660,20 +15341,14 @@
   File elementAt(int index) => this[index];
   // -- end List<File> mixins.
 
-  @DomName('FileList.item')
-  @DocsEditable()
   File item(int index) native;
 }
 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-@DocsEditable()
-@DomName('FileReader')
 @Native("FileReader")
 class FileReader extends EventTarget {
-  @DomName('FileReader.result')
-  @DocsEditable()
   Object get result {
     var res = JS('Null|String|NativeByteBuffer', '#.result', this);
     if (res is ByteBuffer) {
@@ -19693,8 +15368,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('FileReader.abortEvent')
-  @DocsEditable()
   static const EventStreamProvider<ProgressEvent> abortEvent =
       const EventStreamProvider<ProgressEvent>('abort');
 
@@ -19704,8 +15377,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('FileReader.errorEvent')
-  @DocsEditable()
   static const EventStreamProvider<ProgressEvent> errorEvent =
       const EventStreamProvider<ProgressEvent>('error');
 
@@ -19715,8 +15386,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('FileReader.loadEvent')
-  @DocsEditable()
   static const EventStreamProvider<ProgressEvent> loadEvent =
       const EventStreamProvider<ProgressEvent>('load');
 
@@ -19726,8 +15395,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('FileReader.loadendEvent')
-  @DocsEditable()
   static const EventStreamProvider<ProgressEvent> loadEndEvent =
       const EventStreamProvider<ProgressEvent>('loadend');
 
@@ -19737,8 +15404,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('FileReader.loadstartEvent')
-  @DocsEditable()
   static const EventStreamProvider<ProgressEvent> loadStartEvent =
       const EventStreamProvider<ProgressEvent>('loadstart');
 
@@ -19748,94 +15413,56 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('FileReader.progressEvent')
-  @DocsEditable()
   static const EventStreamProvider<ProgressEvent> progressEvent =
       const EventStreamProvider<ProgressEvent>('progress');
 
-  @DomName('FileReader.FileReader')
-  @DocsEditable()
   factory FileReader() {
     return FileReader._create_1();
   }
   static FileReader _create_1() => JS('FileReader', 'new FileReader()');
 
-  @DomName('FileReader.DONE')
-  @DocsEditable()
   static const int DONE = 2;
 
-  @DomName('FileReader.EMPTY')
-  @DocsEditable()
   static const int EMPTY = 0;
 
-  @DomName('FileReader.LOADING')
-  @DocsEditable()
   static const int LOADING = 1;
 
-  @DomName('FileReader.error')
-  @DocsEditable()
   final DomException error;
 
-  @DomName('FileReader.readyState')
-  @DocsEditable()
   final int readyState;
 
-  @DomName('FileReader.abort')
-  @DocsEditable()
   void abort() native;
 
-  @DomName('FileReader.readAsArrayBuffer')
-  @DocsEditable()
   void readAsArrayBuffer(Blob blob) native;
 
   @JSName('readAsDataURL')
-  @DomName('FileReader.readAsDataURL')
-  @DocsEditable()
   void readAsDataUrl(Blob blob) native;
 
-  @DomName('FileReader.readAsText')
-  @DocsEditable()
   void readAsText(Blob blob, [String label]) native;
 
   /// Stream of `abort` events handled by this [FileReader].
-  @DomName('FileReader.onabort')
-  @DocsEditable()
   Stream<ProgressEvent> get onAbort => abortEvent.forTarget(this);
 
   /// Stream of `error` events handled by this [FileReader].
-  @DomName('FileReader.onerror')
-  @DocsEditable()
   Stream<ProgressEvent> get onError => errorEvent.forTarget(this);
 
   /// Stream of `load` events handled by this [FileReader].
-  @DomName('FileReader.onload')
-  @DocsEditable()
   Stream<ProgressEvent> get onLoad => loadEvent.forTarget(this);
 
   /// Stream of `loadend` events handled by this [FileReader].
-  @DomName('FileReader.onloadend')
-  @DocsEditable()
   Stream<ProgressEvent> get onLoadEnd => loadEndEvent.forTarget(this);
 
   /// Stream of `loadstart` events handled by this [FileReader].
-  @DomName('FileReader.onloadstart')
-  @DocsEditable()
   Stream<ProgressEvent> get onLoadStart => loadStartEvent.forTarget(this);
 
   /// Stream of `progress` events handled by this [FileReader].
-  @DomName('FileReader.onprogress')
-  @DocsEditable()
   Stream<ProgressEvent> get onProgress => progressEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('DOMFileSystem')
 @SupportedBrowser(SupportedBrowser.CHROME)
-@Experimental()
-// http://www.w3.org/TR/file-system-api/
 @Native("DOMFileSystem")
 class FileSystem extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -19846,12 +15473,8 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => JS('bool', '!!(window.webkitRequestFileSystem)');
 
-  @DomName('DOMFileSystem.name')
-  @DocsEditable()
   final String name;
 
-  @DomName('DOMFileSystem.root')
-  @DocsEditable()
   final DirectoryEntry root;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19860,18 +15483,11 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('FileSystemCallback')
-// http://www.w3.org/TR/file-system-api/#the-filesystemcallback-interface
-@Experimental()
 typedef void _FileSystemCallback(FileSystem fileSystem);
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('FileWriter')
-// http://www.w3.org/TR/file-writer-api/#the-filewriter-interface
-@Experimental()
 @Native("FileWriter")
 class FileWriter extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -19885,8 +15501,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('FileWriter.abortEvent')
-  @DocsEditable()
   static const EventStreamProvider<ProgressEvent> abortEvent =
       const EventStreamProvider<ProgressEvent>('abort');
 
@@ -19896,8 +15510,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('FileWriter.errorEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
@@ -19907,8 +15519,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('FileWriter.progressEvent')
-  @DocsEditable()
   static const EventStreamProvider<ProgressEvent> progressEvent =
       const EventStreamProvider<ProgressEvent>('progress');
 
@@ -19918,8 +15528,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('FileWriter.writeEvent')
-  @DocsEditable()
   static const EventStreamProvider<ProgressEvent> writeEvent =
       const EventStreamProvider<ProgressEvent>('write');
 
@@ -19929,8 +15537,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('FileWriter.writeendEvent')
-  @DocsEditable()
   static const EventStreamProvider<ProgressEvent> writeEndEvent =
       const EventStreamProvider<ProgressEvent>('writeend');
 
@@ -19940,83 +15546,47 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('FileWriter.writestartEvent')
-  @DocsEditable()
   static const EventStreamProvider<ProgressEvent> writeStartEvent =
       const EventStreamProvider<ProgressEvent>('writestart');
 
-  @DomName('FileWriter.DONE')
-  @DocsEditable()
   static const int DONE = 2;
 
-  @DomName('FileWriter.INIT')
-  @DocsEditable()
   static const int INIT = 0;
 
-  @DomName('FileWriter.WRITING')
-  @DocsEditable()
   static const int WRITING = 1;
 
-  @DomName('FileWriter.error')
-  @DocsEditable()
   final DomException error;
 
-  @DomName('FileWriter.length')
-  @DocsEditable()
   final int length;
 
-  @DomName('FileWriter.position')
-  @DocsEditable()
   final int position;
 
-  @DomName('FileWriter.readyState')
-  @DocsEditable()
   final int readyState;
 
-  @DomName('FileWriter.abort')
-  @DocsEditable()
   void abort() native;
 
-  @DomName('FileWriter.seek')
-  @DocsEditable()
   void seek(int position) native;
 
-  @DomName('FileWriter.truncate')
-  @DocsEditable()
   void truncate(int size) native;
 
-  @DomName('FileWriter.write')
-  @DocsEditable()
   void write(Blob data) native;
 
   /// Stream of `abort` events handled by this [FileWriter].
-  @DomName('FileWriter.onabort')
-  @DocsEditable()
   Stream<ProgressEvent> get onAbort => abortEvent.forTarget(this);
 
   /// Stream of `error` events handled by this [FileWriter].
-  @DomName('FileWriter.onerror')
-  @DocsEditable()
   Stream<Event> get onError => errorEvent.forTarget(this);
 
   /// Stream of `progress` events handled by this [FileWriter].
-  @DomName('FileWriter.onprogress')
-  @DocsEditable()
   Stream<ProgressEvent> get onProgress => progressEvent.forTarget(this);
 
   /// Stream of `write` events handled by this [FileWriter].
-  @DomName('FileWriter.onwrite')
-  @DocsEditable()
   Stream<ProgressEvent> get onWrite => writeEvent.forTarget(this);
 
   /// Stream of `writeend` events handled by this [FileWriter].
-  @DomName('FileWriter.onwriteend')
-  @DocsEditable()
   Stream<ProgressEvent> get onWriteEnd => writeEndEvent.forTarget(this);
 
   /// Stream of `writestart` events handled by this [FileWriter].
-  @DomName('FileWriter.onwritestart')
-  @DocsEditable()
   Stream<ProgressEvent> get onWriteStart => writeStartEvent.forTarget(this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20025,16 +15595,11 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('FileWriterCallback')
-// http://www.w3.org/TR/file-writer-api/#idl-def-FileWriter
-@Experimental()
 typedef void _FileWriterCallback(FileWriter fileWriter);
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('FocusEvent')
 @Native("FocusEvent")
 class FocusEvent extends UIEvent {
   // To suppress missing implicit constructor warnings.
@@ -20042,8 +15607,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('FocusEvent.FocusEvent')
-  @DocsEditable()
   factory FocusEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -20056,13 +15619,9 @@
   static FocusEvent _create_2(type) =>
       JS('FocusEvent', 'new FocusEvent(#)', type);
 
-  @DomName('FocusEvent.relatedTarget')
-  @DocsEditable()
   EventTarget get relatedTarget =>
       _convertNativeToDart_EventTarget(this._get_relatedTarget);
   @JSName('relatedTarget')
-  @DomName('FocusEvent.relatedTarget')
-  @DocsEditable()
   @Creates('Null')
   final dynamic _get_relatedTarget;
 }
@@ -20070,9 +15629,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.
 
-@DocsEditable()
-@DomName('FontFace')
-@Experimental() // untriaged
 @Native("FontFace")
 class FontFace extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -20080,8 +15636,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('FontFace.FontFace')
-  @DocsEditable()
   factory FontFace(String family, Object source, [Map descriptors]) {
     if (descriptors != null) {
       var descriptors_1 = convertDartToNative_Dictionary(descriptors);
@@ -20094,60 +15648,27 @@
   static FontFace _create_2(family, source) =>
       JS('FontFace', 'new FontFace(#,#)', family, source);
 
-  @DomName('FontFace.display')
-  @DocsEditable()
-  @Experimental() // untriaged
   String display;
 
-  @DomName('FontFace.family')
-  @DocsEditable()
-  @Experimental() // untriaged
   String family;
 
-  @DomName('FontFace.featureSettings')
-  @DocsEditable()
-  @Experimental() // untriaged
   String featureSettings;
 
-  @DomName('FontFace.loaded')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<FontFace> get loaded =>
       promiseToFuture<FontFace>(JS("", "#.loaded", this));
 
-  @DomName('FontFace.status')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String status;
 
-  @DomName('FontFace.stretch')
-  @DocsEditable()
-  @Experimental() // untriaged
   String stretch;
 
-  @DomName('FontFace.style')
-  @DocsEditable()
-  @Experimental() // untriaged
   String style;
 
-  @DomName('FontFace.unicodeRange')
-  @DocsEditable()
-  @Experimental() // untriaged
   String unicodeRange;
 
-  @DomName('FontFace.variant')
-  @DocsEditable()
-  @Experimental() // untriaged
   String variant;
 
-  @DomName('FontFace.weight')
-  @DocsEditable()
-  @Experimental() // untriaged
   String weight;
 
-  @DomName('FontFace.load')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<FontFace> load() =>
       promiseToFuture<FontFace>(JS("", "#.load()", this));
 }
@@ -20155,9 +15676,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.
 
-@DocsEditable()
-@DomName('FontFaceSet')
-@Experimental() // untriaged
 @Native("FontFaceSet")
 class FontFaceSet extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -20165,73 +15683,34 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('FontFaceSet.loadingEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<FontFaceSetLoadEvent> loadingEvent =
       const EventStreamProvider<FontFaceSetLoadEvent>('loading');
 
-  @DomName('FontFaceSet.loadingdoneEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<FontFaceSetLoadEvent> loadingDoneEvent =
       const EventStreamProvider<FontFaceSetLoadEvent>('loadingdone');
 
-  @DomName('FontFaceSet.loadingerrorEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<FontFaceSetLoadEvent> loadingErrorEvent =
       const EventStreamProvider<FontFaceSetLoadEvent>('loadingerror');
 
-  @DomName('FontFaceSet.status')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String status;
 
-  @DomName('FontFaceSet.add')
-  @DocsEditable()
-  @Experimental() // untriaged
   FontFaceSet add(FontFace arg) native;
 
-  @DomName('FontFaceSet.check')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool check(String font, [String text]) native;
 
-  @DomName('FontFaceSet.clear')
-  @DocsEditable()
-  @Experimental() // untriaged
   void clear() native;
 
-  @DomName('FontFaceSet.delete')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool delete(FontFace arg) native;
 
-  @DomName('FontFaceSet.forEach')
-  @DocsEditable()
-  @Experimental() // untriaged
   void forEach(FontFaceSetForEachCallback callback, [Object thisArg]) native;
 
-  @DomName('FontFaceSet.has')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool has(FontFace arg) native;
 
-  @DomName('FontFaceSet.onloading')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<FontFaceSetLoadEvent> get onLoading => loadingEvent.forTarget(this);
 
-  @DomName('FontFaceSet.onloadingdone')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<FontFaceSetLoadEvent> get onLoadingDone =>
       loadingDoneEvent.forTarget(this);
 
-  @DomName('FontFaceSet.onloadingerror')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<FontFaceSetLoadEvent> get onLoadingError =>
       loadingErrorEvent.forTarget(this);
 }
@@ -20239,9 +15718,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.
 
-@DocsEditable()
-@DomName('FontFaceSetLoadEvent')
-@Experimental() // untriaged
 @Native("FontFaceSetLoadEvent")
 class FontFaceSetLoadEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -20249,8 +15725,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('FontFaceSetLoadEvent.FontFaceSetLoadEvent')
-  @DocsEditable()
   factory FontFaceSetLoadEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -20266,18 +15740,12 @@
   static FontFaceSetLoadEvent _create_2(type) =>
       JS('FontFaceSetLoadEvent', 'new FontFaceSetLoadEvent(#)', type);
 
-  @DomName('FontFaceSetLoadEvent.fontfaces')
-  @DocsEditable()
-  @Experimental() // untriaged
   final List<FontFace> fontfaces;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('FontFaceSource')
-@Experimental() // untriaged
 @Native("FontFaceSource")
 class FontFaceSource extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -20285,18 +15753,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('FontFaceSource.fonts')
-  @DocsEditable()
-  @Experimental() // untriaged
   final FontFaceSet fonts;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('ForeignFetchEvent')
-@Experimental() // untriaged
 @Native("ForeignFetchEvent")
 class ForeignFetchEvent extends ExtendableEvent {
   // To suppress missing implicit constructor warnings.
@@ -20304,8 +15766,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ForeignFetchEvent.ForeignFetchEvent')
-  @DocsEditable()
   factory ForeignFetchEvent(String type, Map eventInitDict) {
     var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
     return ForeignFetchEvent._create_1(type, eventInitDict_1);
@@ -20313,27 +15773,16 @@
   static ForeignFetchEvent _create_1(type, eventInitDict) => JS(
       'ForeignFetchEvent', 'new ForeignFetchEvent(#,#)', type, eventInitDict);
 
-  @DomName('ForeignFetchEvent.origin')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String origin;
 
-  @DomName('ForeignFetchEvent.request')
-  @DocsEditable()
-  @Experimental() // untriaged
   final _Request request;
 
-  @DomName('ForeignFetchEvent.respondWith')
-  @DocsEditable()
-  @Experimental() // untriaged
   void respondWith(Future r) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('FormData')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -20345,8 +15794,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('FormData.FormData')
-  @DocsEditable()
   factory FormData([FormElement form]) {
     if (form != null) {
       return FormData._create_1(form);
@@ -20359,46 +15806,25 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => JS('bool', '!!(window.FormData)');
 
-  @DomName('FormData.append')
-  @DocsEditable()
   void append(String name, String value) native;
 
   @JSName('append')
-  @DomName('FormData.append')
-  @DocsEditable()
   void appendBlob(String name, Blob value, [String filename]) native;
 
-  @DomName('FormData.delete')
-  @DocsEditable()
-  @Experimental() // untriaged
   void delete(String name) native;
 
-  @DomName('FormData.get')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object get(String name) native;
 
-  @DomName('FormData.getAll')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<Object> getAll(String name) native;
 
-  @DomName('FormData.has')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool has(String name) native;
 
-  @DomName('FormData.set')
-  @DocsEditable()
-  @Experimental() // untriaged
   void set(String name, value, [String filename]) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLFormElement')
 @Native("HTMLFormElement")
 class FormElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -20406,8 +15832,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLFormElement.HTMLFormElement')
-  @DocsEditable()
   factory FormElement() => JS(
       'returns:FormElement;creates:FormElement;new:true',
       '#.createElement(#)',
@@ -20420,70 +15844,34 @@
    */
   FormElement.created() : super.created();
 
-  @DomName('HTMLFormElement.acceptCharset')
-  @DocsEditable()
   String acceptCharset;
 
-  @DomName('HTMLFormElement.action')
-  @DocsEditable()
   String action;
 
-  @DomName('HTMLFormElement.autocomplete')
-  @DocsEditable()
-  // http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#autofilling-form-controls:-the-autocomplete-attribute
-  @Experimental()
   String autocomplete;
 
-  @DomName('HTMLFormElement.encoding')
-  @DocsEditable()
   String encoding;
 
-  @DomName('HTMLFormElement.enctype')
-  @DocsEditable()
   String enctype;
 
-  @DomName('HTMLFormElement.length')
-  @DocsEditable()
   final int length;
 
-  @DomName('HTMLFormElement.method')
-  @DocsEditable()
   String method;
 
-  @DomName('HTMLFormElement.name')
-  @DocsEditable()
   String name;
 
-  @DomName('HTMLFormElement.noValidate')
-  @DocsEditable()
   bool noValidate;
 
-  @DomName('HTMLFormElement.target')
-  @DocsEditable()
   String target;
 
-  @DomName('HTMLFormElement.__getter__')
-  @DocsEditable()
   Object __getter__(String name) native;
 
-  @DomName('HTMLFormElement.checkValidity')
-  @DocsEditable()
   bool checkValidity() native;
 
-  @DomName('HTMLFormElement.item')
-  @DocsEditable()
-  @Experimental() // untriaged
   Element item(int index) native;
 
-  @DomName('HTMLFormElement.reportValidity')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool reportValidity() native;
 
-  @DomName('HTMLFormElement.requestAutocomplete')
-  @DocsEditable()
-  // http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2012-October/037711.html
-  @Experimental()
   void requestAutocomplete(Map details) {
     var details_1 = convertDartToNative_Dictionary(details);
     _requestAutocomplete_1(details_1);
@@ -20491,18 +15879,10 @@
   }
 
   @JSName('requestAutocomplete')
-  @DomName('HTMLFormElement.requestAutocomplete')
-  @DocsEditable()
-  // http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2012-October/037711.html
-  @Experimental()
   void _requestAutocomplete_1(details) native;
 
-  @DomName('HTMLFormElement.reset')
-  @DocsEditable()
   void reset() native;
 
-  @DomName('HTMLFormElement.submit')
-  @DocsEditable()
   void submit() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20511,8 +15891,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('FrameRequestCallback')
-@Experimental() // untriaged
 typedef void FrameRequestCallback(num highResTime);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -20520,17 +15898,11 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('FunctionStringCallback')
-@Experimental() // untriaged
 typedef void FunctionStringCallback(String data);
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('Gamepad')
-// https://dvcs.w3.org/hg/gamepad/raw-file/default/gamepad.html#gamepad-interface
-@Experimental()
 @Native("Gamepad")
 class Gamepad extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -20538,60 +15910,32 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Gamepad.axes')
-  @DocsEditable()
   final List<num> axes;
 
-  @DomName('Gamepad.buttons')
-  @DocsEditable()
   @Creates('JSExtendableArray|GamepadButton')
   @Returns('JSExtendableArray')
   final List<GamepadButton> buttons;
 
-  @DomName('Gamepad.connected')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool connected;
 
-  @DomName('Gamepad.displayId')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int displayId;
 
-  @DomName('Gamepad.hand')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String hand;
 
-  @DomName('Gamepad.id')
-  @DocsEditable()
   final String id;
 
-  @DomName('Gamepad.index')
-  @DocsEditable()
   final int index;
 
-  @DomName('Gamepad.mapping')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String mapping;
 
-  @DomName('Gamepad.pose')
-  @DocsEditable()
-  @Experimental() // untriaged
   final GamepadPose pose;
 
-  @DomName('Gamepad.timestamp')
-  @DocsEditable()
   final int timestamp;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('GamepadButton')
-@Experimental() // untriaged
 @Native("GamepadButton")
 class GamepadButton extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -20599,28 +15943,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('GamepadButton.pressed')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool pressed;
 
-  @DomName('GamepadButton.touched')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool touched;
 
-  @DomName('GamepadButton.value')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num value;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('GamepadEvent')
-@Experimental() // untriaged
 @Native("GamepadEvent")
 class GamepadEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -20628,8 +15960,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('GamepadEvent.GamepadEvent')
-  @DocsEditable()
   factory GamepadEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -20642,18 +15972,12 @@
   static GamepadEvent _create_2(type) =>
       JS('GamepadEvent', 'new GamepadEvent(#)', type);
 
-  @DomName('GamepadEvent.gamepad')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Gamepad gamepad;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('GamepadPose')
-@Experimental() // untriaged
 @Native("GamepadPose")
 class GamepadPose extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -20661,56 +15985,29 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('GamepadPose.angularAcceleration')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Float32List angularAcceleration;
 
-  @DomName('GamepadPose.angularVelocity')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Float32List angularVelocity;
 
-  @DomName('GamepadPose.hasOrientation')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool hasOrientation;
 
-  @DomName('GamepadPose.hasPosition')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool hasPosition;
 
-  @DomName('GamepadPose.linearAcceleration')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Float32List linearAcceleration;
 
-  @DomName('GamepadPose.linearVelocity')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Float32List linearVelocity;
 
-  @DomName('GamepadPose.orientation')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Float32List orientation;
 
-  @DomName('GamepadPose.position')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Float32List position;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('Geolocation')
 @Unstable()
 @Native("Geolocation")
 class Geolocation extends Interceptor {
-  @DomName('Geolocation.getCurrentPosition')
   Future<Geoposition> getCurrentPosition(
       {bool enableHighAccuracy, Duration timeout, Duration maximumAge}) {
     var options = {};
@@ -20736,7 +16033,6 @@
     return completer.future;
   }
 
-  @DomName('Geolocation.watchPosition')
   Stream<Geoposition> watchPosition(
       {bool enableHighAccuracy, Duration timeout, Duration maximumAge}) {
     var options = {};
@@ -20789,12 +16085,8 @@
   }
 
   @JSName('clearWatch')
-  @DomName('Geolocation.clearWatch')
-  @DocsEditable()
   void _clearWatch(int watchID) native;
 
-  @DomName('Geolocation.getCurrentPosition')
-  @DocsEditable()
   void _getCurrentPosition(_PositionCallback successCallback,
       [_PositionErrorCallback errorCallback, Map options]) {
     if (options != null) {
@@ -20811,22 +16103,14 @@
   }
 
   @JSName('getCurrentPosition')
-  @DomName('Geolocation.getCurrentPosition')
-  @DocsEditable()
   void _getCurrentPosition_1(_PositionCallback successCallback,
       _PositionErrorCallback errorCallback, options) native;
   @JSName('getCurrentPosition')
-  @DomName('Geolocation.getCurrentPosition')
-  @DocsEditable()
   void _getCurrentPosition_2(_PositionCallback successCallback,
       _PositionErrorCallback errorCallback) native;
   @JSName('getCurrentPosition')
-  @DomName('Geolocation.getCurrentPosition')
-  @DocsEditable()
   void _getCurrentPosition_3(_PositionCallback successCallback) native;
 
-  @DomName('Geolocation.watchPosition')
-  @DocsEditable()
   int _watchPosition(_PositionCallback successCallback,
       [_PositionErrorCallback errorCallback, Map options]) {
     if (options != null) {
@@ -20840,18 +16124,12 @@
   }
 
   @JSName('watchPosition')
-  @DomName('Geolocation.watchPosition')
-  @DocsEditable()
   int _watchPosition_1(_PositionCallback successCallback,
       _PositionErrorCallback errorCallback, options) native;
   @JSName('watchPosition')
-  @DomName('Geolocation.watchPosition')
-  @DocsEditable()
   int _watchPosition_2(_PositionCallback successCallback,
       _PositionErrorCallback errorCallback) native;
   @JSName('watchPosition')
-  @DomName('Geolocation.watchPosition')
-  @DocsEditable()
   int _watchPosition_3(_PositionCallback successCallback) native;
 }
 
@@ -20871,9 +16149,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.
 
-@DocsEditable()
-@DomName('Position')
-@Experimental() // untriaged
 @Native("Position")
 class Geoposition extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -20881,14 +16156,8 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Position.coords')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Coordinates coords;
 
-  @DomName('Position.timestamp')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int timestamp;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20898,9 +16167,6 @@
 // We implement EventTarget and have stubs for its methods because it's tricky to
 // convince the scripts to make our instance methods abstract, and the bodies that
 // get generated require `this` to be an EventTarget.
-@DocsEditable()
-@DomName('GlobalEventHandlers')
-@Experimental() // untriaged
 abstract class GlobalEventHandlers implements EventTarget {
   void addEventListener(String type, dynamic listener(Event event),
       [bool useCapture]);
@@ -20914,640 +16180,295 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('GlobalEventHandlers.abortEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> abortEvent =
       const EventStreamProvider<Event>('abort');
 
-  @DomName('GlobalEventHandlers.blurEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> blurEvent =
       const EventStreamProvider<Event>('blur');
 
-  @DomName('GlobalEventHandlers.canplayEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> canPlayEvent =
       const EventStreamProvider<Event>('canplay');
 
-  @DomName('GlobalEventHandlers.canplaythroughEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> canPlayThroughEvent =
       const EventStreamProvider<Event>('canplaythrough');
 
-  @DomName('GlobalEventHandlers.changeEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> changeEvent =
       const EventStreamProvider<Event>('change');
 
-  @DomName('GlobalEventHandlers.clickEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> clickEvent =
       const EventStreamProvider<MouseEvent>('click');
 
-  @DomName('GlobalEventHandlers.contextmenuEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> contextMenuEvent =
       const EventStreamProvider<MouseEvent>('contextmenu');
 
-  @DomName('GlobalEventHandlers.dblclickEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> doubleClickEvent =
       const EventStreamProvider<Event>('dblclick');
 
-  @DomName('GlobalEventHandlers.dragEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> dragEvent =
       const EventStreamProvider<MouseEvent>('drag');
 
-  @DomName('GlobalEventHandlers.dragendEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> dragEndEvent =
       const EventStreamProvider<MouseEvent>('dragend');
 
-  @DomName('GlobalEventHandlers.dragenterEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> dragEnterEvent =
       const EventStreamProvider<MouseEvent>('dragenter');
 
-  @DomName('GlobalEventHandlers.dragleaveEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> dragLeaveEvent =
       const EventStreamProvider<MouseEvent>('dragleave');
 
-  @DomName('GlobalEventHandlers.dragoverEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> dragOverEvent =
       const EventStreamProvider<MouseEvent>('dragover');
 
-  @DomName('GlobalEventHandlers.dragstartEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> dragStartEvent =
       const EventStreamProvider<MouseEvent>('dragstart');
 
-  @DomName('GlobalEventHandlers.dropEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> dropEvent =
       const EventStreamProvider<MouseEvent>('drop');
 
-  @DomName('GlobalEventHandlers.durationchangeEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> durationChangeEvent =
       const EventStreamProvider<Event>('durationchange');
 
-  @DomName('GlobalEventHandlers.emptiedEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> emptiedEvent =
       const EventStreamProvider<Event>('emptied');
 
-  @DomName('GlobalEventHandlers.endedEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> endedEvent =
       const EventStreamProvider<Event>('ended');
 
-  @DomName('GlobalEventHandlers.errorEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
-  @DomName('GlobalEventHandlers.focusEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> focusEvent =
       const EventStreamProvider<Event>('focus');
 
-  @DomName('GlobalEventHandlers.inputEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> inputEvent =
       const EventStreamProvider<Event>('input');
 
-  @DomName('GlobalEventHandlers.invalidEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> invalidEvent =
       const EventStreamProvider<Event>('invalid');
 
-  @DomName('GlobalEventHandlers.keydownEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<KeyboardEvent> keyDownEvent =
       const EventStreamProvider<KeyboardEvent>('keydown');
 
-  @DomName('GlobalEventHandlers.keypressEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<KeyboardEvent> keyPressEvent =
       const EventStreamProvider<KeyboardEvent>('keypress');
 
-  @DomName('GlobalEventHandlers.keyupEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<KeyboardEvent> keyUpEvent =
       const EventStreamProvider<KeyboardEvent>('keyup');
 
-  @DomName('GlobalEventHandlers.loadEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> loadEvent =
       const EventStreamProvider<Event>('load');
 
-  @DomName('GlobalEventHandlers.loadeddataEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> loadedDataEvent =
       const EventStreamProvider<Event>('loadeddata');
 
-  @DomName('GlobalEventHandlers.loadedmetadataEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> loadedMetadataEvent =
       const EventStreamProvider<Event>('loadedmetadata');
 
-  @DomName('GlobalEventHandlers.mousedownEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> mouseDownEvent =
       const EventStreamProvider<MouseEvent>('mousedown');
 
-  @DomName('GlobalEventHandlers.mouseenterEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> mouseEnterEvent =
       const EventStreamProvider<MouseEvent>('mouseenter');
 
-  @DomName('GlobalEventHandlers.mouseleaveEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> mouseLeaveEvent =
       const EventStreamProvider<MouseEvent>('mouseleave');
 
-  @DomName('GlobalEventHandlers.mousemoveEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> mouseMoveEvent =
       const EventStreamProvider<MouseEvent>('mousemove');
 
-  @DomName('GlobalEventHandlers.mouseoutEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> mouseOutEvent =
       const EventStreamProvider<MouseEvent>('mouseout');
 
-  @DomName('GlobalEventHandlers.mouseoverEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> mouseOverEvent =
       const EventStreamProvider<MouseEvent>('mouseover');
 
-  @DomName('GlobalEventHandlers.mouseupEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> mouseUpEvent =
       const EventStreamProvider<MouseEvent>('mouseup');
 
-  @DomName('GlobalEventHandlers.mousewheelEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<WheelEvent> mouseWheelEvent =
       const EventStreamProvider<WheelEvent>('mousewheel');
 
-  @DomName('GlobalEventHandlers.pauseEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> pauseEvent =
       const EventStreamProvider<Event>('pause');
 
-  @DomName('GlobalEventHandlers.playEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> playEvent =
       const EventStreamProvider<Event>('play');
 
-  @DomName('GlobalEventHandlers.playingEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> playingEvent =
       const EventStreamProvider<Event>('playing');
 
-  @DomName('GlobalEventHandlers.ratechangeEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> rateChangeEvent =
       const EventStreamProvider<Event>('ratechange');
 
-  @DomName('GlobalEventHandlers.resetEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> resetEvent =
       const EventStreamProvider<Event>('reset');
 
-  @DomName('GlobalEventHandlers.resizeEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> resizeEvent =
       const EventStreamProvider<Event>('resize');
 
-  @DomName('GlobalEventHandlers.scrollEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> scrollEvent =
       const EventStreamProvider<Event>('scroll');
 
-  @DomName('GlobalEventHandlers.seekedEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> seekedEvent =
       const EventStreamProvider<Event>('seeked');
 
-  @DomName('GlobalEventHandlers.seekingEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> seekingEvent =
       const EventStreamProvider<Event>('seeking');
 
-  @DomName('GlobalEventHandlers.selectEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> selectEvent =
       const EventStreamProvider<Event>('select');
 
-  @DomName('GlobalEventHandlers.stalledEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> stalledEvent =
       const EventStreamProvider<Event>('stalled');
 
-  @DomName('GlobalEventHandlers.submitEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> submitEvent =
       const EventStreamProvider<Event>('submit');
 
-  @DomName('GlobalEventHandlers.suspendEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> suspendEvent =
       const EventStreamProvider<Event>('suspend');
 
-  @DomName('GlobalEventHandlers.timeupdateEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> timeUpdateEvent =
       const EventStreamProvider<Event>('timeupdate');
 
-  @DomName('GlobalEventHandlers.touchcancelEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<TouchEvent> touchCancelEvent =
       const EventStreamProvider<TouchEvent>('touchcancel');
 
-  @DomName('GlobalEventHandlers.touchendEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<TouchEvent> touchEndEvent =
       const EventStreamProvider<TouchEvent>('touchend');
 
-  @DomName('GlobalEventHandlers.touchmoveEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<TouchEvent> touchMoveEvent =
       const EventStreamProvider<TouchEvent>('touchmove');
 
-  @DomName('GlobalEventHandlers.touchstartEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<TouchEvent> touchStartEvent =
       const EventStreamProvider<TouchEvent>('touchstart');
 
-  @DomName('GlobalEventHandlers.volumechangeEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> volumeChangeEvent =
       const EventStreamProvider<Event>('volumechange');
 
-  @DomName('GlobalEventHandlers.waitingEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> waitingEvent =
       const EventStreamProvider<Event>('waiting');
 
-  @DomName('GlobalEventHandlers.wheelEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<WheelEvent> wheelEvent =
       const EventStreamProvider<WheelEvent>('wheel');
 
-  @DomName('GlobalEventHandlers.onabort')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onAbort => abortEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onblur')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onBlur => blurEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.oncanplay')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onCanPlay => canPlayEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.oncanplaythrough')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onCanPlayThrough => canPlayThroughEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onchange')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onChange => changeEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onclick')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MouseEvent> get onClick => clickEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.oncontextmenu')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MouseEvent> get onContextMenu => contextMenuEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.ondblclick')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onDoubleClick => doubleClickEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.ondrag')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MouseEvent> get onDrag => dragEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.ondragend')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MouseEvent> get onDragEnd => dragEndEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.ondragenter')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MouseEvent> get onDragEnter => dragEnterEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.ondragleave')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MouseEvent> get onDragLeave => dragLeaveEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.ondragover')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MouseEvent> get onDragOver => dragOverEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.ondragstart')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MouseEvent> get onDragStart => dragStartEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.ondrop')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MouseEvent> get onDrop => dropEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.ondurationchange')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onDurationChange => durationChangeEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onemptied')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onEmptied => emptiedEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onended')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onEnded => endedEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onerror')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onError => errorEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onfocus')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onFocus => focusEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.oninput')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onInput => inputEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.oninvalid')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onInvalid => invalidEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onkeydown')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<KeyboardEvent> get onKeyDown => keyDownEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onkeypress')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<KeyboardEvent> get onKeyPress => keyPressEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onkeyup')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<KeyboardEvent> get onKeyUp => keyUpEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onload')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onLoad => loadEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onloadeddata')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onLoadedData => loadedDataEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onloadedmetadata')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onLoadedMetadata => loadedMetadataEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onmousedown')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MouseEvent> get onMouseDown => mouseDownEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onmouseenter')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MouseEvent> get onMouseEnter => mouseEnterEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onmouseleave')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MouseEvent> get onMouseLeave => mouseLeaveEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onmousemove')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MouseEvent> get onMouseMove => mouseMoveEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onmouseout')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MouseEvent> get onMouseOut => mouseOutEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onmouseover')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MouseEvent> get onMouseOver => mouseOverEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onmouseup')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MouseEvent> get onMouseUp => mouseUpEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onmousewheel')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<WheelEvent> get onMouseWheel => mouseWheelEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onpause')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onPause => pauseEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onplay')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onPlay => playEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onplaying')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onPlaying => playingEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onratechange')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onRateChange => rateChangeEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onreset')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onReset => resetEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onresize')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onResize => resizeEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onscroll')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onScroll => scrollEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onseeked')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onSeeked => seekedEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onseeking')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onSeeking => seekingEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onselect')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onSelect => selectEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onstalled')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onStalled => stalledEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onsubmit')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onSubmit => submitEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onsuspend')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onSuspend => suspendEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.ontimeupdate')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onTimeUpdate => timeUpdateEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.ontouchcancel')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<TouchEvent> get onTouchCancel => touchCancelEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.ontouchend')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<TouchEvent> get onTouchEnd => touchEndEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.ontouchmove')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<TouchEvent> get onTouchMove => touchMoveEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.ontouchstart')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<TouchEvent> get onTouchStart => touchStartEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onvolumechange')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onVolumeChange => volumeChangeEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onwaiting')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onWaiting => waitingEvent.forTarget(this);
 
-  @DomName('GlobalEventHandlers.onwheel')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<WheelEvent> get onWheel => wheelEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('Gyroscope')
-@Experimental() // untriaged
 @Native("Gyroscope")
 class Gyroscope extends Sensor {
   // To suppress missing implicit constructor warnings.
@@ -21555,8 +16476,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Gyroscope.Gyroscope')
-  @DocsEditable()
   factory Gyroscope([Map sensorOptions]) {
     if (sensorOptions != null) {
       var sensorOptions_1 = convertDartToNative_Dictionary(sensorOptions);
@@ -21568,30 +16487,19 @@
       JS('Gyroscope', 'new Gyroscope(#)', sensorOptions);
   static Gyroscope _create_2() => JS('Gyroscope', 'new Gyroscope()');
 
-  @DomName('Gyroscope.x')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num x;
 
-  @DomName('Gyroscope.y')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num y;
 
-  @DomName('Gyroscope.z')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num z;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
 /**
  * An `<hr>` tag.
  */
-@DomName('HTMLHRElement')
 @Native("HTMLHRElement")
 class HRElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -21599,8 +16507,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLHRElement.HTMLHRElement')
-  @DocsEditable()
   factory HRElement() => JS('returns:HRElement;creates:HRElement;new:true',
       '#.createElement(#)', document, "hr");
   /**
@@ -21610,9 +16516,6 @@
    */
   HRElement.created() : super.created();
 
-  @DomName('HTMLHRElement.color')
-  @DocsEditable()
-  @Experimental() // untriaged
   String color;
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -21621,7 +16524,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('HashChangeEvent')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
@@ -21643,8 +16545,6 @@
         convertDartToNative_Dictionary(options));
   }
 
-  @DomName('HashChangeEvent.HashChangeEvent')
-  @DocsEditable()
   factory HashChangeEvent._(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -21661,21 +16561,15 @@
   static bool get supported => Device.isEventTypeSupported('HashChangeEvent');
 
   @JSName('newURL')
-  @DomName('HashChangeEvent.newURL')
-  @DocsEditable()
   final String newUrl;
 
   @JSName('oldURL')
-  @DomName('HashChangeEvent.oldURL')
-  @DocsEditable()
   final String oldUrl;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLHeadElement')
 @Native("HTMLHeadElement")
 class HeadElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -21683,8 +16577,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLHeadElement.HTMLHeadElement')
-  @DocsEditable()
   factory HeadElement() => JS(
       'returns:HeadElement;creates:HeadElement;new:true',
       '#.createElement(#)',
@@ -21701,9 +16593,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.
 
-@DocsEditable()
-@DomName('Headers')
-@Experimental() // untriaged
 @Native("Headers")
 class Headers extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -21711,8 +16600,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Headers.Headers')
-  @DocsEditable()
   factory Headers([Object init]) {
     if (init != null) {
       return Headers._create_1(init);
@@ -21726,8 +16613,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.
 
-@DocsEditable()
-@DomName('HTMLHeadingElement')
 @Native("HTMLHeadingElement")
 class HeadingElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -21735,48 +16620,36 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLHeadingElement.HTMLHeadingElement')
-  @DocsEditable()
   factory HeadingElement.h1() => JS(
       'returns:HeadingElement;creates:HeadingElement;new:true',
       '#.createElement(#)',
       document,
       "h1");
 
-  @DomName('HTMLHeadingElement.HTMLHeadingElement')
-  @DocsEditable()
   factory HeadingElement.h2() => JS(
       'returns:HeadingElement;creates:HeadingElement;new:true',
       '#.createElement(#)',
       document,
       "h2");
 
-  @DomName('HTMLHeadingElement.HTMLHeadingElement')
-  @DocsEditable()
   factory HeadingElement.h3() => JS(
       'returns:HeadingElement;creates:HeadingElement;new:true',
       '#.createElement(#)',
       document,
       "h3");
 
-  @DomName('HTMLHeadingElement.HTMLHeadingElement')
-  @DocsEditable()
   factory HeadingElement.h4() => JS(
       'returns:HeadingElement;creates:HeadingElement;new:true',
       '#.createElement(#)',
       document,
       "h4");
 
-  @DomName('HTMLHeadingElement.HTMLHeadingElement')
-  @DocsEditable()
   factory HeadingElement.h5() => JS(
       'returns:HeadingElement;creates:HeadingElement;new:true',
       '#.createElement(#)',
       document,
       "h5");
 
-  @DomName('HTMLHeadingElement.HTMLHeadingElement')
-  @DocsEditable()
   factory HeadingElement.h6() => JS(
       'returns:HeadingElement;creates:HeadingElement;new:true',
       '#.createElement(#)',
@@ -21793,7 +16666,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.
 
-@DomName('History')
 @Native("History")
 class History extends Interceptor implements HistoryBase {
   /**
@@ -21811,40 +16683,23 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('History.length')
-  @DocsEditable()
   final int length;
 
-  @DomName('History.scrollRestoration')
-  @DocsEditable()
-  @Experimental() // untriaged
   String scrollRestoration;
 
-  @DomName('History.state')
-  @DocsEditable()
   dynamic get state =>
       convertNativeToDart_SerializedScriptValue(this._get_state);
   @JSName('state')
-  @DomName('History.state')
-  @DocsEditable()
   @annotation_Creates_SerializedScriptValue
   @annotation_Returns_SerializedScriptValue
   final dynamic _get_state;
 
-  @DomName('History.back')
-  @DocsEditable()
   void back() native;
 
-  @DomName('History.forward')
-  @DocsEditable()
   void forward() native;
 
-  @DomName('History.go')
-  @DocsEditable()
   void go([int delta]) native;
 
-  @DomName('History.pushState')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -21856,16 +16711,12 @@
   }
 
   @JSName('pushState')
-  @DomName('History.pushState')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
   @SupportedBrowser(SupportedBrowser.SAFARI)
   void _pushState_1(data, title, url) native;
 
-  @DomName('History.replaceState')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -21877,8 +16728,6 @@
   }
 
   @JSName('replaceState')
-  @DomName('History.replaceState')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -21889,8 +16738,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.
 
-@DocsEditable()
-@DomName('HTMLCollection')
 @Native("HTMLCollection")
 class HtmlCollection extends Interceptor
     with ListMixin<Node>, ImmutableListMixin<Node>
@@ -21900,8 +16747,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLCollection.length')
-  @DocsEditable()
   int get length => JS("int", "#.length", this);
 
   Node operator [](int index) {
@@ -21947,12 +16792,8 @@
   Node elementAt(int index) => this[index];
   // -- end List<Node> mixins.
 
-  @DomName('HTMLCollection.item')
-  @DocsEditable()
   Node item(int index) native;
 
-  @DomName('HTMLCollection.namedItem')
-  @DocsEditable()
   Object namedItem(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21961,7 +16802,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('HTMLDocument')
 @Native("HTMLDocument")
 class HtmlDocument extends Document {
   // To suppress missing implicit constructor warnings.
@@ -21969,46 +16809,35 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Document.body')
   BodyElement body;
 
   /// UNSTABLE: Chrome-only - create a Range from the given point.
-  @DomName('Document.caretRangeFromPoint')
   @Unstable()
   Range caretRangeFromPoint(int x, int y) {
     return _caretRangeFromPoint(x, y);
   }
 
-  @DomName('Document.elementFromPoint')
   Element elementFromPoint(int x, int y) {
     return _elementFromPoint(x, y);
   }
 
-  @DomName('Document.head')
   HeadElement get head => _head;
 
-  @DomName('Document.lastModified')
   String get lastModified => _lastModified;
 
-  @DomName('Document.preferredStylesheetSet')
   String get preferredStylesheetSet => _preferredStylesheetSet;
 
-  @DomName('Document.referrer')
   String get referrer => _referrer;
 
-  @DomName('Document.selectedStylesheetSet')
   String get selectedStylesheetSet => _selectedStylesheetSet;
   set selectedStylesheetSet(String value) {
     _selectedStylesheetSet = value;
   }
 
-  @DomName('Document.styleSheets')
   List<StyleSheet> get styleSheets => _styleSheets;
 
-  @DomName('Document.title')
   String get title => _title;
 
-  @DomName('Document.title')
   set title(String value) {
     _title = value;
   }
@@ -22025,15 +16854,12 @@
    *   from WebPlatform.org.
    * * [Fullscreen specification](http://www.w3.org/TR/fullscreen/) from W3C.
    */
-  @DomName('Document.webkitExitFullscreen')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
   void exitFullscreen() {
     _webkitExitFullscreen();
   }
 
-  @Experimental()
   /**
    * Register a custom subclass of Element to be instantiatable by the DOM.
    *
@@ -22081,7 +16907,6 @@
 
   /** *Deprecated*: use [registerElement] instead. */
   @deprecated
-  @Experimental()
   void register(String tag, Type customElementClass, {String extendsTag}) {
     return registerElement(tag, customElementClass, extendsTag: extendsTag);
   }
@@ -22092,11 +16917,9 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Document.visibilityChange')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
-  @Experimental()
   static const EventStreamProvider<Event> visibilityChangeEvent =
       const _CustomEventStreamProvider<Event>(
           _determineVisibilityChangeEventType);
@@ -22118,7 +16941,6 @@
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
-  @Experimental()
   Stream<Event> get onVisibilityChange => visibilityChangeEvent.forTarget(this);
 
   /// Creates an element upgrader which can be used to change the Dart wrapper
@@ -22129,7 +16951,6 @@
   ///
   /// If the type is not a direct subclass of HtmlElement then the extendsTag
   /// parameter must be provided.
-  @Experimental()
   ElementUpgrader createElementUpgrader(Type type, {String extendsTag}) {
     return new _JSElementUpgrader(this, type, extendsTag);
   }
@@ -22138,8 +16959,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.
 
-@DocsEditable()
-@DomName('HTMLFormControlsCollection')
 @Native("HTMLFormControlsCollection")
 class HtmlFormControlsCollection extends HtmlCollection {
   // To suppress missing implicit constructor warnings.
@@ -22147,21 +16966,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLFormControlsCollection.item')
-  @DocsEditable()
-  @Experimental() // untriaged
   Node item(int index) native;
 
-  @DomName('HTMLFormControlsCollection.namedItem')
-  @DocsEditable()
   Object namedItem(String name) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLHtmlElement')
 @Native("HTMLHtmlElement")
 class HtmlHtmlElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -22169,8 +16981,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLHtmlElement.HTMLHtmlElement')
-  @DocsEditable()
   factory HtmlHtmlElement() => JS(
       'returns:HtmlHtmlElement;creates:HtmlHtmlElement;new:true',
       '#.createElement(#)',
@@ -22187,9 +16997,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.
 
-@DocsEditable()
-@DomName('HTMLHyperlinkElementUtils')
-@Experimental() // untriaged
 @Native("HTMLHyperlinkElementUtils")
 class HtmlHyperlinkElementUtils extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -22197,67 +17004,32 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLHyperlinkElementUtils.hash')
-  @DocsEditable()
-  @Experimental() // untriaged
   String hash;
 
-  @DomName('HTMLHyperlinkElementUtils.host')
-  @DocsEditable()
-  @Experimental() // untriaged
   String host;
 
-  @DomName('HTMLHyperlinkElementUtils.hostname')
-  @DocsEditable()
-  @Experimental() // untriaged
   String hostname;
 
-  @DomName('HTMLHyperlinkElementUtils.href')
-  @DocsEditable()
-  @Experimental() // untriaged
   String href;
 
-  @DomName('HTMLHyperlinkElementUtils.origin')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String origin;
 
-  @DomName('HTMLHyperlinkElementUtils.password')
-  @DocsEditable()
-  @Experimental() // untriaged
   String password;
 
-  @DomName('HTMLHyperlinkElementUtils.pathname')
-  @DocsEditable()
-  @Experimental() // untriaged
   String pathname;
 
-  @DomName('HTMLHyperlinkElementUtils.port')
-  @DocsEditable()
-  @Experimental() // untriaged
   String port;
 
-  @DomName('HTMLHyperlinkElementUtils.protocol')
-  @DocsEditable()
-  @Experimental() // untriaged
   String protocol;
 
-  @DomName('HTMLHyperlinkElementUtils.search')
-  @DocsEditable()
-  @Experimental() // untriaged
   String search;
 
-  @DomName('HTMLHyperlinkElementUtils.username')
-  @DocsEditable()
-  @Experimental() // untriaged
   String username;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLOptionsCollection')
 @Native("HTMLOptionsCollection")
 class HtmlOptionsCollection extends HtmlCollection {
   // To suppress missing implicit constructor warnings.
@@ -22266,9 +17038,6 @@
   }
 
   @JSName('item')
-  @DomName('HTMLOptionsCollection.item')
-  @DocsEditable()
-  @Experimental() // untriaged
   Element _item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -22322,7 +17091,6 @@
   * * [JS XMLHttpRequest](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest)
   * * [Using XMLHttpRequest](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/Using_XMLHttpRequest)
  */
-@DomName('XMLHttpRequest')
 @Native("XMLHttpRequest")
 class HttpRequest extends HttpRequestEventTarget {
   /**
@@ -22572,7 +17340,6 @@
    * This API provides a subset of [request] which works on IE9. If IE9
    * cross-origin support is not required then [request] should be used instead.
    */
-  @Experimental()
   static Future<String> requestCrossOrigin(String url,
       {String method, String sendData}) {
     if (supportsCrossOrigin) {
@@ -22669,8 +17436,6 @@
    * `open` method is intended only for more complex HTTP requests where
    * finer-grained control is needed.
    */
-  @DomName('XMLHttpRequest.open')
-  @DocsEditable()
   void open(String method, String url,
       {bool async, String user, String password}) native;
 
@@ -22685,8 +17450,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('XMLHttpRequest.readystatechangeEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> readyStateChangeEvent =
       const EventStreamProvider<Event>('readystatechange');
 
@@ -22706,31 +17469,19 @@
    *     HttpRequest.getString('http://dartlang.org').then(
    *         (result) => print('Request complete: $result'));
    */
-  @DomName('XMLHttpRequest.XMLHttpRequest')
-  @DocsEditable()
   factory HttpRequest() {
     return HttpRequest._create_1();
   }
   static HttpRequest _create_1() => JS('HttpRequest', 'new XMLHttpRequest()');
 
-  @DomName('XMLHttpRequest.DONE')
-  @DocsEditable()
   static const int DONE = 4;
 
-  @DomName('XMLHttpRequest.HEADERS_RECEIVED')
-  @DocsEditable()
   static const int HEADERS_RECEIVED = 2;
 
-  @DomName('XMLHttpRequest.LOADING')
-  @DocsEditable()
   static const int LOADING = 3;
 
-  @DomName('XMLHttpRequest.OPENED')
-  @DocsEditable()
   static const int OPENED = 1;
 
-  @DomName('XMLHttpRequest.UNSENT')
-  @DocsEditable()
   static const int UNSENT = 0;
 
   /**
@@ -22765,8 +17516,6 @@
    *   </tr>
    * </table>
    */
-  @DomName('XMLHttpRequest.readyState')
-  @DocsEditable()
   final int readyState;
 
   /**
@@ -22776,8 +17525,6 @@
    * form of a [String], [ByteBuffer], [Document], [Blob], or json (also a
    * [String]). `null` indicates request failure.
    */
-  @DomName('XMLHttpRequest.response')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -22791,8 +17538,6 @@
    * form of a [String], [ByteBuffer], [Document], [Blob], or json (also a
    * [String]). `null` indicates request failure.
    */
-  @DomName('XMLHttpRequest.response')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -22804,8 +17549,6 @@
   /**
    * The response in String form or empty String on failure.
    */
-  @DomName('XMLHttpRequest.responseText')
-  @DocsEditable()
   final String responseText;
 
   /**
@@ -22819,14 +17562,9 @@
    * See also: [MDN
    * responseType](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#xmlhttprequest-responsetype)
    */
-  @DomName('XMLHttpRequest.responseType')
-  @DocsEditable()
   String responseType;
 
   @JSName('responseURL')
-  @DomName('XMLHttpRequest.responseURL')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String responseUrl;
 
   @JSName('responseXML')
@@ -22837,24 +17575,18 @@
    * `text/xml` stream, unless responseType = 'document' and the request is
    * synchronous.
    */
-  @DomName('XMLHttpRequest.responseXML')
-  @DocsEditable()
   final Document responseXml;
 
   /**
    * The HTTP result code from the request (200, 404, etc).
    * See also: [HTTP Status Codes](http://en.wikipedia.org/wiki/List_of_HTTP_status_codes)
    */
-  @DomName('XMLHttpRequest.status')
-  @DocsEditable()
   final int status;
 
   /**
    * The request response string (such as \"200 OK\").
    * See also: [HTTP Status Codes](http://en.wikipedia.org/wiki/List_of_HTTP_status_codes)
    */
-  @DomName('XMLHttpRequest.statusText')
-  @DocsEditable()
   final String statusText;
 
   /**
@@ -22872,17 +17604,12 @@
    * * [The timeout attribute](http://www.w3.org/TR/XMLHttpRequest/#the-timeout-attribute)
    *   from W3C.
    */
-  @DomName('XMLHttpRequest.timeout')
-  @DocsEditable()
-  @Experimental() // untriaged
   int timeout;
 
   /**
    * [EventTarget] that can hold listeners to track the progress of the request.
    * The events fired will be members of [HttpRequestUploadEvents].
    */
-  @DomName('XMLHttpRequest.upload')
-  @DocsEditable()
   @Unstable()
   final HttpRequestUpload upload;
 
@@ -22892,8 +17619,6 @@
    *
    * This value is ignored for same-site requests.
    */
-  @DomName('XMLHttpRequest.withCredentials')
-  @DocsEditable()
   bool withCredentials;
 
   /**
@@ -22903,8 +17628,6 @@
    * `LOADING`. If this method is not in the process of being sent, the method
    * has no effect.
    */
-  @DomName('XMLHttpRequest.abort')
-  @DocsEditable()
   void abort() native;
 
   /**
@@ -22918,8 +17641,6 @@
    * headers](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Response_fields)
    * for a list of common response headers.
    */
-  @DomName('XMLHttpRequest.getAllResponseHeaders')
-  @DocsEditable()
   @Unstable()
   String getAllResponseHeaders() native;
 
@@ -22930,8 +17651,6 @@
    * headers](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Response_fields)
    * for a list of common response headers.
    */
-  @DomName('XMLHttpRequest.getResponseHeader')
-  @DocsEditable()
   @Unstable()
   String getResponseHeader(String name) native;
 
@@ -22942,8 +17661,6 @@
    * This value must be set before the request has been sent. See also the list
    * of [IANA Official MIME types](https://www.iana.org/assignments/media-types/media-types.xhtml)
    */
-  @DomName('XMLHttpRequest.overrideMimeType')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.SAFARI)
@@ -22962,8 +17679,6 @@
    * * [XMLHttpRequest.send](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#send%28%29)
    *   from MDN.
    */
-  @DomName('XMLHttpRequest.send')
-  @DocsEditable()
   void send([body_OR_data]) native;
 
   /**
@@ -22983,8 +17698,6 @@
    *   method](http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader()-method)
    *   from W3C.
    */
-  @DomName('XMLHttpRequest.setRequestHeader')
-  @DocsEditable()
   void setRequestHeader(String name, String value) native;
 
   /// Stream of `readystatechange` events handled by this [HttpRequest].
@@ -22992,17 +17705,12 @@
    * Event listeners to be notified every time the [HttpRequest]
    * object's `readyState` changes values.
    */
-  @DomName('XMLHttpRequest.onreadystatechange')
-  @DocsEditable()
   Stream<Event> get onReadyStateChange => readyStateChangeEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('XMLHttpRequestEventTarget')
-@Experimental() // untriaged
 @Native("XMLHttpRequestEventTarget")
 class HttpRequestEventTarget extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -23016,9 +17724,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('XMLHttpRequestEventTarget.abortEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<ProgressEvent> abortEvent =
       const EventStreamProvider<ProgressEvent>('abort');
 
@@ -23028,9 +17733,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('XMLHttpRequestEventTarget.errorEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<ProgressEvent> errorEvent =
       const EventStreamProvider<ProgressEvent>('error');
 
@@ -23040,9 +17742,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('XMLHttpRequestEventTarget.loadEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<ProgressEvent> loadEvent =
       const EventStreamProvider<ProgressEvent>('load');
 
@@ -23052,9 +17751,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('XMLHttpRequestEventTarget.loadendEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<ProgressEvent> loadEndEvent =
       const EventStreamProvider<ProgressEvent>('loadend');
 
@@ -23064,9 +17760,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('XMLHttpRequestEventTarget.loadstartEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<ProgressEvent> loadStartEvent =
       const EventStreamProvider<ProgressEvent>('loadstart');
 
@@ -23076,9 +17769,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('XMLHttpRequestEventTarget.progressEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<ProgressEvent> progressEvent =
       const EventStreamProvider<ProgressEvent>('progress');
 
@@ -23088,70 +17778,42 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('XMLHttpRequestEventTarget.timeoutEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<ProgressEvent> timeoutEvent =
       const EventStreamProvider<ProgressEvent>('timeout');
 
   /// Stream of `abort` events handled by this [HttpRequestEventTarget].
-  @DomName('XMLHttpRequestEventTarget.onabort')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<ProgressEvent> get onAbort => abortEvent.forTarget(this);
 
   /// Stream of `error` events handled by this [HttpRequestEventTarget].
-  @DomName('XMLHttpRequestEventTarget.onerror')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<ProgressEvent> get onError => errorEvent.forTarget(this);
 
   /// Stream of `load` events handled by this [HttpRequestEventTarget].
-  @DomName('XMLHttpRequestEventTarget.onload')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<ProgressEvent> get onLoad => loadEvent.forTarget(this);
 
   /// Stream of `loadend` events handled by this [HttpRequestEventTarget].
-  @DomName('XMLHttpRequestEventTarget.onloadend')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental() // untriaged
   Stream<ProgressEvent> get onLoadEnd => loadEndEvent.forTarget(this);
 
   /// Stream of `loadstart` events handled by this [HttpRequestEventTarget].
-  @DomName('XMLHttpRequestEventTarget.onloadstart')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<ProgressEvent> get onLoadStart => loadStartEvent.forTarget(this);
 
   /// Stream of `progress` events handled by this [HttpRequestEventTarget].
-  @DomName('XMLHttpRequestEventTarget.onprogress')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental() // untriaged
   Stream<ProgressEvent> get onProgress => progressEvent.forTarget(this);
 
   /// Stream of `timeout` events handled by this [HttpRequestEventTarget].
-  @DomName('XMLHttpRequestEventTarget.ontimeout')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<ProgressEvent> get onTimeout => timeoutEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('XMLHttpRequestUpload')
-// http://xhr.spec.whatwg.org/#xmlhttprequestupload
-@Experimental()
 @Native("XMLHttpRequestUpload")
 class HttpRequestUpload extends HttpRequestEventTarget {
   // To suppress missing implicit constructor warnings.
@@ -23163,8 +17825,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.
 
-@DocsEditable()
-@DomName('HTMLIFrameElement')
 @Native("HTMLIFrameElement")
 class IFrameElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -23172,8 +17832,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLIFrameElement.HTMLIFrameElement')
-  @DocsEditable()
   factory IFrameElement() => JS(
       'returns:IFrameElement;creates:IFrameElement;new:true',
       '#.createElement(#)',
@@ -23186,73 +17844,39 @@
    */
   IFrameElement.created() : super.created();
 
-  @DomName('HTMLIFrameElement.allow')
-  @DocsEditable()
-  @Experimental() // untriaged
   String allow;
 
-  @DomName('HTMLIFrameElement.allowFullscreen')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool allowFullscreen;
 
-  @DomName('HTMLIFrameElement.allowPaymentRequest')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool allowPaymentRequest;
 
-  @DomName('HTMLIFrameElement.contentWindow')
-  @DocsEditable()
   WindowBase get contentWindow =>
       _convertNativeToDart_Window(this._get_contentWindow);
   @JSName('contentWindow')
-  @DomName('HTMLIFrameElement.contentWindow')
-  @DocsEditable()
   @Creates('Window|=Object')
   @Returns('Window|=Object')
   final dynamic _get_contentWindow;
 
-  @DomName('HTMLIFrameElement.csp')
-  @DocsEditable()
-  @Experimental() // untriaged
   String csp;
 
-  @DomName('HTMLIFrameElement.height')
-  @DocsEditable()
   String height;
 
-  @DomName('HTMLIFrameElement.name')
-  @DocsEditable()
   String name;
 
-  @DomName('HTMLIFrameElement.referrerPolicy')
-  @DocsEditable()
-  @Experimental() // untriaged
   String referrerPolicy;
 
-  @DomName('HTMLIFrameElement.sandbox')
-  @DocsEditable()
   final DomTokenList sandbox;
 
-  @DomName('HTMLIFrameElement.src')
-  @DocsEditable()
   String src;
 
-  @DomName('HTMLIFrameElement.srcdoc')
-  @DocsEditable()
   String srcdoc;
 
-  @DomName('HTMLIFrameElement.width')
-  @DocsEditable()
   String width;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('IdleDeadline')
-@Experimental() // untriaged
 @Native("IdleDeadline")
 class IdleDeadline extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -23260,14 +17884,8 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('IdleDeadline.didTimeout')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool didTimeout;
 
-  @DomName('IdleDeadline.timeRemaining')
-  @DocsEditable()
-  @Experimental() // untriaged
   double timeRemaining() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -23276,16 +17894,11 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('IdleRequestCallback')
-@Experimental() // untriaged
 typedef void IdleRequestCallback(IdleDeadline deadline);
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('ImageBitmap')
-@Experimental() // untriaged
 @Native("ImageBitmap")
 class ImageBitmap extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -23293,28 +17906,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ImageBitmap.height')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int height;
 
-  @DomName('ImageBitmap.width')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int width;
 
-  @DomName('ImageBitmap.close')
-  @DocsEditable()
-  @Experimental() // untriaged
   void close() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('ImageBitmapRenderingContext')
-@Experimental() // untriaged
 @Native("ImageBitmapRenderingContext")
 class ImageBitmapRenderingContext extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -23322,23 +17923,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ImageBitmapRenderingContext.canvas')
-  @DocsEditable()
-  @Experimental() // untriaged
   final CanvasElement canvas;
 
-  @DomName('ImageBitmapRenderingContext.transferFromImageBitmap')
-  @DocsEditable()
-  @Experimental() // untriaged
   void transferFromImageBitmap(ImageBitmap bitmap) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('ImageCapture')
-@Experimental() // untriaged
 @Native("ImageCapture")
 class ImageCapture extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -23346,55 +17938,32 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ImageCapture.ImageCapture')
-  @DocsEditable()
   factory ImageCapture(MediaStreamTrack track) {
     return ImageCapture._create_1(track);
   }
   static ImageCapture _create_1(track) =>
       JS('ImageCapture', 'new ImageCapture(#)', track);
 
-  @DomName('ImageCapture.track')
-  @DocsEditable()
-  @Experimental() // untriaged
   final MediaStreamTrack track;
 
-  @DomName('ImageCapture.getPhotoCapabilities')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<PhotoCapabilities> getPhotoCapabilities() =>
       promiseToFuture<PhotoCapabilities>(
           JS("", "#.getPhotoCapabilities()", this));
 
-  @DomName('ImageCapture.getPhotoSettings')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<Map<String, dynamic>> getPhotoSettings() =>
       promiseToFutureAsMap(JS("", "#.getPhotoSettings()", this));
 
-  @DomName('ImageCapture.grabFrame')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<ImageBitmap> grabFrame() =>
       promiseToFuture<ImageBitmap>(JS("", "#.grabFrame()", this));
 
-  @DomName('ImageCapture.setOptions')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future setOptions(Map photoSettings) {
     var photoSettings_1 = convertDartToNative_Dictionary(photoSettings);
     return _setOptions_1(photoSettings_1);
   }
 
   @JSName('setOptions')
-  @DomName('ImageCapture.setOptions')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _setOptions_1(photoSettings) native;
 
-  @DomName('ImageCapture.takePhoto')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future takePhoto([Map photoSettings]) {
     if (photoSettings != null) {
       var photoSettings_1 = convertDartToNative_Dictionary(photoSettings);
@@ -23404,21 +17973,14 @@
   }
 
   @JSName('takePhoto')
-  @DomName('ImageCapture.takePhoto')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _takePhoto_1(photoSettings) native;
   @JSName('takePhoto')
-  @DomName('ImageCapture.takePhoto')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _takePhoto_2() native;
 }
 // Copyright (c) 2013, 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.
 
-@DomName('ImageData')
 @Native("ImageData")
 class ImageData extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -23426,8 +17988,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ImageData.ImageData')
-  @DocsEditable()
   factory ImageData(data_OR_sw, int sh_OR_sw, [int sh]) {
     if ((sh_OR_sw is int) && (data_OR_sw is int) && sh == null) {
       return ImageData._create_1(data_OR_sw, sh_OR_sw);
@@ -23447,25 +18007,18 @@
   static ImageData _create_3(data_OR_sw, sh_OR_sw, sh) =>
       JS('ImageData', 'new ImageData(#,#,#)', data_OR_sw, sh_OR_sw, sh);
 
-  @DomName('ImageData.data')
-  @DocsEditable()
   @Creates('NativeUint8ClampedList')
   @Returns('NativeUint8ClampedList')
   final Uint8ClampedList data;
 
-  @DomName('ImageData.height')
-  @DocsEditable()
   final int height;
 
-  @DomName('ImageData.width')
-  @DocsEditable()
   final int width;
 }
 // Copyright (c) 2012, 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.
 
-@DomName('HTMLImageElement')
 @Native("HTMLImageElement")
 class ImageElement extends HtmlElement implements CanvasImageSource {
   // To suppress missing implicit constructor warnings.
@@ -23473,8 +18026,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLImageElement.HTMLImageElement')
-  @DocsEditable()
   factory ImageElement({String src, int width, int height}) {
     ImageElement e = JS('returns:ImageElement;creates:ImageElement;new:true',
         '#.createElement(#)', document, "img");
@@ -23490,83 +18041,42 @@
    */
   ImageElement.created() : super.created();
 
-  @DomName('HTMLImageElement.alt')
-  @DocsEditable()
   String alt;
 
-  @DomName('HTMLImageElement.async')
-  @DocsEditable()
-  @Experimental() // untriaged
   String async;
 
-  @DomName('HTMLImageElement.complete')
-  @DocsEditable()
   final bool complete;
 
-  @DomName('HTMLImageElement.crossOrigin')
-  @DocsEditable()
   String crossOrigin;
 
-  @DomName('HTMLImageElement.currentSrc')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String currentSrc;
 
-  @DomName('HTMLImageElement.height')
-  @DocsEditable()
   int height;
 
-  @DomName('HTMLImageElement.isMap')
-  @DocsEditable()
   bool isMap;
 
-  @DomName('HTMLImageElement.naturalHeight')
-  @DocsEditable()
   final int naturalHeight;
 
-  @DomName('HTMLImageElement.naturalWidth')
-  @DocsEditable()
   final int naturalWidth;
 
-  @DomName('HTMLImageElement.referrerPolicy')
-  @DocsEditable()
-  @Experimental() // untriaged
   String referrerPolicy;
 
-  @DomName('HTMLImageElement.sizes')
-  @DocsEditable()
-  @Experimental() // untriaged
   String sizes;
 
-  @DomName('HTMLImageElement.src')
-  @DocsEditable()
   String src;
 
-  @DomName('HTMLImageElement.srcset')
-  @DocsEditable()
-  @Experimental() // untriaged
   String srcset;
 
-  @DomName('HTMLImageElement.useMap')
-  @DocsEditable()
   String useMap;
 
-  @DomName('HTMLImageElement.width')
-  @DocsEditable()
   int width;
 
-  @DomName('HTMLImageElement.decode')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future decode() => promiseToFuture(JS("", "#.decode()", this));
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('InputDeviceCapabilities')
-@Experimental() // untriaged
 @Native("InputDeviceCapabilities")
 class InputDeviceCapabilities extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -23574,8 +18084,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('InputDeviceCapabilities.InputDeviceCapabilities')
-  @DocsEditable()
   factory InputDeviceCapabilities([Map deviceInitDict]) {
     if (deviceInitDict != null) {
       var deviceInitDict_1 = convertDartToNative_Dictionary(deviceInitDict);
@@ -23590,16 +18098,12 @@
   static InputDeviceCapabilities _create_2() =>
       JS('InputDeviceCapabilities', 'new InputDeviceCapabilities()');
 
-  @DomName('InputDeviceCapabilities.firesTouchEvents')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool firesTouchEvents;
 }
 // Copyright (c) 2012, 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.
 
-@DomName('HTMLInputElement')
 @Native("HTMLInputElement")
 class InputElement extends HtmlElement
     implements
@@ -23646,194 +18150,99 @@
    */
   InputElement.created() : super.created();
 
-  @DomName('HTMLInputElement.accept')
-  @DocsEditable()
   String accept;
 
-  @DomName('HTMLInputElement.alt')
-  @DocsEditable()
   String alt;
 
-  @DomName('HTMLInputElement.autocapitalize')
-  @DocsEditable()
-  @Experimental() // untriaged
   String autocapitalize;
 
-  @DomName('HTMLInputElement.autocomplete')
-  @DocsEditable()
   String autocomplete;
 
-  @DomName('HTMLInputElement.autofocus')
-  @DocsEditable()
   bool autofocus;
 
-  @DomName('HTMLInputElement.capture')
-  @DocsEditable()
-  @Experimental() // untriaged
   String capture;
 
-  @DomName('HTMLInputElement.checked')
-  @DocsEditable()
   bool checked;
 
-  @DomName('HTMLInputElement.defaultChecked')
-  @DocsEditable()
   bool defaultChecked;
 
-  @DomName('HTMLInputElement.defaultValue')
-  @DocsEditable()
   String defaultValue;
 
-  @DomName('HTMLInputElement.dirName')
-  @DocsEditable()
   String dirName;
 
-  @DomName('HTMLInputElement.disabled')
-  @DocsEditable()
   bool disabled;
 
-  @DomName('HTMLInputElement.files')
-  @DocsEditable()
   @Returns('FileList|Null')
   @Creates('FileList')
   List<File> files;
 
-  @DomName('HTMLInputElement.form')
-  @DocsEditable()
   final FormElement form;
 
-  @DomName('HTMLInputElement.formAction')
-  @DocsEditable()
   String formAction;
 
-  @DomName('HTMLInputElement.formEnctype')
-  @DocsEditable()
   String formEnctype;
 
-  @DomName('HTMLInputElement.formMethod')
-  @DocsEditable()
   String formMethod;
 
-  @DomName('HTMLInputElement.formNoValidate')
-  @DocsEditable()
   bool formNoValidate;
 
-  @DomName('HTMLInputElement.formTarget')
-  @DocsEditable()
   String formTarget;
 
-  @DomName('HTMLInputElement.height')
-  @DocsEditable()
   int height;
 
-  @DomName('HTMLInputElement.incremental')
-  @DocsEditable()
-  // http://www.w3.org/TR/html-markup/input.search.html
-  @Experimental()
   bool incremental;
 
-  @DomName('HTMLInputElement.indeterminate')
-  @DocsEditable()
   bool indeterminate;
 
-  @DomName('HTMLInputElement.labels')
-  @DocsEditable()
   @Returns('NodeList|Null')
   @Creates('NodeList')
   final List<Node> labels;
 
-  @DomName('HTMLInputElement.list')
-  @DocsEditable()
   final HtmlElement list;
 
-  @DomName('HTMLInputElement.max')
-  @DocsEditable()
   String max;
 
-  @DomName('HTMLInputElement.maxLength')
-  @DocsEditable()
   int maxLength;
 
-  @DomName('HTMLInputElement.min')
-  @DocsEditable()
   String min;
 
-  @DomName('HTMLInputElement.minLength')
-  @DocsEditable()
-  @Experimental() // untriaged
   int minLength;
 
-  @DomName('HTMLInputElement.multiple')
-  @DocsEditable()
   bool multiple;
 
-  @DomName('HTMLInputElement.name')
-  @DocsEditable()
   String name;
 
-  @DomName('HTMLInputElement.pattern')
-  @DocsEditable()
   String pattern;
 
-  @DomName('HTMLInputElement.placeholder')
-  @DocsEditable()
   String placeholder;
 
-  @DomName('HTMLInputElement.readOnly')
-  @DocsEditable()
   bool readOnly;
 
-  @DomName('HTMLInputElement.required')
-  @DocsEditable()
   bool required;
 
-  @DomName('HTMLInputElement.selectionDirection')
-  @DocsEditable()
   String selectionDirection;
 
-  @DomName('HTMLInputElement.selectionEnd')
-  @DocsEditable()
   int selectionEnd;
 
-  @DomName('HTMLInputElement.selectionStart')
-  @DocsEditable()
   int selectionStart;
 
-  @DomName('HTMLInputElement.size')
-  @DocsEditable()
   int size;
 
-  @DomName('HTMLInputElement.src')
-  @DocsEditable()
   String src;
 
-  @DomName('HTMLInputElement.step')
-  @DocsEditable()
   String step;
 
-  @DomName('HTMLInputElement.type')
-  @DocsEditable()
   String type;
 
-  @DomName('HTMLInputElement.validationMessage')
-  @DocsEditable()
   final String validationMessage;
 
-  @DomName('HTMLInputElement.validity')
-  @DocsEditable()
   final ValidityState validity;
 
-  @DomName('HTMLInputElement.value')
-  @DocsEditable()
   String value;
 
-  @DomName('HTMLInputElement.valueAsDate')
-  @DocsEditable()
   DateTime get valueAsDate =>
       convertNativeToDart_DateTime(this._get_valueAsDate);
   @JSName('valueAsDate')
-  @DomName('HTMLInputElement.valueAsDate')
-  @DocsEditable()
   @Creates('Null')
   final dynamic _get_valueAsDate;
 
@@ -23845,70 +18254,37 @@
     JS("void", "#.valueAsDate = #", this, value);
   }
 
-  @DomName('HTMLInputElement.valueAsNumber')
-  @DocsEditable()
   num valueAsNumber;
 
   @JSName('webkitEntries')
-  @DomName('HTMLInputElement.webkitEntries')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  // http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#concept-input-type-file-selected
   final List<Entry> entries;
 
   @JSName('webkitdirectory')
-  @DomName('HTMLInputElement.webkitdirectory')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  // https://plus.sandbox.google.com/+AddyOsmani/posts/Dk5UhZ6zfF3
   bool directory;
 
-  @DomName('HTMLInputElement.width')
-  @DocsEditable()
   int width;
 
-  @DomName('HTMLInputElement.willValidate')
-  @DocsEditable()
   final bool willValidate;
 
-  @DomName('HTMLInputElement.checkValidity')
-  @DocsEditable()
   bool checkValidity() native;
 
-  @DomName('HTMLInputElement.reportValidity')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool reportValidity() native;
 
-  @DomName('HTMLInputElement.select')
-  @DocsEditable()
   void select() native;
 
-  @DomName('HTMLInputElement.setCustomValidity')
-  @DocsEditable()
   void setCustomValidity(String error) native;
 
-  @DomName('HTMLInputElement.setRangeText')
-  @DocsEditable()
-  // http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#dom-textarea/input-setrangetext
-  @Experimental() // experimental
   void setRangeText(String replacement,
       {int start, int end, String selectionMode}) native;
 
-  @DomName('HTMLInputElement.setSelectionRange')
-  @DocsEditable()
   void setSelectionRange(int start, int end, [String direction]) native;
 
-  @DomName('HTMLInputElement.stepDown')
-  @DocsEditable()
   void stepDown([int n]) native;
 
-  @DomName('HTMLInputElement.stepUp')
-  @DocsEditable()
   void stepUp([int n]) native;
 }
 
@@ -23920,40 +18296,28 @@
  * Exposes the functionality common between all InputElement types.
  */
 abstract class InputElementBase implements Element {
-  @DomName('HTMLInputElement.autofocus')
   bool autofocus;
 
-  @DomName('HTMLInputElement.disabled')
   bool disabled;
 
-  @DomName('HTMLInputElement.incremental')
   bool incremental;
 
-  @DomName('HTMLInputElement.indeterminate')
   bool indeterminate;
 
-  @DomName('HTMLInputElement.labels')
   List<Node> get labels;
 
-  @DomName('HTMLInputElement.name')
   String name;
 
-  @DomName('HTMLInputElement.validationMessage')
   String get validationMessage;
 
-  @DomName('HTMLInputElement.validity')
   ValidityState get validity;
 
-  @DomName('HTMLInputElement.value')
   String value;
 
-  @DomName('HTMLInputElement.willValidate')
   bool get willValidate;
 
-  @DomName('HTMLInputElement.checkValidity')
   bool checkValidity();
 
-  @DomName('HTMLInputElement.setCustomValidity')
   void setCustomValidity(String error);
 }
 
@@ -23968,40 +18332,28 @@
  * Base interface for all inputs which involve text editing.
  */
 abstract class TextInputElementBase implements InputElementBase {
-  @DomName('HTMLInputElement.autocomplete')
   String autocomplete;
 
-  @DomName('HTMLInputElement.maxLength')
   int maxLength;
 
-  @DomName('HTMLInputElement.pattern')
   String pattern;
 
-  @DomName('HTMLInputElement.placeholder')
   String placeholder;
 
-  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  @DomName('HTMLInputElement.required')
   bool required;
 
-  @DomName('HTMLInputElement.size')
   int size;
 
-  @DomName('HTMLInputElement.select')
   void select();
 
-  @DomName('HTMLInputElement.selectionDirection')
   String selectionDirection;
 
-  @DomName('HTMLInputElement.selectionEnd')
   int selectionEnd;
 
-  @DomName('HTMLInputElement.selectionStart')
   int selectionStart;
 
-  @DomName('HTMLInputElement.setSelectionRange')
   void setSelectionRange(int start, int end, [String direction]);
 }
 
@@ -24018,10 +18370,8 @@
 abstract class SearchInputElement implements TextInputElementBase {
   factory SearchInputElement() => new InputElement(type: 'search');
 
-  @DomName('HTMLInputElement.dirName')
   String dirName;
 
-  @DomName('HTMLInputElement.list')
   Element get list;
 
   /// Returns true if this input type is supported on the current platform.
@@ -24036,10 +18386,8 @@
 abstract class TextInputElement implements TextInputElementBase {
   factory TextInputElement() => new InputElement(type: 'text');
 
-  @DomName('HTMLInputElement.dirName')
   String dirName;
 
-  @DomName('HTMLInputElement.list')
   Element get list;
 }
 
@@ -24055,7 +18403,6 @@
 abstract class UrlInputElement implements TextInputElementBase {
   factory UrlInputElement() => new InputElement(type: 'url');
 
-  @DomName('HTMLInputElement.list')
   Element get list;
 
   /// Returns true if this input type is supported on the current platform.
@@ -24079,7 +18426,6 @@
 abstract class TelephoneInputElement implements TextInputElementBase {
   factory TelephoneInputElement() => new InputElement(type: 'tel');
 
-  @DomName('HTMLInputElement.list')
   Element get list;
 
   /// Returns true if this input type is supported on the current platform.
@@ -24100,34 +18446,24 @@
 abstract class EmailInputElement implements TextInputElementBase {
   factory EmailInputElement() => new InputElement(type: 'email');
 
-  @DomName('HTMLInputElement.autocomplete')
   String autocomplete;
 
-  @DomName('HTMLInputElement.autofocus')
   bool autofocus;
 
-  @DomName('HTMLInputElement.list')
   Element get list;
 
-  @DomName('HTMLInputElement.maxLength')
   int maxLength;
 
-  @DomName('HTMLInputElement.multiple')
   bool multiple;
 
-  @DomName('HTMLInputElement.pattern')
   String pattern;
 
-  @DomName('HTMLInputElement.placeholder')
   String placeholder;
 
-  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  @DomName('HTMLInputElement.required')
   bool required;
 
-  @DomName('HTMLInputElement.size')
   int size;
 
   /// Returns true if this input type is supported on the current platform.
@@ -24147,25 +18483,18 @@
  * Base interface for all input element types which involve ranges.
  */
 abstract class RangeInputElementBase implements InputElementBase {
-  @DomName('HTMLInputElement.list')
   Element get list;
 
-  @DomName('HTMLInputElement.max')
   String max;
 
-  @DomName('HTMLInputElement.min')
   String min;
 
-  @DomName('HTMLInputElement.step')
   String step;
 
-  @DomName('HTMLInputElement.valueAsNumber')
   num valueAsNumber;
 
-  @DomName('HTMLInputElement.stepDown')
   void stepDown([int n]);
 
-  @DomName('HTMLInputElement.stepUp')
   void stepUp([int n]);
 }
 
@@ -24175,17 +18504,13 @@
  * Use [supported] to check if this is supported on the current platform.
  */
 @SupportedBrowser(SupportedBrowser.CHROME, '25')
-@Experimental()
 abstract class DateInputElement implements RangeInputElementBase {
   factory DateInputElement() => new InputElement(type: 'date');
 
-  @DomName('HTMLInputElement.valueAsDate')
   DateTime valueAsDate;
 
-  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -24200,17 +18525,13 @@
  * Use [supported] to check if this is supported on the current platform.
  */
 @SupportedBrowser(SupportedBrowser.CHROME, '25')
-@Experimental()
 abstract class MonthInputElement implements RangeInputElementBase {
   factory MonthInputElement() => new InputElement(type: 'month');
 
-  @DomName('HTMLInputElement.valueAsDate')
   DateTime valueAsDate;
 
-  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -24225,17 +18546,13 @@
  * Use [supported] to check if this is supported on the current platform.
  */
 @SupportedBrowser(SupportedBrowser.CHROME, '25')
-@Experimental()
 abstract class WeekInputElement implements RangeInputElementBase {
   factory WeekInputElement() => new InputElement(type: 'week');
 
-  @DomName('HTMLInputElement.valueAsDate')
   DateTime valueAsDate;
 
-  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -24250,17 +18567,13 @@
  * Use [supported] to check if this is supported on the current platform.
  */
 @SupportedBrowser(SupportedBrowser.CHROME)
-@Experimental()
 abstract class TimeInputElement implements RangeInputElementBase {
   factory TimeInputElement() => new InputElement(type: 'time');
 
-  @DomName('HTMLInputElement.valueAsDate')
   DateTime valueAsDate;
 
-  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -24276,15 +18589,12 @@
  * Use [supported] to check if this is supported on the current platform.
  */
 @SupportedBrowser(SupportedBrowser.CHROME, '25')
-@Experimental()
 abstract class LocalDateTimeInputElement implements RangeInputElementBase {
   factory LocalDateTimeInputElement() =>
       new InputElement(type: 'datetime-local');
 
-  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -24299,17 +18609,13 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.IE)
 @SupportedBrowser(SupportedBrowser.SAFARI)
-@Experimental()
 abstract class NumberInputElement implements RangeInputElementBase {
   factory NumberInputElement() => new InputElement(type: 'number');
 
-  @DomName('HTMLInputElement.placeholder')
   String placeholder;
 
-  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -24326,7 +18632,6 @@
  */
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.IE, '10')
-@Experimental()
 abstract class RangeInputElement implements RangeInputElementBase {
   factory RangeInputElement() => new InputElement(type: 'range');
 
@@ -24345,10 +18650,8 @@
 abstract class CheckboxInputElement implements InputElementBase {
   factory CheckboxInputElement() => new InputElement(type: 'checkbox');
 
-  @DomName('HTMLInputElement.checked')
   bool checked;
 
-  @DomName('HTMLInputElement.required')
   bool required;
 }
 
@@ -24366,10 +18669,8 @@
 abstract class RadioButtonInputElement implements InputElementBase {
   factory RadioButtonInputElement() => new InputElement(type: 'radio');
 
-  @DomName('HTMLInputElement.checked')
   bool checked;
 
-  @DomName('HTMLInputElement.required')
   bool required;
 }
 
@@ -24379,16 +18680,12 @@
 abstract class FileUploadInputElement implements InputElementBase {
   factory FileUploadInputElement() => new InputElement(type: 'file');
 
-  @DomName('HTMLInputElement.accept')
   String accept;
 
-  @DomName('HTMLInputElement.multiple')
   bool multiple;
 
-  @DomName('HTMLInputElement.required')
   bool required;
 
-  @DomName('HTMLInputElement.files')
   List<File> files;
 }
 
@@ -24398,19 +18695,14 @@
 abstract class SubmitButtonInputElement implements InputElementBase {
   factory SubmitButtonInputElement() => new InputElement(type: 'submit');
 
-  @DomName('HTMLInputElement.formAction')
   String formAction;
 
-  @DomName('HTMLInputElement.formEnctype')
   String formEnctype;
 
-  @DomName('HTMLInputElement.formMethod')
   String formMethod;
 
-  @DomName('HTMLInputElement.formNoValidate')
   bool formNoValidate;
 
-  @DomName('HTMLInputElement.formTarget')
   String formTarget;
 }
 
@@ -24421,31 +18713,22 @@
 abstract class ImageButtonInputElement implements InputElementBase {
   factory ImageButtonInputElement() => new InputElement(type: 'image');
 
-  @DomName('HTMLInputElement.alt')
   String alt;
 
-  @DomName('HTMLInputElement.formAction')
   String formAction;
 
-  @DomName('HTMLInputElement.formEnctype')
   String formEnctype;
 
-  @DomName('HTMLInputElement.formMethod')
   String formMethod;
 
-  @DomName('HTMLInputElement.formNoValidate')
   bool formNoValidate;
 
-  @DomName('HTMLInputElement.formTarget')
   String formTarget;
 
-  @DomName('HTMLInputElement.height')
   int height;
 
-  @DomName('HTMLInputElement.src')
   String src;
 
-  @DomName('HTMLInputElement.width')
   int width;
 }
 
@@ -24466,9 +18749,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.
 
-@DocsEditable()
-@DomName('InstallEvent')
-@Experimental() // untriaged
 @Native("InstallEvent")
 class InstallEvent extends ExtendableEvent {
   // To suppress missing implicit constructor warnings.
@@ -24476,8 +18756,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('InstallEvent.InstallEvent')
-  @DocsEditable()
   factory InstallEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -24490,9 +18768,6 @@
   static InstallEvent _create_2(type) =>
       JS('InstallEvent', 'new InstallEvent(#)', type);
 
-  @DomName('InstallEvent.registerForeignFetch')
-  @DocsEditable()
-  @Experimental() // untriaged
   void registerForeignFetch(Map options) {
     var options_1 = convertDartToNative_Dictionary(options);
     _registerForeignFetch_1(options_1);
@@ -24500,18 +18775,12 @@
   }
 
   @JSName('registerForeignFetch')
-  @DomName('InstallEvent.registerForeignFetch')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _registerForeignFetch_1(options) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('IntersectionObserver')
-@Experimental() // untriaged
 @Native("IntersectionObserver")
 class IntersectionObserver extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -24519,8 +18788,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('IntersectionObserver.IntersectionObserver')
-  @DocsEditable()
   factory IntersectionObserver(IntersectionObserverCallback callback,
       [Map options]) {
     if (options != null) {
@@ -24537,39 +18804,18 @@
   static IntersectionObserver _create_2(callback) =>
       JS('IntersectionObserver', 'new IntersectionObserver(#)', callback);
 
-  @DomName('IntersectionObserver.root')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Element root;
 
-  @DomName('IntersectionObserver.rootMargin')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String rootMargin;
 
-  @DomName('IntersectionObserver.thresholds')
-  @DocsEditable()
-  @Experimental() // untriaged
   final List<num> thresholds;
 
-  @DomName('IntersectionObserver.disconnect')
-  @DocsEditable()
-  @Experimental() // untriaged
   void disconnect() native;
 
-  @DomName('IntersectionObserver.observe')
-  @DocsEditable()
-  @Experimental() // untriaged
   void observe(Element target) native;
 
-  @DomName('IntersectionObserver.takeRecords')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<IntersectionObserverEntry> takeRecords() native;
 
-  @DomName('IntersectionObserver.unobserve')
-  @DocsEditable()
-  @Experimental() // untriaged
   void unobserve(Element target) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24578,17 +18824,12 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('IntersectionObserverCallback')
-@Experimental() // untriaged
 typedef void IntersectionObserverCallback(
     List<IntersectionObserverEntry> entries, IntersectionObserver observer);
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('IntersectionObserverEntry')
-@Experimental() // untriaged
 @Native("IntersectionObserverEntry")
 class IntersectionObserverEntry extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -24596,48 +18837,24 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('IntersectionObserverEntry.boundingClientRect')
-  @DocsEditable()
-  @Experimental() // untriaged
   final DomRectReadOnly boundingClientRect;
 
-  @DomName('IntersectionObserverEntry.intersectionRatio')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num intersectionRatio;
 
-  @DomName('IntersectionObserverEntry.intersectionRect')
-  @DocsEditable()
-  @Experimental() // untriaged
   final DomRectReadOnly intersectionRect;
 
-  @DomName('IntersectionObserverEntry.isIntersecting')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool isIntersecting;
 
-  @DomName('IntersectionObserverEntry.rootBounds')
-  @DocsEditable()
-  @Experimental() // untriaged
   final DomRectReadOnly rootBounds;
 
-  @DomName('IntersectionObserverEntry.target')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Element target;
 
-  @DomName('IntersectionObserverEntry.time')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num time;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('InterventionReport')
-@Experimental() // untriaged
 @Native("InterventionReport")
 class InterventionReport extends ReportBody {
   // To suppress missing implicit constructor warnings.
@@ -24645,19 +18862,10 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('InterventionReport.lineNumber')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int lineNumber;
 
-  @DomName('InterventionReport.message')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String message;
 
-  @DomName('InterventionReport.sourceFile')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String sourceFile;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24673,7 +18881,6 @@
  *
  * * [KeyboardEvent](https://developer.mozilla.org/en/DOM/KeyboardEvent) at MDN.
  */
-@DomName('KeyboardEvent')
 @Native("KeyboardEvent")
 class KeyboardEvent extends UIEvent {
   /**
@@ -24706,7 +18913,6 @@
     return e;
   }
 
-  @DomName('KeyboardEvent.initKeyboardEvent')
   void _initKeyboardEvent(
       String type,
       bool canBubble,
@@ -24744,17 +18950,12 @@
     }
   }
 
-  @DomName('KeyboardEvent.keyCode')
   final int keyCode;
 
-  @DomName('KeyboardEvent.charCode')
   final int charCode;
 
-  @DomName('KeyboardEvent.which')
   int get which => _which;
 
-  @DomName('KeyboardEvent.KeyboardEvent')
-  @DocsEditable()
   factory KeyboardEvent._(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -24767,91 +18968,44 @@
   static KeyboardEvent _create_2(type) =>
       JS('KeyboardEvent', 'new KeyboardEvent(#)', type);
 
-  @DomName('KeyboardEvent.DOM_KEY_LOCATION_LEFT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int DOM_KEY_LOCATION_LEFT = 0x01;
 
-  @DomName('KeyboardEvent.DOM_KEY_LOCATION_NUMPAD')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int DOM_KEY_LOCATION_NUMPAD = 0x03;
 
-  @DomName('KeyboardEvent.DOM_KEY_LOCATION_RIGHT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int DOM_KEY_LOCATION_RIGHT = 0x02;
 
-  @DomName('KeyboardEvent.DOM_KEY_LOCATION_STANDARD')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int DOM_KEY_LOCATION_STANDARD = 0x00;
 
-  @DomName('KeyboardEvent.altKey')
-  @DocsEditable()
   final bool altKey;
 
   @JSName('charCode')
-  @DomName('KeyboardEvent.charCode')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int _charCode;
 
-  @DomName('KeyboardEvent.code')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String code;
 
-  @DomName('KeyboardEvent.ctrlKey')
-  @DocsEditable()
   final bool ctrlKey;
 
-  @DomName('KeyboardEvent.isComposing')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool isComposing;
 
-  @DomName('KeyboardEvent.key')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String key;
 
   @JSName('keyCode')
-  @DomName('KeyboardEvent.keyCode')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int _keyCode;
 
-  @DomName('KeyboardEvent.location')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int location;
 
-  @DomName('KeyboardEvent.metaKey')
-  @DocsEditable()
   final bool metaKey;
 
-  @DomName('KeyboardEvent.repeat')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool repeat;
 
-  @DomName('KeyboardEvent.shiftKey')
-  @DocsEditable()
   final bool shiftKey;
 
-  @DomName('KeyboardEvent.getModifierState')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool getModifierState(String keyArg) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('KeyframeEffect')
-@Experimental() // untriaged
 @Native("KeyframeEffect")
 class KeyframeEffect extends KeyframeEffectReadOnly {
   // To suppress missing implicit constructor warnings.
@@ -24859,8 +19013,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('KeyframeEffect.KeyframeEffect')
-  @DocsEditable()
   factory KeyframeEffect(Element target, Object effect, [Object options]) {
     if (options != null) {
       return KeyframeEffect._create_1(target, effect, options);
@@ -24876,9 +19028,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.
 
-@DocsEditable()
-@DomName('KeyframeEffectReadOnly')
-@Experimental() // untriaged
 @Native("KeyframeEffectReadOnly")
 class KeyframeEffectReadOnly extends AnimationEffectReadOnly {
   // To suppress missing implicit constructor warnings.
@@ -24886,8 +19035,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('KeyframeEffectReadOnly.KeyframeEffectReadOnly')
-  @DocsEditable()
   factory KeyframeEffectReadOnly(Element target, Object effect,
       [Object options]) {
     if (options != null) {
@@ -24911,8 +19058,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.
 
-@DocsEditable()
-@DomName('HTMLLIElement')
 @Native("HTMLLIElement")
 class LIElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -24920,8 +19065,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLLIElement.HTMLLIElement')
-  @DocsEditable()
   factory LIElement() => JS('returns:LIElement;creates:LIElement;new:true',
       '#.createElement(#)', document, "li");
   /**
@@ -24931,16 +19074,12 @@
    */
   LIElement.created() : super.created();
 
-  @DomName('HTMLLIElement.value')
-  @DocsEditable()
   int value;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLLabelElement')
 @Native("HTMLLabelElement")
 class LabelElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -24948,8 +19087,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLLabelElement.HTMLLabelElement')
-  @DocsEditable()
   factory LabelElement() => JS(
       'returns:LabelElement;creates:LabelElement;new:true',
       '#.createElement(#)',
@@ -24962,24 +19099,16 @@
    */
   LabelElement.created() : super.created();
 
-  @DomName('HTMLLabelElement.control')
-  @DocsEditable()
   final HtmlElement control;
 
-  @DomName('HTMLLabelElement.form')
-  @DocsEditable()
   final FormElement form;
 
-  @DomName('HTMLLabelElement.htmlFor')
-  @DocsEditable()
   String htmlFor;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLLegendElement')
 @Native("HTMLLegendElement")
 class LegendElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -24987,8 +19116,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLLegendElement.HTMLLegendElement')
-  @DocsEditable()
   factory LegendElement() => JS(
       'returns:LegendElement;creates:LegendElement;new:true',
       '#.createElement(#)',
@@ -25001,17 +19128,12 @@
    */
   LegendElement.created() : super.created();
 
-  @DomName('HTMLLegendElement.form')
-  @DocsEditable()
   final FormElement form;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('LinearAccelerationSensor')
-@Experimental() // untriaged
 @Native("LinearAccelerationSensor")
 class LinearAccelerationSensor extends Accelerometer {
   // To suppress missing implicit constructor warnings.
@@ -25019,8 +19141,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('LinearAccelerationSensor.LinearAccelerationSensor')
-  @DocsEditable()
   factory LinearAccelerationSensor([Map sensorOptions]) {
     if (sensorOptions != null) {
       var sensorOptions_1 = convertDartToNative_Dictionary(sensorOptions);
@@ -25039,8 +19159,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.
 
-@DocsEditable()
-@DomName('HTMLLinkElement')
 @Native("HTMLLinkElement")
 class LinkElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -25048,8 +19166,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLLinkElement.HTMLLinkElement')
-  @DocsEditable()
   factory LinkElement() => JS(
       'returns:LinkElement;creates:LinkElement;new:true',
       '#.createElement(#)',
@@ -25062,72 +19178,34 @@
    */
   LinkElement.created() : super.created();
 
-  @DomName('HTMLLinkElement.as')
-  @DocsEditable()
-  @Experimental() // untriaged
   String as;
 
-  @DomName('HTMLLinkElement.crossOrigin')
-  @DocsEditable()
-  @Experimental() // untriaged
   String crossOrigin;
 
-  @DomName('HTMLLinkElement.disabled')
-  @DocsEditable()
   bool disabled;
 
-  @DomName('HTMLLinkElement.href')
-  @DocsEditable()
   String href;
 
-  @DomName('HTMLLinkElement.hreflang')
-  @DocsEditable()
   String hreflang;
 
-  @DomName('HTMLLinkElement.import')
-  @DocsEditable()
-  // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/imports/index.html#interface-import
-  @Experimental()
   final Document import;
 
-  @DomName('HTMLLinkElement.integrity')
-  @DocsEditable()
-  @Experimental() // untriaged
   String integrity;
 
-  @DomName('HTMLLinkElement.media')
-  @DocsEditable()
   String media;
 
-  @DomName('HTMLLinkElement.referrerPolicy')
-  @DocsEditable()
-  @Experimental() // untriaged
   String referrerPolicy;
 
-  @DomName('HTMLLinkElement.rel')
-  @DocsEditable()
   String rel;
 
-  @DomName('HTMLLinkElement.relList')
-  @DocsEditable()
-  @Experimental() // untriaged
   final DomTokenList relList;
 
-  @DomName('HTMLLinkElement.scope')
-  @DocsEditable()
-  @Experimental() // untriaged
   String scope;
 
-  @DomName('HTMLLinkElement.sheet')
-  @DocsEditable()
   final StyleSheet sheet;
 
-  @DomName('HTMLLinkElement.sizes')
-  @DocsEditable()
   final DomTokenList sizes;
 
-  @DomName('HTMLLinkElement.type')
-  @DocsEditable()
   String type;
 
   /// Checks if HTML imports are supported on the current platform.
@@ -25139,8 +19217,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.
 
-@DocsEditable()
-@DomName('Location')
 @Native("Location")
 class Location extends Interceptor implements LocationBase {
   // To suppress missing implicit constructor warnings.
@@ -25148,63 +19224,34 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Location.ancestorOrigins')
-  @DocsEditable()
-  @Experimental() // nonstandard
   @Returns('DomStringList|Null')
   @Creates('DomStringList')
   final List<String> ancestorOrigins;
 
-  @DomName('Location.hash')
-  @DocsEditable()
   String hash;
 
-  @DomName('Location.host')
-  @DocsEditable()
   String host;
 
-  @DomName('Location.hostname')
-  @DocsEditable()
   String hostname;
 
-  @DomName('Location.href')
-  @DocsEditable()
   String href;
 
-  @DomName('Location.pathname')
-  @DocsEditable()
   String pathname;
 
-  @DomName('Location.port')
-  @DocsEditable()
   String port;
 
-  @DomName('Location.protocol')
-  @DocsEditable()
   String protocol;
 
-  @DomName('Location.search')
-  @DocsEditable()
   String search;
 
-  @DomName('Location.trustedHref')
-  @DocsEditable()
-  @Experimental() // untriaged
   TrustedUrl trustedHref;
 
-  @DomName('Location.assign')
-  @DocsEditable()
   void assign([String url]) native;
 
-  @DomName('Location.reload')
-  @DocsEditable()
   void reload() native;
 
-  @DomName('Location.replace')
-  @DocsEditable()
   void replace(String url) native;
 
-  @DomName('Location.origin')
   String get origin {
     if (JS('bool', '("origin" in #)', this)) {
       return JS('String', '#.origin', this);
@@ -25212,17 +19259,12 @@
     return '${this.protocol}//${this.host}';
   }
 
-  @DomName('Location.toString')
-  @DocsEditable()
   String toString() => JS('String', 'String(#)', this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('Magnetometer')
-@Experimental() // untriaged
 @Native("Magnetometer")
 class Magnetometer extends Sensor {
   // To suppress missing implicit constructor warnings.
@@ -25230,8 +19272,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Magnetometer.Magnetometer')
-  @DocsEditable()
   factory Magnetometer([Map sensorOptions]) {
     if (sensorOptions != null) {
       var sensorOptions_1 = convertDartToNative_Dictionary(sensorOptions);
@@ -25243,27 +19283,16 @@
       JS('Magnetometer', 'new Magnetometer(#)', sensorOptions);
   static Magnetometer _create_2() => JS('Magnetometer', 'new Magnetometer()');
 
-  @DomName('Magnetometer.x')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num x;
 
-  @DomName('Magnetometer.y')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num y;
 
-  @DomName('Magnetometer.z')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num z;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLMapElement')
 @Native("HTMLMapElement")
 class MapElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -25271,8 +19300,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLMapElement.HTMLMapElement')
-  @DocsEditable()
   factory MapElement() => JS('returns:MapElement;creates:MapElement;new:true',
       '#.createElement(#)', document, "map");
   /**
@@ -25282,23 +19309,16 @@
    */
   MapElement.created() : super.created();
 
-  @DomName('HTMLMapElement.areas')
-  @DocsEditable()
   @Returns('HtmlCollection|Null')
   @Creates('HtmlCollection')
   final List<Node> areas;
 
-  @DomName('HTMLMapElement.name')
-  @DocsEditable()
   String name;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MediaCapabilities')
-@Experimental() // untriaged
 @Native("MediaCapabilities")
 class MediaCapabilities extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -25306,41 +19326,26 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MediaCapabilities.decodingInfo')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future decodingInfo(Map configuration) {
     var configuration_1 = convertDartToNative_Dictionary(configuration);
     return _decodingInfo_1(configuration_1);
   }
 
   @JSName('decodingInfo')
-  @DomName('MediaCapabilities.decodingInfo')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _decodingInfo_1(configuration) native;
 
-  @DomName('MediaCapabilities.encodingInfo')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future encodingInfo(Map configuration) {
     var configuration_1 = convertDartToNative_Dictionary(configuration);
     return _encodingInfo_1(configuration_1);
   }
 
   @JSName('encodingInfo')
-  @DomName('MediaCapabilities.encodingInfo')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _encodingInfo_1(configuration) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MediaCapabilitiesInfo')
-@Experimental() // untriaged
 @Native("MediaCapabilitiesInfo")
 class MediaCapabilitiesInfo extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -25348,28 +19353,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MediaCapabilitiesInfo.powerEfficient')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool powerEfficient;
 
-  @DomName('MediaCapabilitiesInfo.smooth')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool smooth;
 
-  @DomName('MediaCapabilitiesInfo.supported')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool supported;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MediaDeviceInfo')
-@Experimental() // untriaged
 @Native("MediaDeviceInfo")
 class MediaDeviceInfo extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -25377,33 +19370,18 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MediaDeviceInfo.deviceId')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String deviceId;
 
-  @DomName('MediaDeviceInfo.groupId')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String groupId;
 
-  @DomName('MediaDeviceInfo.kind')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String kind;
 
-  @DomName('MediaDeviceInfo.label')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String label;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MediaDevices')
-@Experimental() // untriaged
 @Native("MediaDevices")
 class MediaDevices extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -25411,32 +19389,21 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MediaDevices.enumerateDevices')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<List<MediaDeviceInfo>> enumerateDevices() =>
       promiseToFuture<List<MediaDeviceInfo>>(
           JS("", "#.enumerateDevices()", this));
 
-  @DomName('MediaDevices.getSupportedConstraints')
-  @DocsEditable()
-  @Experimental() // untriaged
   Map getSupportedConstraints() {
     return convertNativeToDart_Dictionary(_getSupportedConstraints_1());
   }
 
   @JSName('getSupportedConstraints')
-  @DomName('MediaDevices.getSupportedConstraints')
-  @DocsEditable()
-  @Experimental() // untriaged
   _getSupportedConstraints_1() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLMediaElement')
 @Unstable()
 @Native("HTMLMediaElement")
 class MediaElement extends HtmlElement {
@@ -25451,237 +19418,114 @@
    */
   MediaElement.created() : super.created();
 
-  @DomName('HTMLMediaElement.HAVE_CURRENT_DATA')
-  @DocsEditable()
   static const int HAVE_CURRENT_DATA = 2;
 
-  @DomName('HTMLMediaElement.HAVE_ENOUGH_DATA')
-  @DocsEditable()
   static const int HAVE_ENOUGH_DATA = 4;
 
-  @DomName('HTMLMediaElement.HAVE_FUTURE_DATA')
-  @DocsEditable()
   static const int HAVE_FUTURE_DATA = 3;
 
-  @DomName('HTMLMediaElement.HAVE_METADATA')
-  @DocsEditable()
   static const int HAVE_METADATA = 1;
 
-  @DomName('HTMLMediaElement.HAVE_NOTHING')
-  @DocsEditable()
   static const int HAVE_NOTHING = 0;
 
-  @DomName('HTMLMediaElement.NETWORK_EMPTY')
-  @DocsEditable()
   static const int NETWORK_EMPTY = 0;
 
-  @DomName('HTMLMediaElement.NETWORK_IDLE')
-  @DocsEditable()
   static const int NETWORK_IDLE = 1;
 
-  @DomName('HTMLMediaElement.NETWORK_LOADING')
-  @DocsEditable()
   static const int NETWORK_LOADING = 2;
 
-  @DomName('HTMLMediaElement.NETWORK_NO_SOURCE')
-  @DocsEditable()
   static const int NETWORK_NO_SOURCE = 3;
 
-  @DomName('HTMLMediaElement.audioTracks')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AudioTrackList audioTracks;
 
-  @DomName('HTMLMediaElement.autoplay')
-  @DocsEditable()
   bool autoplay;
 
-  @DomName('HTMLMediaElement.buffered')
-  @DocsEditable()
   final TimeRanges buffered;
 
-  @DomName('HTMLMediaElement.controls')
-  @DocsEditable()
   bool controls;
 
-  @DomName('HTMLMediaElement.controlsList')
-  @DocsEditable()
-  @Experimental() // untriaged
   final DomTokenList controlsList;
 
-  @DomName('HTMLMediaElement.crossOrigin')
-  @DocsEditable()
-  @Experimental() // untriaged
   String crossOrigin;
 
-  @DomName('HTMLMediaElement.currentSrc')
-  @DocsEditable()
   final String currentSrc;
 
-  @DomName('HTMLMediaElement.currentTime')
-  @DocsEditable()
   num currentTime;
 
-  @DomName('HTMLMediaElement.defaultMuted')
-  @DocsEditable()
   bool defaultMuted;
 
-  @DomName('HTMLMediaElement.defaultPlaybackRate')
-  @DocsEditable()
   num defaultPlaybackRate;
 
-  @DomName('HTMLMediaElement.disableRemotePlayback')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool disableRemotePlayback;
 
-  @DomName('HTMLMediaElement.duration')
-  @DocsEditable()
   final num duration;
 
-  @DomName('HTMLMediaElement.ended')
-  @DocsEditable()
   final bool ended;
 
-  @DomName('HTMLMediaElement.error')
-  @DocsEditable()
   final MediaError error;
 
-  @DomName('HTMLMediaElement.loop')
-  @DocsEditable()
   bool loop;
 
-  @DomName('HTMLMediaElement.mediaKeys')
-  @DocsEditable()
-  // https://dvcs.w3.org/hg/html-media/raw-file/eme-v0.1/encrypted-media/encrypted-media.html
-  @Experimental()
   final MediaKeys mediaKeys;
 
-  @DomName('HTMLMediaElement.muted')
-  @DocsEditable()
   bool muted;
 
-  @DomName('HTMLMediaElement.networkState')
-  @DocsEditable()
   final int networkState;
 
-  @DomName('HTMLMediaElement.paused')
-  @DocsEditable()
   final bool paused;
 
-  @DomName('HTMLMediaElement.playbackRate')
-  @DocsEditable()
   num playbackRate;
 
-  @DomName('HTMLMediaElement.played')
-  @DocsEditable()
   final TimeRanges played;
 
-  @DomName('HTMLMediaElement.preload')
-  @DocsEditable()
   String preload;
 
-  @DomName('HTMLMediaElement.readyState')
-  @DocsEditable()
   final int readyState;
 
-  @DomName('HTMLMediaElement.remote')
-  @DocsEditable()
-  @Experimental() // untriaged
   final RemotePlayback remote;
 
-  @DomName('HTMLMediaElement.seekable')
-  @DocsEditable()
   final TimeRanges seekable;
 
-  @DomName('HTMLMediaElement.seeking')
-  @DocsEditable()
   final bool seeking;
 
-  @DomName('HTMLMediaElement.sinkId')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String sinkId;
 
-  @DomName('HTMLMediaElement.src')
-  @DocsEditable()
   String src;
 
-  @DomName('HTMLMediaElement.srcObject')
-  @DocsEditable()
-  @Experimental() // untriaged
   MediaStream srcObject;
 
-  @DomName('HTMLMediaElement.textTracks')
-  @DocsEditable()
-  // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dom-media-texttracks
-  @Experimental()
   final TextTrackList textTracks;
 
-  @DomName('HTMLMediaElement.videoTracks')
-  @DocsEditable()
-  @Experimental() // untriaged
   final VideoTrackList videoTracks;
 
-  @DomName('HTMLMediaElement.volume')
-  @DocsEditable()
   num volume;
 
   @JSName('webkitAudioDecodedByteCount')
-  @DomName('HTMLMediaElement.webkitAudioDecodedByteCount')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  @Experimental() // nonstandard
   final int audioDecodedByteCount;
 
   @JSName('webkitVideoDecodedByteCount')
-  @DomName('HTMLMediaElement.webkitVideoDecodedByteCount')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  @Experimental() // nonstandard
   final int videoDecodedByteCount;
 
-  @DomName('HTMLMediaElement.addTextTrack')
-  @DocsEditable()
-  // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dom-media-addtexttrack
-  @Experimental()
   TextTrack addTextTrack(String kind, [String label, String language]) native;
 
-  @DomName('HTMLMediaElement.canPlayType')
-  @DocsEditable()
   @Unstable()
   String canPlayType(String type, [String keySystem]) native;
 
-  @DomName('HTMLMediaElement.captureStream')
-  @DocsEditable()
-  @Experimental() // untriaged
   MediaStream captureStream() native;
 
-  @DomName('HTMLMediaElement.load')
-  @DocsEditable()
   void load() native;
 
-  @DomName('HTMLMediaElement.pause')
-  @DocsEditable()
   void pause() native;
 
-  @DomName('HTMLMediaElement.play')
-  @DocsEditable()
   Future play() => promiseToFuture(JS("", "#.play()", this));
 
-  @DomName('HTMLMediaElement.setMediaKeys')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future setMediaKeys(MediaKeys mediaKeys) =>
       promiseToFuture(JS("", "#.setMediaKeys(#)", this, mediaKeys));
 
-  @DomName('HTMLMediaElement.setSinkId')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future setSinkId(String sinkId) =>
       promiseToFuture(JS("", "#.setSinkId(#)", this, sinkId));
 }
@@ -25689,9 +19533,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.
 
-@DocsEditable()
-@DomName('MediaEncryptedEvent')
-@Experimental() // untriaged
 @Native("MediaEncryptedEvent")
 class MediaEncryptedEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -25699,8 +19540,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MediaEncryptedEvent.MediaEncryptedEvent')
-  @DocsEditable()
   factory MediaEncryptedEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -25716,22 +19555,14 @@
   static MediaEncryptedEvent _create_2(type) =>
       JS('MediaEncryptedEvent', 'new MediaEncryptedEvent(#)', type);
 
-  @DomName('MediaEncryptedEvent.initData')
-  @DocsEditable()
-  @Experimental() // untriaged
   final ByteBuffer initData;
 
-  @DomName('MediaEncryptedEvent.initDataType')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String initDataType;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MediaError')
 @Unstable()
 @Native("MediaError")
 class MediaError extends Interceptor {
@@ -25740,39 +19571,22 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MediaError.MEDIA_ERR_ABORTED')
-  @DocsEditable()
   static const int MEDIA_ERR_ABORTED = 1;
 
-  @DomName('MediaError.MEDIA_ERR_DECODE')
-  @DocsEditable()
   static const int MEDIA_ERR_DECODE = 3;
 
-  @DomName('MediaError.MEDIA_ERR_NETWORK')
-  @DocsEditable()
   static const int MEDIA_ERR_NETWORK = 2;
 
-  @DomName('MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED')
-  @DocsEditable()
   static const int MEDIA_ERR_SRC_NOT_SUPPORTED = 4;
 
-  @DomName('MediaError.code')
-  @DocsEditable()
   final int code;
 
-  @DomName('MediaError.message')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String message;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MediaKeyMessageEvent')
-// https://dvcs.w3.org/hg/html-media/raw-file/eme-v0.1/encrypted-media/encrypted-media.html#dom-mediakeymessageevent
-@Experimental()
 @Native("MediaKeyMessageEvent")
 class MediaKeyMessageEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -25780,8 +19594,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MediaKeyMessageEvent.MediaKeyMessageEvent')
-  @DocsEditable()
   factory MediaKeyMessageEvent(String type, Map eventInitDict) {
     var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
     return MediaKeyMessageEvent._create_1(type, eventInitDict_1);
@@ -25792,23 +19604,14 @@
       type,
       eventInitDict);
 
-  @DomName('MediaKeyMessageEvent.message')
-  @DocsEditable()
   final ByteBuffer message;
 
-  @DomName('MediaKeyMessageEvent.messageType')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String messageType;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MediaKeySession')
-// https://dvcs.w3.org/hg/html-media/raw-file/eme-v0.1/encrypted-media/encrypted-media.html#dom-mediakeysession
-@Experimental()
 @Native("MediaKeySession")
 class MediaKeySession extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -25816,70 +19619,37 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MediaKeySession.messageEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MessageEvent> messageEvent =
       const EventStreamProvider<MessageEvent>('message');
 
-  @DomName('MediaKeySession.closed')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<void> get closed => promiseToFuture<void>(JS("", "#.closed", this));
 
-  @DomName('MediaKeySession.expiration')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num expiration;
 
-  @DomName('MediaKeySession.keyStatuses')
-  @DocsEditable()
-  @Experimental() // untriaged
   final MediaKeyStatusMap keyStatuses;
 
-  @DomName('MediaKeySession.sessionId')
-  @DocsEditable()
   final String sessionId;
 
-  @DomName('MediaKeySession.close')
-  @DocsEditable()
   Future close() => promiseToFuture(JS("", "#.close()", this));
 
-  @DomName('MediaKeySession.generateRequest')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future generateRequest(String initDataType, /*BufferSource*/ initData) =>
       promiseToFuture(
           JS("", "#.generateRequest(#, #)", this, initDataType, initData));
 
-  @DomName('MediaKeySession.load')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future load(String sessionId) =>
       promiseToFuture(JS("", "#.load(#)", this, sessionId));
 
-  @DomName('MediaKeySession.remove')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future remove() => promiseToFuture(JS("", "#.remove()", this));
 
   @JSName('update')
-  @DomName('MediaKeySession.update')
-  @DocsEditable()
   Future _update(/*BufferSource*/ response) native;
 
-  @DomName('MediaKeySession.onmessage')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MediaKeyStatusMap')
-@Experimental() // untriaged
 @Native("MediaKeyStatusMap")
 class MediaKeyStatusMap extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -25887,28 +19657,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MediaKeyStatusMap.size')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int size;
 
-  @DomName('MediaKeyStatusMap.get')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object get(/*BufferSource*/ keyId) native;
 
-  @DomName('MediaKeyStatusMap.has')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool has(/*BufferSource*/ keyId) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MediaKeySystemAccess')
-@Experimental() // untriaged
 @Native("MediaKeySystemAccess")
 class MediaKeySystemAccess extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -25916,38 +19674,22 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MediaKeySystemAccess.keySystem')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String keySystem;
 
-  @DomName('MediaKeySystemAccess.createMediaKeys')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future createMediaKeys() =>
       promiseToFuture(JS("", "#.createMediaKeys()", this));
 
-  @DomName('MediaKeySystemAccess.getConfiguration')
-  @DocsEditable()
-  @Experimental() // untriaged
   Map getConfiguration() {
     return convertNativeToDart_Dictionary(_getConfiguration_1());
   }
 
   @JSName('getConfiguration')
-  @DomName('MediaKeySystemAccess.getConfiguration')
-  @DocsEditable()
-  @Experimental() // untriaged
   _getConfiguration_1() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MediaKeys')
-// https://dvcs.w3.org/hg/html-media/raw-file/eme-v0.1/encrypted-media/encrypted-media.html
-@Experimental()
 @Native("MediaKeys")
 class MediaKeys extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -25956,19 +19698,11 @@
   }
 
   @JSName('createSession')
-  @DomName('MediaKeys.createSession')
-  @DocsEditable()
   MediaKeySession _createSession([String sessionType]) native;
 
-  @DomName('MediaKeys.getStatusForPolicy')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future getStatusForPolicy(MediaKeysPolicy policy) =>
       promiseToFuture(JS("", "#.getStatusForPolicy(#)", this, policy));
 
-  @DomName('MediaKeys.setServerCertificate')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future setServerCertificate(/*BufferSource*/ serverCertificate) =>
       promiseToFuture(
           JS("", "#.setServerCertificate(#)", this, serverCertificate));
@@ -25977,9 +19711,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.
 
-@DocsEditable()
-@DomName('MediaKeysPolicy')
-@Experimental() // untriaged
 @Native("MediaKeysPolicy")
 class MediaKeysPolicy extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -25987,8 +19718,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MediaKeysPolicy.MediaKeysPolicy')
-  @DocsEditable()
   factory MediaKeysPolicy(Map init) {
     var init_1 = convertDartToNative_Dictionary(init);
     return MediaKeysPolicy._create_1(init_1);
@@ -25996,17 +19725,12 @@
   static MediaKeysPolicy _create_1(init) =>
       JS('MediaKeysPolicy', 'new MediaKeysPolicy(#)', init);
 
-  @DomName('MediaKeysPolicy.minHdcpVersion')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String minHdcpVersion;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MediaList')
 @Unstable()
 @Native("MediaList")
 class MediaList extends Interceptor {
@@ -26015,33 +19739,20 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MediaList.length')
-  @DocsEditable()
   final int length;
 
-  @DomName('MediaList.mediaText')
-  @DocsEditable()
   String mediaText;
 
-  @DomName('MediaList.appendMedium')
-  @DocsEditable()
   void appendMedium(String medium) native;
 
-  @DomName('MediaList.deleteMedium')
-  @DocsEditable()
   void deleteMedium(String medium) native;
 
-  @DomName('MediaList.item')
-  @DocsEditable()
   String item(int index) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MediaMetadata')
-@Experimental() // untriaged
 @Native("MediaMetadata")
 class MediaMetadata extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -26049,8 +19760,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MediaMetadata.MediaMetadata')
-  @DocsEditable()
   factory MediaMetadata([Map metadata]) {
     if (metadata != null) {
       var metadata_1 = convertDartToNative_Dictionary(metadata);
@@ -26063,32 +19772,18 @@
   static MediaMetadata _create_2() =>
       JS('MediaMetadata', 'new MediaMetadata()');
 
-  @DomName('MediaMetadata.album')
-  @DocsEditable()
-  @Experimental() // untriaged
   String album;
 
-  @DomName('MediaMetadata.artist')
-  @DocsEditable()
-  @Experimental() // untriaged
   String artist;
 
-  @DomName('MediaMetadata.artwork')
-  @DocsEditable()
-  @Experimental() // untriaged
   List artwork;
 
-  @DomName('MediaMetadata.title')
-  @DocsEditable()
-  @Experimental() // untriaged
   String title;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MediaQueryList')
 @Unstable()
 @Native("MediaQueryList")
 class MediaQueryList extends EventTarget {
@@ -26097,40 +19792,23 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MediaQueryList.changeEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> changeEvent =
       const EventStreamProvider<Event>('change');
 
-  @DomName('MediaQueryList.matches')
-  @DocsEditable()
   final bool matches;
 
-  @DomName('MediaQueryList.media')
-  @DocsEditable()
   final String media;
 
-  @DomName('MediaQueryList.addListener')
-  @DocsEditable()
   void addListener(EventListener listener) native;
 
-  @DomName('MediaQueryList.removeListener')
-  @DocsEditable()
   void removeListener(EventListener listener) native;
 
-  @DomName('MediaQueryList.onchange')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onChange => changeEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MediaQueryListEvent')
-@Experimental() // untriaged
 @Native("MediaQueryListEvent")
 class MediaQueryListEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -26138,8 +19816,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MediaQueryListEvent.MediaQueryListEvent')
-  @DocsEditable()
   factory MediaQueryListEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -26155,23 +19831,14 @@
   static MediaQueryListEvent _create_2(type) =>
       JS('MediaQueryListEvent', 'new MediaQueryListEvent(#)', type);
 
-  @DomName('MediaQueryListEvent.matches')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool matches;
 
-  @DomName('MediaQueryListEvent.media')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String media;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MediaRecorder')
-@Experimental() // untriaged
 @Native("MediaRecorder")
 class MediaRecorder extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -26179,20 +19846,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MediaRecorder.errorEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
-  @DomName('MediaRecorder.pauseEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> pauseEvent =
       const EventStreamProvider<Event>('pause');
 
-  @DomName('MediaRecorder.MediaRecorder')
-  @DocsEditable()
   factory MediaRecorder(MediaStream stream, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -26205,78 +19864,36 @@
   static MediaRecorder _create_2(stream) =>
       JS('MediaRecorder', 'new MediaRecorder(#)', stream);
 
-  @DomName('MediaRecorder.audioBitsPerSecond')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int audioBitsPerSecond;
 
-  @DomName('MediaRecorder.mimeType')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String mimeType;
 
-  @DomName('MediaRecorder.state')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String state;
 
-  @DomName('MediaRecorder.stream')
-  @DocsEditable()
-  @Experimental() // untriaged
   final MediaStream stream;
 
-  @DomName('MediaRecorder.videoBitsPerSecond')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int videoBitsPerSecond;
 
-  @DomName('MediaRecorder.isTypeSupported')
-  @DocsEditable()
-  @Experimental() // untriaged
   static bool isTypeSupported(String type) native;
 
-  @DomName('MediaRecorder.pause')
-  @DocsEditable()
-  @Experimental() // untriaged
   void pause() native;
 
-  @DomName('MediaRecorder.requestData')
-  @DocsEditable()
-  @Experimental() // untriaged
   void requestData() native;
 
-  @DomName('MediaRecorder.resume')
-  @DocsEditable()
-  @Experimental() // untriaged
   void resume() native;
 
-  @DomName('MediaRecorder.start')
-  @DocsEditable()
-  @Experimental() // untriaged
   void start([int timeslice]) native;
 
-  @DomName('MediaRecorder.stop')
-  @DocsEditable()
-  @Experimental() // untriaged
   void stop() native;
 
-  @DomName('MediaRecorder.onerror')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onError => errorEvent.forTarget(this);
 
-  @DomName('MediaRecorder.onpause')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onPause => pauseEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MediaSession')
-@Experimental() // untriaged
 @Native("MediaSession")
 class MediaSession extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -26284,19 +19901,10 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MediaSession.metadata')
-  @DocsEditable()
-  @Experimental() // untriaged
   MediaMetadata metadata;
 
-  @DomName('MediaSession.playbackState')
-  @DocsEditable()
-  @Experimental() // untriaged
   String playbackState;
 
-  @DomName('MediaSession.setActionHandler')
-  @DocsEditable()
-  @Experimental() // untriaged
   void setActionHandler(String action, MediaSessionActionHandler handler)
       native;
 }
@@ -26306,16 +19914,11 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('MediaSessionActionHandler')
-@Experimental() // untriaged
 typedef void MediaSessionActionHandler();
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MediaSettingsRange')
-@Experimental() // untriaged
 @Native("MediaSettingsRange")
 class MediaSettingsRange extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -26323,31 +19926,18 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MediaSettingsRange.max')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num max;
 
-  @DomName('MediaSettingsRange.min')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num min;
 
-  @DomName('MediaSettingsRange.step')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num step;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MediaSource')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.IE, '11')
-// https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#mediasource
-@Experimental()
 @Native("MediaSource")
 class MediaSource extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -26355,8 +19945,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MediaSource.MediaSource')
-  @DocsEditable()
   factory MediaSource() {
     return MediaSource._create_1();
   }
@@ -26365,56 +19953,31 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => JS('bool', '!!(window.MediaSource)');
 
-  @DomName('MediaSource.activeSourceBuffers')
-  @DocsEditable()
   final SourceBufferList activeSourceBuffers;
 
-  @DomName('MediaSource.duration')
-  @DocsEditable()
   num duration;
 
-  @DomName('MediaSource.readyState')
-  @DocsEditable()
   final String readyState;
 
-  @DomName('MediaSource.sourceBuffers')
-  @DocsEditable()
   final SourceBufferList sourceBuffers;
 
-  @DomName('MediaSource.addSourceBuffer')
-  @DocsEditable()
   SourceBuffer addSourceBuffer(String type) native;
 
-  @DomName('MediaSource.clearLiveSeekableRange')
-  @DocsEditable()
-  @Experimental() // untriaged
   void clearLiveSeekableRange() native;
 
-  @DomName('MediaSource.endOfStream')
-  @DocsEditable()
   void endOfStream([String error]) native;
 
-  @DomName('MediaSource.isTypeSupported')
-  @DocsEditable()
   static bool isTypeSupported(String type) native;
 
-  @DomName('MediaSource.removeSourceBuffer')
-  @DocsEditable()
   void removeSourceBuffer(SourceBuffer buffer) native;
 
-  @DomName('MediaSource.setLiveSeekableRange')
-  @DocsEditable()
-  @Experimental() // untriaged
   void setLiveSeekableRange(num start, num end) native;
 }
 // Copyright (c) 2013, 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.
 
-@DomName('MediaStream')
 @SupportedBrowser(SupportedBrowser.CHROME)
-@Experimental()
-// http://dev.w3.org/2011/webrtc/editor/getusermedia.html#mediastream
 @Native("MediaStream")
 class MediaStream extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -26428,8 +19991,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('MediaStream.addtrackEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> addTrackEvent =
       const EventStreamProvider<Event>('addtrack');
 
@@ -26439,13 +20000,9 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('MediaStream.removetrackEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> removeTrackEvent =
       const EventStreamProvider<Event>('removetrack');
 
-  @DomName('MediaStream.MediaStream')
-  @DocsEditable()
   factory MediaStream([stream_OR_tracks]) {
     if (stream_OR_tracks == null) {
       return MediaStream._create_1();
@@ -26464,57 +20021,32 @@
   static MediaStream _create_3(stream_OR_tracks) =>
       JS('MediaStream', 'new MediaStream(#)', stream_OR_tracks);
 
-  @DomName('MediaStream.active')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool active;
 
-  @DomName('MediaStream.id')
-  @DocsEditable()
   final String id;
 
-  @DomName('MediaStream.addTrack')
-  @DocsEditable()
   void addTrack(MediaStreamTrack track) native;
 
-  @DomName('MediaStream.clone')
-  @DocsEditable()
-  @Experimental() // untriaged
   MediaStream clone() native;
 
-  @DomName('MediaStream.getAudioTracks')
-  @DocsEditable()
   @Creates('JSExtendableArray|MediaStreamTrack')
   @Returns('JSExtendableArray')
   List<MediaStreamTrack> getAudioTracks() native;
 
-  @DomName('MediaStream.getTrackById')
-  @DocsEditable()
   MediaStreamTrack getTrackById(String trackId) native;
 
-  @DomName('MediaStream.getTracks')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<MediaStreamTrack> getTracks() native;
 
-  @DomName('MediaStream.getVideoTracks')
-  @DocsEditable()
   @Creates('JSExtendableArray|MediaStreamTrack')
   @Returns('JSExtendableArray')
   List<MediaStreamTrack> getVideoTracks() native;
 
-  @DomName('MediaStream.removeTrack')
-  @DocsEditable()
   void removeTrack(MediaStreamTrack track) native;
 
   /// Stream of `addtrack` events handled by this [MediaStream].
-  @DomName('MediaStream.onaddtrack')
-  @DocsEditable()
   Stream<Event> get onAddTrack => addTrackEvent.forTarget(this);
 
   /// Stream of `removetrack` events handled by this [MediaStream].
-  @DomName('MediaStream.onremovetrack')
-  @DocsEditable()
   Stream<Event> get onRemoveTrack => removeTrackEvent.forTarget(this);
 
   /**
@@ -26537,11 +20069,7 @@
 // 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.
 
-@DocsEditable()
-@DomName('MediaStreamEvent')
 @SupportedBrowser(SupportedBrowser.CHROME)
-@Experimental()
-// http://dev.w3.org/2011/webrtc/editor/getusermedia.html
 @Native("MediaStreamEvent")
 class MediaStreamEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -26549,8 +20077,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MediaStreamEvent.MediaStreamEvent')
-  @DocsEditable()
   factory MediaStreamEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -26566,19 +20092,13 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => Device.isEventTypeSupported('MediaStreamEvent');
 
-  @DomName('MediaStreamEvent.stream')
-  @DocsEditable()
   final MediaStream stream;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MediaStreamTrack')
 @SupportedBrowser(SupportedBrowser.CHROME)
-@Experimental()
-// http://dev.w3.org/2011/webrtc/editor/getusermedia.html#mediastreamtrack
 @Native("MediaStreamTrack")
 class MediaStreamTrack extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -26592,8 +20112,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('MediaStreamTrack.endedEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> endedEvent =
       const EventStreamProvider<Event>('ended');
 
@@ -26603,8 +20121,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('MediaStreamTrack.muteEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> muteEvent =
       const EventStreamProvider<Event>('mute');
 
@@ -26614,44 +20130,23 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('MediaStreamTrack.unmuteEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> unmuteEvent =
       const EventStreamProvider<Event>('unmute');
 
-  @DomName('MediaStreamTrack.contentHint')
-  @DocsEditable()
-  @Experimental() // untriaged
   String contentHint;
 
-  @DomName('MediaStreamTrack.enabled')
-  @DocsEditable()
   bool enabled;
 
-  @DomName('MediaStreamTrack.id')
-  @DocsEditable()
   final String id;
 
-  @DomName('MediaStreamTrack.kind')
-  @DocsEditable()
   final String kind;
 
-  @DomName('MediaStreamTrack.label')
-  @DocsEditable()
   final String label;
 
-  @DomName('MediaStreamTrack.muted')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool muted;
 
-  @DomName('MediaStreamTrack.readyState')
-  @DocsEditable()
   final String readyState;
 
-  @DomName('MediaStreamTrack.applyConstraints')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future applyConstraints([Map constraints]) {
     if (constraints != null) {
       var constraints_1 = convertDartToNative_Dictionary(constraints);
@@ -26661,89 +20156,49 @@
   }
 
   @JSName('applyConstraints')
-  @DomName('MediaStreamTrack.applyConstraints')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _applyConstraints_1(constraints) native;
   @JSName('applyConstraints')
-  @DomName('MediaStreamTrack.applyConstraints')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _applyConstraints_2() native;
 
-  @DomName('MediaStreamTrack.clone')
-  @DocsEditable()
-  @Experimental() // untriaged
   MediaStreamTrack clone() native;
 
-  @DomName('MediaStreamTrack.getCapabilities')
-  @DocsEditable()
-  @Experimental() // untriaged
   Map getCapabilities() {
     return convertNativeToDart_Dictionary(_getCapabilities_1());
   }
 
   @JSName('getCapabilities')
-  @DomName('MediaStreamTrack.getCapabilities')
-  @DocsEditable()
-  @Experimental() // untriaged
   _getCapabilities_1() native;
 
-  @DomName('MediaStreamTrack.getConstraints')
-  @DocsEditable()
-  @Experimental() // untriaged
   Map getConstraints() {
     return convertNativeToDart_Dictionary(_getConstraints_1());
   }
 
   @JSName('getConstraints')
-  @DomName('MediaStreamTrack.getConstraints')
-  @DocsEditable()
-  @Experimental() // untriaged
   _getConstraints_1() native;
 
-  @DomName('MediaStreamTrack.getSettings')
-  @DocsEditable()
-  @Experimental() // untriaged
   Map getSettings() {
     return convertNativeToDart_Dictionary(_getSettings_1());
   }
 
   @JSName('getSettings')
-  @DomName('MediaStreamTrack.getSettings')
-  @DocsEditable()
-  @Experimental() // untriaged
   _getSettings_1() native;
 
-  @DomName('MediaStreamTrack.stop')
-  @DocsEditable()
-  @Experimental() // untriaged
   void stop() native;
 
   /// Stream of `ended` events handled by this [MediaStreamTrack].
-  @DomName('MediaStreamTrack.onended')
-  @DocsEditable()
   Stream<Event> get onEnded => endedEvent.forTarget(this);
 
   /// Stream of `mute` events handled by this [MediaStreamTrack].
-  @DomName('MediaStreamTrack.onmute')
-  @DocsEditable()
   Stream<Event> get onMute => muteEvent.forTarget(this);
 
   /// Stream of `unmute` events handled by this [MediaStreamTrack].
-  @DomName('MediaStreamTrack.onunmute')
-  @DocsEditable()
   Stream<Event> get onUnmute => unmuteEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MediaStreamTrackEvent')
 @SupportedBrowser(SupportedBrowser.CHROME)
-@Experimental()
-// http://dev.w3.org/2011/webrtc/editor/getusermedia.html
 @Native("MediaStreamTrackEvent")
 class MediaStreamTrackEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -26751,8 +20206,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MediaStreamTrackEvent.MediaStreamTrackEvent')
-  @DocsEditable()
   factory MediaStreamTrackEvent(String type, Map eventInitDict) {
     var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
     return MediaStreamTrackEvent._create_1(type, eventInitDict_1);
@@ -26767,17 +20220,12 @@
   static bool get supported =>
       Device.isEventTypeSupported('MediaStreamTrackEvent');
 
-  @DomName('MediaStreamTrackEvent.track')
-  @DocsEditable()
   final MediaStreamTrack track;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MemoryInfo')
-@Experimental() // nonstandard
 @Native("MemoryInfo")
 class MemoryInfo extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -26785,23 +20233,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MemoryInfo.jsHeapSizeLimit')
-  @DocsEditable()
   final int jsHeapSizeLimit;
 
-  @DomName('MemoryInfo.totalJSHeapSize')
-  @DocsEditable()
   final int totalJSHeapSize;
 
-  @DomName('MemoryInfo.usedJSHeapSize')
-  @DocsEditable()
   final int usedJSHeapSize;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
 /**
  * An HTML <menu> element.
  *
@@ -26812,7 +20253,6 @@
  *  * [Menu Element](https://developer.mozilla.org/en-US/docs/HTML/Element/menu) from MDN.
  *  * [Menu Element](http://www.w3.org/TR/html5/the-menu-element.html#the-menu-element) from the W3C.
  */
-@DomName('HTMLMenuElement')
 @Native("HTMLMenuElement")
 class MenuElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -26820,8 +20260,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLMenuElement.HTMLMenuElement')
-  @DocsEditable()
   factory MenuElement() => JS(
       'returns:MenuElement;creates:MenuElement;new:true',
       '#.createElement(#)',
@@ -26840,15 +20278,11 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('MessageCallback')
-@Experimental() // untriaged
 typedef void MessageCallback(Map message);
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MessageChannel')
 @Unstable()
 @Native("MessageChannel")
 class MessageChannel extends Interceptor {
@@ -26857,20 +20291,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MessageChannel.MessageChannel')
-  @DocsEditable()
   factory MessageChannel() {
     return MessageChannel._create_1();
   }
   static MessageChannel _create_1() =>
       JS('MessageChannel', 'new MessageChannel()');
 
-  @DomName('MessageChannel.port1')
-  @DocsEditable()
   final MessagePort port1;
 
-  @DomName('MessageChannel.port2')
-  @DocsEditable()
   final MessagePort port2;
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -26879,7 +20307,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('MessageEvent')
 @Native("MessageEvent")
 class MessageEvent extends Event {
   factory MessageEvent(String type,
@@ -26917,19 +20344,13 @@
   // TODO(alanknight): This really should be generated by the
   // _OutputConversion in the systemnative.py script, but that doesn't
   // use those conversions right now, so do this as a one-off.
-  @DomName('MessageEvent.data')
-  @DocsEditable()
   dynamic get data => convertNativeToDart_SerializedScriptValue(this._get_data);
 
   @JSName('data')
-  @DomName('MessageEvent.data')
-  @DocsEditable()
   @annotation_Creates_SerializedScriptValue
   @annotation_Returns_SerializedScriptValue
   final dynamic _get_data;
 
-  @DomName('MessageEvent.MessageEvent')
-  @DocsEditable()
   factory MessageEvent._(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -26942,32 +20363,19 @@
   static MessageEvent _create_2(type) =>
       JS('MessageEvent', 'new MessageEvent(#)', type);
 
-  @DomName('MessageEvent.lastEventId')
-  @DocsEditable()
   @Unstable()
   final String lastEventId;
 
-  @DomName('MessageEvent.origin')
-  @DocsEditable()
   final String origin;
 
-  @DomName('MessageEvent.source')
-  @DocsEditable()
   EventTarget get source => _convertNativeToDart_EventTarget(this._get_source);
   @JSName('source')
-  @DomName('MessageEvent.source')
-  @DocsEditable()
   @Creates('Null')
   @Returns('EventTarget|=Object')
   final dynamic _get_source;
 
-  @DomName('MessageEvent.suborigin')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String suborigin;
 
-  @DomName('MessageEvent.initMessageEvent')
-  @DocsEditable()
   void _initMessageEvent(
       String typeArg,
       bool canBubbleArg,
@@ -26984,8 +20392,6 @@
   }
 
   @JSName('initMessageEvent')
-  @DomName('MessageEvent.initMessageEvent')
-  @DocsEditable()
   void _initMessageEvent_1(typeArg, canBubbleArg, cancelableArg, dataArg,
       originArg, lastEventIdArg, sourceArg, List<MessagePort> portsArg) native;
 }
@@ -26995,7 +20401,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('MessagePort')
 @Unstable()
 @Native("MessagePort")
 class MessagePort extends EventTarget {
@@ -27021,17 +20426,11 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('MessagePort.messageEvent')
-  @DocsEditable()
   static const EventStreamProvider<MessageEvent> messageEvent =
       const EventStreamProvider<MessageEvent>('message');
 
-  @DomName('MessagePort.close')
-  @DocsEditable()
   void close() native;
 
-  @DomName('MessagePort.postMessage')
-  @DocsEditable()
   void postMessage(/*any*/ message, [List<Object> transfer]) {
     if (transfer != null) {
       var message_1 = convertDartToNative_SerializedScriptValue(message);
@@ -27044,22 +20443,14 @@
   }
 
   @JSName('postMessage')
-  @DomName('MessagePort.postMessage')
-  @DocsEditable()
   void _postMessage_1(message, List<Object> transfer) native;
   @JSName('postMessage')
-  @DomName('MessagePort.postMessage')
-  @DocsEditable()
   void _postMessage_2(message) native;
 
   @JSName('start')
-  @DomName('MessagePort.start')
-  @DocsEditable()
   void _start() native;
 
   /// Stream of `message` events handled by this [MessagePort].
-  @DomName('MessagePort.onmessage')
-  @DocsEditable()
   Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
 }
 
@@ -27067,8 +20458,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.
 
-@DocsEditable()
-@DomName('HTMLMetaElement')
 @Native("HTMLMetaElement")
 class MetaElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -27076,8 +20465,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLMetaElement.HTMLMetaElement')
-  @DocsEditable()
   factory MetaElement() => JS(
       'returns:MetaElement;creates:MetaElement;new:true',
       '#.createElement(#)',
@@ -27090,26 +20477,16 @@
    */
   MetaElement.created() : super.created();
 
-  @DomName('HTMLMetaElement.content')
-  @DocsEditable()
   String content;
 
-  @DomName('HTMLMetaElement.httpEquiv')
-  @DocsEditable()
   String httpEquiv;
 
-  @DomName('HTMLMetaElement.name')
-  @DocsEditable()
   String name;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('Metadata')
-// http://www.w3.org/TR/file-system-api/#the-metadata-interface
-@Experimental()
 @Native("Metadata")
 class Metadata extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -27117,18 +20494,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Metadata.modificationTime')
-  @DocsEditable()
   DateTime get modificationTime =>
       convertNativeToDart_DateTime(this._get_modificationTime);
   @JSName('modificationTime')
-  @DomName('Metadata.modificationTime')
-  @DocsEditable()
   @Creates('Null')
   final dynamic _get_modificationTime;
 
-  @DomName('Metadata.size')
-  @DocsEditable()
   final int size;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -27137,16 +20508,11 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('MetadataCallback')
-// http://www.w3.org/TR/file-system-api/#idl-def-MetadataCallback
-@Experimental()
 typedef void MetadataCallback(Metadata metadata);
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLMeterElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
@@ -27158,8 +20524,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLMeterElement.HTMLMeterElement')
-  @DocsEditable()
   factory MeterElement() => document.createElement("meter");
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
@@ -27171,45 +20535,27 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('meter');
 
-  @DomName('HTMLMeterElement.high')
-  @DocsEditable()
   num high;
 
-  @DomName('HTMLMeterElement.labels')
-  @DocsEditable()
   @Unstable()
   @Returns('NodeList|Null')
   @Creates('NodeList')
   final List<Node> labels;
 
-  @DomName('HTMLMeterElement.low')
-  @DocsEditable()
   num low;
 
-  @DomName('HTMLMeterElement.max')
-  @DocsEditable()
   num max;
 
-  @DomName('HTMLMeterElement.min')
-  @DocsEditable()
   num min;
 
-  @DomName('HTMLMeterElement.optimum')
-  @DocsEditable()
   num optimum;
 
-  @DomName('HTMLMeterElement.value')
-  @DocsEditable()
   num value;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MIDIAccess')
-// http://webaudio.github.io/web-midi-api/#midiaccess-interface
-@Experimental()
 @Native("MIDIAccess")
 class MidiAccess extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -27217,27 +20563,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MIDIAccess.inputs')
-  @DocsEditable()
   final MidiInputMap inputs;
 
-  @DomName('MIDIAccess.outputs')
-  @DocsEditable()
   final MidiOutputMap outputs;
 
-  @DomName('MIDIAccess.sysexEnabled')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool sysexEnabled;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MIDIConnectionEvent')
-// http://webaudio.github.io/web-midi-api/#midiconnectionevent-interface
-@Experimental()
 @Native("MIDIConnectionEvent")
 class MidiConnectionEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -27245,8 +20580,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MIDIConnectionEvent.MIDIConnectionEvent')
-  @DocsEditable()
   factory MidiConnectionEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -27262,18 +20595,12 @@
   static MidiConnectionEvent _create_2(type) =>
       JS('MidiConnectionEvent', 'new MIDIConnectionEvent(#)', type);
 
-  @DomName('MIDIConnectionEvent.port')
-  @DocsEditable()
   final MidiPort port;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MIDIInput')
-// http://webaudio.github.io/web-midi-api/#idl-def-MIDIInput
-@Experimental()
 @Native("MIDIInput")
 class MidiInput extends MidiPort {
   // To suppress missing implicit constructor warnings.
@@ -27287,14 +20614,10 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('MIDIInput.midimessageEvent')
-  @DocsEditable()
   static const EventStreamProvider<MidiMessageEvent> midiMessageEvent =
       const EventStreamProvider<MidiMessageEvent>('midimessage');
 
   /// Stream of `midimessage` events handled by this [MidiInput].
-  @DomName('MIDIInput.onmidimessage')
-  @DocsEditable()
   Stream<MidiMessageEvent> get onMidiMessage =>
       midiMessageEvent.forTarget(this);
 }
@@ -27302,9 +20625,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.
 
-@DocsEditable()
-@DomName('MIDIInputMap')
-@Experimental() // untriaged
 @Native("MIDIInputMap")
 class MidiInputMap extends Interceptor with MapMixin<String, dynamic> {
   // To suppress missing implicit constructor warnings.
@@ -27373,10 +20693,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.
 
-@DocsEditable()
-@DomName('MIDIMessageEvent')
-// http://webaudio.github.io/web-midi-api/#midimessageevent-interface
-@Experimental()
 @Native("MIDIMessageEvent")
 class MidiMessageEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -27384,8 +20700,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MIDIMessageEvent.MIDIMessageEvent')
-  @DocsEditable()
   factory MidiMessageEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -27398,18 +20712,12 @@
   static MidiMessageEvent _create_2(type) =>
       JS('MidiMessageEvent', 'new MIDIMessageEvent(#)', type);
 
-  @DomName('MIDIMessageEvent.data')
-  @DocsEditable()
   final Uint8List data;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MIDIOutput')
-// http://webaudio.github.io/web-midi-api/#midioutput-interface
-@Experimental()
 @Native("MIDIOutput")
 class MidiOutput extends MidiPort {
   // To suppress missing implicit constructor warnings.
@@ -27417,17 +20725,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MIDIOutput.send')
-  @DocsEditable()
   void send(Uint8List data, [num timestamp]) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MIDIOutputMap')
-@Experimental() // untriaged
 @Native("MIDIOutputMap")
 class MidiOutputMap extends Interceptor with MapMixin<String, dynamic> {
   // To suppress missing implicit constructor warnings.
@@ -27496,10 +20799,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.
 
-@DocsEditable()
-@DomName('MIDIPort')
-// http://webaudio.github.io/web-midi-api/#idl-def-MIDIPort
-@Experimental()
 @Native("MIDIPort")
 class MidiPort extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -27507,53 +20806,28 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MIDIPort.connection')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String connection;
 
-  @DomName('MIDIPort.id')
-  @DocsEditable()
   final String id;
 
-  @DomName('MIDIPort.manufacturer')
-  @DocsEditable()
   final String manufacturer;
 
-  @DomName('MIDIPort.name')
-  @DocsEditable()
   final String name;
 
-  @DomName('MIDIPort.state')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String state;
 
-  @DomName('MIDIPort.type')
-  @DocsEditable()
   final String type;
 
-  @DomName('MIDIPort.version')
-  @DocsEditable()
   final String version;
 
-  @DomName('MIDIPort.close')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future close() => promiseToFuture(JS("", "#.close()", this));
 
-  @DomName('MIDIPort.open')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future open() => promiseToFuture(JS("", "#.open()", this));
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MimeType')
-@Experimental() // non-standard
 @Native("MimeType")
 class MimeType extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -27561,29 +20835,18 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MimeType.description')
-  @DocsEditable()
   final String description;
 
-  @DomName('MimeType.enabledPlugin')
-  @DocsEditable()
   final Plugin enabledPlugin;
 
-  @DomName('MimeType.suffixes')
-  @DocsEditable()
   final String suffixes;
 
-  @DomName('MimeType.type')
-  @DocsEditable()
   final String type;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MimeTypeArray')
-@Experimental() // non-standard
 @Native("MimeTypeArray")
 class MimeTypeArray extends Interceptor
     with ListMixin<MimeType>, ImmutableListMixin<MimeType>
@@ -27593,8 +20856,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MimeTypeArray.length')
-  @DocsEditable()
   int get length => JS("int", "#.length", this);
 
   MimeType operator [](int index) {
@@ -27640,20 +20901,14 @@
   MimeType elementAt(int index) => this[index];
   // -- end List<MimeType> mixins.
 
-  @DomName('MimeTypeArray.item')
-  @DocsEditable()
   MimeType item(int index) native;
 
-  @DomName('MimeTypeArray.namedItem')
-  @DocsEditable()
   MimeType namedItem(String name) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLModElement')
 @Unstable()
 @Native("HTMLModElement")
 class ModElement extends HtmlElement {
@@ -27668,12 +20923,8 @@
    */
   ModElement.created() : super.created();
 
-  @DomName('HTMLModElement.cite')
-  @DocsEditable()
   String cite;
 
-  @DomName('HTMLModElement.dateTime')
-  @DocsEditable()
   String dateTime;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -27682,14 +20933,11 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('MojoWatchCallback')
-@Experimental() // untriaged
 typedef void MojoWatchCallback(int result);
 // Copyright (c) 2012, 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.
 
-@DomName('MouseEvent')
 @Native("MouseEvent,DragEvent")
 class MouseEvent extends UIEvent {
   factory MouseEvent(String type,
@@ -27730,8 +20978,6 @@
     return event;
   }
 
-  @DomName('MouseEvent.MouseEvent')
-  @DocsEditable()
   factory MouseEvent._(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -27744,31 +20990,18 @@
   static MouseEvent _create_2(type) =>
       JS('MouseEvent', 'new MouseEvent(#)', type);
 
-  @DomName('MouseEvent.altKey')
-  @DocsEditable()
   final bool altKey;
 
-  @DomName('MouseEvent.button')
-  @DocsEditable()
   final int button;
 
-  @DomName('MouseEvent.buttons')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int buttons;
 
   @JSName('clientX')
-  @DomName('MouseEvent.clientX')
-  @DocsEditable()
   final num _clientX;
 
   @JSName('clientY')
-  @DomName('MouseEvent.clientY')
-  @DocsEditable()
   final num _clientY;
 
-  @DomName('MouseEvent.ctrlKey')
-  @DocsEditable()
   final bool ctrlKey;
 
   /**
@@ -27778,79 +21011,44 @@
    * This member is deprecated and not cross-browser compatible; use
    * relatedTarget to get the same information in the standard way.
    */
-  @DomName('MouseEvent.fromElement')
-  @DocsEditable()
   @deprecated
   final Node fromElement;
 
   @JSName('layerX')
-  @DomName('MouseEvent.layerX')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int _layerX;
 
   @JSName('layerY')
-  @DomName('MouseEvent.layerY')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int _layerY;
 
-  @DomName('MouseEvent.metaKey')
-  @DocsEditable()
   final bool metaKey;
 
   @JSName('movementX')
-  @DomName('MouseEvent.movementX')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int _movementX;
 
   @JSName('movementY')
-  @DomName('MouseEvent.movementY')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int _movementY;
 
   @JSName('pageX')
-  @DomName('MouseEvent.pageX')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num _pageX;
 
   @JSName('pageY')
-  @DomName('MouseEvent.pageY')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num _pageY;
 
-  @DomName('MouseEvent.region')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String region;
 
-  @DomName('MouseEvent.relatedTarget')
-  @DocsEditable()
   EventTarget get relatedTarget =>
       _convertNativeToDart_EventTarget(this._get_relatedTarget);
   @JSName('relatedTarget')
-  @DomName('MouseEvent.relatedTarget')
-  @DocsEditable()
   @Creates('Node')
   @Returns('EventTarget|=Object')
   final dynamic _get_relatedTarget;
 
   @JSName('screenX')
-  @DomName('MouseEvent.screenX')
-  @DocsEditable()
   final num _screenX;
 
   @JSName('screenY')
-  @DomName('MouseEvent.screenY')
-  @DocsEditable()
   final num _screenY;
 
-  @DomName('MouseEvent.shiftKey')
-  @DocsEditable()
   final bool shiftKey;
 
   /**
@@ -27860,18 +21058,11 @@
    * This member is deprecated and not cross-browser compatible; use
    * relatedTarget to get the same information in the standard way.
    */
-  @DomName('MouseEvent.toElement')
-  @DocsEditable()
   @deprecated
   final Node toElement;
 
-  @DomName('MouseEvent.getModifierState')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool getModifierState(String keyArg) native;
 
-  @DomName('MouseEvent.initMouseEvent')
-  @DocsEditable()
   void _initMouseEvent(
       String type,
       bool bubbles,
@@ -27909,8 +21100,6 @@
   }
 
   @JSName('initMouseEvent')
-  @DomName('MouseEvent.initMouseEvent')
-  @DocsEditable()
   void _initMouseEvent_1(
       type,
       bubbles,
@@ -27928,15 +21117,10 @@
       button,
       relatedTarget) native;
 
-  @DomName('MouseEvent.clientX')
-  @DomName('MouseEvent.clientY')
   Point get client => new Point(_clientX, _clientY);
 
-  @DomName('MouseEvent.movementX')
-  @DomName('MouseEvent.movementY')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
-  @Experimental()
   Point get movement => new Point(_movementX, _movementY);
 
   /**
@@ -27962,19 +21146,12 @@
     }
   }
 
-  @DomName('MouseEvent.screenX')
-  @DomName('MouseEvent.screenY')
   Point get screen => new Point(_screenX, _screenY);
 
-  @DomName('MouseEvent.layerX')
-  @DomName('MouseEvent.layerY')
   Point get layer => new Point(_layerX, _layerY);
 
-  @DomName('MouseEvent.pageX')
-  @DomName('MouseEvent.pageY')
   Point get page => new Point(_pageX, _pageY);
 
-  @DomName('MouseEvent.dataTransfer')
   DataTransfer get dataTransfer =>
       JS('DataTransfer', "#['dataTransfer']", this);
 }
@@ -27984,15 +21161,12 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('MutationCallback')
 typedef void MutationCallback(
     List<MutationRecord> mutations, MutationObserver observer);
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MutationEvent')
 // http://www.w3.org/TR/DOM-Level-3-Events/#events-mutationevents
 @deprecated
 @Native("MutationEvent")
@@ -28002,40 +21176,22 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MutationEvent.ADDITION')
-  @DocsEditable()
   static const int ADDITION = 2;
 
-  @DomName('MutationEvent.MODIFICATION')
-  @DocsEditable()
   static const int MODIFICATION = 1;
 
-  @DomName('MutationEvent.REMOVAL')
-  @DocsEditable()
   static const int REMOVAL = 3;
 
-  @DomName('MutationEvent.attrChange')
-  @DocsEditable()
   final int attrChange;
 
-  @DomName('MutationEvent.attrName')
-  @DocsEditable()
   final String attrName;
 
-  @DomName('MutationEvent.newValue')
-  @DocsEditable()
   final String newValue;
 
-  @DomName('MutationEvent.prevValue')
-  @DocsEditable()
   final String prevValue;
 
-  @DomName('MutationEvent.relatedNode')
-  @DocsEditable()
   final Node relatedNode;
 
-  @DomName('MutationEvent.initMutationEvent')
-  @DocsEditable()
   void initMutationEvent(
       String type,
       bool bubbles,
@@ -28050,19 +21206,13 @@
 // 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.
 
-@DomName('MutationObserver')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
-@Experimental()
 @Native("MutationObserver,WebKitMutationObserver")
 class MutationObserver extends Interceptor {
-  @DomName('MutationObserver.disconnect')
-  @DocsEditable()
   void disconnect() native;
 
-  @DomName('MutationObserver.observe')
-  @DocsEditable()
   void _observe(Node target, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -28074,16 +21224,10 @@
   }
 
   @JSName('observe')
-  @DomName('MutationObserver.observe')
-  @DocsEditable()
   void _observe_1(Node target, options) native;
   @JSName('observe')
-  @DomName('MutationObserver.observe')
-  @DocsEditable()
   void _observe_2(Node target) native;
 
-  @DomName('MutationObserver.takeRecords')
-  @DocsEditable()
   List<MutationRecord> takeRecords() native;
 
   /**
@@ -28170,8 +21314,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.
 
-@DocsEditable()
-@DomName('MutationRecord')
 @Native("MutationRecord")
 class MutationRecord extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -28179,53 +21321,32 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MutationRecord.addedNodes')
-  @DocsEditable()
   @Returns('NodeList|Null')
   @Creates('NodeList')
   final List<Node> addedNodes;
 
-  @DomName('MutationRecord.attributeName')
-  @DocsEditable()
   final String attributeName;
 
-  @DomName('MutationRecord.attributeNamespace')
-  @DocsEditable()
   final String attributeNamespace;
 
-  @DomName('MutationRecord.nextSibling')
-  @DocsEditable()
   final Node nextSibling;
 
-  @DomName('MutationRecord.oldValue')
-  @DocsEditable()
   final String oldValue;
 
-  @DomName('MutationRecord.previousSibling')
-  @DocsEditable()
   final Node previousSibling;
 
-  @DomName('MutationRecord.removedNodes')
-  @DocsEditable()
   @Returns('NodeList|Null')
   @Creates('NodeList')
   final List<Node> removedNodes;
 
-  @DomName('MutationRecord.target')
-  @DocsEditable()
   final Node target;
 
-  @DomName('MutationRecord.type')
-  @DocsEditable()
   final String type;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('NavigationPreloadManager')
-@Experimental() // untriaged
 @Native("NavigationPreloadManager")
 class NavigationPreloadManager extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -28233,19 +21354,10 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('NavigationPreloadManager.disable')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future disable() => promiseToFuture(JS("", "#.disable()", this));
 
-  @DomName('NavigationPreloadManager.enable')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future enable() => promiseToFuture(JS("", "#.enable()", this));
 
-  @DomName('NavigationPreloadManager.getState')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<Map<String, dynamic>> getState() =>
       promiseToFutureAsMap(JS("", "#.getState()", this));
 }
@@ -28253,7 +21365,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.
 
-@DomName('Navigator')
 @Native("Navigator")
 class Navigator extends NavigatorConcurrentHardware
     implements
@@ -28262,7 +21373,6 @@
         NavigatorOnLine,
         NavigatorAutomationInformation,
         NavigatorID {
-  @DomName('Navigator.getGamepads')
   List<Gamepad> getGamepads() {
     var gamepadList = _getGamepads();
 
@@ -28276,7 +21386,6 @@
     return gamepadList;
   }
 
-  @DomName('Navigator.language')
   String get language =>
       JS('String', '#.language || #.userLanguage', this, this);
 
@@ -28315,9 +21424,7 @@
    * See also:
    * * [MediaStream.supported]
    */
-  @DomName('Navigator.webkitGetUserMedia')
   @SupportedBrowser(SupportedBrowser.CHROME)
-  @Experimental()
   Future<MediaStream> getUserMedia({audio: false, video: false}) {
     var completer = new Completer<MediaStream>();
     var options = {'audio': audio, 'video': video};
@@ -28355,168 +21462,80 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Navigator.budget')
-  @DocsEditable()
-  @Experimental() // untriaged
   final _BudgetService budget;
 
-  @DomName('Navigator.clipboard')
-  @DocsEditable()
-  @Experimental() // untriaged
   final _Clipboard clipboard;
 
-  @DomName('Navigator.connection')
-  @DocsEditable()
-  @Experimental() // untriaged
   final NetworkInformation connection;
 
-  @DomName('Navigator.credentials')
-  @DocsEditable()
-  @Experimental() // untriaged
   final CredentialsContainer credentials;
 
-  @DomName('Navigator.deviceMemory')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num deviceMemory;
 
-  @DomName('Navigator.doNotTrack')
-  @DocsEditable()
-  // http://www.w3.org/2011/tracking-protection/drafts/tracking-dnt.html#js-dom
-  @Experimental() // experimental
   final String doNotTrack;
 
-  @DomName('Navigator.geolocation')
-  @DocsEditable()
   @Unstable()
   final Geolocation geolocation;
 
-  @DomName('Navigator.maxTouchPoints')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int maxTouchPoints;
 
-  @DomName('Navigator.mediaCapabilities')
-  @DocsEditable()
-  @Experimental() // untriaged
   final MediaCapabilities mediaCapabilities;
 
-  @DomName('Navigator.mediaDevices')
-  @DocsEditable()
-  @Experimental() // untriaged
   final MediaDevices mediaDevices;
 
-  @DomName('Navigator.mediaSession')
-  @DocsEditable()
-  @Experimental() // untriaged
   final MediaSession mediaSession;
 
-  @DomName('Navigator.mimeTypes')
-  @DocsEditable()
-  @Experimental() // nonstandard
   final MimeTypeArray mimeTypes;
 
-  @DomName('Navigator.nfc')
-  @DocsEditable()
-  @Experimental() // untriaged
   final _NFC nfc;
 
-  @DomName('Navigator.permissions')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Permissions permissions;
 
-  @DomName('Navigator.presentation')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Presentation presentation;
 
-  @DomName('Navigator.productSub')
-  @DocsEditable()
   @Unstable()
   final String productSub;
 
-  @DomName('Navigator.serviceWorker')
-  @DocsEditable()
-  @Experimental() // untriaged
   final ServiceWorkerContainer serviceWorker;
 
-  @DomName('Navigator.storage')
-  @DocsEditable()
-  @Experimental() // untriaged
   final StorageManager storage;
 
-  @DomName('Navigator.vendor')
-  @DocsEditable()
   @Unstable()
   final String vendor;
 
-  @DomName('Navigator.vendorSub')
-  @DocsEditable()
   @Unstable()
   final String vendorSub;
 
-  @DomName('Navigator.vr')
-  @DocsEditable()
-  @Experimental() // untriaged
   final VR vr;
 
   @JSName('webkitPersistentStorage')
-  @DomName('Navigator.webkitPersistentStorage')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  // http://www.w3.org/TR/quota-api/#accessing-storagequota
   final DeprecatedStorageQuota persistentStorage;
 
   @JSName('webkitTemporaryStorage')
-  @DomName('Navigator.webkitTemporaryStorage')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  // http://www.w3.org/TR/quota-api/#accessing-storagequota
   final DeprecatedStorageQuota temporaryStorage;
 
-  @DomName('Navigator.cancelKeyboardLock')
-  @DocsEditable()
-  @Experimental() // untriaged
   void cancelKeyboardLock() native;
 
-  @DomName('Navigator.getBattery')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future getBattery() => promiseToFuture(JS("", "#.getBattery()", this));
 
   @JSName('getGamepads')
-  @DomName('Navigator.getGamepads')
-  @DocsEditable()
-  @Experimental() // untriaged
   @Returns('_GamepadList|Null')
   @Creates('_GamepadList')
   List<Gamepad> _getGamepads() native;
 
-  @DomName('Navigator.getInstalledRelatedApps')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<RelatedApplication> getInstalledRelatedApps() =>
       promiseToFuture<RelatedApplication>(
           JS("", "#.getInstalledRelatedApps()", this));
 
-  @DomName('Navigator.getVRDisplays')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future getVRDisplays() => promiseToFuture(JS("", "#.getVRDisplays()", this));
 
-  @DomName('Navigator.registerProtocolHandler')
-  @DocsEditable()
   @Unstable()
   void registerProtocolHandler(String scheme, String url, String title) native;
 
-  @DomName('Navigator.requestKeyboardLock')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future requestKeyboardLock([List<String> keyCodes]) {
     if (keyCodes != null) {
       List keyCodes_1 = convertDartToNative_StringArray(keyCodes);
@@ -28526,19 +21545,10 @@
   }
 
   @JSName('requestKeyboardLock')
-  @DomName('Navigator.requestKeyboardLock')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _requestKeyboardLock_1(List keyCodes) native;
   @JSName('requestKeyboardLock')
-  @DomName('Navigator.requestKeyboardLock')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _requestKeyboardLock_2() native;
 
-  @DomName('Navigator.requestMIDIAccess')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future requestMidiAccess([Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -28548,32 +21558,17 @@
   }
 
   @JSName('requestMIDIAccess')
-  @DomName('Navigator.requestMIDIAccess')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _requestMidiAccess_1(options) native;
   @JSName('requestMIDIAccess')
-  @DomName('Navigator.requestMIDIAccess')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _requestMidiAccess_2() native;
 
-  @DomName('Navigator.requestMediaKeySystemAccess')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future requestMediaKeySystemAccess(
           String keySystem, List<Map> supportedConfigurations) =>
       promiseToFuture(JS("", "#.requestMediaKeySystemAccess(#, #)", this,
           keySystem, supportedConfigurations));
 
-  @DomName('Navigator.sendBeacon')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool sendBeacon(String url, Object data) native;
 
-  @DomName('Navigator.share')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future share([Map data]) {
     if (data != null) {
       var data_1 = convertDartToNative_Dictionary(data);
@@ -28583,74 +21578,42 @@
   }
 
   @JSName('share')
-  @DomName('Navigator.share')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _share_1(data) native;
   @JSName('share')
-  @DomName('Navigator.share')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _share_2() native;
 
   // From NavigatorAutomationInformation
 
-  @DomName('Navigator.webdriver')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool webdriver;
 
   // From NavigatorCookies
 
-  @DomName('Navigator.cookieEnabled')
-  @DocsEditable()
   @Unstable()
   final bool cookieEnabled;
 
   // From NavigatorID
 
-  @DomName('Navigator.appCodeName')
-  @DocsEditable()
-  @Experimental() // non-standard
   final String appCodeName;
 
-  @DomName('Navigator.appName')
-  @DocsEditable()
   final String appName;
 
-  @DomName('Navigator.appVersion')
-  @DocsEditable()
   final String appVersion;
 
-  @DomName('Navigator.dartEnabled')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool dartEnabled;
 
-  @DomName('Navigator.platform')
-  @DocsEditable()
   final String platform;
 
-  @DomName('Navigator.product')
-  @DocsEditable()
   @Unstable()
   final String product;
 
-  @DomName('Navigator.userAgent')
-  @DocsEditable()
   final String userAgent;
 
   // From NavigatorLanguage
 
-  @DomName('Navigator.languages')
-  @DocsEditable()
-  @Experimental() // untriaged
   final List<String> languages;
 
   // From NavigatorOnLine
 
-  @DomName('Navigator.onLine')
-  @DocsEditable()
   @Unstable()
   final bool onLine;
 }
@@ -28658,9 +21621,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.
 
-@DocsEditable()
-@DomName('NavigatorAutomationInformation')
-@Experimental() // untriaged
 @Native("NavigatorAutomationInformation")
 class NavigatorAutomationInformation extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -28668,18 +21628,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('NavigatorAutomationInformation.webdriver')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool webdriver;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('NavigatorConcurrentHardware')
-@Experimental() // untriaged
 @Native("NavigatorConcurrentHardware")
 class NavigatorConcurrentHardware extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -28687,18 +21641,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('NavigatorConcurrentHardware.hardwareConcurrency')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int hardwareConcurrency;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('NavigatorCookies')
-@Experimental() // untriaged
 @Native("NavigatorCookies")
 class NavigatorCookies extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -28706,18 +21654,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('NavigatorCookies.cookieEnabled')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool cookieEnabled;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('NavigatorID')
-@Experimental() // untriaged
 abstract class NavigatorID extends Interceptor {
   // To suppress missing implicit constructor warnings.
   factory NavigatorID._() {
@@ -28742,9 +21684,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.
 
-@DocsEditable()
-@DomName('NavigatorLanguage')
-@Experimental() // untriaged
 abstract class NavigatorLanguage extends Interceptor {
   // To suppress missing implicit constructor warnings.
   factory NavigatorLanguage._() {
@@ -28759,9 +21698,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.
 
-@DocsEditable()
-@DomName('NavigatorOnLine')
-@Experimental() // untriaged
 abstract class NavigatorOnLine extends Interceptor {
   // To suppress missing implicit constructor warnings.
   factory NavigatorOnLine._() {
@@ -28774,10 +21710,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.
 
-@DocsEditable()
-@DomName('NavigatorUserMediaError')
-// http://dev.w3.org/2011/webrtc/editor/getusermedia.html#idl-def-NavigatorUserMediaError
-@Experimental()
 @Native("NavigatorUserMediaError")
 class NavigatorUserMediaError extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -28785,16 +21717,10 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('NavigatorUserMediaError.constraintName')
-  @DocsEditable()
   final String constraintName;
 
-  @DomName('NavigatorUserMediaError.message')
-  @DocsEditable()
   final String message;
 
-  @DomName('NavigatorUserMediaError.name')
-  @DocsEditable()
   final String name;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -28803,9 +21729,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('NavigatorUserMediaErrorCallback')
-// http://dev.w3.org/2011/webrtc/editor/getusermedia.html#idl-def-NavigatorUserMediaErrorCallback
-@Experimental()
 typedef void _NavigatorUserMediaErrorCallback(NavigatorUserMediaError error);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -28813,17 +21736,11 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('NavigatorUserMediaSuccessCallback')
-// http://dev.w3.org/2011/webrtc/editor/getusermedia.html#idl-def-NavigatorUserMediaSuccessCallback
-@Experimental()
 typedef void _NavigatorUserMediaSuccessCallback(MediaStream stream);
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('NetworkInformation')
-@Experimental() // untriaged
 @Native("NetworkInformation")
 class NetworkInformation extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -28831,40 +21748,19 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('NetworkInformation.changeEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> changeEvent =
       const EventStreamProvider<Event>('change');
 
-  @DomName('NetworkInformation.downlink')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num downlink;
 
-  @DomName('NetworkInformation.downlinkMax')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num downlinkMax;
 
-  @DomName('NetworkInformation.effectiveType')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String effectiveType;
 
-  @DomName('NetworkInformation.rtt')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int rtt;
 
-  @DomName('NetworkInformation.type')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String type;
 
-  @DomName('NetworkInformation.onchange')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onChange => changeEvent.forTarget(this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29040,7 +21936,6 @@
   List<Node> get rawList => _this.childNodes;
 }
 
-@DomName('Node')
 @Native("Node")
 class Node extends EventTarget {
   // Custom element created callback.
@@ -29066,7 +21961,6 @@
   /**
    * Removes this node from the DOM.
    */
-  @DomName('Node.removeChild')
   void remove() {
     // TODO(jacobr): should we throw an exception if parent is already null?
     // TODO(vsm): Use the native remove when available.
@@ -29079,7 +21973,6 @@
   /**
    * Replaces this node with another node.
    */
-  @DomName('Node.replaceChild')
   Node replaceWith(Node otherNode) {
     try {
       final Node parent = this.parentNode;
@@ -29136,8 +22029,6 @@
    * * [Node.childNodes](https://developer.mozilla.org/en-US/docs/Web/API/Node.childNodes)
    *   from MDN.
    */
-  @DomName('Node.childNodes')
-  @DocsEditable()
   @Returns('NodeList')
   @Creates('NodeList')
   final List<Node> childNodes;
@@ -29147,57 +22038,31 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Node.ATTRIBUTE_NODE')
-  @DocsEditable()
   static const int ATTRIBUTE_NODE = 2;
 
-  @DomName('Node.CDATA_SECTION_NODE')
-  @DocsEditable()
   static const int CDATA_SECTION_NODE = 4;
 
-  @DomName('Node.COMMENT_NODE')
-  @DocsEditable()
   static const int COMMENT_NODE = 8;
 
-  @DomName('Node.DOCUMENT_FRAGMENT_NODE')
-  @DocsEditable()
   static const int DOCUMENT_FRAGMENT_NODE = 11;
 
-  @DomName('Node.DOCUMENT_NODE')
-  @DocsEditable()
   static const int DOCUMENT_NODE = 9;
 
-  @DomName('Node.DOCUMENT_TYPE_NODE')
-  @DocsEditable()
   static const int DOCUMENT_TYPE_NODE = 10;
 
-  @DomName('Node.ELEMENT_NODE')
-  @DocsEditable()
   static const int ELEMENT_NODE = 1;
 
-  @DomName('Node.ENTITY_NODE')
-  @DocsEditable()
   static const int ENTITY_NODE = 6;
 
-  @DomName('Node.ENTITY_REFERENCE_NODE')
-  @DocsEditable()
   static const int ENTITY_REFERENCE_NODE = 5;
 
-  @DomName('Node.NOTATION_NODE')
-  @DocsEditable()
   static const int NOTATION_NODE = 12;
 
-  @DomName('Node.PROCESSING_INSTRUCTION_NODE')
-  @DocsEditable()
   static const int PROCESSING_INSTRUCTION_NODE = 7;
 
-  @DomName('Node.TEXT_NODE')
-  @DocsEditable()
   static const int TEXT_NODE = 3;
 
   @JSName('baseURI')
-  @DomName('Node.baseURI')
-  @DocsEditable()
   final String baseUri;
 
   /**
@@ -29208,13 +22073,8 @@
    * * [Node.firstChild](https://developer.mozilla.org/en-US/docs/Web/API/Node.firstChild)
    *   from MDN.
    */
-  @DomName('Node.firstChild')
-  @DocsEditable()
   final Node firstChild;
 
-  @DomName('Node.isConnected')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool isConnected;
 
   /**
@@ -29225,8 +22085,6 @@
    * * [Node.lastChild](https://developer.mozilla.org/en-US/docs/Web/API/Node.lastChild)
    *   from MDN.
    */
-  @DomName('Node.lastChild')
-  @DocsEditable()
   final Node lastChild;
 
   @JSName('nextSibling')
@@ -29238,8 +22096,6 @@
    * * [Node.nextSibling](https://developer.mozilla.org/en-US/docs/Web/API/Node.nextSibling)
    *   from MDN.
    */
-  @DomName('Node.nextSibling')
-  @DocsEditable()
   final Node nextNode;
 
   /**
@@ -29253,8 +22109,6 @@
    *   from MDN. This page contains a table of [nodeName] values for each
    *   [nodeType].
    */
-  @DomName('Node.nodeName')
-  @DocsEditable()
   final String nodeName;
 
   /**
@@ -29280,8 +22134,6 @@
    * * [Node.nodeType](https://developer.mozilla.org/en-US/docs/Web/API/Node.nodeType)
    *   from MDN.
    */
-  @DomName('Node.nodeType')
-  @DocsEditable()
   final int nodeType;
 
   /**
@@ -29295,8 +22147,6 @@
    *   from MDN. This page contains a table of [nodeValue] values for each
    *   [nodeType].
    */
-  @DomName('Node.nodeValue')
-  @DocsEditable()
   final String nodeValue;
 
   /**
@@ -29309,8 +22159,6 @@
    * * [Node.ownerDocument](https://developer.mozilla.org/en-US/docs/Web/API/Node.ownerDocument)
    *   from MDN.
    */
-  @DomName('Node.ownerDocument')
-  @DocsEditable()
   final Document ownerDocument;
 
   @JSName('parentElement')
@@ -29325,8 +22173,6 @@
    * * [Node.parentElement](https://developer.mozilla.org/en-US/docs/Web/API/Node.parentElement)
    *   from W3C.
    */
-  @DomName('Node.parentElement')
-  @DocsEditable()
   final Element parent;
 
   /**
@@ -29337,8 +22183,6 @@
    * * [Node.parentNode](https://developer.mozilla.org/en-US/docs/Web/API/Node.parentNode)
    *   from MDN.
    */
-  @DomName('Node.parentNode')
-  @DocsEditable()
   final Node parentNode;
 
   @JSName('previousSibling')
@@ -29350,8 +22194,6 @@
    * * [Node.previousSibling](https://developer.mozilla.org/en-US/docs/Web/API/Node.previousSibling)
    *   from MDN.
    */
-  @DomName('Node.previousSibling')
-  @DocsEditable()
   final Node previousNode;
 
   @JSName('textContent')
@@ -29363,8 +22205,6 @@
    * * [Node.textContent](https://developer.mozilla.org/en-US/docs/Web/API/Node.textContent)
    *   from MDN.
    */
-  @DomName('Node.textContent')
-  @DocsEditable()
   String text;
 
   @JSName('appendChild')
@@ -29377,8 +22217,6 @@
    * This method is more efficient than `nodes.add`, and is the preferred
    * way of appending a child node.
    */
-  @DomName('Node.appendChild')
-  @DocsEditable()
   Node append(Node node) native;
 
   @JSName('cloneNode')
@@ -29393,8 +22231,6 @@
    * * [Node.cloneNode](https://developer.mozilla.org/en-US/docs/Web/API/Node.cloneNode)
    *   from MDN.
    */
-  @DomName('Node.cloneNode')
-  @DocsEditable()
   Node clone(bool deep) native;
 
   /**
@@ -29405,13 +22241,8 @@
    * * [Node.contains](https://developer.mozilla.org/en-US/docs/Web/API/Node.contains)
    *   from MDN.
    */
-  @DomName('Node.contains')
-  @DocsEditable()
   bool contains(Node other) native;
 
-  @DomName('Node.getRootNode')
-  @DocsEditable()
-  @Experimental() // untriaged
   Node getRootNode([Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -29421,14 +22252,8 @@
   }
 
   @JSName('getRootNode')
-  @DomName('Node.getRootNode')
-  @DocsEditable()
-  @Experimental() // untriaged
   Node _getRootNode_1(options) native;
   @JSName('getRootNode')
-  @DomName('Node.getRootNode')
-  @DocsEditable()
-  @Experimental() // untriaged
   Node _getRootNode_2() native;
 
   /**
@@ -29439,8 +22264,6 @@
    * * [Node.hasChildNodes](https://developer.mozilla.org/en-US/docs/Web/API/Node.hasChildNodes)
    *   from MDN.
    */
-  @DomName('Node.hasChildNodes')
-  @DocsEditable()
   bool hasChildNodes() native;
 
   /**
@@ -29451,26 +22274,18 @@
    * * [Node.insertBefore](https://developer.mozilla.org/en-US/docs/Web/API/Node.insertBefore)
    *   from MDN.
    */
-  @DomName('Node.insertBefore')
-  @DocsEditable()
   Node insertBefore(Node node, Node child) native;
 
   @JSName('removeChild')
-  @DomName('Node.removeChild')
-  @DocsEditable()
   Node _removeChild(Node child) native;
 
   @JSName('replaceChild')
-  @DomName('Node.replaceChild')
-  @DocsEditable()
   Node _replaceChild(Node node, Node child) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('NodeFilter')
 @Unstable()
 @Native("NodeFilter")
 class NodeFilter extends Interceptor {
@@ -29479,55 +22294,32 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('NodeFilter.FILTER_ACCEPT')
-  @DocsEditable()
   static const int FILTER_ACCEPT = 1;
 
-  @DomName('NodeFilter.FILTER_REJECT')
-  @DocsEditable()
   static const int FILTER_REJECT = 2;
 
-  @DomName('NodeFilter.FILTER_SKIP')
-  @DocsEditable()
   static const int FILTER_SKIP = 3;
 
-  @DomName('NodeFilter.SHOW_ALL')
-  @DocsEditable()
   static const int SHOW_ALL = 0xFFFFFFFF;
 
-  @DomName('NodeFilter.SHOW_COMMENT')
-  @DocsEditable()
   static const int SHOW_COMMENT = 0x80;
 
-  @DomName('NodeFilter.SHOW_DOCUMENT')
-  @DocsEditable()
   static const int SHOW_DOCUMENT = 0x100;
 
-  @DomName('NodeFilter.SHOW_DOCUMENT_FRAGMENT')
-  @DocsEditable()
   static const int SHOW_DOCUMENT_FRAGMENT = 0x400;
 
-  @DomName('NodeFilter.SHOW_DOCUMENT_TYPE')
-  @DocsEditable()
   static const int SHOW_DOCUMENT_TYPE = 0x200;
 
-  @DomName('NodeFilter.SHOW_ELEMENT')
-  @DocsEditable()
   static const int SHOW_ELEMENT = 0x1;
 
-  @DomName('NodeFilter.SHOW_PROCESSING_INSTRUCTION')
-  @DocsEditable()
   static const int SHOW_PROCESSING_INSTRUCTION = 0x40;
 
-  @DomName('NodeFilter.SHOW_TEXT')
-  @DocsEditable()
   static const int SHOW_TEXT = 0x4;
 }
 // Copyright (c) 2013, 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.
 
-@DomName('NodeIterator')
 @Unstable()
 @Native("NodeIterator")
 class NodeIterator extends Interceptor {
@@ -29539,40 +22331,24 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('NodeIterator.pointerBeforeReferenceNode')
-  @DocsEditable()
   final bool pointerBeforeReferenceNode;
 
-  @DomName('NodeIterator.referenceNode')
-  @DocsEditable()
   final Node referenceNode;
 
-  @DomName('NodeIterator.root')
-  @DocsEditable()
   final Node root;
 
-  @DomName('NodeIterator.whatToShow')
-  @DocsEditable()
   final int whatToShow;
 
-  @DomName('NodeIterator.detach')
-  @DocsEditable()
   void detach() native;
 
-  @DomName('NodeIterator.nextNode')
-  @DocsEditable()
   Node nextNode() native;
 
-  @DomName('NodeIterator.previousNode')
-  @DocsEditable()
   Node previousNode() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('NodeList')
 @Native("NodeList,RadioNodeList")
 class NodeList extends Interceptor
     with ListMixin<Node>, ImmutableListMixin<Node>
@@ -29582,8 +22358,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('NodeList.length')
-  @DocsEditable()
   int get length => JS("int", "#.length", this);
 
   Node operator [](int index) {
@@ -29630,17 +22404,12 @@
   // -- end List<Node> mixins.
 
   @JSName('item')
-  @DomName('NodeList.item')
-  @DocsEditable()
   Node _item(int index) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('NonDocumentTypeChildNode')
-@Experimental() // untriaged
 @Native("NonDocumentTypeChildNode")
 class NonDocumentTypeChildNode extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -29648,23 +22417,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('NonDocumentTypeChildNode.nextElementSibling')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Element nextElementSibling;
 
-  @DomName('NonDocumentTypeChildNode.previousElementSibling')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Element previousElementSibling;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('NonElementParentNode')
-@Experimental() // untriaged
 @Native("NonElementParentNode")
 class NonElementParentNode extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -29672,18 +22432,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('NonElementParentNode.getElementById')
-  @DocsEditable()
-  @Experimental() // untriaged
   Element getElementById(String elementId) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('NoncedElement')
-@Experimental() // untriaged
 @Native("NoncedElement")
 class NoncedElement extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -29691,18 +22445,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('NoncedElement.nonce')
-  @DocsEditable()
-  @Experimental() // untriaged
   String nonce;
 }
 // Copyright (c) 2013, 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.
 
-@DomName('Notification')
-// http://www.w3.org/TR/notifications/#notification
-@Experimental() // experimental
 @Native("Notification")
 class Notification extends EventTarget {
   factory Notification(String title,
@@ -29730,8 +22478,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Notification.clickEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> clickEvent =
       const EventStreamProvider<Event>('click');
 
@@ -29741,8 +22487,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Notification.closeEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> closeEvent =
       const EventStreamProvider<Event>('close');
 
@@ -29752,8 +22496,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Notification.errorEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
@@ -29763,13 +22505,9 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Notification.showEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> showEvent =
       const EventStreamProvider<Event>('show');
 
-  @DomName('Notification.Notification')
-  @DocsEditable()
   static Notification _factoryNotification(String title, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -29786,105 +22524,49 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => JS('bool', '!!(window.Notification)');
 
-  @DomName('Notification.actions')
-  @DocsEditable()
-  @Experimental() // untriaged
   final List actions;
 
-  @DomName('Notification.badge')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String badge;
 
-  @DomName('Notification.body')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String body;
 
-  @DomName('Notification.data')
-  @DocsEditable()
-  @Experimental() // untriaged
   @annotation_Creates_SerializedScriptValue
   @annotation_Returns_SerializedScriptValue
   final Object data;
 
-  @DomName('Notification.dir')
-  @DocsEditable()
-  @Experimental() // nonstandard
   final String dir;
 
-  @DomName('Notification.icon')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String icon;
 
-  @DomName('Notification.image')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String image;
 
-  @DomName('Notification.lang')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String lang;
 
-  @DomName('Notification.maxActions')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final int maxActions;
+  static final int maxActions;
 
-  @DomName('Notification.permission')
-  @DocsEditable()
-  final String permission;
+  static final String permission;
 
-  @DomName('Notification.renotify')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool renotify;
 
-  @DomName('Notification.requireInteraction')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool requireInteraction;
 
-  @DomName('Notification.silent')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool silent;
 
-  @DomName('Notification.tag')
-  @DocsEditable()
-  @Experimental() // nonstandard
   final String tag;
 
-  @DomName('Notification.timestamp')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int timestamp;
 
-  @DomName('Notification.title')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String title;
 
-  @DomName('Notification.vibrate')
-  @DocsEditable()
-  @Experimental() // untriaged
   final List<int> vibrate;
 
-  @DomName('Notification.close')
-  @DocsEditable()
   void close() native;
 
   @JSName('requestPermission')
-  @DomName('Notification.requestPermission')
-  @DocsEditable()
   static Future _requestPermission(
       [_NotificationPermissionCallback deprecatedCallback]) native;
 
   @JSName('requestPermission')
-  @DomName('Notification.requestPermission')
-  @DocsEditable()
   static Future<String> requestPermission() {
     var completer = new Completer<String>();
     _requestPermission((value) {
@@ -29894,32 +22576,21 @@
   }
 
   /// Stream of `click` events handled by this [Notification].
-  @DomName('Notification.onclick')
-  @DocsEditable()
   Stream<Event> get onClick => clickEvent.forTarget(this);
 
   /// Stream of `close` events handled by this [Notification].
-  @DomName('Notification.onclose')
-  @DocsEditable()
   Stream<Event> get onClose => closeEvent.forTarget(this);
 
   /// Stream of `error` events handled by this [Notification].
-  @DomName('Notification.onerror')
-  @DocsEditable()
   Stream<Event> get onError => errorEvent.forTarget(this);
 
   /// Stream of `show` events handled by this [Notification].
-  @DomName('Notification.onshow')
-  @DocsEditable()
   Stream<Event> get onShow => showEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('NotificationEvent')
-@Experimental() // untriaged
 @Native("NotificationEvent")
 class NotificationEvent extends ExtendableEvent {
   // To suppress missing implicit constructor warnings.
@@ -29927,8 +22598,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('NotificationEvent.NotificationEvent')
-  @DocsEditable()
   factory NotificationEvent(String type, Map eventInitDict) {
     var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
     return NotificationEvent._create_1(type, eventInitDict_1);
@@ -29936,19 +22605,10 @@
   static NotificationEvent _create_1(type, eventInitDict) => JS(
       'NotificationEvent', 'new NotificationEvent(#,#)', type, eventInitDict);
 
-  @DomName('NotificationEvent.action')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String action;
 
-  @DomName('NotificationEvent.notification')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Notification notification;
 
-  @DomName('NotificationEvent.reply')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String reply;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29957,16 +22617,11 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('NotificationPermissionCallback')
-// http://www.w3.org/TR/notifications/#notificationpermissioncallback
-@Experimental()
 typedef void _NotificationPermissionCallback(String permission);
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLOListElement')
 @Native("HTMLOListElement")
 class OListElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -29974,8 +22629,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLOListElement.HTMLOListElement')
-  @DocsEditable()
   factory OListElement() => JS(
       'returns:OListElement;creates:OListElement;new:true',
       '#.createElement(#)',
@@ -29988,24 +22641,16 @@
    */
   OListElement.created() : super.created();
 
-  @DomName('HTMLOListElement.reversed')
-  @DocsEditable()
   bool reversed;
 
-  @DomName('HTMLOListElement.start')
-  @DocsEditable()
   int start;
 
-  @DomName('HTMLOListElement.type')
-  @DocsEditable()
   String type;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLObjectElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.IE)
 @SupportedBrowser(SupportedBrowser.SAFARI)
@@ -30017,8 +22662,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLObjectElement.HTMLObjectElement')
-  @DocsEditable()
   factory ObjectElement() => document.createElement("object");
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
@@ -30030,87 +22673,47 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('object');
 
-  @DomName('HTMLObjectElement.contentWindow')
-  @DocsEditable()
-  @Experimental() // untriaged
   WindowBase get contentWindow =>
       _convertNativeToDart_Window(this._get_contentWindow);
   @JSName('contentWindow')
-  @DomName('HTMLObjectElement.contentWindow')
-  @DocsEditable()
-  @Experimental() // untriaged
   @Creates('Window|=Object')
   @Returns('Window|=Object')
   final dynamic _get_contentWindow;
 
-  @DomName('HTMLObjectElement.data')
-  @DocsEditable()
   String data;
 
-  @DomName('HTMLObjectElement.form')
-  @DocsEditable()
   final FormElement form;
 
-  @DomName('HTMLObjectElement.height')
-  @DocsEditable()
   String height;
 
-  @DomName('HTMLObjectElement.name')
-  @DocsEditable()
   String name;
 
-  @DomName('HTMLObjectElement.type')
-  @DocsEditable()
   String type;
 
-  @DomName('HTMLObjectElement.useMap')
-  @DocsEditable()
   String useMap;
 
-  @DomName('HTMLObjectElement.validationMessage')
-  @DocsEditable()
   final String validationMessage;
 
-  @DomName('HTMLObjectElement.validity')
-  @DocsEditable()
   final ValidityState validity;
 
-  @DomName('HTMLObjectElement.width')
-  @DocsEditable()
   String width;
 
-  @DomName('HTMLObjectElement.willValidate')
-  @DocsEditable()
   final bool willValidate;
 
-  @DomName('HTMLObjectElement.__getter__')
-  @DocsEditable()
   Node __getter__(String name) native;
 
-  @DomName('HTMLObjectElement.__setter__')
-  @DocsEditable()
   void __setter__(String name, Node value) native;
 
-  @DomName('HTMLObjectElement.checkValidity')
-  @DocsEditable()
   bool checkValidity() native;
 
-  @DomName('HTMLObjectElement.reportValidity')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool reportValidity() native;
 
-  @DomName('HTMLObjectElement.setCustomValidity')
-  @DocsEditable()
   void setCustomValidity(String error) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('OffscreenCanvas')
-@Experimental() // untriaged
 @Native("OffscreenCanvas")
 class OffscreenCanvas extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -30118,27 +22721,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('OffscreenCanvas.OffscreenCanvas')
-  @DocsEditable()
   factory OffscreenCanvas(int width, int height) {
     return OffscreenCanvas._create_1(width, height);
   }
   static OffscreenCanvas _create_1(width, height) =>
       JS('OffscreenCanvas', 'new OffscreenCanvas(#,#)', width, height);
 
-  @DomName('OffscreenCanvas.height')
-  @DocsEditable()
-  @Experimental() // untriaged
   int height;
 
-  @DomName('OffscreenCanvas.width')
-  @DocsEditable()
-  @Experimental() // untriaged
   int width;
 
-  @DomName('OffscreenCanvas.convertToBlob')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future convertToBlob([Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -30148,19 +22740,10 @@
   }
 
   @JSName('convertToBlob')
-  @DomName('OffscreenCanvas.convertToBlob')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _convertToBlob_1(options) native;
   @JSName('convertToBlob')
-  @DomName('OffscreenCanvas.convertToBlob')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _convertToBlob_2() native;
 
-  @DomName('OffscreenCanvas.getContext')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object getContext(String contextType, [Map attributes]) {
     if (attributes != null) {
       var attributes_1 = convertDartToNative_Dictionary(attributes);
@@ -30170,28 +22753,16 @@
   }
 
   @JSName('getContext')
-  @DomName('OffscreenCanvas.getContext')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object _getContext_1(contextType, attributes) native;
   @JSName('getContext')
-  @DomName('OffscreenCanvas.getContext')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object _getContext_2(contextType) native;
 
-  @DomName('OffscreenCanvas.transferToImageBitmap')
-  @DocsEditable()
-  @Experimental() // untriaged
   ImageBitmap transferToImageBitmap() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('OffscreenCanvasRenderingContext2D')
-@Experimental() // untriaged
 @Native("OffscreenCanvasRenderingContext2D")
 class OffscreenCanvasRenderingContext2D extends Interceptor
     implements _CanvasPath {
@@ -30200,134 +22771,56 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('OffscreenCanvasRenderingContext2D.canvas')
-  @DocsEditable()
-  @Experimental() // untriaged
   final OffscreenCanvas canvas;
 
-  @DomName('OffscreenCanvasRenderingContext2D.direction')
-  @DocsEditable()
-  @Experimental() // untriaged
   String direction;
 
-  @DomName('OffscreenCanvasRenderingContext2D.fillStyle')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object fillStyle;
 
-  @DomName('OffscreenCanvasRenderingContext2D.filter')
-  @DocsEditable()
-  @Experimental() // untriaged
   String filter;
 
-  @DomName('OffscreenCanvasRenderingContext2D.font')
-  @DocsEditable()
-  @Experimental() // untriaged
   String font;
 
-  @DomName('OffscreenCanvasRenderingContext2D.globalAlpha')
-  @DocsEditable()
-  @Experimental() // untriaged
   num globalAlpha;
 
-  @DomName('OffscreenCanvasRenderingContext2D.globalCompositeOperation')
-  @DocsEditable()
-  @Experimental() // untriaged
   String globalCompositeOperation;
 
-  @DomName('OffscreenCanvasRenderingContext2D.imageSmoothingEnabled')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool imageSmoothingEnabled;
 
-  @DomName('OffscreenCanvasRenderingContext2D.imageSmoothingQuality')
-  @DocsEditable()
-  @Experimental() // untriaged
   String imageSmoothingQuality;
 
-  @DomName('OffscreenCanvasRenderingContext2D.lineCap')
-  @DocsEditable()
-  @Experimental() // untriaged
   String lineCap;
 
-  @DomName('OffscreenCanvasRenderingContext2D.lineDashOffset')
-  @DocsEditable()
-  @Experimental() // untriaged
   num lineDashOffset;
 
-  @DomName('OffscreenCanvasRenderingContext2D.lineJoin')
-  @DocsEditable()
-  @Experimental() // untriaged
   String lineJoin;
 
-  @DomName('OffscreenCanvasRenderingContext2D.lineWidth')
-  @DocsEditable()
-  @Experimental() // untriaged
   num lineWidth;
 
-  @DomName('OffscreenCanvasRenderingContext2D.miterLimit')
-  @DocsEditable()
-  @Experimental() // untriaged
   num miterLimit;
 
-  @DomName('OffscreenCanvasRenderingContext2D.shadowBlur')
-  @DocsEditable()
-  @Experimental() // untriaged
   num shadowBlur;
 
-  @DomName('OffscreenCanvasRenderingContext2D.shadowColor')
-  @DocsEditable()
-  @Experimental() // untriaged
   String shadowColor;
 
-  @DomName('OffscreenCanvasRenderingContext2D.shadowOffsetX')
-  @DocsEditable()
-  @Experimental() // untriaged
   num shadowOffsetX;
 
-  @DomName('OffscreenCanvasRenderingContext2D.shadowOffsetY')
-  @DocsEditable()
-  @Experimental() // untriaged
   num shadowOffsetY;
 
-  @DomName('OffscreenCanvasRenderingContext2D.strokeStyle')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object strokeStyle;
 
-  @DomName('OffscreenCanvasRenderingContext2D.textAlign')
-  @DocsEditable()
-  @Experimental() // untriaged
   String textAlign;
 
-  @DomName('OffscreenCanvasRenderingContext2D.textBaseline')
-  @DocsEditable()
-  @Experimental() // untriaged
   String textBaseline;
 
-  @DomName('OffscreenCanvasRenderingContext2D.beginPath')
-  @DocsEditable()
-  @Experimental() // untriaged
   void beginPath() native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.clearRect')
-  @DocsEditable()
-  @Experimental() // untriaged
   void clearRect(num x, num y, num width, num height) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.clip')
-  @DocsEditable()
-  @Experimental() // untriaged
   void clip([Path2D path]) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.commit')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future commit() => promiseToFuture(JS("", "#.commit()", this));
 
-  @DomName('OffscreenCanvasRenderingContext2D.createImageData')
-  @DocsEditable()
-  @Experimental() // untriaged
   ImageData createImageData(data_OR_imagedata_OR_sw,
       [int sh_OR_sw,
       imageDataColorSettings_OR_sh,
@@ -30371,47 +22864,23 @@
   }
 
   @JSName('createImageData')
-  @DomName('OffscreenCanvasRenderingContext2D.createImageData')
-  @DocsEditable()
-  @Experimental() // untriaged
   _createImageData_1(imagedata) native;
   @JSName('createImageData')
-  @DomName('OffscreenCanvasRenderingContext2D.createImageData')
-  @DocsEditable()
-  @Experimental() // untriaged
   _createImageData_2(int sw, sh) native;
   @JSName('createImageData')
-  @DomName('OffscreenCanvasRenderingContext2D.createImageData')
-  @DocsEditable()
-  @Experimental() // untriaged
   _createImageData_3(int sw, sh, imageDataColorSettings) native;
   @JSName('createImageData')
-  @DomName('OffscreenCanvasRenderingContext2D.createImageData')
-  @DocsEditable()
-  @Experimental() // untriaged
   _createImageData_4(data, sw, int sh, imageDataColorSettings) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.createLinearGradient')
-  @DocsEditable()
-  @Experimental() // untriaged
   CanvasGradient createLinearGradient(num x0, num y0, num x1, num y1) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.createPattern')
-  @DocsEditable()
-  @Experimental() // untriaged
   CanvasPattern createPattern(
       /*CanvasImageSource*/ image,
       String repetitionType) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.createRadialGradient')
-  @DocsEditable()
-  @Experimental() // untriaged
   CanvasGradient createRadialGradient(
       num x0, num y0, num r0, num x1, num y1, num r1) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.drawImage')
-  @DocsEditable()
-  @Experimental() // untriaged
   void drawImage(/*CanvasImageSource*/ image, num sx_OR_x, num sy_OR_y,
       [num sw_OR_width,
       num height_OR_sh,
@@ -30420,58 +22889,28 @@
       num dw,
       num dh]) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.fill')
-  @DocsEditable()
-  @Experimental() // untriaged
   void fill([path_OR_winding, String winding]) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.fillRect')
-  @DocsEditable()
-  @Experimental() // untriaged
   void fillRect(num x, num y, num width, num height) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.fillText')
-  @DocsEditable()
-  @Experimental() // untriaged
   void fillText(String text, num x, num y, [num maxWidth]) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.getImageData')
-  @DocsEditable()
-  @Experimental() // untriaged
   ImageData getImageData(int sx, int sy, int sw, int sh) {
     return convertNativeToDart_ImageData(_getImageData_1(sx, sy, sw, sh));
   }
 
   @JSName('getImageData')
-  @DomName('OffscreenCanvasRenderingContext2D.getImageData')
-  @DocsEditable()
-  @Experimental() // untriaged
   _getImageData_1(sx, sy, sw, sh) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.getLineDash')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<num> getLineDash() native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.isPointInPath')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool isPointInPath(path_OR_x, num x_OR_y, [winding_OR_y, String winding])
       native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.isPointInStroke')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool isPointInStroke(path_OR_x, num x_OR_y, [num y]) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.measureText')
-  @DocsEditable()
-  @Experimental() // untriaged
   TextMetrics measureText(String text) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.putImageData')
-  @DocsEditable()
-  @Experimental() // untriaged
   void putImageData(ImageData imagedata, int dx, int dy,
       [int dirtyX, int dirtyY, int dirtyWidth, int dirtyHeight]) {
     if (dirtyX == null &&
@@ -30495,133 +22934,62 @@
   }
 
   @JSName('putImageData')
-  @DomName('OffscreenCanvasRenderingContext2D.putImageData')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _putImageData_1(imagedata, dx, dy) native;
   @JSName('putImageData')
-  @DomName('OffscreenCanvasRenderingContext2D.putImageData')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _putImageData_2(
       imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.resetTransform')
-  @DocsEditable()
-  @Experimental() // untriaged
   void resetTransform() native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.restore')
-  @DocsEditable()
-  @Experimental() // untriaged
   void restore() native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.rotate')
-  @DocsEditable()
-  @Experimental() // untriaged
   void rotate(num angle) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.save')
-  @DocsEditable()
-  @Experimental() // untriaged
   void save() native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.scale')
-  @DocsEditable()
-  @Experimental() // untriaged
   void scale(num x, num y) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.setLineDash')
-  @DocsEditable()
-  @Experimental() // untriaged
   void setLineDash(List<num> dash) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.setTransform')
-  @DocsEditable()
-  @Experimental() // untriaged
   void setTransform(num a, num b, num c, num d, num e, num f) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.stroke')
-  @DocsEditable()
-  @Experimental() // untriaged
   void stroke([Path2D path]) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.strokeRect')
-  @DocsEditable()
-  @Experimental() // untriaged
   void strokeRect(num x, num y, num width, num height) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.strokeText')
-  @DocsEditable()
-  @Experimental() // untriaged
   void strokeText(String text, num x, num y, [num maxWidth]) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.transform')
-  @DocsEditable()
-  @Experimental() // untriaged
   void transform(num a, num b, num c, num d, num e, num f) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.translate')
-  @DocsEditable()
-  @Experimental() // untriaged
   void translate(num x, num y) native;
 
   // From CanvasPath
 
-  @DomName('OffscreenCanvasRenderingContext2D.arc')
-  @DocsEditable()
-  @Experimental() // untriaged
   void arc(num x, num y, num radius, num startAngle, num endAngle,
       bool anticlockwise) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.arcTo')
-  @DocsEditable()
-  @Experimental() // untriaged
   void arcTo(num x1, num y1, num x2, num y2, num radius) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.bezierCurveTo')
-  @DocsEditable()
-  @Experimental() // untriaged
   void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y)
       native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.closePath')
-  @DocsEditable()
-  @Experimental() // untriaged
   void closePath() native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.ellipse')
-  @DocsEditable()
-  @Experimental() // untriaged
   void ellipse(num x, num y, num radiusX, num radiusY, num rotation,
       num startAngle, num endAngle, bool anticlockwise) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.lineTo')
-  @DocsEditable()
-  @Experimental() // untriaged
   void lineTo(num x, num y) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.moveTo')
-  @DocsEditable()
-  @Experimental() // untriaged
   void moveTo(num x, num y) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.quadraticCurveTo')
-  @DocsEditable()
-  @Experimental() // untriaged
   void quadraticCurveTo(num cpx, num cpy, num x, num y) native;
 
-  @DomName('OffscreenCanvasRenderingContext2D.rect')
-  @DocsEditable()
-  @Experimental() // untriaged
   void rect(num x, num y, num width, num height) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLOptGroupElement')
 @Native("HTMLOptGroupElement")
 class OptGroupElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -30629,8 +22997,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLOptGroupElement.HTMLOptGroupElement')
-  @DocsEditable()
   factory OptGroupElement() => JS(
       'returns:OptGroupElement;creates:OptGroupElement;new:true',
       '#.createElement(#)',
@@ -30643,19 +23009,14 @@
    */
   OptGroupElement.created() : super.created();
 
-  @DomName('HTMLOptGroupElement.disabled')
-  @DocsEditable()
   bool disabled;
 
-  @DomName('HTMLOptGroupElement.label')
-  @DocsEditable()
   String label;
 }
 // Copyright (c) 2013, 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.
 
-@DomName('HTMLOptionElement')
 @Native("HTMLOptionElement")
 class OptionElement extends HtmlElement {
   factory OptionElement(
@@ -30663,8 +23024,6 @@
     return new OptionElement._(data, value, null, selected);
   }
 
-  @DomName('HTMLOptionElement.HTMLOptionElement')
-  @DocsEditable()
   factory OptionElement._(
       [String data, String value, bool defaultSelected, bool selected]) {
     if (selected != null) {
@@ -30702,41 +23061,24 @@
    */
   OptionElement.created() : super.created();
 
-  @DomName('HTMLOptionElement.defaultSelected')
-  @DocsEditable()
   bool defaultSelected;
 
-  @DomName('HTMLOptionElement.disabled')
-  @DocsEditable()
   bool disabled;
 
-  @DomName('HTMLOptionElement.form')
-  @DocsEditable()
   final FormElement form;
 
-  @DomName('HTMLOptionElement.index')
-  @DocsEditable()
   final int index;
 
-  @DomName('HTMLOptionElement.label')
-  @DocsEditable()
   String label;
 
-  @DomName('HTMLOptionElement.selected')
-  @DocsEditable()
   bool selected;
 
-  @DomName('HTMLOptionElement.value')
-  @DocsEditable()
   String value;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('OrientationSensor')
-@Experimental() // untriaged
 @Native("OrientationSensor")
 class OrientationSensor extends Sensor {
   // To suppress missing implicit constructor warnings.
@@ -30744,22 +23086,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('OrientationSensor.quaternion')
-  @DocsEditable()
-  @Experimental() // untriaged
   final List<num> quaternion;
 
-  @DomName('OrientationSensor.populateMatrix')
-  @DocsEditable()
-  @Experimental() // untriaged
   void populateMatrix(Object targetBuffer) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLOutputElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
@@ -30770,8 +23104,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLOutputElement.HTMLOutputElement')
-  @DocsEditable()
   factory OutputElement() => document.createElement("output");
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
@@ -30783,69 +23115,39 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('output');
 
-  @DomName('HTMLOutputElement.defaultValue')
-  @DocsEditable()
   String defaultValue;
 
-  @DomName('HTMLOutputElement.form')
-  @DocsEditable()
   final FormElement form;
 
-  @DomName('HTMLOutputElement.htmlFor')
-  @DocsEditable()
   final DomTokenList htmlFor;
 
-  @DomName('HTMLOutputElement.labels')
-  @DocsEditable()
   @Unstable()
   @Returns('NodeList|Null')
   @Creates('NodeList')
   final List<Node> labels;
 
-  @DomName('HTMLOutputElement.name')
-  @DocsEditable()
   String name;
 
-  @DomName('HTMLOutputElement.type')
-  @DocsEditable()
   final String type;
 
-  @DomName('HTMLOutputElement.validationMessage')
-  @DocsEditable()
   final String validationMessage;
 
-  @DomName('HTMLOutputElement.validity')
-  @DocsEditable()
   final ValidityState validity;
 
-  @DomName('HTMLOutputElement.value')
-  @DocsEditable()
   String value;
 
-  @DomName('HTMLOutputElement.willValidate')
-  @DocsEditable()
   final bool willValidate;
 
-  @DomName('HTMLOutputElement.checkValidity')
-  @DocsEditable()
   bool checkValidity() native;
 
-  @DomName('HTMLOutputElement.reportValidity')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool reportValidity() native;
 
-  @DomName('HTMLOutputElement.setCustomValidity')
-  @DocsEditable()
   void setCustomValidity(String error) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('OverconstrainedError')
-@Experimental() // untriaged
 @Native("OverconstrainedError")
 class OverconstrainedError extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -30853,8 +23155,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('OverconstrainedError.OverconstrainedError')
-  @DocsEditable()
   factory OverconstrainedError(String constraint, String message) {
     return OverconstrainedError._create_1(constraint, message);
   }
@@ -30864,29 +23164,16 @@
       constraint,
       message);
 
-  @DomName('OverconstrainedError.constraint')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String constraint;
 
-  @DomName('OverconstrainedError.message')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String message;
 
-  @DomName('OverconstrainedError.name')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String name;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PageTransitionEvent')
-// http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#pagetransitionevent
-@Experimental()
 @Native("PageTransitionEvent")
 class PageTransitionEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -30894,8 +23181,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PageTransitionEvent.PageTransitionEvent')
-  @DocsEditable()
   factory PageTransitionEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -30911,17 +23196,12 @@
   static PageTransitionEvent _create_2(type) =>
       JS('PageTransitionEvent', 'new PageTransitionEvent(#)', type);
 
-  @DomName('PageTransitionEvent.persisted')
-  @DocsEditable()
   final bool persisted;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PaintRenderingContext2D')
-@Experimental() // untriaged
 @Native("PaintRenderingContext2D")
 class PaintRenderingContext2D extends Interceptor implements _CanvasPath {
   // To suppress missing implicit constructor warnings.
@@ -30929,127 +23209,55 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PaintRenderingContext2D.currentTransform')
-  @DocsEditable()
-  @Experimental() // untriaged
   Matrix currentTransform;
 
-  @DomName('PaintRenderingContext2D.fillStyle')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object fillStyle;
 
-  @DomName('PaintRenderingContext2D.filter')
-  @DocsEditable()
-  @Experimental() // untriaged
   String filter;
 
-  @DomName('PaintRenderingContext2D.globalAlpha')
-  @DocsEditable()
-  @Experimental() // untriaged
   num globalAlpha;
 
-  @DomName('PaintRenderingContext2D.globalCompositeOperation')
-  @DocsEditable()
-  @Experimental() // untriaged
   String globalCompositeOperation;
 
-  @DomName('PaintRenderingContext2D.imageSmoothingEnabled')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool imageSmoothingEnabled;
 
-  @DomName('PaintRenderingContext2D.imageSmoothingQuality')
-  @DocsEditable()
-  @Experimental() // untriaged
   String imageSmoothingQuality;
 
-  @DomName('PaintRenderingContext2D.lineCap')
-  @DocsEditable()
-  @Experimental() // untriaged
   String lineCap;
 
-  @DomName('PaintRenderingContext2D.lineDashOffset')
-  @DocsEditable()
-  @Experimental() // untriaged
   num lineDashOffset;
 
-  @DomName('PaintRenderingContext2D.lineJoin')
-  @DocsEditable()
-  @Experimental() // untriaged
   String lineJoin;
 
-  @DomName('PaintRenderingContext2D.lineWidth')
-  @DocsEditable()
-  @Experimental() // untriaged
   num lineWidth;
 
-  @DomName('PaintRenderingContext2D.miterLimit')
-  @DocsEditable()
-  @Experimental() // untriaged
   num miterLimit;
 
-  @DomName('PaintRenderingContext2D.shadowBlur')
-  @DocsEditable()
-  @Experimental() // untriaged
   num shadowBlur;
 
-  @DomName('PaintRenderingContext2D.shadowColor')
-  @DocsEditable()
-  @Experimental() // untriaged
   String shadowColor;
 
-  @DomName('PaintRenderingContext2D.shadowOffsetX')
-  @DocsEditable()
-  @Experimental() // untriaged
   num shadowOffsetX;
 
-  @DomName('PaintRenderingContext2D.shadowOffsetY')
-  @DocsEditable()
-  @Experimental() // untriaged
   num shadowOffsetY;
 
-  @DomName('PaintRenderingContext2D.strokeStyle')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object strokeStyle;
 
-  @DomName('PaintRenderingContext2D.beginPath')
-  @DocsEditable()
-  @Experimental() // untriaged
   void beginPath() native;
 
-  @DomName('PaintRenderingContext2D.clearRect')
-  @DocsEditable()
-  @Experimental() // untriaged
   void clearRect(num x, num y, num width, num height) native;
 
-  @DomName('PaintRenderingContext2D.clip')
-  @DocsEditable()
-  @Experimental() // untriaged
   void clip([path_OR_winding, String winding]) native;
 
-  @DomName('PaintRenderingContext2D.createLinearGradient')
-  @DocsEditable()
-  @Experimental() // untriaged
   CanvasGradient createLinearGradient(num x0, num y0, num x1, num y1) native;
 
-  @DomName('PaintRenderingContext2D.createPattern')
-  @DocsEditable()
-  @Experimental() // untriaged
   CanvasPattern createPattern(
       /*CanvasImageSource*/ image,
       String repetitionType) native;
 
-  @DomName('PaintRenderingContext2D.createRadialGradient')
-  @DocsEditable()
-  @Experimental() // untriaged
   CanvasGradient createRadialGradient(
       num x0, num y0, num r0, num x1, num y1, num r1) native;
 
-  @DomName('PaintRenderingContext2D.drawImage')
-  @DocsEditable()
-  @Experimental() // untriaged
   void drawImage(/*CanvasImageSource*/ image, num sx_OR_x, num sy_OR_y,
       [num sw_OR_width,
       num height_OR_sh,
@@ -31058,144 +23266,66 @@
       num dw,
       num dh]) native;
 
-  @DomName('PaintRenderingContext2D.fill')
-  @DocsEditable()
-  @Experimental() // untriaged
   void fill([path_OR_winding, String winding]) native;
 
-  @DomName('PaintRenderingContext2D.fillRect')
-  @DocsEditable()
-  @Experimental() // untriaged
   void fillRect(num x, num y, num width, num height) native;
 
-  @DomName('PaintRenderingContext2D.getLineDash')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<num> getLineDash() native;
 
-  @DomName('PaintRenderingContext2D.isPointInPath')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool isPointInPath(path_OR_x, num x_OR_y, [winding_OR_y, String winding])
       native;
 
-  @DomName('PaintRenderingContext2D.isPointInStroke')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool isPointInStroke(path_OR_x, num x_OR_y, [num y]) native;
 
-  @DomName('PaintRenderingContext2D.resetTransform')
-  @DocsEditable()
-  @Experimental() // untriaged
   void resetTransform() native;
 
-  @DomName('PaintRenderingContext2D.restore')
-  @DocsEditable()
-  @Experimental() // untriaged
   void restore() native;
 
-  @DomName('PaintRenderingContext2D.rotate')
-  @DocsEditable()
-  @Experimental() // untriaged
   void rotate(num angle) native;
 
-  @DomName('PaintRenderingContext2D.save')
-  @DocsEditable()
-  @Experimental() // untriaged
   void save() native;
 
-  @DomName('PaintRenderingContext2D.scale')
-  @DocsEditable()
-  @Experimental() // untriaged
   void scale(num x, num y) native;
 
-  @DomName('PaintRenderingContext2D.setLineDash')
-  @DocsEditable()
-  @Experimental() // untriaged
   void setLineDash(List<num> dash) native;
 
-  @DomName('PaintRenderingContext2D.setTransform')
-  @DocsEditable()
-  @Experimental() // untriaged
   void setTransform(num a, num b, num c, num d, num e, num f) native;
 
-  @DomName('PaintRenderingContext2D.stroke')
-  @DocsEditable()
-  @Experimental() // untriaged
   void stroke([Path2D path]) native;
 
-  @DomName('PaintRenderingContext2D.strokeRect')
-  @DocsEditable()
-  @Experimental() // untriaged
   void strokeRect(num x, num y, num width, num height) native;
 
-  @DomName('PaintRenderingContext2D.transform')
-  @DocsEditable()
-  @Experimental() // untriaged
   void transform(num a, num b, num c, num d, num e, num f) native;
 
-  @DomName('PaintRenderingContext2D.translate')
-  @DocsEditable()
-  @Experimental() // untriaged
   void translate(num x, num y) native;
 
   // From CanvasPath
 
-  @DomName('PaintRenderingContext2D.arc')
-  @DocsEditable()
-  @Experimental() // untriaged
   void arc(num x, num y, num radius, num startAngle, num endAngle,
       bool anticlockwise) native;
 
-  @DomName('PaintRenderingContext2D.arcTo')
-  @DocsEditable()
-  @Experimental() // untriaged
   void arcTo(num x1, num y1, num x2, num y2, num radius) native;
 
-  @DomName('PaintRenderingContext2D.bezierCurveTo')
-  @DocsEditable()
-  @Experimental() // untriaged
   void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y)
       native;
 
-  @DomName('PaintRenderingContext2D.closePath')
-  @DocsEditable()
-  @Experimental() // untriaged
   void closePath() native;
 
-  @DomName('PaintRenderingContext2D.ellipse')
-  @DocsEditable()
-  @Experimental() // untriaged
   void ellipse(num x, num y, num radiusX, num radiusY, num rotation,
       num startAngle, num endAngle, bool anticlockwise) native;
 
-  @DomName('PaintRenderingContext2D.lineTo')
-  @DocsEditable()
-  @Experimental() // untriaged
   void lineTo(num x, num y) native;
 
-  @DomName('PaintRenderingContext2D.moveTo')
-  @DocsEditable()
-  @Experimental() // untriaged
   void moveTo(num x, num y) native;
 
-  @DomName('PaintRenderingContext2D.quadraticCurveTo')
-  @DocsEditable()
-  @Experimental() // untriaged
   void quadraticCurveTo(num cpx, num cpy, num x, num y) native;
 
-  @DomName('PaintRenderingContext2D.rect')
-  @DocsEditable()
-  @Experimental() // untriaged
   void rect(num x, num y, num width, num height) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PaintSize')
-@Experimental() // untriaged
 @Native("PaintSize")
 class PaintSize extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -31203,23 +23333,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PaintSize.height')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num height;
 
-  @DomName('PaintSize.width')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num width;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PaintWorkletGlobalScope')
-@Experimental() // untriaged
 @Native("PaintWorkletGlobalScope")
 class PaintWorkletGlobalScope extends WorkletGlobalScope {
   // To suppress missing implicit constructor warnings.
@@ -31227,22 +23348,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PaintWorkletGlobalScope.devicePixelRatio')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num devicePixelRatio;
 
-  @DomName('PaintWorkletGlobalScope.registerPaint')
-  @DocsEditable()
-  @Experimental() // untriaged
   void registerPaint(String name, Object paintCtor) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLParagraphElement')
 @Native("HTMLParagraphElement")
 class ParagraphElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -31250,8 +23363,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLParagraphElement.HTMLParagraphElement')
-  @DocsEditable()
   factory ParagraphElement() => JS(
       'returns:ParagraphElement;creates:ParagraphElement;new:true',
       '#.createElement(#)',
@@ -31268,8 +23379,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.
 
-@DocsEditable()
-@DomName('HTMLParamElement')
 @Unstable()
 @Native("HTMLParamElement")
 class ParamElement extends HtmlElement {
@@ -31278,8 +23387,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLParamElement.HTMLParamElement')
-  @DocsEditable()
   factory ParamElement() => JS(
       'returns:ParamElement;creates:ParamElement;new:true',
       '#.createElement(#)',
@@ -31292,21 +23399,14 @@
    */
   ParamElement.created() : super.created();
 
-  @DomName('HTMLParamElement.name')
-  @DocsEditable()
   String name;
 
-  @DomName('HTMLParamElement.value')
-  @DocsEditable()
   String value;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('ParentNode')
-@Experimental() // untriaged
 abstract class ParentNode extends Interceptor {
   // To suppress missing implicit constructor warnings.
   factory ParentNode._() {
@@ -31329,9 +23429,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.
 
-@DocsEditable()
-@DomName('PasswordCredential')
-@Experimental() // untriaged
 @Native("PasswordCredential")
 class PasswordCredential extends Credential implements CredentialUserData {
   // To suppress missing implicit constructor warnings.
@@ -31339,8 +23436,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PasswordCredential.PasswordCredential')
-  @DocsEditable()
   factory PasswordCredential(data_OR_form) {
     if ((data_OR_form is Map)) {
       var data_1 = convertDartToNative_Dictionary(data_OR_form);
@@ -31356,46 +23451,25 @@
   static PasswordCredential _create_2(data_OR_form) =>
       JS('PasswordCredential', 'new PasswordCredential(#)', data_OR_form);
 
-  @DomName('PasswordCredential.additionalData')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object additionalData;
 
-  @DomName('PasswordCredential.idName')
-  @DocsEditable()
-  @Experimental() // untriaged
   String idName;
 
-  @DomName('PasswordCredential.password')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String password;
 
-  @DomName('PasswordCredential.passwordName')
-  @DocsEditable()
-  @Experimental() // untriaged
   String passwordName;
 
   // From CredentialUserData
 
   @JSName('iconURL')
-  @DomName('PasswordCredential.iconURL')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String iconUrl;
 
-  @DomName('PasswordCredential.name')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String name;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('Path2D')
-@Experimental() // untriaged
 @Native("Path2D")
 class Path2D extends Interceptor implements _CanvasPath {
   // To suppress missing implicit constructor warnings.
@@ -31403,8 +23477,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Path2D.Path2D')
-  @DocsEditable()
   factory Path2D([path_OR_text]) {
     if (path_OR_text == null) {
       return Path2D._create_1();
@@ -31423,68 +23495,35 @@
   static Path2D _create_3(path_OR_text) =>
       JS('Path2D', 'new Path2D(#)', path_OR_text);
 
-  @DomName('Path2D.addPath')
-  @DocsEditable()
-  @Experimental() // untriaged
   void addPath(Path2D path, [Matrix transform]) native;
 
   // From CanvasPath
 
-  @DomName('Path2D.arc')
-  @DocsEditable()
-  @Experimental() // untriaged
   void arc(num x, num y, num radius, num startAngle, num endAngle,
       bool anticlockwise) native;
 
-  @DomName('Path2D.arcTo')
-  @DocsEditable()
-  @Experimental() // untriaged
   void arcTo(num x1, num y1, num x2, num y2, num radius) native;
 
-  @DomName('Path2D.bezierCurveTo')
-  @DocsEditable()
-  @Experimental() // untriaged
   void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y)
       native;
 
-  @DomName('Path2D.closePath')
-  @DocsEditable()
-  @Experimental() // untriaged
   void closePath() native;
 
-  @DomName('Path2D.ellipse')
-  @DocsEditable()
-  @Experimental() // untriaged
   void ellipse(num x, num y, num radiusX, num radiusY, num rotation,
       num startAngle, num endAngle, bool anticlockwise) native;
 
-  @DomName('Path2D.lineTo')
-  @DocsEditable()
-  @Experimental() // untriaged
   void lineTo(num x, num y) native;
 
-  @DomName('Path2D.moveTo')
-  @DocsEditable()
-  @Experimental() // untriaged
   void moveTo(num x, num y) native;
 
-  @DomName('Path2D.quadraticCurveTo')
-  @DocsEditable()
-  @Experimental() // untriaged
   void quadraticCurveTo(num cpx, num cpy, num x, num y) native;
 
-  @DomName('Path2D.rect')
-  @DocsEditable()
-  @Experimental() // untriaged
   void rect(num x, num y, num width, num height) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PaymentAddress')
-@Experimental() // untriaged
 @Native("PaymentAddress")
 class PaymentAddress extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -31492,68 +23531,32 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PaymentAddress.addressLine')
-  @DocsEditable()
-  @Experimental() // untriaged
   final List<String> addressLine;
 
-  @DomName('PaymentAddress.city')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String city;
 
-  @DomName('PaymentAddress.country')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String country;
 
-  @DomName('PaymentAddress.dependentLocality')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String dependentLocality;
 
-  @DomName('PaymentAddress.languageCode')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String languageCode;
 
-  @DomName('PaymentAddress.organization')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String organization;
 
-  @DomName('PaymentAddress.phone')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String phone;
 
-  @DomName('PaymentAddress.postalCode')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String postalCode;
 
-  @DomName('PaymentAddress.recipient')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String recipient;
 
-  @DomName('PaymentAddress.region')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String region;
 
-  @DomName('PaymentAddress.sortingCode')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String sortingCode;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PaymentInstruments')
-@Experimental() // untriaged
 @Native("PaymentInstruments")
 class PaymentInstruments extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -31561,56 +23564,32 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PaymentInstruments.clear')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future clear() => promiseToFuture(JS("", "#.clear()", this));
 
-  @DomName('PaymentInstruments.delete')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<bool> delete(String instrumentKey) =>
       promiseToFuture<bool>(JS("", "#.delete(#)", this, instrumentKey));
 
-  @DomName('PaymentInstruments.get')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<Map<String, dynamic>> get(String instrumentKey) =>
       promiseToFutureAsMap(JS("", "#.get(#)", this, instrumentKey));
 
-  @DomName('PaymentInstruments.has')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future has(String instrumentKey) =>
       promiseToFuture(JS("", "#.has(#)", this, instrumentKey));
 
-  @DomName('PaymentInstruments.keys')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<List<String>> keys() =>
       promiseToFuture<List<String>>(JS("", "#.keys()", this));
 
-  @DomName('PaymentInstruments.set')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future set(String instrumentKey, Map details) {
     var details_1 = convertDartToNative_Dictionary(details);
     return _set_1(instrumentKey, details_1);
   }
 
   @JSName('set')
-  @DomName('PaymentInstruments.set')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _set_1(instrumentKey, details) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PaymentManager')
-@Experimental() // untriaged
 @Native("PaymentManager")
 class PaymentManager extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -31618,23 +23597,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PaymentManager.instruments')
-  @DocsEditable()
-  @Experimental() // untriaged
   final PaymentInstruments instruments;
 
-  @DomName('PaymentManager.userHint')
-  @DocsEditable()
-  @Experimental() // untriaged
   String userHint;
 }
 // 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.
 
-@DocsEditable()
-@DomName('PaymentRequest')
-@Experimental() // untriaged
 @Native("PaymentRequest")
 class PaymentRequest extends EventTarget {
   factory PaymentRequest(List<Map> methodData, Map details, [Map options]) {
@@ -31665,40 +23635,19 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PaymentRequest.id')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String id;
 
-  @DomName('PaymentRequest.shippingAddress')
-  @DocsEditable()
-  @Experimental() // untriaged
   final PaymentAddress shippingAddress;
 
-  @DomName('PaymentRequest.shippingOption')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String shippingOption;
 
-  @DomName('PaymentRequest.shippingType')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String shippingType;
 
-  @DomName('PaymentRequest.abort')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future abort() => promiseToFuture(JS("", "#.abort()", this));
 
-  @DomName('PaymentRequest.canMakePayment')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<bool> canMakePayment() =>
       promiseToFuture<bool>(JS("", "#.canMakePayment()", this));
 
-  @DomName('PaymentRequest.show')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<PaymentResponse> show() =>
       promiseToFuture<PaymentResponse>(JS("", "#.show()", this));
 }
@@ -31707,9 +23656,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.
 
-@DocsEditable()
-@DomName('PaymentRequestEvent')
-@Experimental() // untriaged
 @Native("PaymentRequestEvent")
 class PaymentRequestEvent extends ExtendableEvent {
   // To suppress missing implicit constructor warnings.
@@ -31717,8 +23663,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PaymentRequestEvent.PaymentRequestEvent')
-  @DocsEditable()
   factory PaymentRequestEvent(String type, Map eventInitDict) {
     var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
     return PaymentRequestEvent._create_1(type, eventInitDict_1);
@@ -31729,59 +23673,29 @@
       type,
       eventInitDict);
 
-  @DomName('PaymentRequestEvent.instrumentKey')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String instrumentKey;
 
-  @DomName('PaymentRequestEvent.methodData')
-  @DocsEditable()
-  @Experimental() // untriaged
   final List methodData;
 
-  @DomName('PaymentRequestEvent.modifiers')
-  @DocsEditable()
-  @Experimental() // untriaged
   final List modifiers;
 
-  @DomName('PaymentRequestEvent.paymentRequestId')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String paymentRequestId;
 
-  @DomName('PaymentRequestEvent.paymentRequestOrigin')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String paymentRequestOrigin;
 
-  @DomName('PaymentRequestEvent.topLevelOrigin')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String topLevelOrigin;
 
-  @DomName('PaymentRequestEvent.total')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Object total;
 
-  @DomName('PaymentRequestEvent.openWindow')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<WindowClient> openWindow(String url) =>
       promiseToFuture<WindowClient>(JS("", "#.openWindow(#)", this, url));
 
-  @DomName('PaymentRequestEvent.respondWith')
-  @DocsEditable()
-  @Experimental() // untriaged
   void respondWith(Future response) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PaymentRequestUpdateEvent')
-@Experimental() // untriaged
 @Native("PaymentRequestUpdateEvent")
 class PaymentRequestUpdateEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -31789,8 +23703,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PaymentRequestUpdateEvent.PaymentRequestUpdateEvent')
-  @DocsEditable()
   factory PaymentRequestUpdateEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -31806,18 +23718,12 @@
   static PaymentRequestUpdateEvent _create_2(type) =>
       JS('PaymentRequestUpdateEvent', 'new PaymentRequestUpdateEvent(#)', type);
 
-  @DomName('PaymentRequestUpdateEvent.updateWith')
-  @DocsEditable()
-  @Experimental() // untriaged
   void updateWith(Future detailsPromise) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PaymentResponse')
-@Experimental() // untriaged
 @Native("PaymentResponse")
 class PaymentResponse extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -31825,49 +23731,22 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PaymentResponse.details')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Object details;
 
-  @DomName('PaymentResponse.methodName')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String methodName;
 
-  @DomName('PaymentResponse.payerEmail')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String payerEmail;
 
-  @DomName('PaymentResponse.payerName')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String payerName;
 
-  @DomName('PaymentResponse.payerPhone')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String payerPhone;
 
-  @DomName('PaymentResponse.requestId')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String requestId;
 
-  @DomName('PaymentResponse.shippingAddress')
-  @DocsEditable()
-  @Experimental() // untriaged
   final PaymentAddress shippingAddress;
 
-  @DomName('PaymentResponse.shippingOption')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String shippingOption;
 
-  @DomName('PaymentResponse.complete')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future complete([String paymentResult]) =>
       promiseToFuture(JS("", "#.complete(#)", this, paymentResult));
 }
@@ -31875,8 +23754,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.
 
-@DocsEditable()
-@DomName('Performance')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE)
@@ -31890,88 +23767,38 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => JS('bool', '!!(window.performance)');
 
-  @DomName('Performance.memory')
-  @DocsEditable()
-  @Experimental() // nonstandard
   final MemoryInfo memory;
 
-  @DomName('Performance.navigation')
-  @DocsEditable()
   final PerformanceNavigation navigation;
 
-  @DomName('Performance.timeOrigin')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num timeOrigin;
 
-  @DomName('Performance.timing')
-  @DocsEditable()
   final PerformanceTiming timing;
 
-  @DomName('Performance.clearMarks')
-  @DocsEditable()
-  // https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/UserTiming/Overview.html#extensions-performance-interface
-  @Experimental()
   void clearMarks(String markName) native;
 
-  @DomName('Performance.clearMeasures')
-  @DocsEditable()
-  // https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/UserTiming/Overview.html#extensions-performance-interface
-  @Experimental()
   void clearMeasures(String measureName) native;
 
-  @DomName('Performance.clearResourceTimings')
-  @DocsEditable()
-  @Experimental() // untriaged
   void clearResourceTimings() native;
 
-  @DomName('Performance.getEntries')
-  @DocsEditable()
-  // http://www.w3.org/TR/performance-timeline/#sec-window.performance-attribute
-  @Experimental()
   List<PerformanceEntry> getEntries() native;
 
-  @DomName('Performance.getEntriesByName')
-  @DocsEditable()
-  // http://www.w3.org/TR/performance-timeline/#sec-window.performance-attribute
-  @Experimental()
   List<PerformanceEntry> getEntriesByName(String name, String entryType) native;
 
-  @DomName('Performance.getEntriesByType')
-  @DocsEditable()
-  // http://www.w3.org/TR/performance-timeline/#sec-window.performance-attribute
-  @Experimental()
   List<PerformanceEntry> getEntriesByType(String entryType) native;
 
-  @DomName('Performance.mark')
-  @DocsEditable()
-  // https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/UserTiming/Overview.html#extensions-performance-interface
-  @Experimental()
   void mark(String markName) native;
 
-  @DomName('Performance.measure')
-  @DocsEditable()
-  // https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/UserTiming/Overview.html#extensions-performance-interface
-  @Experimental()
   void measure(String measureName, String startMark, String endMark) native;
 
-  @DomName('Performance.now')
-  @DocsEditable()
   double now() native;
 
-  @DomName('Performance.setResourceTimingBufferSize')
-  @DocsEditable()
-  @Experimental() // untriaged
   void setResourceTimingBufferSize(int maxSize) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PerformanceEntry')
-// http://www.w3.org/TR/performance-timeline/#sec-PerformanceEntry-interface
-@Experimental()
 @Native("PerformanceEntry")
 class PerformanceEntry extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -31979,29 +23806,18 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PerformanceEntry.duration')
-  @DocsEditable()
   final num duration;
 
-  @DomName('PerformanceEntry.entryType')
-  @DocsEditable()
   final String entryType;
 
-  @DomName('PerformanceEntry.name')
-  @DocsEditable()
   final String name;
 
-  @DomName('PerformanceEntry.startTime')
-  @DocsEditable()
   final num startTime;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PerformanceLongTaskTiming')
-@Experimental() // untriaged
 @Native("PerformanceLongTaskTiming")
 class PerformanceLongTaskTiming extends PerformanceEntry {
   // To suppress missing implicit constructor warnings.
@@ -32009,19 +23825,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PerformanceLongTaskTiming.attribution')
-  @DocsEditable()
-  @Experimental() // untriaged
   final List<TaskAttributionTiming> attribution;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PerformanceMark')
-// http://www.w3.org/TR/user-timing/#performancemark
-@Experimental()
 @Native("PerformanceMark")
 class PerformanceMark extends PerformanceEntry {
   // To suppress missing implicit constructor warnings.
@@ -32033,10 +23842,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.
 
-@DocsEditable()
-@DomName('PerformanceMeasure')
-// http://www.w3.org/TR/user-timing/#performancemeasure
-@Experimental()
 @Native("PerformanceMeasure")
 class PerformanceMeasure extends PerformanceEntry {
   // To suppress missing implicit constructor warnings.
@@ -32048,8 +23853,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.
 
-@DocsEditable()
-@DomName('PerformanceNavigation')
 @Unstable()
 @Native("PerformanceNavigation")
 class PerformanceNavigation extends Interceptor {
@@ -32058,37 +23861,22 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PerformanceNavigation.TYPE_BACK_FORWARD')
-  @DocsEditable()
   static const int TYPE_BACK_FORWARD = 2;
 
-  @DomName('PerformanceNavigation.TYPE_NAVIGATE')
-  @DocsEditable()
   static const int TYPE_NAVIGATE = 0;
 
-  @DomName('PerformanceNavigation.TYPE_RELOAD')
-  @DocsEditable()
   static const int TYPE_RELOAD = 1;
 
-  @DomName('PerformanceNavigation.TYPE_RESERVED')
-  @DocsEditable()
   static const int TYPE_RESERVED = 255;
 
-  @DomName('PerformanceNavigation.redirectCount')
-  @DocsEditable()
   final int redirectCount;
 
-  @DomName('PerformanceNavigation.type')
-  @DocsEditable()
   final int type;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PerformanceNavigationTiming')
-@Experimental() // untriaged
 @Native("PerformanceNavigationTiming")
 class PerformanceNavigationTiming extends PerformanceResourceTiming {
   // To suppress missing implicit constructor warnings.
@@ -32096,63 +23884,30 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PerformanceNavigationTiming.domComplete')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num domComplete;
 
-  @DomName('PerformanceNavigationTiming.domContentLoadedEventEnd')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num domContentLoadedEventEnd;
 
-  @DomName('PerformanceNavigationTiming.domContentLoadedEventStart')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num domContentLoadedEventStart;
 
-  @DomName('PerformanceNavigationTiming.domInteractive')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num domInteractive;
 
-  @DomName('PerformanceNavigationTiming.loadEventEnd')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num loadEventEnd;
 
-  @DomName('PerformanceNavigationTiming.loadEventStart')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num loadEventStart;
 
-  @DomName('PerformanceNavigationTiming.redirectCount')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int redirectCount;
 
-  @DomName('PerformanceNavigationTiming.type')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String type;
 
-  @DomName('PerformanceNavigationTiming.unloadEventEnd')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num unloadEventEnd;
 
-  @DomName('PerformanceNavigationTiming.unloadEventStart')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num unloadEventStart;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PerformanceObserver')
-@Experimental() // untriaged
 @Native("PerformanceObserver")
 class PerformanceObserver extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -32160,22 +23915,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PerformanceObserver.PerformanceObserver')
-  @DocsEditable()
   factory PerformanceObserver(PerformanceObserverCallback callback) {
     return PerformanceObserver._create_1(callback);
   }
   static PerformanceObserver _create_1(callback) =>
       JS('PerformanceObserver', 'new PerformanceObserver(#)', callback);
 
-  @DomName('PerformanceObserver.disconnect')
-  @DocsEditable()
-  @Experimental() // untriaged
   void disconnect() native;
 
-  @DomName('PerformanceObserver.observe')
-  @DocsEditable()
-  @Experimental() // untriaged
   void observe(Map options) {
     var options_1 = convertDartToNative_Dictionary(options);
     _observe_1(options_1);
@@ -32183,9 +23930,6 @@
   }
 
   @JSName('observe')
-  @DomName('PerformanceObserver.observe')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _observe_1(options) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -32194,17 +23938,12 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('PerformanceObserverCallback')
-@Experimental() // untriaged
 typedef void PerformanceObserverCallback(
     PerformanceObserverEntryList entries, PerformanceObserver observer);
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PerformanceObserverEntryList')
-@Experimental() // untriaged
 @Native("PerformanceObserverEntryList")
 class PerformanceObserverEntryList extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -32212,28 +23951,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PerformanceObserverEntryList.getEntries')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<PerformanceEntry> getEntries() native;
 
-  @DomName('PerformanceObserverEntryList.getEntriesByName')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<PerformanceEntry> getEntriesByName(String name, String entryType) native;
 
-  @DomName('PerformanceObserverEntryList.getEntriesByType')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<PerformanceEntry> getEntriesByType(String entryType) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PerformancePaintTiming')
-@Experimental() // untriaged
 @Native("PerformancePaintTiming")
 class PerformancePaintTiming extends PerformanceEntry {
   // To suppress missing implicit constructor warnings.
@@ -32245,10 +23972,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.
 
-@DocsEditable()
-@DomName('PerformanceResourceTiming')
-// http://www.w3c-test.org/webperf/specs/ResourceTiming/#performanceresourcetiming
-@Experimental()
 @Native("PerformanceResourceTiming")
 class PerformanceResourceTiming extends PerformanceEntry {
   // To suppress missing implicit constructor warnings.
@@ -32256,94 +23979,46 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PerformanceResourceTiming.connectEnd')
-  @DocsEditable()
   final num connectEnd;
 
-  @DomName('PerformanceResourceTiming.connectStart')
-  @DocsEditable()
   final num connectStart;
 
-  @DomName('PerformanceResourceTiming.decodedBodySize')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int decodedBodySize;
 
-  @DomName('PerformanceResourceTiming.domainLookupEnd')
-  @DocsEditable()
   final num domainLookupEnd;
 
-  @DomName('PerformanceResourceTiming.domainLookupStart')
-  @DocsEditable()
   final num domainLookupStart;
 
-  @DomName('PerformanceResourceTiming.encodedBodySize')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int encodedBodySize;
 
-  @DomName('PerformanceResourceTiming.fetchStart')
-  @DocsEditable()
   final num fetchStart;
 
-  @DomName('PerformanceResourceTiming.initiatorType')
-  @DocsEditable()
   final String initiatorType;
 
-  @DomName('PerformanceResourceTiming.nextHopProtocol')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String nextHopProtocol;
 
-  @DomName('PerformanceResourceTiming.redirectEnd')
-  @DocsEditable()
   final num redirectEnd;
 
-  @DomName('PerformanceResourceTiming.redirectStart')
-  @DocsEditable()
   final num redirectStart;
 
-  @DomName('PerformanceResourceTiming.requestStart')
-  @DocsEditable()
-  @Experimental() // nonstandard
   final num requestStart;
 
-  @DomName('PerformanceResourceTiming.responseEnd')
-  @DocsEditable()
-  @Experimental() // nonstandard
   final num responseEnd;
 
-  @DomName('PerformanceResourceTiming.responseStart')
-  @DocsEditable()
-  @Experimental() // nonstandard
   final num responseStart;
 
-  @DomName('PerformanceResourceTiming.secureConnectionStart')
-  @DocsEditable()
   final num secureConnectionStart;
 
-  @DomName('PerformanceResourceTiming.serverTiming')
-  @DocsEditable()
-  @Experimental() // untriaged
   final List<PerformanceServerTiming> serverTiming;
 
-  @DomName('PerformanceResourceTiming.transferSize')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int transferSize;
 
-  @DomName('PerformanceResourceTiming.workerStart')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num workerStart;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PerformanceServerTiming')
-@Experimental() // untriaged
 @Native("PerformanceServerTiming")
 class PerformanceServerTiming extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -32351,27 +24026,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PerformanceServerTiming.description')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String description;
 
-  @DomName('PerformanceServerTiming.duration')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num duration;
 
-  @DomName('PerformanceServerTiming.name')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String name;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PerformanceTiming')
 @Unstable()
 @Native("PerformanceTiming")
 class PerformanceTiming extends Interceptor {
@@ -32380,97 +24044,52 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PerformanceTiming.connectEnd')
-  @DocsEditable()
   final int connectEnd;
 
-  @DomName('PerformanceTiming.connectStart')
-  @DocsEditable()
   final int connectStart;
 
-  @DomName('PerformanceTiming.domComplete')
-  @DocsEditable()
   final int domComplete;
 
-  @DomName('PerformanceTiming.domContentLoadedEventEnd')
-  @DocsEditable()
   final int domContentLoadedEventEnd;
 
-  @DomName('PerformanceTiming.domContentLoadedEventStart')
-  @DocsEditable()
   final int domContentLoadedEventStart;
 
-  @DomName('PerformanceTiming.domInteractive')
-  @DocsEditable()
   final int domInteractive;
 
-  @DomName('PerformanceTiming.domLoading')
-  @DocsEditable()
   final int domLoading;
 
-  @DomName('PerformanceTiming.domainLookupEnd')
-  @DocsEditable()
   final int domainLookupEnd;
 
-  @DomName('PerformanceTiming.domainLookupStart')
-  @DocsEditable()
   final int domainLookupStart;
 
-  @DomName('PerformanceTiming.fetchStart')
-  @DocsEditable()
   final int fetchStart;
 
-  @DomName('PerformanceTiming.loadEventEnd')
-  @DocsEditable()
   final int loadEventEnd;
 
-  @DomName('PerformanceTiming.loadEventStart')
-  @DocsEditable()
   final int loadEventStart;
 
-  @DomName('PerformanceTiming.navigationStart')
-  @DocsEditable()
   final int navigationStart;
 
-  @DomName('PerformanceTiming.redirectEnd')
-  @DocsEditable()
   final int redirectEnd;
 
-  @DomName('PerformanceTiming.redirectStart')
-  @DocsEditable()
   final int redirectStart;
 
-  @DomName('PerformanceTiming.requestStart')
-  @DocsEditable()
   final int requestStart;
 
-  @DomName('PerformanceTiming.responseEnd')
-  @DocsEditable()
   final int responseEnd;
 
-  @DomName('PerformanceTiming.responseStart')
-  @DocsEditable()
   final int responseStart;
 
-  @DomName('PerformanceTiming.secureConnectionStart')
-  @DocsEditable()
   final int secureConnectionStart;
 
-  @DomName('PerformanceTiming.unloadEventEnd')
-  @DocsEditable()
   final int unloadEventEnd;
 
-  @DomName('PerformanceTiming.unloadEventStart')
-  @DocsEditable()
   final int unloadEventStart;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PermissionStatus')
-@Experimental() // untriaged
 @Native("PermissionStatus")
 class PermissionStatus extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -32478,29 +24097,17 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PermissionStatus.changeEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> changeEvent =
       const EventStreamProvider<Event>('change');
 
-  @DomName('PermissionStatus.state')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String state;
 
-  @DomName('PermissionStatus.onchange')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onChange => changeEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('Permissions')
-@Experimental() // untriaged
 @Native("Permissions")
 class Permissions extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -32508,62 +24115,38 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Permissions.query')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future query(Map permission) {
     var permission_1 = convertDartToNative_Dictionary(permission);
     return _query_1(permission_1);
   }
 
   @JSName('query')
-  @DomName('Permissions.query')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _query_1(permission) native;
 
-  @DomName('Permissions.request')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future request(Map permissions) {
     var permissions_1 = convertDartToNative_Dictionary(permissions);
     return _request_1(permissions_1);
   }
 
   @JSName('request')
-  @DomName('Permissions.request')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _request_1(permissions) native;
 
-  @DomName('Permissions.requestAll')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<PermissionStatus> requestAll(List<Map> permissions) =>
       promiseToFuture<PermissionStatus>(
           JS("", "#.requestAll(#)", this, permissions));
 
-  @DomName('Permissions.revoke')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future revoke(Map permission) {
     var permission_1 = convertDartToNative_Dictionary(permission);
     return _revoke_1(permission_1);
   }
 
   @JSName('revoke')
-  @DomName('Permissions.revoke')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _revoke_1(permission) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PhotoCapabilities')
-@Experimental() // untriaged
 @Native("PhotoCapabilities")
 class PhotoCapabilities extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -32571,33 +24154,18 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PhotoCapabilities.fillLightMode')
-  @DocsEditable()
-  @Experimental() // untriaged
   final List fillLightMode;
 
-  @DomName('PhotoCapabilities.imageHeight')
-  @DocsEditable()
-  @Experimental() // untriaged
   final MediaSettingsRange imageHeight;
 
-  @DomName('PhotoCapabilities.imageWidth')
-  @DocsEditable()
-  @Experimental() // untriaged
   final MediaSettingsRange imageWidth;
 
-  @DomName('PhotoCapabilities.redEyeReduction')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String redEyeReduction;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLPictureElement')
-@Experimental() // untriaged
 @Native("HTMLPictureElement")
 class PictureElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -32615,9 +24183,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.
 
-@DocsEditable()
-@DomName('Plugin')
-@Experimental() // non-standard
 @Native("Plugin")
 class Plugin extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -32625,37 +24190,22 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Plugin.description')
-  @DocsEditable()
   final String description;
 
-  @DomName('Plugin.filename')
-  @DocsEditable()
   final String filename;
 
-  @DomName('Plugin.length')
-  @DocsEditable()
   final int length;
 
-  @DomName('Plugin.name')
-  @DocsEditable()
   final String name;
 
-  @DomName('Plugin.item')
-  @DocsEditable()
   MimeType item(int index) native;
 
-  @DomName('Plugin.namedItem')
-  @DocsEditable()
   MimeType namedItem(String name) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PluginArray')
-@Experimental() // non-standard
 @Native("PluginArray")
 class PluginArray extends Interceptor
     with ListMixin<Plugin>, ImmutableListMixin<Plugin>
@@ -32665,8 +24215,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PluginArray.length')
-  @DocsEditable()
   int get length => JS("int", "#.length", this);
 
   Plugin operator [](int index) {
@@ -32712,25 +24260,16 @@
   Plugin elementAt(int index) => this[index];
   // -- end List<Plugin> mixins.
 
-  @DomName('PluginArray.item')
-  @DocsEditable()
   Plugin item(int index) native;
 
-  @DomName('PluginArray.namedItem')
-  @DocsEditable()
   Plugin namedItem(String name) native;
 
-  @DomName('PluginArray.refresh')
-  @DocsEditable()
   void refresh(bool reload) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PointerEvent')
-@Experimental() // untriaged
 @Native("PointerEvent")
 class PointerEvent extends MouseEvent {
   // To suppress missing implicit constructor warnings.
@@ -32738,8 +24277,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PointerEvent.PointerEvent')
-  @DocsEditable()
   factory PointerEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -32752,67 +24289,32 @@
   static PointerEvent _create_2(type) =>
       JS('PointerEvent', 'new PointerEvent(#)', type);
 
-  @DomName('PointerEvent.height')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num height;
 
-  @DomName('PointerEvent.isPrimary')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool isPrimary;
 
-  @DomName('PointerEvent.pointerId')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int pointerId;
 
-  @DomName('PointerEvent.pointerType')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String pointerType;
 
-  @DomName('PointerEvent.pressure')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num pressure;
 
-  @DomName('PointerEvent.tangentialPressure')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num tangentialPressure;
 
-  @DomName('PointerEvent.tiltX')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int tiltX;
 
-  @DomName('PointerEvent.tiltY')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int tiltY;
 
-  @DomName('PointerEvent.twist')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int twist;
 
-  @DomName('PointerEvent.width')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num width;
 
-  @DomName('PointerEvent.getCoalescedEvents')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<PointerEvent> getCoalescedEvents() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PopStateEvent')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -32824,8 +24326,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PopStateEvent.PopStateEvent')
-  @DocsEditable()
   factory PopStateEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -32838,13 +24338,9 @@
   static PopStateEvent _create_2(type) =>
       JS('PopStateEvent', 'new PopStateEvent(#)', type);
 
-  @DomName('PopStateEvent.state')
-  @DocsEditable()
   dynamic get state =>
       convertNativeToDart_SerializedScriptValue(this._get_state);
   @JSName('state')
-  @DomName('PopStateEvent.state')
-  @DocsEditable()
   @annotation_Creates_SerializedScriptValue
   @annotation_Returns_SerializedScriptValue
   final dynamic _get_state;
@@ -32855,15 +24351,12 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('PositionCallback')
 @Unstable()
 typedef void _PositionCallback(Geoposition position);
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PositionError')
 @Unstable()
 @Native("PositionError")
 class PositionError extends Interceptor {
@@ -32872,24 +24365,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PositionError.PERMISSION_DENIED')
-  @DocsEditable()
   static const int PERMISSION_DENIED = 1;
 
-  @DomName('PositionError.POSITION_UNAVAILABLE')
-  @DocsEditable()
   static const int POSITION_UNAVAILABLE = 2;
 
-  @DomName('PositionError.TIMEOUT')
-  @DocsEditable()
   static const int TIMEOUT = 3;
 
-  @DomName('PositionError.code')
-  @DocsEditable()
   final int code;
 
-  @DomName('PositionError.message')
-  @DocsEditable()
   final String message;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -32898,15 +24381,12 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('PositionErrorCallback')
 @Unstable()
 typedef void _PositionErrorCallback(PositionError error);
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLPreElement')
 @Native("HTMLPreElement")
 class PreElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -32914,8 +24394,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLPreElement.HTMLPreElement')
-  @DocsEditable()
   factory PreElement() => JS('returns:PreElement;creates:PreElement;new:true',
       '#.createElement(#)', document, "pre");
   /**
@@ -32929,9 +24407,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.
 
-@DocsEditable()
-@DomName('Presentation')
-@Experimental() // untriaged
 @Native("Presentation")
 class Presentation extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -32939,23 +24414,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Presentation.defaultRequest')
-  @DocsEditable()
-  @Experimental() // untriaged
   PresentationRequest defaultRequest;
 
-  @DomName('Presentation.receiver')
-  @DocsEditable()
-  @Experimental() // untriaged
   final PresentationReceiver receiver;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PresentationAvailability')
-@Experimental() // untriaged
 @Native("PresentationAvailability")
 class PresentationAvailability extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -32963,29 +24429,17 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PresentationAvailability.changeEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> changeEvent =
       const EventStreamProvider<Event>('change');
 
-  @DomName('PresentationAvailability.value')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool value;
 
-  @DomName('PresentationAvailability.onchange')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onChange => changeEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PresentationConnection')
-@Experimental() // untriaged
 @Native("PresentationConnection")
 class PresentationConnection extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -32993,59 +24447,29 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PresentationConnection.messageEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MessageEvent> messageEvent =
       const EventStreamProvider<MessageEvent>('message');
 
-  @DomName('PresentationConnection.binaryType')
-  @DocsEditable()
-  @Experimental() // untriaged
   String binaryType;
 
-  @DomName('PresentationConnection.id')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String id;
 
-  @DomName('PresentationConnection.state')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String state;
 
-  @DomName('PresentationConnection.url')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String url;
 
-  @DomName('PresentationConnection.close')
-  @DocsEditable()
-  @Experimental() // untriaged
   void close() native;
 
-  @DomName('PresentationConnection.send')
-  @DocsEditable()
-  @Experimental() // untriaged
   void send(data_OR_message) native;
 
-  @DomName('PresentationConnection.terminate')
-  @DocsEditable()
-  @Experimental() // untriaged
   void terminate() native;
 
-  @DomName('PresentationConnection.onmessage')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PresentationConnectionAvailableEvent')
-@Experimental() // untriaged
 @Native("PresentationConnectionAvailableEvent")
 class PresentationConnectionAvailableEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -33053,9 +24477,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName(
-      'PresentationConnectionAvailableEvent.PresentationConnectionAvailableEvent')
-  @DocsEditable()
   factory PresentationConnectionAvailableEvent(String type, Map eventInitDict) {
     var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
     return PresentationConnectionAvailableEvent._create_1(
@@ -33065,18 +24486,12 @@
       JS('PresentationConnectionAvailableEvent',
           'new PresentationConnectionAvailableEvent(#,#)', type, eventInitDict);
 
-  @DomName('PresentationConnectionAvailableEvent.connection')
-  @DocsEditable()
-  @Experimental() // untriaged
   final PresentationConnection connection;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PresentationConnectionCloseEvent')
-@Experimental() // untriaged
 @Native("PresentationConnectionCloseEvent")
 class PresentationConnectionCloseEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -33084,8 +24499,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PresentationConnectionCloseEvent.PresentationConnectionCloseEvent')
-  @DocsEditable()
   factory PresentationConnectionCloseEvent(String type, Map eventInitDict) {
     var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
     return PresentationConnectionCloseEvent._create_1(type, eventInitDict_1);
@@ -33096,23 +24509,14 @@
       type,
       eventInitDict);
 
-  @DomName('PresentationConnectionCloseEvent.message')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String message;
 
-  @DomName('PresentationConnectionCloseEvent.reason')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String reason;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PresentationConnectionList')
-@Experimental() // untriaged
 @Native("PresentationConnectionList")
 class PresentationConnectionList extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -33120,18 +24524,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PresentationConnectionList.connections')
-  @DocsEditable()
-  @Experimental() // untriaged
   final List<PresentationConnection> connections;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PresentationReceiver')
-@Experimental() // untriaged
 @Native("PresentationReceiver")
 class PresentationReceiver extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -33139,9 +24537,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PresentationReceiver.connectionList')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<PresentationConnectionList> get connectionList =>
       promiseToFuture<PresentationConnectionList>(
           JS("", "#.connectionList", this));
@@ -33150,9 +24545,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.
 
-@DocsEditable()
-@DomName('PresentationRequest')
-@Experimental() // untriaged
 @Native("PresentationRequest")
 class PresentationRequest extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -33160,8 +24552,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PresentationRequest.PresentationRequest')
-  @DocsEditable()
   factory PresentationRequest(url_OR_urls) {
     if ((url_OR_urls is String)) {
       return PresentationRequest._create_1(url_OR_urls);
@@ -33177,23 +24567,14 @@
   static PresentationRequest _create_2(url_OR_urls) =>
       JS('PresentationRequest', 'new PresentationRequest(#)', url_OR_urls);
 
-  @DomName('PresentationRequest.getAvailability')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<PresentationAvailability> getAvailability() =>
       promiseToFuture<PresentationAvailability>(
           JS("", "#.getAvailability()", this));
 
-  @DomName('PresentationRequest.reconnect')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<PresentationConnection> reconnect(String id) =>
       promiseToFuture<PresentationConnection>(
           JS("", "#.reconnect(#)", this, id));
 
-  @DomName('PresentationRequest.start')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<PresentationConnection> start() =>
       promiseToFuture<PresentationConnection>(JS("", "#.start()", this));
 }
@@ -33201,8 +24582,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.
 
-@DocsEditable()
-@DomName('ProcessingInstruction')
 @Unstable()
 @Native("ProcessingInstruction")
 class ProcessingInstruction extends CharacterData {
@@ -33211,21 +24590,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ProcessingInstruction.sheet')
-  @DocsEditable()
-  @Experimental() // non-standard
   final StyleSheet sheet;
 
-  @DomName('ProcessingInstruction.target')
-  @DocsEditable()
   final String target;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLProgressElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -33237,8 +24609,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLProgressElement.HTMLProgressElement')
-  @DocsEditable()
   factory ProgressElement() => document.createElement("progress");
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
@@ -33250,31 +24620,21 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('progress');
 
-  @DomName('HTMLProgressElement.labels')
-  @DocsEditable()
   @Unstable()
   @Returns('NodeList|Null')
   @Creates('NodeList')
   final List<Node> labels;
 
-  @DomName('HTMLProgressElement.max')
-  @DocsEditable()
   num max;
 
-  @DomName('HTMLProgressElement.position')
-  @DocsEditable()
   final num position;
 
-  @DomName('HTMLProgressElement.value')
-  @DocsEditable()
   num value;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('ProgressEvent')
 @Native("ProgressEvent")
 class ProgressEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -33282,8 +24642,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ProgressEvent.ProgressEvent')
-  @DocsEditable()
   factory ProgressEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -33296,25 +24654,16 @@
   static ProgressEvent _create_2(type) =>
       JS('ProgressEvent', 'new ProgressEvent(#)', type);
 
-  @DomName('ProgressEvent.lengthComputable')
-  @DocsEditable()
   final bool lengthComputable;
 
-  @DomName('ProgressEvent.loaded')
-  @DocsEditable()
   final int loaded;
 
-  @DomName('ProgressEvent.total')
-  @DocsEditable()
   final int total;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PromiseRejectionEvent')
-@Experimental() // untriaged
 @Native("PromiseRejectionEvent")
 class PromiseRejectionEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -33322,8 +24671,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PromiseRejectionEvent.PromiseRejectionEvent')
-  @DocsEditable()
   factory PromiseRejectionEvent(String type, Map eventInitDict) {
     var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
     return PromiseRejectionEvent._create_1(type, eventInitDict_1);
@@ -33334,23 +24681,14 @@
       type,
       eventInitDict);
 
-  @DomName('PromiseRejectionEvent.promise')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future get promise => promiseToFuture(JS("", "#.promise", this));
 
-  @DomName('PromiseRejectionEvent.reason')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Object reason;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PublicKeyCredential')
-@Experimental() // untriaged
 @Native("PublicKeyCredential")
 class PublicKeyCredential extends Credential {
   // To suppress missing implicit constructor warnings.
@@ -33358,23 +24696,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PublicKeyCredential.rawId')
-  @DocsEditable()
-  @Experimental() // untriaged
   final ByteBuffer rawId;
 
-  @DomName('PublicKeyCredential.response')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AuthenticatorResponse response;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PushEvent')
-@Experimental() // untriaged
 @Native("PushEvent")
 class PushEvent extends ExtendableEvent {
   // To suppress missing implicit constructor warnings.
@@ -33382,8 +24711,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PushEvent.PushEvent')
-  @DocsEditable()
   factory PushEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -33395,18 +24722,12 @@
       JS('PushEvent', 'new PushEvent(#,#)', type, eventInitDict);
   static PushEvent _create_2(type) => JS('PushEvent', 'new PushEvent(#)', type);
 
-  @DomName('PushEvent.data')
-  @DocsEditable()
-  @Experimental() // untriaged
   final PushMessageData data;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PushManager')
-@Experimental() // untriaged
 @Native("PushManager")
 class PushManager extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -33414,20 +24735,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PushManager.supportedContentEncodings')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final List<String> supportedContentEncodings;
+  static final List<String> supportedContentEncodings;
 
-  @DomName('PushManager.getSubscription')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<PushSubscription> getSubscription() =>
       promiseToFuture<PushSubscription>(JS("", "#.getSubscription()", this));
 
-  @DomName('PushManager.permissionState')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future permissionState([Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -33437,19 +24749,10 @@
   }
 
   @JSName('permissionState')
-  @DomName('PushManager.permissionState')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _permissionState_1(options) native;
   @JSName('permissionState')
-  @DomName('PushManager.permissionState')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _permissionState_2() native;
 
-  @DomName('PushManager.subscribe')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future subscribe([Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -33459,23 +24762,14 @@
   }
 
   @JSName('subscribe')
-  @DomName('PushManager.subscribe')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _subscribe_1(options) native;
   @JSName('subscribe')
-  @DomName('PushManager.subscribe')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _subscribe_2() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PushMessageData')
-@Experimental() // untriaged
 @Native("PushMessageData")
 class PushMessageData extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -33483,33 +24777,18 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PushMessageData.arrayBuffer')
-  @DocsEditable()
-  @Experimental() // untriaged
   ByteBuffer arrayBuffer() native;
 
-  @DomName('PushMessageData.blob')
-  @DocsEditable()
-  @Experimental() // untriaged
   Blob blob() native;
 
-  @DomName('PushMessageData.json')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object json() native;
 
-  @DomName('PushMessageData.text')
-  @DocsEditable()
-  @Experimental() // untriaged
   String text() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PushSubscription')
-@Experimental() // untriaged
 @Native("PushSubscription")
 class PushSubscription extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -33517,29 +24796,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PushSubscription.endpoint')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String endpoint;
 
-  @DomName('PushSubscription.expirationTime')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int expirationTime;
 
-  @DomName('PushSubscription.options')
-  @DocsEditable()
-  @Experimental() // untriaged
   final PushSubscriptionOptions options;
 
-  @DomName('PushSubscription.getKey')
-  @DocsEditable()
-  @Experimental() // untriaged
   ByteBuffer getKey(String name) native;
 
-  @DomName('PushSubscription.unsubscribe')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<bool> unsubscribe() =>
       promiseToFuture<bool>(JS("", "#.unsubscribe()", this));
 }
@@ -33547,9 +24811,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.
 
-@DocsEditable()
-@DomName('PushSubscriptionOptions')
-@Experimental() // untriaged
 @Native("PushSubscriptionOptions")
 class PushSubscriptionOptions extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -33557,22 +24818,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PushSubscriptionOptions.applicationServerKey')
-  @DocsEditable()
-  @Experimental() // untriaged
   final ByteBuffer applicationServerKey;
 
-  @DomName('PushSubscriptionOptions.userVisibleOnly')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool userVisibleOnly;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLQuoteElement')
 @Native("HTMLQuoteElement")
 class QuoteElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -33580,8 +24833,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLQuoteElement.HTMLQuoteElement')
-  @DocsEditable()
   factory QuoteElement() => JS(
       'returns:QuoteElement;creates:QuoteElement;new:true',
       '#.createElement(#)',
@@ -33594,8 +24845,6 @@
    */
   QuoteElement.created() : super.created();
 
-  @DomName('HTMLQuoteElement.cite')
-  @DocsEditable()
   String cite;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -33604,8 +24853,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('RTCPeerConnectionErrorCallback')
-@Experimental() // untriaged
 typedef void RtcPeerConnectionErrorCallback(DomException exception);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -33613,9 +24860,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('RTCSessionDescriptionCallback')
-// http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCSessionDescription
-@Experimental()
 typedef void _RtcSessionDescriptionCallback(RtcSessionDescription sdp);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -33623,9 +24867,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('RTCStatsCallback')
-// http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCStatsCallback
-@Experimental()
 typedef void RtcStatsCallback(RtcStatsResponse response);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -33633,7 +24874,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('Range')
 @Unstable()
 @Native("Range")
 class Range extends Interceptor {
@@ -33646,145 +24886,75 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Range.END_TO_END')
-  @DocsEditable()
   static const int END_TO_END = 2;
 
-  @DomName('Range.END_TO_START')
-  @DocsEditable()
   static const int END_TO_START = 3;
 
-  @DomName('Range.START_TO_END')
-  @DocsEditable()
   static const int START_TO_END = 1;
 
-  @DomName('Range.START_TO_START')
-  @DocsEditable()
   static const int START_TO_START = 0;
 
-  @DomName('Range.collapsed')
-  @DocsEditable()
   final bool collapsed;
 
-  @DomName('Range.commonAncestorContainer')
-  @DocsEditable()
   final Node commonAncestorContainer;
 
-  @DomName('Range.endContainer')
-  @DocsEditable()
   final Node endContainer;
 
-  @DomName('Range.endOffset')
-  @DocsEditable()
   final int endOffset;
 
-  @DomName('Range.startContainer')
-  @DocsEditable()
   final Node startContainer;
 
-  @DomName('Range.startOffset')
-  @DocsEditable()
   final int startOffset;
 
-  @DomName('Range.cloneContents')
-  @DocsEditable()
   DocumentFragment cloneContents() native;
 
-  @DomName('Range.cloneRange')
-  @DocsEditable()
   Range cloneRange() native;
 
-  @DomName('Range.collapse')
-  @DocsEditable()
   void collapse([bool toStart]) native;
 
-  @DomName('Range.compareBoundaryPoints')
-  @DocsEditable()
-  @Experimental() // untriaged
   int compareBoundaryPoints(int how, Range sourceRange) native;
 
-  @DomName('Range.comparePoint')
-  @DocsEditable()
   int comparePoint(Node node, int offset) native;
 
-  @DomName('Range.createContextualFragment')
-  @DocsEditable()
   DocumentFragment createContextualFragment(String fragment) native;
 
-  @DomName('Range.deleteContents')
-  @DocsEditable()
   void deleteContents() native;
 
-  @DomName('Range.detach')
-  @DocsEditable()
   void detach() native;
 
-  @DomName('Range.expand')
-  @DocsEditable()
-  @Experimental() // non-standard
   void expand(String unit) native;
 
-  @DomName('Range.extractContents')
-  @DocsEditable()
   DocumentFragment extractContents() native;
 
-  @DomName('Range.getBoundingClientRect')
-  @DocsEditable()
   Rectangle getBoundingClientRect() native;
 
   @JSName('getClientRects')
-  @DomName('Range.getClientRects')
-  @DocsEditable()
   @Returns('DomRectList|Null')
   @Creates('DomRectList')
   List<Rectangle> _getClientRects() native;
 
-  @DomName('Range.insertNode')
-  @DocsEditable()
   void insertNode(Node node) native;
 
-  @DomName('Range.isPointInRange')
-  @DocsEditable()
   bool isPointInRange(Node node, int offset) native;
 
-  @DomName('Range.selectNode')
-  @DocsEditable()
   void selectNode(Node node) native;
 
-  @DomName('Range.selectNodeContents')
-  @DocsEditable()
   void selectNodeContents(Node node) native;
 
-  @DomName('Range.setEnd')
-  @DocsEditable()
   void setEnd(Node node, int offset) native;
 
-  @DomName('Range.setEndAfter')
-  @DocsEditable()
   void setEndAfter(Node node) native;
 
-  @DomName('Range.setEndBefore')
-  @DocsEditable()
   void setEndBefore(Node node) native;
 
-  @DomName('Range.setStart')
-  @DocsEditable()
   void setStart(Node node, int offset) native;
 
-  @DomName('Range.setStartAfter')
-  @DocsEditable()
   void setStartAfter(Node node) native;
 
-  @DomName('Range.setStartBefore')
-  @DocsEditable()
   void setStartBefore(Node node) native;
 
-  @DomName('Range.surroundContents')
-  @DocsEditable()
   void surroundContents(Node newParent) native;
 
-  @DomName('Range.getClientRects')
-  @DocsEditable()
   List<Rectangle> getClientRects() {
     var value = _getClientRects();
 
@@ -33813,9 +24983,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.
 
-@DocsEditable()
-@DomName('RelatedApplication')
-@Experimental() // untriaged
 @Native("RelatedApplication")
 class RelatedApplication extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -33823,28 +24990,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('RelatedApplication.id')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String id;
 
-  @DomName('RelatedApplication.platform')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String platform;
 
-  @DomName('RelatedApplication.url')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String url;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('RelativeOrientationSensor')
-@Experimental() // untriaged
 @Native("RelativeOrientationSensor")
 class RelativeOrientationSensor extends OrientationSensor {
   // To suppress missing implicit constructor warnings.
@@ -33852,8 +25007,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('RelativeOrientationSensor.RelativeOrientationSensor')
-  @DocsEditable()
   factory RelativeOrientationSensor([Map sensorOptions]) {
     if (sensorOptions != null) {
       var sensorOptions_1 = convertDartToNative_Dictionary(sensorOptions);
@@ -33872,9 +25025,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.
 
-@DocsEditable()
-@DomName('RemotePlayback')
-@Experimental() // untriaged
 @Native("RemotePlayback")
 class RemotePlayback extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -33882,25 +25032,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('RemotePlayback.state')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String state;
 
-  @DomName('RemotePlayback.cancelWatchAvailability')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future cancelWatchAvailability([int id]) =>
       promiseToFuture(JS("", "#.cancelWatchAvailability(#)", this, id));
 
-  @DomName('RemotePlayback.prompt')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future prompt() => promiseToFuture(JS("", "#.prompt()", this));
 
-  @DomName('RemotePlayback.watchAvailability')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<int> watchAvailability(RemotePlaybackAvailabilityCallback callback) =>
       promiseToFuture<int>(JS("", "#.watchAvailability(#)", this, callback));
 }
@@ -33910,16 +25048,11 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('RemotePlaybackAvailabilityCallback')
-@Experimental() // untriaged
 typedef void RemotePlaybackAvailabilityCallback(bool available);
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('ReportBody')
-@Experimental() // untriaged
 @Native("ReportBody")
 class ReportBody extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -33931,9 +25064,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.
 
-@DocsEditable()
-@DomName('ReportingObserver')
-@Experimental() // untriaged
 @Native("ReportingObserver")
 class ReportingObserver extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -33941,22 +25071,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ReportingObserver.ReportingObserver')
-  @DocsEditable()
   factory ReportingObserver(ReportingObserverCallback callback) {
     return ReportingObserver._create_1(callback);
   }
   static ReportingObserver _create_1(callback) =>
       JS('ReportingObserver', 'new ReportingObserver(#)', callback);
 
-  @DomName('ReportingObserver.disconnect')
-  @DocsEditable()
-  @Experimental() // untriaged
   void disconnect() native;
 
-  @DomName('ReportingObserver.observe')
-  @DocsEditable()
-  @Experimental() // untriaged
   void observe() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -33965,8 +25087,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('ReportingObserverCallback')
-@Experimental() // untriaged
 typedef void ReportingObserverCallback(
     List<_Report> reports, ReportingObserver observer);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -33975,15 +25095,11 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('RequestAnimationFrameCallback')
 typedef void RequestAnimationFrameCallback(num highResTime);
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('ResizeObserver')
-@Experimental() // untriaged
 @Native("ResizeObserver")
 class ResizeObserver extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -33991,27 +25107,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ResizeObserver.ResizeObserver')
-  @DocsEditable()
   factory ResizeObserver(ResizeObserverCallback callback) {
     return ResizeObserver._create_1(callback);
   }
   static ResizeObserver _create_1(callback) =>
       JS('ResizeObserver', 'new ResizeObserver(#)', callback);
 
-  @DomName('ResizeObserver.disconnect')
-  @DocsEditable()
-  @Experimental() // untriaged
   void disconnect() native;
 
-  @DomName('ResizeObserver.observe')
-  @DocsEditable()
-  @Experimental() // untriaged
   void observe(Element target) native;
 
-  @DomName('ResizeObserver.unobserve')
-  @DocsEditable()
-  @Experimental() // untriaged
   void unobserve(Element target) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -34020,17 +25125,12 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('ResizeObserverCallback')
-@Experimental() // untriaged
 typedef void ResizeObserverCallback(
     List<ResizeObserverEntry> entries, ResizeObserver observer);
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('ResizeObserverEntry')
-@Experimental() // untriaged
 @Native("ResizeObserverEntry")
 class ResizeObserverEntry extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -34038,23 +25138,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ResizeObserverEntry.contentRect')
-  @DocsEditable()
-  @Experimental() // untriaged
   final DomRectReadOnly contentRect;
 
-  @DomName('ResizeObserverEntry.target')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Element target;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('RTCCertificate')
-@Experimental() // untriaged
 @Native("RTCCertificate")
 class RtcCertificate extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -34062,24 +25153,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('RTCCertificate.expires')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int expires;
 
-  @DomName('RTCCertificate.getFingerprints')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<Map> getFingerprints() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('RTCDataChannel')
-// http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCDataChannel
-@Experimental()
 @Native("RTCDataChannel,DataChannel")
 class RtcDataChannel extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -34093,8 +25174,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('RTCDataChannel.closeEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> closeEvent =
       const EventStreamProvider<Event>('close');
 
@@ -34104,8 +25183,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('RTCDataChannel.errorEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
@@ -34115,8 +25192,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('RTCDataChannel.messageEvent')
-  @DocsEditable()
   static const EventStreamProvider<MessageEvent> messageEvent =
       const EventStreamProvider<MessageEvent>('message');
 
@@ -34126,122 +25201,65 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('RTCDataChannel.openEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> openEvent =
       const EventStreamProvider<Event>('open');
 
-  @DomName('RTCDataChannel.binaryType')
-  @DocsEditable()
   String binaryType;
 
-  @DomName('RTCDataChannel.bufferedAmount')
-  @DocsEditable()
   final int bufferedAmount;
 
-  @DomName('RTCDataChannel.bufferedAmountLowThreshold')
-  @DocsEditable()
-  @Experimental() // untriaged
   int bufferedAmountLowThreshold;
 
-  @DomName('RTCDataChannel.id')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int id;
 
-  @DomName('RTCDataChannel.label')
-  @DocsEditable()
   final String label;
 
-  @DomName('RTCDataChannel.maxRetransmitTime')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int maxRetransmitTime;
 
-  @DomName('RTCDataChannel.maxRetransmits')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int maxRetransmits;
 
-  @DomName('RTCDataChannel.negotiated')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool negotiated;
 
-  @DomName('RTCDataChannel.ordered')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool ordered;
 
-  @DomName('RTCDataChannel.protocol')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String protocol;
 
-  @DomName('RTCDataChannel.readyState')
-  @DocsEditable()
   final String readyState;
 
-  @DomName('RTCDataChannel.reliable')
-  @DocsEditable()
   final bool reliable;
 
-  @DomName('RTCDataChannel.close')
-  @DocsEditable()
   void close() native;
 
-  @DomName('RTCDataChannel.send')
-  @DocsEditable()
   void send(data) native;
 
   @JSName('send')
-  @DomName('RTCDataChannel.send')
-  @DocsEditable()
   void sendBlob(Blob data) native;
 
   @JSName('send')
-  @DomName('RTCDataChannel.send')
-  @DocsEditable()
   void sendByteBuffer(ByteBuffer data) native;
 
   @JSName('send')
-  @DomName('RTCDataChannel.send')
-  @DocsEditable()
   void sendString(String data) native;
 
   @JSName('send')
-  @DomName('RTCDataChannel.send')
-  @DocsEditable()
   void sendTypedData(TypedData data) native;
 
   /// Stream of `close` events handled by this [RtcDataChannel].
-  @DomName('RTCDataChannel.onclose')
-  @DocsEditable()
   Stream<Event> get onClose => closeEvent.forTarget(this);
 
   /// Stream of `error` events handled by this [RtcDataChannel].
-  @DomName('RTCDataChannel.onerror')
-  @DocsEditable()
   Stream<Event> get onError => errorEvent.forTarget(this);
 
   /// Stream of `message` events handled by this [RtcDataChannel].
-  @DomName('RTCDataChannel.onmessage')
-  @DocsEditable()
   Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
 
   /// Stream of `open` events handled by this [RtcDataChannel].
-  @DomName('RTCDataChannel.onopen')
-  @DocsEditable()
   Stream<Event> get onOpen => openEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('RTCDataChannelEvent')
-// http://dev.w3.org/2011/webrtc/editor/webrtc.html#rtcdatachannelevent
-@Experimental()
 @Native("RTCDataChannelEvent")
 class RtcDataChannelEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -34249,8 +25267,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('RTCDataChannelEvent.RTCDataChannelEvent')
-  @DocsEditable()
   factory RtcDataChannelEvent(String type, Map eventInitDict) {
     var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
     return RtcDataChannelEvent._create_1(type, eventInitDict_1);
@@ -34261,18 +25277,12 @@
       type,
       eventInitDict);
 
-  @DomName('RTCDataChannelEvent.channel')
-  @DocsEditable()
   final RtcDataChannel channel;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('RTCDTMFSender')
-// http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCDTMFSender
-@Experimental()
 @Native("RTCDTMFSender")
 class RtcDtmfSender extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -34286,40 +25296,24 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('RTCDTMFSender.tonechangeEvent')
-  @DocsEditable()
   static const EventStreamProvider<RtcDtmfToneChangeEvent> toneChangeEvent =
       const EventStreamProvider<RtcDtmfToneChangeEvent>('tonechange');
 
   @JSName('canInsertDTMF')
-  @DomName('RTCDTMFSender.canInsertDTMF')
-  @DocsEditable()
   final bool canInsertDtmf;
 
-  @DomName('RTCDTMFSender.duration')
-  @DocsEditable()
   final int duration;
 
-  @DomName('RTCDTMFSender.interToneGap')
-  @DocsEditable()
   final int interToneGap;
 
-  @DomName('RTCDTMFSender.toneBuffer')
-  @DocsEditable()
   final String toneBuffer;
 
-  @DomName('RTCDTMFSender.track')
-  @DocsEditable()
   final MediaStreamTrack track;
 
   @JSName('insertDTMF')
-  @DomName('RTCDTMFSender.insertDTMF')
-  @DocsEditable()
   void insertDtmf(String tones, [int duration, int interToneGap]) native;
 
   /// Stream of `tonechange` events handled by this [RtcDtmfSender].
-  @DomName('RTCDTMFSender.ontonechange')
-  @DocsEditable()
   Stream<RtcDtmfToneChangeEvent> get onToneChange =>
       toneChangeEvent.forTarget(this);
 }
@@ -34327,10 +25321,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.
 
-@DocsEditable()
-@DomName('RTCDTMFToneChangeEvent')
-// http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCDTMFToneChangeEvent
-@Experimental()
 @Native("RTCDTMFToneChangeEvent")
 class RtcDtmfToneChangeEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -34338,8 +25328,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('RTCDTMFToneChangeEvent.RTCDTMFToneChangeEvent')
-  @DocsEditable()
   factory RtcDtmfToneChangeEvent(String type, Map eventInitDict) {
     var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
     return RtcDtmfToneChangeEvent._create_1(type, eventInitDict_1);
@@ -34350,18 +25338,13 @@
       type,
       eventInitDict);
 
-  @DomName('RTCDTMFToneChangeEvent.tone')
-  @DocsEditable()
   final String tone;
 }
 // Copyright (c) 2013, 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.
 
-@DomName('RTCIceCandidate')
 @SupportedBrowser(SupportedBrowser.CHROME)
-@Experimental()
-// http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCIceCandidate
 @Native("RTCIceCandidate,mozRTCIceCandidate")
 class RtcIceCandidate extends Interceptor {
   factory RtcIceCandidate(Map dictionary) {
@@ -34382,25 +25365,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('RTCIceCandidate.candidate')
-  @DocsEditable()
   String candidate;
 
-  @DomName('RTCIceCandidate.sdpMLineIndex')
-  @DocsEditable()
   int sdpMLineIndex;
 
-  @DomName('RTCIceCandidate.sdpMid')
-  @DocsEditable()
   String sdpMid;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('RTCLegacyStatsReport')
-@Experimental() // untriaged
 @Native("RTCLegacyStatsReport")
 class RtcLegacyStatsReport extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -34408,44 +25382,23 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('RTCLegacyStatsReport.id')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String id;
 
-  @DomName('RTCLegacyStatsReport.timestamp')
-  @DocsEditable()
-  @Experimental() // untriaged
   DateTime get timestamp => convertNativeToDart_DateTime(this._get_timestamp);
   @JSName('timestamp')
-  @DomName('RTCLegacyStatsReport.timestamp')
-  @DocsEditable()
-  @Experimental() // untriaged
   final dynamic _get_timestamp;
 
-  @DomName('RTCLegacyStatsReport.type')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String type;
 
-  @DomName('RTCLegacyStatsReport.names')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<String> names() native;
 
-  @DomName('RTCLegacyStatsReport.stat')
-  @DocsEditable()
-  @Experimental() // untriaged
   String stat(String name) native;
 }
 // Copyright (c) 2013, 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.
 
-@DomName('RTCPeerConnection')
 @SupportedBrowser(SupportedBrowser.CHROME)
-@Experimental()
-// http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCPeerConnection
 @Native("RTCPeerConnection,webkitRTCPeerConnection,mozRTCPeerConnection")
 class RtcPeerConnection extends EventTarget {
   factory RtcPeerConnection(Map rtcIceServers, [Map mediaConstraints]) {
@@ -34506,9 +25459,6 @@
     return completer.future;
   }
 
-  @DomName('RTCPeerConnection.generateCertificate')
-  @DocsEditable()
-  @Experimental() // untriaged
   static Future generateCertificate(/*AlgorithmIdentifier*/ keygenAlgorithm) =>
       JS('dynamic', 'generateCertificate(#)', keygenAlgorithm);
 
@@ -34523,8 +25473,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('RTCPeerConnection.addstreamEvent')
-  @DocsEditable()
   static const EventStreamProvider<MediaStreamEvent> addStreamEvent =
       const EventStreamProvider<MediaStreamEvent>('addstream');
 
@@ -34534,8 +25482,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('RTCPeerConnection.datachannelEvent')
-  @DocsEditable()
   static const EventStreamProvider<RtcDataChannelEvent> dataChannelEvent =
       const EventStreamProvider<RtcDataChannelEvent>('datachannel');
 
@@ -34545,8 +25491,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('RTCPeerConnection.icecandidateEvent')
-  @DocsEditable()
   static const EventStreamProvider<RtcPeerConnectionIceEvent>
       iceCandidateEvent =
       const EventStreamProvider<RtcPeerConnectionIceEvent>('icecandidate');
@@ -34557,8 +25501,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('RTCPeerConnection.iceconnectionstatechangeEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> iceConnectionStateChangeEvent =
       const EventStreamProvider<Event>('iceconnectionstatechange');
 
@@ -34568,8 +25510,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('RTCPeerConnection.negotiationneededEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> negotiationNeededEvent =
       const EventStreamProvider<Event>('negotiationneeded');
 
@@ -34579,8 +25519,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('RTCPeerConnection.removestreamEvent')
-  @DocsEditable()
   static const EventStreamProvider<MediaStreamEvent> removeStreamEvent =
       const EventStreamProvider<MediaStreamEvent>('removestream');
 
@@ -34590,41 +25528,25 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('RTCPeerConnection.signalingstatechangeEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> signalingStateChangeEvent =
       const EventStreamProvider<Event>('signalingstatechange');
 
-  @DomName('RTCPeerConnection.iceConnectionState')
-  @DocsEditable()
   final String iceConnectionState;
 
-  @DomName('RTCPeerConnection.iceGatheringState')
-  @DocsEditable()
   final String iceGatheringState;
 
-  @DomName('RTCPeerConnection.localDescription')
-  @DocsEditable()
   final RtcSessionDescription localDescription;
 
-  @DomName('RTCPeerConnection.remoteDescription')
-  @DocsEditable()
   final RtcSessionDescription remoteDescription;
 
-  @DomName('RTCPeerConnection.signalingState')
-  @DocsEditable()
   final String signalingState;
 
-  @DomName('RTCPeerConnection.addIceCandidate')
-  @DocsEditable()
   Future addIceCandidate(Object candidate,
           [VoidCallback successCallback,
           RtcPeerConnectionErrorCallback failureCallback]) =>
       promiseToFuture(JS("", "#.addIceCandidate(#, #, #)", this, candidate,
           successCallback, failureCallback));
 
-  @DomName('RTCPeerConnection.addStream')
-  @DocsEditable()
   void addStream(MediaStream stream, [Map mediaConstraints]) {
     if (mediaConstraints != null) {
       var mediaConstraints_1 = convertDartToNative_Dictionary(mediaConstraints);
@@ -34636,25 +25558,14 @@
   }
 
   @JSName('addStream')
-  @DomName('RTCPeerConnection.addStream')
-  @DocsEditable()
   void _addStream_1(MediaStream stream, mediaConstraints) native;
   @JSName('addStream')
-  @DomName('RTCPeerConnection.addStream')
-  @DocsEditable()
   void _addStream_2(MediaStream stream) native;
 
-  @DomName('RTCPeerConnection.addTrack')
-  @DocsEditable()
-  @Experimental() // untriaged
   RtcRtpSender addTrack(MediaStreamTrack track, MediaStream streams) native;
 
-  @DomName('RTCPeerConnection.close')
-  @DocsEditable()
   void close() native;
 
-  @DomName('RTCPeerConnection.createAnswer')
-  @DocsEditable()
   Future _createAnswer(
       [options_OR_successCallback,
       RtcPeerConnectionErrorCallback failureCallback,
@@ -34687,31 +25598,19 @@
   }
 
   @JSName('createAnswer')
-  @DomName('RTCPeerConnection.createAnswer')
-  @DocsEditable()
   Future _createAnswer_1() native;
   @JSName('createAnswer')
-  @DomName('RTCPeerConnection.createAnswer')
-  @DocsEditable()
   Future _createAnswer_2(options) native;
   @JSName('createAnswer')
-  @DomName('RTCPeerConnection.createAnswer')
-  @DocsEditable()
   Future _createAnswer_3(_RtcSessionDescriptionCallback successCallback,
       RtcPeerConnectionErrorCallback failureCallback) native;
   @JSName('createAnswer')
-  @DomName('RTCPeerConnection.createAnswer')
-  @DocsEditable()
   Future _createAnswer_4(_RtcSessionDescriptionCallback successCallback,
       RtcPeerConnectionErrorCallback failureCallback, mediaConstraints) native;
 
   @JSName('createDTMFSender')
-  @DomName('RTCPeerConnection.createDTMFSender')
-  @DocsEditable()
   RtcDtmfSender createDtmfSender(MediaStreamTrack track) native;
 
-  @DomName('RTCPeerConnection.createDataChannel')
-  @DocsEditable()
   RtcDataChannel createDataChannel(String label, [Map dataChannelDict]) {
     if (dataChannelDict != null) {
       var dataChannelDict_1 = convertDartToNative_Dictionary(dataChannelDict);
@@ -34721,16 +25620,10 @@
   }
 
   @JSName('createDataChannel')
-  @DomName('RTCPeerConnection.createDataChannel')
-  @DocsEditable()
   RtcDataChannel _createDataChannel_1(label, dataChannelDict) native;
   @JSName('createDataChannel')
-  @DomName('RTCPeerConnection.createDataChannel')
-  @DocsEditable()
   RtcDataChannel _createDataChannel_2(label) native;
 
-  @DomName('RTCPeerConnection.createOffer')
-  @DocsEditable()
   Future _createOffer(
       [options_OR_successCallback,
       RtcPeerConnectionErrorCallback failureCallback,
@@ -34763,58 +25656,30 @@
   }
 
   @JSName('createOffer')
-  @DomName('RTCPeerConnection.createOffer')
-  @DocsEditable()
   Future _createOffer_1() native;
   @JSName('createOffer')
-  @DomName('RTCPeerConnection.createOffer')
-  @DocsEditable()
   Future _createOffer_2(options) native;
   @JSName('createOffer')
-  @DomName('RTCPeerConnection.createOffer')
-  @DocsEditable()
   Future _createOffer_3(_RtcSessionDescriptionCallback successCallback,
       RtcPeerConnectionErrorCallback failureCallback) native;
   @JSName('createOffer')
-  @DomName('RTCPeerConnection.createOffer')
-  @DocsEditable()
   Future _createOffer_4(_RtcSessionDescriptionCallback successCallback,
       RtcPeerConnectionErrorCallback failureCallback, rtcOfferOptions) native;
 
-  @DomName('RTCPeerConnection.getLocalStreams')
-  @DocsEditable()
   List<MediaStream> getLocalStreams() native;
 
-  @DomName('RTCPeerConnection.getReceivers')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<RtcRtpReceiver> getReceivers() native;
 
-  @DomName('RTCPeerConnection.getRemoteStreams')
-  @DocsEditable()
   List<MediaStream> getRemoteStreams() native;
 
-  @DomName('RTCPeerConnection.getSenders')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<RtcRtpSender> getSenders() native;
 
-  @DomName('RTCPeerConnection.getStats')
-  @DocsEditable()
   Future getStats() => promiseToFuture<dynamic>(JS("", "#.getStats()", this));
 
-  @DomName('RTCPeerConnection.removeStream')
-  @DocsEditable()
   void removeStream(MediaStream stream) native;
 
-  @DomName('RTCPeerConnection.removeTrack')
-  @DocsEditable()
-  @Experimental() // untriaged
   void removeTrack(RtcRtpSender sender) native;
 
-  @DomName('RTCPeerConnection.setConfiguration')
-  @DocsEditable()
-  @Experimental() // untriaged
   void setConfiguration(Map configuration) {
     var configuration_1 = convertDartToNative_Dictionary(configuration);
     _setConfiguration_1(configuration_1);
@@ -34822,13 +25687,8 @@
   }
 
   @JSName('setConfiguration')
-  @DomName('RTCPeerConnection.setConfiguration')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _setConfiguration_1(configuration) native;
 
-  @DomName('RTCPeerConnection.setLocalDescription')
-  @DocsEditable()
   Future _setLocalDescription(Map description, VoidCallback successCallback,
       [RtcPeerConnectionErrorCallback failureCallback]) {
     var description_1 = convertDartToNative_Dictionary(description);
@@ -34837,14 +25697,10 @@
   }
 
   @JSName('setLocalDescription')
-  @DomName('RTCPeerConnection.setLocalDescription')
-  @DocsEditable()
   Future _setLocalDescription_1(description, VoidCallback successCallback,
       RtcPeerConnectionErrorCallback failureCallback) native;
 
   @JSName('setLocalDescription')
-  @DomName('RTCPeerConnection.setLocalDescription')
-  @DocsEditable()
   Future setLocalDescription(Map description) {
     var completer = new Completer();
     _setLocalDescription(description, () {
@@ -34855,8 +25711,6 @@
     return completer.future;
   }
 
-  @DomName('RTCPeerConnection.setRemoteDescription')
-  @DocsEditable()
   Future _setRemoteDescription(Map description, VoidCallback successCallback,
       [RtcPeerConnectionErrorCallback failureCallback]) {
     var description_1 = convertDartToNative_Dictionary(description);
@@ -34865,14 +25719,10 @@
   }
 
   @JSName('setRemoteDescription')
-  @DomName('RTCPeerConnection.setRemoteDescription')
-  @DocsEditable()
   Future _setRemoteDescription_1(description, VoidCallback successCallback,
       RtcPeerConnectionErrorCallback failureCallback) native;
 
   @JSName('setRemoteDescription')
-  @DomName('RTCPeerConnection.setRemoteDescription')
-  @DocsEditable()
   Future setRemoteDescription(Map description) {
     var completer = new Completer();
     _setRemoteDescription(description, () {
@@ -34884,43 +25734,29 @@
   }
 
   /// Stream of `addstream` events handled by this [RtcPeerConnection].
-  @DomName('RTCPeerConnection.onaddstream')
-  @DocsEditable()
   Stream<MediaStreamEvent> get onAddStream => addStreamEvent.forTarget(this);
 
   /// Stream of `datachannel` events handled by this [RtcPeerConnection].
-  @DomName('RTCPeerConnection.ondatachannel')
-  @DocsEditable()
   Stream<RtcDataChannelEvent> get onDataChannel =>
       dataChannelEvent.forTarget(this);
 
   /// Stream of `icecandidate` events handled by this [RtcPeerConnection].
-  @DomName('RTCPeerConnection.onicecandidate')
-  @DocsEditable()
   Stream<RtcPeerConnectionIceEvent> get onIceCandidate =>
       iceCandidateEvent.forTarget(this);
 
   /// Stream of `iceconnectionstatechange` events handled by this [RtcPeerConnection].
-  @DomName('RTCPeerConnection.oniceconnectionstatechange')
-  @DocsEditable()
   Stream<Event> get onIceConnectionStateChange =>
       iceConnectionStateChangeEvent.forTarget(this);
 
   /// Stream of `negotiationneeded` events handled by this [RtcPeerConnection].
-  @DomName('RTCPeerConnection.onnegotiationneeded')
-  @DocsEditable()
   Stream<Event> get onNegotiationNeeded =>
       negotiationNeededEvent.forTarget(this);
 
   /// Stream of `removestream` events handled by this [RtcPeerConnection].
-  @DomName('RTCPeerConnection.onremovestream')
-  @DocsEditable()
   Stream<MediaStreamEvent> get onRemoveStream =>
       removeStreamEvent.forTarget(this);
 
   /// Stream of `signalingstatechange` events handled by this [RtcPeerConnection].
-  @DomName('RTCPeerConnection.onsignalingstatechange')
-  @DocsEditable()
   Stream<Event> get onSignalingStateChange =>
       signalingStateChangeEvent.forTarget(this);
 }
@@ -34928,9 +25764,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.
 
-@DocsEditable()
-@DomName('RTCPeerConnectionIceEvent')
-@Experimental() // untriaged
 @Native("RTCPeerConnectionIceEvent")
 class RtcPeerConnectionIceEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -34938,8 +25771,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('RTCPeerConnectionIceEvent.RTCPeerConnectionIceEvent')
-  @DocsEditable()
   factory RtcPeerConnectionIceEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -34955,18 +25786,12 @@
   static RtcPeerConnectionIceEvent _create_2(type) =>
       JS('RtcPeerConnectionIceEvent', 'new RTCPeerConnectionIceEvent(#)', type);
 
-  @DomName('RTCPeerConnectionIceEvent.candidate')
-  @DocsEditable()
-  @Experimental() // untriaged
   final RtcIceCandidate candidate;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('RTCRtpContributingSource')
-@Experimental() // untriaged
 @Native("RTCRtpContributingSource")
 class RtcRtpContributingSource extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -34974,23 +25799,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('RTCRtpContributingSource.source')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int source;
 
-  @DomName('RTCRtpContributingSource.timestamp')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num timestamp;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('RTCRtpReceiver')
-@Experimental() // untriaged
 @Native("RTCRtpReceiver")
 class RtcRtpReceiver extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -34998,23 +25814,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('RTCRtpReceiver.track')
-  @DocsEditable()
-  @Experimental() // untriaged
   final MediaStreamTrack track;
 
-  @DomName('RTCRtpReceiver.getContributingSources')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<RtcRtpContributingSource> getContributingSources() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('RTCRtpSender')
-@Experimental() // untriaged
 @Native("RTCRtpSender")
 class RtcRtpSender extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -35022,19 +25829,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('RTCRtpSender.track')
-  @DocsEditable()
-  @Experimental() // untriaged
   final MediaStreamTrack track;
 }
 // Copyright (c) 2013, 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.
 
-@DomName('RTCSessionDescription')
 @SupportedBrowser(SupportedBrowser.CHROME)
-@Experimental()
-// http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCSessionDescription
 @Native("RTCSessionDescription,mozRTCSessionDescription")
 class RtcSessionDescription extends Interceptor {
   factory RtcSessionDescription(Map dictionary) {
@@ -35055,22 +25856,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('RTCSessionDescription.sdp')
-  @DocsEditable()
   String sdp;
 
-  @DomName('RTCSessionDescription.type')
-  @DocsEditable()
   String type;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('RTCStatsReport')
-// http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCStatsReport
-@Experimental()
 @Native("RTCStatsReport")
 class RtcStatsReport extends Interceptor with MapMixin<String, dynamic> {
   // To suppress missing implicit constructor warnings.
@@ -35139,10 +25932,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.
 
-@DocsEditable()
-@DomName('RTCStatsResponse')
-// http://dev.w3.org/2011/webrtc/editor/webrtc.html#widl-RTCStatsReport-RTCStats-getter-DOMString-id
-@Experimental()
 @Native("RTCStatsResponse")
 class RtcStatsResponse extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -35150,21 +25939,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('RTCStatsResponse.namedItem')
-  @DocsEditable()
   RtcLegacyStatsReport namedItem(String name) native;
 
-  @DomName('RTCStatsResponse.result')
-  @DocsEditable()
   List<RtcLegacyStatsReport> result() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('RTCTrackEvent')
-@Experimental() // untriaged
 @Native("RTCTrackEvent")
 class RtcTrackEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -35172,8 +25954,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('RTCTrackEvent.RTCTrackEvent')
-  @DocsEditable()
   factory RtcTrackEvent(String type, Map eventInitDict) {
     var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
     return RtcTrackEvent._create_1(type, eventInitDict_1);
@@ -35181,33 +25961,18 @@
   static RtcTrackEvent _create_1(type, eventInitDict) =>
       JS('RtcTrackEvent', 'new RTCTrackEvent(#,#)', type, eventInitDict);
 
-  @DomName('RTCTrackEvent.receiver')
-  @DocsEditable()
-  @Experimental() // untriaged
   final RtcRtpReceiver receiver;
 
-  @DomName('RTCTrackEvent.streams')
-  @DocsEditable()
-  @Experimental() // untriaged
   final List<MediaStream> streams;
 
-  @DomName('RTCTrackEvent.track')
-  @DocsEditable()
-  @Experimental() // untriaged
   final MediaStreamTrack track;
 }
 // Copyright (c) 2013, 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.
 
-@DocsEditable()
-@DomName('Screen')
 @Native("Screen")
 class Screen extends Interceptor {
-  @DomName('Screen.availHeight')
-  @DomName('Screen.availLeft')
-  @DomName('Screen.availTop')
-  @DomName('Screen.availWidth')
   Rectangle get available =>
       new Rectangle(_availLeft, _availTop, _availWidth, _availHeight);
   // To suppress missing implicit constructor warnings.
@@ -35216,60 +25981,33 @@
   }
 
   @JSName('availHeight')
-  @DomName('Screen.availHeight')
-  @DocsEditable()
   final int _availHeight;
 
   @JSName('availLeft')
-  @DomName('Screen.availLeft')
-  @DocsEditable()
-  @Experimental() // nonstandard
   final int _availLeft;
 
   @JSName('availTop')
-  @DomName('Screen.availTop')
-  @DocsEditable()
-  @Experimental() // nonstandard
   final int _availTop;
 
   @JSName('availWidth')
-  @DomName('Screen.availWidth')
-  @DocsEditable()
   final int _availWidth;
 
-  @DomName('Screen.colorDepth')
-  @DocsEditable()
   final int colorDepth;
 
-  @DomName('Screen.height')
-  @DocsEditable()
   final int height;
 
-  @DomName('Screen.keepAwake')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool keepAwake;
 
-  @DomName('Screen.orientation')
-  @DocsEditable()
-  @Experimental() // untriaged
   final ScreenOrientation orientation;
 
-  @DomName('Screen.pixelDepth')
-  @DocsEditable()
   final int pixelDepth;
 
-  @DomName('Screen.width')
-  @DocsEditable()
   final int width;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('ScreenOrientation')
-@Experimental() // untriaged
 @Native("ScreenOrientation")
 class ScreenOrientation extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -35277,44 +26015,24 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ScreenOrientation.changeEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> changeEvent =
       const EventStreamProvider<Event>('change');
 
-  @DomName('ScreenOrientation.angle')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int angle;
 
-  @DomName('ScreenOrientation.type')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String type;
 
-  @DomName('ScreenOrientation.lock')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future lock(String orientation) =>
       promiseToFuture(JS("", "#.lock(#)", this, orientation));
 
-  @DomName('ScreenOrientation.unlock')
-  @DocsEditable()
-  @Experimental() // untriaged
   void unlock() native;
 
-  @DomName('ScreenOrientation.onchange')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onChange => changeEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLScriptElement')
 @Native("HTMLScriptElement")
 class ScriptElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -35322,8 +26040,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLScriptElement.HTMLScriptElement')
-  @DocsEditable()
   factory ScriptElement() => JS(
       'returns:ScriptElement;creates:ScriptElement;new:true',
       '#.createElement(#)',
@@ -35336,49 +26052,26 @@
    */
   ScriptElement.created() : super.created();
 
-  @DomName('HTMLScriptElement.async')
-  @DocsEditable()
   bool async;
 
-  @DomName('HTMLScriptElement.charset')
-  @DocsEditable()
   String charset;
 
-  @DomName('HTMLScriptElement.crossOrigin')
-  @DocsEditable()
-  // http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting-1.html#attr-script-crossorigin
-  @Experimental()
   String crossOrigin;
 
-  @DomName('HTMLScriptElement.defer')
-  @DocsEditable()
   bool defer;
 
-  @DomName('HTMLScriptElement.integrity')
-  @DocsEditable()
-  @Experimental() // untriaged
   String integrity;
 
-  @DomName('HTMLScriptElement.noModule')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool noModule;
 
-  @DomName('HTMLScriptElement.src')
-  @DocsEditable()
   String src;
 
-  @DomName('HTMLScriptElement.type')
-  @DocsEditable()
   String type;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('ScrollState')
-@Experimental() // untriaged
 @Native("ScrollState")
 class ScrollState extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -35386,8 +26079,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ScrollState.ScrollState')
-  @DocsEditable()
   factory ScrollState([Map scrollStateInit]) {
     if (scrollStateInit != null) {
       var scrollStateInit_1 = convertDartToNative_Dictionary(scrollStateInit);
@@ -35399,74 +26090,32 @@
       JS('ScrollState', 'new ScrollState(#)', scrollStateInit);
   static ScrollState _create_2() => JS('ScrollState', 'new ScrollState()');
 
-  @DomName('ScrollState.deltaGranularity')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num deltaGranularity;
 
-  @DomName('ScrollState.deltaX')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num deltaX;
 
-  @DomName('ScrollState.deltaY')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num deltaY;
 
-  @DomName('ScrollState.fromUserInput')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool fromUserInput;
 
-  @DomName('ScrollState.inInertialPhase')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool inInertialPhase;
 
-  @DomName('ScrollState.isBeginning')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool isBeginning;
 
-  @DomName('ScrollState.isDirectManipulation')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool isDirectManipulation;
 
-  @DomName('ScrollState.isEnding')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool isEnding;
 
-  @DomName('ScrollState.positionX')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int positionX;
 
-  @DomName('ScrollState.positionY')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int positionY;
 
-  @DomName('ScrollState.velocityX')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num velocityX;
 
-  @DomName('ScrollState.velocityY')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num velocityY;
 
-  @DomName('ScrollState.consumeDelta')
-  @DocsEditable()
-  @Experimental() // untriaged
   void consumeDelta(num x, num y) native;
 
-  @DomName('ScrollState.distributeToScrollChainDescendant')
-  @DocsEditable()
-  @Experimental() // untriaged
   void distributeToScrollChainDescendant() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -35475,16 +26124,11 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('ScrollStateCallback')
-@Experimental() // untriaged
 typedef void ScrollStateCallback(ScrollState scrollState);
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('ScrollTimeline')
-@Experimental() // untriaged
 @Native("ScrollTimeline")
 class ScrollTimeline extends AnimationTimeline {
   // To suppress missing implicit constructor warnings.
@@ -35492,8 +26136,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ScrollTimeline.ScrollTimeline')
-  @DocsEditable()
   factory ScrollTimeline([Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -35506,29 +26148,16 @@
   static ScrollTimeline _create_2() =>
       JS('ScrollTimeline', 'new ScrollTimeline()');
 
-  @DomName('ScrollTimeline.orientation')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String orientation;
 
-  @DomName('ScrollTimeline.scrollSource')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Element scrollSource;
 
-  @DomName('ScrollTimeline.timeRange')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Object timeRange;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SecurityPolicyViolationEvent')
-// https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html#securitypolicyviolationevent-events
-@Experimental()
 @Native("SecurityPolicyViolationEvent")
 class SecurityPolicyViolationEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -35536,8 +26165,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SecurityPolicyViolationEvent.SecurityPolicyViolationEvent')
-  @DocsEditable()
   factory SecurityPolicyViolationEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -35556,63 +26183,35 @@
       type);
 
   @JSName('blockedURI')
-  @DomName('SecurityPolicyViolationEvent.blockedURI')
-  @DocsEditable()
   final String blockedUri;
 
-  @DomName('SecurityPolicyViolationEvent.columnNumber')
-  @DocsEditable()
   final int columnNumber;
 
-  @DomName('SecurityPolicyViolationEvent.disposition')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String disposition;
 
   @JSName('documentURI')
-  @DomName('SecurityPolicyViolationEvent.documentURI')
-  @DocsEditable()
   final String documentUri;
 
-  @DomName('SecurityPolicyViolationEvent.effectiveDirective')
-  @DocsEditable()
   final String effectiveDirective;
 
-  @DomName('SecurityPolicyViolationEvent.lineNumber')
-  @DocsEditable()
   final int lineNumber;
 
-  @DomName('SecurityPolicyViolationEvent.originalPolicy')
-  @DocsEditable()
   final String originalPolicy;
 
-  @DomName('SecurityPolicyViolationEvent.referrer')
-  @DocsEditable()
   final String referrer;
 
-  @DomName('SecurityPolicyViolationEvent.sample')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String sample;
 
-  @DomName('SecurityPolicyViolationEvent.sourceFile')
-  @DocsEditable()
   final String sourceFile;
 
-  @DomName('SecurityPolicyViolationEvent.statusCode')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int statusCode;
 
-  @DomName('SecurityPolicyViolationEvent.violatedDirective')
-  @DocsEditable()
   final String violatedDirective;
 }
 // Copyright (c) 2012, 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.
 
-@DomName('HTMLSelectElement')
 @Native("HTMLSelectElement")
 class SelectElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -35620,8 +26219,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLSelectElement.HTMLSelectElement')
-  @DocsEditable()
   factory SelectElement() => JS(
       'returns:SelectElement;creates:SelectElement;new:true',
       '#.createElement(#)',
@@ -35634,97 +26231,51 @@
    */
   SelectElement.created() : super.created();
 
-  @DomName('HTMLSelectElement.autofocus')
-  @DocsEditable()
   bool autofocus;
 
-  @DomName('HTMLSelectElement.disabled')
-  @DocsEditable()
   bool disabled;
 
-  @DomName('HTMLSelectElement.form')
-  @DocsEditable()
   final FormElement form;
 
-  @DomName('HTMLSelectElement.labels')
-  @DocsEditable()
   @Unstable()
   @Returns('NodeList|Null')
   @Creates('NodeList')
   final List<Node> labels;
 
-  @DomName('HTMLSelectElement.length')
-  @DocsEditable()
   int length;
 
-  @DomName('HTMLSelectElement.multiple')
-  @DocsEditable()
   bool multiple;
 
-  @DomName('HTMLSelectElement.name')
-  @DocsEditable()
   String name;
 
-  @DomName('HTMLSelectElement.required')
-  @DocsEditable()
   bool required;
 
-  @DomName('HTMLSelectElement.selectedIndex')
-  @DocsEditable()
   int selectedIndex;
 
-  @DomName('HTMLSelectElement.size')
-  @DocsEditable()
   int size;
 
-  @DomName('HTMLSelectElement.type')
-  @DocsEditable()
   final String type;
 
-  @DomName('HTMLSelectElement.validationMessage')
-  @DocsEditable()
   final String validationMessage;
 
-  @DomName('HTMLSelectElement.validity')
-  @DocsEditable()
   final ValidityState validity;
 
-  @DomName('HTMLSelectElement.value')
-  @DocsEditable()
   String value;
 
-  @DomName('HTMLSelectElement.willValidate')
-  @DocsEditable()
   final bool willValidate;
 
-  @DomName('HTMLSelectElement.__setter__')
-  @DocsEditable()
   void __setter__(int index, OptionElement option) native;
 
-  @DomName('HTMLSelectElement.add')
-  @DocsEditable()
-  @Experimental() // untriaged
   void add(Object element, Object before) native;
 
-  @DomName('HTMLSelectElement.checkValidity')
-  @DocsEditable()
   bool checkValidity() native;
 
-  @DomName('HTMLSelectElement.item')
-  @DocsEditable()
   Element item(int index) native;
 
-  @DomName('HTMLSelectElement.namedItem')
-  @DocsEditable()
   OptionElement namedItem(String name) native;
 
-  @DomName('HTMLSelectElement.reportValidity')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool reportValidity() native;
 
-  @DomName('HTMLSelectElement.setCustomValidity')
-  @DocsEditable()
   void setCustomValidity(String error) native;
 
   // Override default options, since IE returns SelectElement itself and it
@@ -35748,8 +26299,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.
 
-@DocsEditable()
-@DomName('Selection')
 @Native("Selection")
 class Selection extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -35757,129 +26306,63 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Selection.anchorNode')
-  @DocsEditable()
   final Node anchorNode;
 
-  @DomName('Selection.anchorOffset')
-  @DocsEditable()
   final int anchorOffset;
 
-  @DomName('Selection.baseNode')
-  @DocsEditable()
-  @Experimental() // non-standard
   final Node baseNode;
 
-  @DomName('Selection.baseOffset')
-  @DocsEditable()
-  @Experimental() // non-standard
   final int baseOffset;
 
-  @DomName('Selection.extentNode')
-  @DocsEditable()
-  @Experimental() // non-standard
   final Node extentNode;
 
-  @DomName('Selection.extentOffset')
-  @DocsEditable()
-  @Experimental() // non-standard
   final int extentOffset;
 
-  @DomName('Selection.focusNode')
-  @DocsEditable()
   final Node focusNode;
 
-  @DomName('Selection.focusOffset')
-  @DocsEditable()
   final int focusOffset;
 
-  @DomName('Selection.isCollapsed')
-  @DocsEditable()
   final bool isCollapsed;
 
-  @DomName('Selection.rangeCount')
-  @DocsEditable()
   final int rangeCount;
 
-  @DomName('Selection.type')
-  @DocsEditable()
-  @Experimental() // non-standard
   final String type;
 
-  @DomName('Selection.addRange')
-  @DocsEditable()
   void addRange(Range range) native;
 
-  @DomName('Selection.collapse')
-  @DocsEditable()
   void collapse(Node node, [int offset]) native;
 
-  @DomName('Selection.collapseToEnd')
-  @DocsEditable()
   void collapseToEnd() native;
 
-  @DomName('Selection.collapseToStart')
-  @DocsEditable()
   void collapseToStart() native;
 
-  @DomName('Selection.containsNode')
-  @DocsEditable()
-  @Experimental() // non-standard
   bool containsNode(Node node, [bool allowPartialContainment]) native;
 
-  @DomName('Selection.deleteFromDocument')
-  @DocsEditable()
   void deleteFromDocument() native;
 
-  @DomName('Selection.empty')
-  @DocsEditable()
-  @Experimental() // non-standard
   void empty() native;
 
-  @DomName('Selection.extend')
-  @DocsEditable()
   void extend(Node node, [int offset]) native;
 
-  @DomName('Selection.getRangeAt')
-  @DocsEditable()
   Range getRangeAt(int index) native;
 
-  @DomName('Selection.modify')
-  @DocsEditable()
-  @Experimental() // non-standard
   void modify(String alter, String direction, String granularity) native;
 
-  @DomName('Selection.removeAllRanges')
-  @DocsEditable()
   void removeAllRanges() native;
 
-  @DomName('Selection.removeRange')
-  @DocsEditable()
-  @Experimental() // untriaged
   void removeRange(Range range) native;
 
-  @DomName('Selection.selectAllChildren')
-  @DocsEditable()
   void selectAllChildren(Node node) native;
 
-  @DomName('Selection.setBaseAndExtent')
-  @DocsEditable()
-  @Experimental() // non-standard
   void setBaseAndExtent(
       Node baseNode, int baseOffset, Node extentNode, int extentOffset) native;
 
-  @DomName('Selection.setPosition')
-  @DocsEditable()
-  @Experimental() // non-standard
   void setPosition(Node node, [int offset]) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('Sensor')
-@Experimental() // untriaged
 @Native("Sensor")
 class Sensor extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -35887,49 +26370,25 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Sensor.errorEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
-  @DomName('Sensor.activated')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool activated;
 
-  @DomName('Sensor.hasReading')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool hasReading;
 
-  @DomName('Sensor.timestamp')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num timestamp;
 
-  @DomName('Sensor.start')
-  @DocsEditable()
-  @Experimental() // untriaged
   void start() native;
 
-  @DomName('Sensor.stop')
-  @DocsEditable()
-  @Experimental() // untriaged
   void stop() native;
 
-  @DomName('Sensor.onerror')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onError => errorEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SensorErrorEvent')
-@Experimental() // untriaged
 @Native("SensorErrorEvent")
 class SensorErrorEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -35937,8 +26396,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SensorErrorEvent.SensorErrorEvent')
-  @DocsEditable()
   factory SensorErrorEvent(String type, Map eventInitDict) {
     var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
     return SensorErrorEvent._create_1(type, eventInitDict_1);
@@ -35946,18 +26403,12 @@
   static SensorErrorEvent _create_1(type, eventInitDict) =>
       JS('SensorErrorEvent', 'new SensorErrorEvent(#,#)', type, eventInitDict);
 
-  @DomName('SensorErrorEvent.error')
-  @DocsEditable()
-  @Experimental() // untriaged
   final DomException error;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('ServiceWorker')
-@Experimental() // untriaged
 @Native("ServiceWorker")
 class ServiceWorker extends EventTarget implements AbstractWorker {
   // To suppress missing implicit constructor warnings.
@@ -35965,40 +26416,22 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ServiceWorker.errorEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
   @JSName('scriptURL')
-  @DomName('ServiceWorker.scriptURL')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String scriptUrl;
 
-  @DomName('ServiceWorker.state')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String state;
 
-  @DomName('ServiceWorker.postMessage')
-  @DocsEditable()
-  @Experimental() // untriaged
   void postMessage(Object message, [List<Object> transfer]) native;
 
-  @DomName('ServiceWorker.onerror')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onError => errorEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('ServiceWorkerContainer')
-@Experimental() // untriaged
 @Native("ServiceWorkerContainer")
 class ServiceWorkerContainer extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -36006,40 +26439,22 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ServiceWorkerContainer.messageEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MessageEvent> messageEvent =
       const EventStreamProvider<MessageEvent>('message');
 
-  @DomName('ServiceWorkerContainer.controller')
-  @DocsEditable()
-  @Experimental() // untriaged
   final ServiceWorker controller;
 
-  @DomName('ServiceWorkerContainer.ready')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<ServiceWorkerRegistration> get ready =>
       promiseToFuture<ServiceWorkerRegistration>(JS("", "#.ready", this));
 
-  @DomName('ServiceWorkerContainer.getRegistration')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<ServiceWorkerRegistration> getRegistration([String documentURL]) =>
       promiseToFuture<ServiceWorkerRegistration>(
           JS("", "#.getRegistration(#)", this, documentURL));
 
-  @DomName('ServiceWorkerContainer.getRegistrations')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<List<ServiceWorkerRegistration>> getRegistrations() =>
       promiseToFuture<List<ServiceWorkerRegistration>>(
           JS("", "#.getRegistrations()", this));
 
-  @DomName('ServiceWorkerContainer.register')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future register(String url, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -36049,28 +26464,16 @@
   }
 
   @JSName('register')
-  @DomName('ServiceWorkerContainer.register')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _register_1(url, options) native;
   @JSName('register')
-  @DomName('ServiceWorkerContainer.register')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _register_2(url) native;
 
-  @DomName('ServiceWorkerContainer.onmessage')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('ServiceWorkerGlobalScope')
-@Experimental() // untriaged
 @Native("ServiceWorkerGlobalScope")
 class ServiceWorkerGlobalScope extends WorkerGlobalScope {
   // To suppress missing implicit constructor warnings.
@@ -36078,84 +26481,42 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ServiceWorkerGlobalScope.activateEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> activateEvent =
       const EventStreamProvider<Event>('activate');
 
-  @DomName('ServiceWorkerGlobalScope.fetchEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> fetchEvent =
       const EventStreamProvider<Event>('fetch');
 
-  @DomName('ServiceWorkerGlobalScope.foreignfetchEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<ForeignFetchEvent> foreignfetchEvent =
       const EventStreamProvider<ForeignFetchEvent>('foreignfetch');
 
-  @DomName('ServiceWorkerGlobalScope.installEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> installEvent =
       const EventStreamProvider<Event>('install');
 
-  @DomName('ServiceWorkerGlobalScope.messageEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MessageEvent> messageEvent =
       const EventStreamProvider<MessageEvent>('message');
 
-  @DomName('ServiceWorkerGlobalScope.clients')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Clients clients;
 
-  @DomName('ServiceWorkerGlobalScope.registration')
-  @DocsEditable()
-  @Experimental() // untriaged
   final ServiceWorkerRegistration registration;
 
-  @DomName('ServiceWorkerGlobalScope.skipWaiting')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future skipWaiting() => promiseToFuture(JS("", "#.skipWaiting()", this));
 
-  @DomName('ServiceWorkerGlobalScope.onactivate')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onActivate => activateEvent.forTarget(this);
 
-  @DomName('ServiceWorkerGlobalScope.onfetch')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onFetch => fetchEvent.forTarget(this);
 
-  @DomName('ServiceWorkerGlobalScope.onforeignfetch')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<ForeignFetchEvent> get onForeignfetch =>
       foreignfetchEvent.forTarget(this);
 
-  @DomName('ServiceWorkerGlobalScope.oninstall')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onInstall => installEvent.forTarget(this);
 
-  @DomName('ServiceWorkerGlobalScope.onmessage')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('ServiceWorkerRegistration')
-@Experimental() // untriaged
 @Native("ServiceWorkerRegistration")
 class ServiceWorkerRegistration extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -36163,54 +26524,24 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ServiceWorkerRegistration.active')
-  @DocsEditable()
-  @Experimental() // untriaged
   final ServiceWorker active;
 
-  @DomName('ServiceWorkerRegistration.backgroundFetch')
-  @DocsEditable()
-  @Experimental() // untriaged
   final BackgroundFetchManager backgroundFetch;
 
-  @DomName('ServiceWorkerRegistration.installing')
-  @DocsEditable()
-  @Experimental() // untriaged
   final ServiceWorker installing;
 
-  @DomName('ServiceWorkerRegistration.navigationPreload')
-  @DocsEditable()
-  @Experimental() // untriaged
   final NavigationPreloadManager navigationPreload;
 
-  @DomName('ServiceWorkerRegistration.paymentManager')
-  @DocsEditable()
-  @Experimental() // untriaged
   final PaymentManager paymentManager;
 
-  @DomName('ServiceWorkerRegistration.pushManager')
-  @DocsEditable()
-  @Experimental() // untriaged
   final PushManager pushManager;
 
-  @DomName('ServiceWorkerRegistration.scope')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String scope;
 
-  @DomName('ServiceWorkerRegistration.sync')
-  @DocsEditable()
-  @Experimental() // untriaged
   final SyncManager sync;
 
-  @DomName('ServiceWorkerRegistration.waiting')
-  @DocsEditable()
-  @Experimental() // untriaged
   final ServiceWorker waiting;
 
-  @DomName('ServiceWorkerRegistration.getNotifications')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future getNotifications([Map filter]) {
     if (filter != null) {
       var filter_1 = convertDartToNative_Dictionary(filter);
@@ -36220,19 +26551,10 @@
   }
 
   @JSName('getNotifications')
-  @DomName('ServiceWorkerRegistration.getNotifications')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _getNotifications_1(filter) native;
   @JSName('getNotifications')
-  @DomName('ServiceWorkerRegistration.getNotifications')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _getNotifications_2() native;
 
-  @DomName('ServiceWorkerRegistration.showNotification')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future showNotification(String title, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -36242,36 +26564,20 @@
   }
 
   @JSName('showNotification')
-  @DomName('ServiceWorkerRegistration.showNotification')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _showNotification_1(title, options) native;
   @JSName('showNotification')
-  @DomName('ServiceWorkerRegistration.showNotification')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _showNotification_2(title) native;
 
-  @DomName('ServiceWorkerRegistration.unregister')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<bool> unregister() =>
       promiseToFuture<bool>(JS("", "#.unregister()", this));
 
-  @DomName('ServiceWorkerRegistration.update')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future update() => promiseToFuture(JS("", "#.update()", this));
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLShadowElement')
 @SupportedBrowser(SupportedBrowser.CHROME, '26')
-@Experimental()
-// https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#shadow-element
 @Native("HTMLShadowElement")
 class ShadowElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -36279,8 +26585,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLShadowElement.HTMLShadowElement')
-  @DocsEditable()
   factory ShadowElement() => document.createElement("shadow");
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
@@ -36292,9 +26596,6 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('shadow');
 
-  @DomName('HTMLShadowElement.getDistributedNodes')
-  @DocsEditable()
-  @Experimental() // untriaged
   @Returns('NodeList|Null')
   @Creates('NodeList')
   List<Node> getDistributedNodes() native;
@@ -36305,10 +26606,7 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('ShadowRoot')
 @SupportedBrowser(SupportedBrowser.CHROME, '26')
-@Experimental()
-// https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#api-shadow-root
 @Native("ShadowRoot")
 class ShadowRoot extends DocumentFragment implements DocumentOrShadowRoot {
   // To suppress missing implicit constructor warnings.
@@ -36316,65 +26614,33 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ShadowRoot.delegatesFocus')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool delegatesFocus;
 
-  @DomName('ShadowRoot.host')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Element host;
 
   @JSName('innerHTML')
-  @DomName('ShadowRoot.innerHTML')
-  @DocsEditable()
   String innerHtml;
 
-  @DomName('ShadowRoot.mode')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String mode;
 
-  @DomName('ShadowRoot.olderShadowRoot')
-  @DocsEditable()
-  @Experimental() // untriaged
   final ShadowRoot olderShadowRoot;
 
   // From DocumentOrShadowRoot
 
-  @DomName('ShadowRoot.activeElement')
-  @DocsEditable()
   final Element activeElement;
 
-  @DomName('ShadowRoot.fullscreenElement')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Element fullscreenElement;
 
-  @DomName('ShadowRoot.pointerLockElement')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Element pointerLockElement;
 
-  @DomName('ShadowRoot.styleSheets')
-  @DocsEditable()
-  @Experimental() // untriaged
   @Returns('_StyleSheetList|Null')
   @Creates('_StyleSheetList')
   final List<StyleSheet> styleSheets;
 
-  @DomName('ShadowRoot.elementFromPoint')
-  @DocsEditable()
   Element elementFromPoint(int x, int y) native;
 
-  @DomName('ShadowRoot.elementsFromPoint')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<Element> elementsFromPoint(int x, int y) native;
 
-  @DomName('ShadowRoot.getSelection')
-  @DocsEditable()
   Selection getSelection() native;
 
   static bool get supported => JS(
@@ -36421,9 +26687,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.
 
-@DocsEditable()
-@DomName('SharedArrayBuffer')
-@Experimental() // untriaged
 @Native("SharedArrayBuffer")
 class SharedArrayBuffer extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -36431,19 +26694,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SharedArrayBuffer.byteLength')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int byteLength;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SharedWorker')
-// http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html#shared-workers-and-the-sharedworker-interface
-@Experimental()
 @Native("SharedWorker")
 class SharedWorker extends EventTarget implements AbstractWorker {
   // To suppress missing implicit constructor warnings.
@@ -36451,14 +26707,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SharedWorker.errorEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
-  @DomName('SharedWorker.SharedWorker')
-  @DocsEditable()
   factory SharedWorker(String scriptURL, [String name]) {
     if (name != null) {
       return SharedWorker._create_1(scriptURL, name);
@@ -36470,22 +26721,14 @@
   static SharedWorker _create_2(scriptURL) =>
       JS('SharedWorker', 'new SharedWorker(#)', scriptURL);
 
-  @DomName('SharedWorker.port')
-  @DocsEditable()
   final MessagePort port;
 
-  @DomName('SharedWorker.onerror')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onError => errorEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SharedWorkerGlobalScope')
-@Experimental() // untriaged
 @Native("SharedWorkerGlobalScope")
 class SharedWorkerGlobalScope extends WorkerGlobalScope {
   // To suppress missing implicit constructor warnings.
@@ -36499,85 +26742,48 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('SharedWorkerGlobalScope.connectEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> connectEvent =
       const EventStreamProvider<Event>('connect');
 
-  @DomName('SharedWorkerGlobalScope.PERSISTENT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int PERSISTENT = 1;
 
-  @DomName('SharedWorkerGlobalScope.TEMPORARY')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int TEMPORARY = 0;
 
-  @DomName('SharedWorkerGlobalScope.name')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String name;
 
-  @DomName('SharedWorkerGlobalScope.close')
-  @DocsEditable()
-  @Experimental() // untriaged
   void close() native;
 
   @JSName('webkitRequestFileSystem')
-  @DomName('SharedWorkerGlobalScope.webkitRequestFileSystem')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  @Experimental() // untriaged
   void _webkitRequestFileSystem(int type, int size,
       [_FileSystemCallback successCallback,
       _ErrorCallback errorCallback]) native;
 
   @JSName('webkitRequestFileSystemSync')
-  @DomName('SharedWorkerGlobalScope.webkitRequestFileSystemSync')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  @Experimental() // untriaged
   _DOMFileSystemSync requestFileSystemSync(int type, int size) native;
 
   @JSName('webkitResolveLocalFileSystemSyncURL')
-  @DomName('SharedWorkerGlobalScope.webkitResolveLocalFileSystemSyncURL')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  @Experimental() // untriaged
   _EntrySync resolveLocalFileSystemSyncUrl(String url) native;
 
   @JSName('webkitResolveLocalFileSystemURL')
-  @DomName('SharedWorkerGlobalScope.webkitResolveLocalFileSystemURL')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  @Experimental() // untriaged
   void _webkitResolveLocalFileSystemUrl(
       String url, _EntryCallback successCallback,
       [_ErrorCallback errorCallback]) native;
 
   /// Stream of `connect` events handled by this [SharedWorkerGlobalScope].
-  @DomName('SharedWorkerGlobalScope.onconnect')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onConnect => connectEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLSlotElement')
-@Experimental() // untriaged
 @Native("HTMLSlotElement")
 class SlotElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -36591,14 +26797,8 @@
    */
   SlotElement.created() : super.created();
 
-  @DomName('HTMLSlotElement.name')
-  @DocsEditable()
-  @Experimental() // untriaged
   String name;
 
-  @DomName('HTMLSlotElement.assignedNodes')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<Node> assignedNodes([Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -36608,24 +26808,14 @@
   }
 
   @JSName('assignedNodes')
-  @DomName('HTMLSlotElement.assignedNodes')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<Node> _assignedNodes_1(options) native;
   @JSName('assignedNodes')
-  @DomName('HTMLSlotElement.assignedNodes')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<Node> _assignedNodes_2() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SourceBuffer')
-// https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#sourcebuffer
-@Experimental()
 @Native("SourceBuffer")
 class SourceBuffer extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -36633,99 +26823,47 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SourceBuffer.abortEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> abortEvent =
       const EventStreamProvider<Event>('abort');
 
-  @DomName('SourceBuffer.errorEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
-  @DomName('SourceBuffer.appendWindowEnd')
-  @DocsEditable()
-  @Experimental() // untriaged
   num appendWindowEnd;
 
-  @DomName('SourceBuffer.appendWindowStart')
-  @DocsEditable()
-  @Experimental() // untriaged
   num appendWindowStart;
 
-  @DomName('SourceBuffer.audioTracks')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AudioTrackList audioTracks;
 
-  @DomName('SourceBuffer.buffered')
-  @DocsEditable()
   final TimeRanges buffered;
 
-  @DomName('SourceBuffer.mode')
-  @DocsEditable()
-  @Experimental() // untriaged
   String mode;
 
-  @DomName('SourceBuffer.timestampOffset')
-  @DocsEditable()
   num timestampOffset;
 
-  @DomName('SourceBuffer.trackDefaults')
-  @DocsEditable()
-  @Experimental() // untriaged
   TrackDefaultList trackDefaults;
 
-  @DomName('SourceBuffer.updating')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool updating;
 
-  @DomName('SourceBuffer.videoTracks')
-  @DocsEditable()
-  @Experimental() // untriaged
   final VideoTrackList videoTracks;
 
-  @DomName('SourceBuffer.abort')
-  @DocsEditable()
   void abort() native;
 
-  @DomName('SourceBuffer.appendBuffer')
-  @DocsEditable()
-  @Experimental() // untriaged
   void appendBuffer(ByteBuffer data) native;
 
   @JSName('appendBuffer')
-  @DomName('SourceBuffer.appendBuffer')
-  @DocsEditable()
-  @Experimental() // untriaged
   void appendTypedData(TypedData data) native;
 
-  @DomName('SourceBuffer.remove')
-  @DocsEditable()
-  @Experimental() // untriaged
   void remove(num start, num end) native;
 
-  @DomName('SourceBuffer.onabort')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onAbort => abortEvent.forTarget(this);
 
-  @DomName('SourceBuffer.onerror')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onError => errorEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SourceBufferList')
-// https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#sourcebufferlist
-@Experimental()
 @Native("SourceBufferList")
 class SourceBufferList extends EventTarget
     with ListMixin<SourceBuffer>, ImmutableListMixin<SourceBuffer>
@@ -36735,8 +26873,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SourceBufferList.length')
-  @DocsEditable()
   int get length => JS("int", "#.length", this);
 
   SourceBuffer operator [](int index) {
@@ -36782,16 +26918,12 @@
   SourceBuffer elementAt(int index) => this[index];
   // -- end List<SourceBuffer> mixins.
 
-  @DomName('SourceBufferList.item')
-  @DocsEditable()
   SourceBuffer item(int index) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLSourceElement')
 @Native("HTMLSourceElement")
 class SourceElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -36799,8 +26931,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLSourceElement.HTMLSourceElement')
-  @DocsEditable()
   factory SourceElement() => JS(
       'returns:SourceElement;creates:SourceElement;new:true',
       '#.createElement(#)',
@@ -36813,34 +26943,20 @@
    */
   SourceElement.created() : super.created();
 
-  @DomName('HTMLSourceElement.media')
-  @DocsEditable()
   String media;
 
-  @DomName('HTMLSourceElement.sizes')
-  @DocsEditable()
-  @Experimental() // untriaged
   String sizes;
 
-  @DomName('HTMLSourceElement.src')
-  @DocsEditable()
   String src;
 
-  @DomName('HTMLSourceElement.srcset')
-  @DocsEditable()
-  @Experimental() // untriaged
   String srcset;
 
-  @DomName('HTMLSourceElement.type')
-  @DocsEditable()
   String type;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLSpanElement')
 @Native("HTMLSpanElement")
 class SpanElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -36848,8 +26964,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLSpanElement.HTMLSpanElement')
-  @DocsEditable()
   factory SpanElement() => JS(
       'returns:SpanElement;creates:SpanElement;new:true',
       '#.createElement(#)',
@@ -36866,10 +26980,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.
 
-@DocsEditable()
-@DomName('SpeechGrammar')
-// https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#dfn-speechgrammar
-@Experimental()
 @Native("SpeechGrammar")
 class SpeechGrammar extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -36877,30 +26987,20 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SpeechGrammar.SpeechGrammar')
-  @DocsEditable()
   factory SpeechGrammar() {
     return SpeechGrammar._create_1();
   }
   static SpeechGrammar _create_1() =>
       JS('SpeechGrammar', 'new SpeechGrammar()');
 
-  @DomName('SpeechGrammar.src')
-  @DocsEditable()
   String src;
 
-  @DomName('SpeechGrammar.weight')
-  @DocsEditable()
   num weight;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SpeechGrammarList')
-// https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#dfn-speechgrammarlist
-@Experimental()
 @Native("SpeechGrammarList")
 class SpeechGrammarList extends Interceptor
     with ListMixin<SpeechGrammar>, ImmutableListMixin<SpeechGrammar>
@@ -36910,16 +27010,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SpeechGrammarList.SpeechGrammarList')
-  @DocsEditable()
   factory SpeechGrammarList() {
     return SpeechGrammarList._create_1();
   }
   static SpeechGrammarList _create_1() =>
       JS('SpeechGrammarList', 'new SpeechGrammarList()');
 
-  @DomName('SpeechGrammarList.length')
-  @DocsEditable()
   int get length => JS("int", "#.length", this);
 
   SpeechGrammar operator [](int index) {
@@ -36965,26 +27061,17 @@
   SpeechGrammar elementAt(int index) => this[index];
   // -- end List<SpeechGrammar> mixins.
 
-  @DomName('SpeechGrammarList.addFromString')
-  @DocsEditable()
   void addFromString(String string, [num weight]) native;
 
-  @DomName('SpeechGrammarList.addFromUri')
-  @DocsEditable()
   void addFromUri(String src, [num weight]) native;
 
-  @DomName('SpeechGrammarList.item')
-  @DocsEditable()
   SpeechGrammar item(int index) native;
 }
 // Copyright (c) 2013, 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.
 
-@DomName('SpeechRecognition')
 @SupportedBrowser(SupportedBrowser.CHROME, '25')
-@Experimental()
-// https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#speechreco-section
 @Native("SpeechRecognition")
 class SpeechRecognition extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -36998,8 +27085,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('SpeechRecognition.audioendEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> audioEndEvent =
       const EventStreamProvider<Event>('audioend');
 
@@ -37009,8 +27094,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('SpeechRecognition.audiostartEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> audioStartEvent =
       const EventStreamProvider<Event>('audiostart');
 
@@ -37020,8 +27103,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('SpeechRecognition.endEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> endEvent =
       const EventStreamProvider<Event>('end');
 
@@ -37031,8 +27112,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('SpeechRecognition.errorEvent')
-  @DocsEditable()
   static const EventStreamProvider<SpeechRecognitionError> errorEvent =
       const EventStreamProvider<SpeechRecognitionError>('error');
 
@@ -37042,8 +27121,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('SpeechRecognition.nomatchEvent')
-  @DocsEditable()
   static const EventStreamProvider<SpeechRecognitionEvent> noMatchEvent =
       const EventStreamProvider<SpeechRecognitionEvent>('nomatch');
 
@@ -37053,8 +27130,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('SpeechRecognition.resultEvent')
-  @DocsEditable()
   static const EventStreamProvider<SpeechRecognitionEvent> resultEvent =
       const EventStreamProvider<SpeechRecognitionEvent>('result');
 
@@ -37064,8 +27139,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('SpeechRecognition.soundendEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> soundEndEvent =
       const EventStreamProvider<Event>('soundend');
 
@@ -37075,8 +27148,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('SpeechRecognition.soundstartEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> soundStartEvent =
       const EventStreamProvider<Event>('soundstart');
 
@@ -37086,8 +27157,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('SpeechRecognition.speechendEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> speechEndEvent =
       const EventStreamProvider<Event>('speechend');
 
@@ -37097,8 +27166,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('SpeechRecognition.speechstartEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> speechStartEvent =
       const EventStreamProvider<Event>('speechstart');
 
@@ -37108,8 +27175,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('SpeechRecognition.startEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> startEvent =
       const EventStreamProvider<Event>('start');
 
@@ -37117,96 +27182,55 @@
   static bool get supported => JS(
       'bool', '!!(window.SpeechRecognition || window.webkitSpeechRecognition)');
 
-  @DomName('SpeechRecognition.audioTrack')
-  @DocsEditable()
-  @Experimental() // untriaged
   MediaStreamTrack audioTrack;
 
-  @DomName('SpeechRecognition.continuous')
-  @DocsEditable()
   bool continuous;
 
-  @DomName('SpeechRecognition.grammars')
-  @DocsEditable()
   SpeechGrammarList grammars;
 
-  @DomName('SpeechRecognition.interimResults')
-  @DocsEditable()
   bool interimResults;
 
-  @DomName('SpeechRecognition.lang')
-  @DocsEditable()
   String lang;
 
-  @DomName('SpeechRecognition.maxAlternatives')
-  @DocsEditable()
   int maxAlternatives;
 
-  @DomName('SpeechRecognition.abort')
-  @DocsEditable()
   void abort() native;
 
-  @DomName('SpeechRecognition.start')
-  @DocsEditable()
   void start() native;
 
-  @DomName('SpeechRecognition.stop')
-  @DocsEditable()
   void stop() native;
 
   /// Stream of `audioend` events handled by this [SpeechRecognition].
-  @DomName('SpeechRecognition.onaudioend')
-  @DocsEditable()
   Stream<Event> get onAudioEnd => audioEndEvent.forTarget(this);
 
   /// Stream of `audiostart` events handled by this [SpeechRecognition].
-  @DomName('SpeechRecognition.onaudiostart')
-  @DocsEditable()
   Stream<Event> get onAudioStart => audioStartEvent.forTarget(this);
 
   /// Stream of `end` events handled by this [SpeechRecognition].
-  @DomName('SpeechRecognition.onend')
-  @DocsEditable()
   Stream<Event> get onEnd => endEvent.forTarget(this);
 
   /// Stream of `error` events handled by this [SpeechRecognition].
-  @DomName('SpeechRecognition.onerror')
-  @DocsEditable()
   Stream<SpeechRecognitionError> get onError => errorEvent.forTarget(this);
 
   /// Stream of `nomatch` events handled by this [SpeechRecognition].
-  @DomName('SpeechRecognition.onnomatch')
-  @DocsEditable()
   Stream<SpeechRecognitionEvent> get onNoMatch => noMatchEvent.forTarget(this);
 
   /// Stream of `result` events handled by this [SpeechRecognition].
-  @DomName('SpeechRecognition.onresult')
-  @DocsEditable()
   Stream<SpeechRecognitionEvent> get onResult => resultEvent.forTarget(this);
 
   /// Stream of `soundend` events handled by this [SpeechRecognition].
-  @DomName('SpeechRecognition.onsoundend')
-  @DocsEditable()
   Stream<Event> get onSoundEnd => soundEndEvent.forTarget(this);
 
   /// Stream of `soundstart` events handled by this [SpeechRecognition].
-  @DomName('SpeechRecognition.onsoundstart')
-  @DocsEditable()
   Stream<Event> get onSoundStart => soundStartEvent.forTarget(this);
 
   /// Stream of `speechend` events handled by this [SpeechRecognition].
-  @DomName('SpeechRecognition.onspeechend')
-  @DocsEditable()
   Stream<Event> get onSpeechEnd => speechEndEvent.forTarget(this);
 
   /// Stream of `speechstart` events handled by this [SpeechRecognition].
-  @DomName('SpeechRecognition.onspeechstart')
-  @DocsEditable()
   Stream<Event> get onSpeechStart => speechStartEvent.forTarget(this);
 
   /// Stream of `start` events handled by this [SpeechRecognition].
-  @DomName('SpeechRecognition.onstart')
-  @DocsEditable()
   Stream<Event> get onStart => startEvent.forTarget(this);
 
   factory SpeechRecognition() {
@@ -37218,11 +27242,7 @@
 // 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.
 
-@DocsEditable()
-@DomName('SpeechRecognitionAlternative')
 @SupportedBrowser(SupportedBrowser.CHROME, '25')
-@Experimental()
-// https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#speechrecognitionalternative
 @Native("SpeechRecognitionAlternative")
 class SpeechRecognitionAlternative extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -37230,23 +27250,15 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SpeechRecognitionAlternative.confidence')
-  @DocsEditable()
   final num confidence;
 
-  @DomName('SpeechRecognitionAlternative.transcript')
-  @DocsEditable()
   final String transcript;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SpeechRecognitionError')
 @SupportedBrowser(SupportedBrowser.CHROME, '25')
-@Experimental()
-// https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#speechreco-error
 @Native("SpeechRecognitionError")
 class SpeechRecognitionError extends Event {
   // To suppress missing implicit constructor warnings.
@@ -37254,8 +27266,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SpeechRecognitionError.SpeechRecognitionError')
-  @DocsEditable()
   factory SpeechRecognitionError(String type, [Map initDict]) {
     if (initDict != null) {
       var initDict_1 = convertDartToNative_Dictionary(initDict);
@@ -37271,23 +27281,15 @@
   static SpeechRecognitionError _create_2(type) =>
       JS('SpeechRecognitionError', 'new SpeechRecognitionError(#)', type);
 
-  @DomName('SpeechRecognitionError.error')
-  @DocsEditable()
   final String error;
 
-  @DomName('SpeechRecognitionError.message')
-  @DocsEditable()
   final String message;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SpeechRecognitionEvent')
 @SupportedBrowser(SupportedBrowser.CHROME, '25')
-@Experimental()
-// https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#speechreco-event
 @Native("SpeechRecognitionEvent")
 class SpeechRecognitionEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -37295,8 +27297,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SpeechRecognitionEvent.SpeechRecognitionEvent')
-  @DocsEditable()
   factory SpeechRecognitionEvent(String type, [Map initDict]) {
     if (initDict != null) {
       var initDict_1 = convertDartToNative_Dictionary(initDict);
@@ -37312,20 +27312,12 @@
   static SpeechRecognitionEvent _create_2(type) =>
       JS('SpeechRecognitionEvent', 'new SpeechRecognitionEvent(#)', type);
 
-  @DomName('SpeechRecognitionEvent.emma')
-  @DocsEditable()
   final Document emma;
 
-  @DomName('SpeechRecognitionEvent.interpretation')
-  @DocsEditable()
   final Document interpretation;
 
-  @DomName('SpeechRecognitionEvent.resultIndex')
-  @DocsEditable()
   final int resultIndex;
 
-  @DomName('SpeechRecognitionEvent.results')
-  @DocsEditable()
   @Returns('_SpeechRecognitionResultList|Null')
   @Creates('_SpeechRecognitionResultList')
   final List<SpeechRecognitionResult> results;
@@ -37334,11 +27326,7 @@
 // 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.
 
-@DocsEditable()
-@DomName('SpeechRecognitionResult')
 @SupportedBrowser(SupportedBrowser.CHROME, '25')
-@Experimental()
-// https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#speechrecognitionresult
 @Native("SpeechRecognitionResult")
 class SpeechRecognitionResult extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -37346,73 +27334,52 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SpeechRecognitionResult.isFinal')
-  @DocsEditable()
   final bool isFinal;
 
-  @DomName('SpeechRecognitionResult.length')
-  @DocsEditable()
   final int length;
 
-  @DomName('SpeechRecognitionResult.item')
-  @DocsEditable()
   SpeechRecognitionAlternative item(int index) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SpeechSynthesis')
-// https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section
-@Experimental()
 @Native("SpeechSynthesis")
 class SpeechSynthesis extends EventTarget {
+  @DomName('SpeechSynthesis.getVoices')
+  @DocsEditable()
+  List<SpeechSynthesisVoice> getVoices() {
+    List<SpeechSynthesisVoice> voices = _getVoices();
+    if (voices.length > 0) applyExtension('SpeechSynthesisVoice', voices[0]);
+    return voices;
+  }
+
   // To suppress missing implicit constructor warnings.
   factory SpeechSynthesis._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SpeechSynthesis.paused')
-  @DocsEditable()
   final bool paused;
 
-  @DomName('SpeechSynthesis.pending')
-  @DocsEditable()
   final bool pending;
 
-  @DomName('SpeechSynthesis.speaking')
-  @DocsEditable()
   final bool speaking;
 
-  @DomName('SpeechSynthesis.cancel')
-  @DocsEditable()
   void cancel() native;
 
-  @DomName('SpeechSynthesis.getVoices')
-  @DocsEditable()
-  List<SpeechSynthesisVoice> getVoices() native;
+  @JSName('getVoices')
+  List<SpeechSynthesisVoice> _getVoices() native;
 
-  @DomName('SpeechSynthesis.pause')
-  @DocsEditable()
   void pause() native;
 
-  @DomName('SpeechSynthesis.resume')
-  @DocsEditable()
   void resume() native;
 
-  @DomName('SpeechSynthesis.speak')
-  @DocsEditable()
   void speak(SpeechSynthesisUtterance utterance) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SpeechSynthesisEvent')
-// https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section
-@Experimental()
 @Native("SpeechSynthesisEvent")
 class SpeechSynthesisEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -37420,31 +27387,18 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SpeechSynthesisEvent.charIndex')
-  @DocsEditable()
   final int charIndex;
 
-  @DomName('SpeechSynthesisEvent.elapsedTime')
-  @DocsEditable()
   final num elapsedTime;
 
-  @DomName('SpeechSynthesisEvent.name')
-  @DocsEditable()
   final String name;
 
-  @DomName('SpeechSynthesisEvent.utterance')
-  @DocsEditable()
-  @Experimental() // untriaged
   final SpeechSynthesisUtterance utterance;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SpeechSynthesisUtterance')
-// https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section
-@Experimental()
 @Native("SpeechSynthesisUtterance")
 class SpeechSynthesisUtterance extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -37458,8 +27412,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('SpeechSynthesisUtterance.boundaryEvent')
-  @DocsEditable()
   static const EventStreamProvider<SpeechSynthesisEvent> boundaryEvent =
       const EventStreamProvider<SpeechSynthesisEvent>('boundary');
 
@@ -37469,8 +27421,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('SpeechSynthesisUtterance.endEvent')
-  @DocsEditable()
   static const EventStreamProvider<SpeechSynthesisEvent> endEvent =
       const EventStreamProvider<SpeechSynthesisEvent>('end');
 
@@ -37480,8 +27430,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('SpeechSynthesisUtterance.errorEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
@@ -37491,8 +27439,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('SpeechSynthesisUtterance.markEvent')
-  @DocsEditable()
   static const EventStreamProvider<SpeechSynthesisEvent> markEvent =
       const EventStreamProvider<SpeechSynthesisEvent>('mark');
 
@@ -37502,8 +27448,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('SpeechSynthesisUtterance.pauseEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> pauseEvent =
       const EventStreamProvider<Event>('pause');
 
@@ -37513,8 +27457,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('SpeechSynthesisUtterance.resumeEvent')
-  @DocsEditable()
   static const EventStreamProvider<SpeechSynthesisEvent> resumeEvent =
       const EventStreamProvider<SpeechSynthesisEvent>('resume');
 
@@ -37524,13 +27466,9 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('SpeechSynthesisUtterance.startEvent')
-  @DocsEditable()
   static const EventStreamProvider<SpeechSynthesisEvent> startEvent =
       const EventStreamProvider<SpeechSynthesisEvent>('start');
 
-  @DomName('SpeechSynthesisUtterance.SpeechSynthesisUtterance')
-  @DocsEditable()
   factory SpeechSynthesisUtterance([String text]) {
     if (text != null) {
       return SpeechSynthesisUtterance._create_1(text);
@@ -37542,73 +27480,43 @@
   static SpeechSynthesisUtterance _create_2() =>
       JS('SpeechSynthesisUtterance', 'new SpeechSynthesisUtterance()');
 
-  @DomName('SpeechSynthesisUtterance.lang')
-  @DocsEditable()
   String lang;
 
-  @DomName('SpeechSynthesisUtterance.pitch')
-  @DocsEditable()
   num pitch;
 
-  @DomName('SpeechSynthesisUtterance.rate')
-  @DocsEditable()
   num rate;
 
-  @DomName('SpeechSynthesisUtterance.text')
-  @DocsEditable()
   String text;
 
-  @DomName('SpeechSynthesisUtterance.voice')
-  @DocsEditable()
   SpeechSynthesisVoice voice;
 
-  @DomName('SpeechSynthesisUtterance.volume')
-  @DocsEditable()
   num volume;
 
   /// Stream of `boundary` events handled by this [SpeechSynthesisUtterance].
-  @DomName('SpeechSynthesisUtterance.onboundary')
-  @DocsEditable()
   Stream<SpeechSynthesisEvent> get onBoundary => boundaryEvent.forTarget(this);
 
   /// Stream of `end` events handled by this [SpeechSynthesisUtterance].
-  @DomName('SpeechSynthesisUtterance.onend')
-  @DocsEditable()
   Stream<SpeechSynthesisEvent> get onEnd => endEvent.forTarget(this);
 
   /// Stream of `error` events handled by this [SpeechSynthesisUtterance].
-  @DomName('SpeechSynthesisUtterance.onerror')
-  @DocsEditable()
   Stream<Event> get onError => errorEvent.forTarget(this);
 
   /// Stream of `mark` events handled by this [SpeechSynthesisUtterance].
-  @DomName('SpeechSynthesisUtterance.onmark')
-  @DocsEditable()
   Stream<SpeechSynthesisEvent> get onMark => markEvent.forTarget(this);
 
   /// Stream of `pause` events handled by this [SpeechSynthesisUtterance].
-  @DomName('SpeechSynthesisUtterance.onpause')
-  @DocsEditable()
   Stream<Event> get onPause => pauseEvent.forTarget(this);
 
   /// Stream of `resume` events handled by this [SpeechSynthesisUtterance].
-  @DomName('SpeechSynthesisUtterance.onresume')
-  @DocsEditable()
   Stream<SpeechSynthesisEvent> get onResume => resumeEvent.forTarget(this);
 
   /// Stream of `start` events handled by this [SpeechSynthesisUtterance].
-  @DomName('SpeechSynthesisUtterance.onstart')
-  @DocsEditable()
   Stream<SpeechSynthesisEvent> get onStart => startEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SpeechSynthesisVoice')
-// https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section
-@Experimental()
 @Native("SpeechSynthesisVoice")
 class SpeechSynthesisVoice extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -37617,34 +27525,21 @@
   }
 
   @JSName('default')
-  @DomName('SpeechSynthesisVoice.default')
-  @DocsEditable()
   final bool defaultValue;
 
-  @DomName('SpeechSynthesisVoice.lang')
-  @DocsEditable()
   final String lang;
 
-  @DomName('SpeechSynthesisVoice.localService')
-  @DocsEditable()
   final bool localService;
 
-  @DomName('SpeechSynthesisVoice.name')
-  @DocsEditable()
   final String name;
 
   @JSName('voiceURI')
-  @DomName('SpeechSynthesisVoice.voiceURI')
-  @DocsEditable()
   final String voiceUri;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('StaticRange')
-@Experimental() // untriaged
 @Native("StaticRange")
 class StaticRange extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -37652,29 +27547,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('StaticRange.collapsed')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool collapsed;
 
-  @DomName('StaticRange.endContainer')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Node endContainer;
 
-  @DomName('StaticRange.endOffset')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int endOffset;
 
-  @DomName('StaticRange.startContainer')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Node startContainer;
 
-  @DomName('StaticRange.startOffset')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int startOffset;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -37706,7 +27586,6 @@
  * [Maps](https://www.dartlang.org/guides/libraries/library-tour#maps)
  * section of the library tour.
  */
-@DomName('Storage')
 @Unstable()
 @Native("Storage")
 class Storage extends Interceptor with MapMixin<String, String> {
@@ -37772,33 +27651,21 @@
   }
 
   @JSName('length')
-  @DomName('Storage.length')
-  @DocsEditable()
   final int _length;
 
   @JSName('clear')
-  @DomName('Storage.clear')
-  @DocsEditable()
   void _clear() native;
 
   @JSName('getItem')
-  @DomName('Storage.getItem')
-  @DocsEditable()
   String _getItem(String key) native;
 
   @JSName('key')
-  @DomName('Storage.key')
-  @DocsEditable()
   String _key(int index) native;
 
   @JSName('removeItem')
-  @DomName('Storage.removeItem')
-  @DocsEditable()
   void _removeItem(String key) native;
 
   @JSName('setItem')
-  @DomName('Storage.setItem')
-  @DocsEditable()
   void _setItem(String key, String value) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -37807,9 +27674,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('StorageErrorCallback')
-// http://www.w3.org/TR/quota-api/#storageerrorcallback-callback
-@Experimental()
 typedef void StorageErrorCallback(DomError error);
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -37817,7 +27681,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('StorageEvent')
 @Unstable()
 @Native("StorageEvent")
 class StorageEvent extends Event {
@@ -37835,8 +27698,6 @@
     return e;
   }
 
-  @DomName('StorageEvent.StorageEvent')
-  @DocsEditable()
   factory StorageEvent._(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -37849,29 +27710,17 @@
   static StorageEvent _create_2(type) =>
       JS('StorageEvent', 'new StorageEvent(#)', type);
 
-  @DomName('StorageEvent.key')
-  @DocsEditable()
   final String key;
 
-  @DomName('StorageEvent.newValue')
-  @DocsEditable()
   final String newValue;
 
-  @DomName('StorageEvent.oldValue')
-  @DocsEditable()
   final String oldValue;
 
-  @DomName('StorageEvent.storageArea')
-  @DocsEditable()
   final Storage storageArea;
 
-  @DomName('StorageEvent.url')
-  @DocsEditable()
   final String url;
 
   @JSName('initStorageEvent')
-  @DomName('StorageEvent.initStorageEvent')
-  @DocsEditable()
   void _initStorageEvent(
       String typeArg,
       bool canBubbleArg,
@@ -37886,9 +27735,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.
 
-@DocsEditable()
-@DomName('StorageManager')
-@Experimental() // untriaged
 @Native("StorageManager")
 class StorageManager extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -37896,20 +27742,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('StorageManager.estimate')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<Map<String, dynamic>> estimate() =>
       promiseToFutureAsMap(JS("", "#.estimate()", this));
 
-  @DomName('StorageManager.persist')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<bool> persist() => promiseToFuture<bool>(JS("", "#.persist()", this));
 
-  @DomName('StorageManager.persisted')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<bool> persisted() =>
       promiseToFuture<bool>(JS("", "#.persisted()", this));
 }
@@ -37919,9 +27756,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('StorageQuotaCallback')
-// http://www.w3.org/TR/quota-api/#idl-def-StorageQuotaCallback
-@Experimental()
 typedef void StorageQuotaCallback(int grantedQuotaInBytes);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -37929,17 +27763,12 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('StorageUsageCallback')
-// http://www.w3.org/TR/quota-api/#idl-def-StorageUsageCallback
-@Experimental()
 typedef void StorageUsageCallback(
     int currentUsageInBytes, int currentQuotaInBytes);
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLStyleElement')
 @Native("HTMLStyleElement")
 class StyleElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -37947,8 +27776,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLStyleElement.HTMLStyleElement')
-  @DocsEditable()
   factory StyleElement() => JS(
       'returns:StyleElement;creates:StyleElement;new:true',
       '#.createElement(#)',
@@ -37961,30 +27788,18 @@
    */
   StyleElement.created() : super.created();
 
-  @DomName('HTMLStyleElement.disabled')
-  @DocsEditable()
   bool disabled;
 
-  @DomName('HTMLStyleElement.media')
-  @DocsEditable()
   String media;
 
-  @DomName('HTMLStyleElement.sheet')
-  @DocsEditable()
   final StyleSheet sheet;
 
-  @DomName('HTMLStyleElement.type')
-  @DocsEditable()
   String type;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('StyleMedia')
-// http://developer.apple.com/library/safari/#documentation/SafariDOMAdditions/Reference/StyleMedia/StyleMedia/StyleMedia.html
-@Experimental() // nonstandard
 @Native("StyleMedia")
 class StyleMedia extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -37992,21 +27807,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('StyleMedia.type')
-  @DocsEditable()
   final String type;
 
-  @DomName('StyleMedia.matchMedium')
-  @DocsEditable()
   bool matchMedium(String mediaquery) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('StylePropertyMap')
-@Experimental() // untriaged
 @Native("StylePropertyMap")
 class StylePropertyMap extends StylePropertyMapReadonly {
   // To suppress missing implicit constructor warnings.
@@ -38014,28 +27822,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('StylePropertyMap.append')
-  @DocsEditable()
-  @Experimental() // untriaged
   void append(String property, Object value) native;
 
-  @DomName('StylePropertyMap.delete')
-  @DocsEditable()
-  @Experimental() // untriaged
   void delete(String property) native;
 
-  @DomName('StylePropertyMap.set')
-  @DocsEditable()
-  @Experimental() // untriaged
   void set(String property, Object value) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('StylePropertyMapReadonly')
-@Experimental() // untriaged
 @Native("StylePropertyMapReadonly")
 class StylePropertyMapReadonly extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -38043,32 +27839,18 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('StylePropertyMapReadonly.get')
-  @DocsEditable()
-  @Experimental() // untriaged
   CssStyleValue get(String property) native;
 
-  @DomName('StylePropertyMapReadonly.getAll')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<CssStyleValue> getAll(String property) native;
 
-  @DomName('StylePropertyMapReadonly.getProperties')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<String> getProperties() native;
 
-  @DomName('StylePropertyMapReadonly.has')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool has(String property) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('StyleSheet')
 @Native("StyleSheet")
 class StyleSheet extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -38076,41 +27858,24 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('StyleSheet.disabled')
-  @DocsEditable()
   bool disabled;
 
-  @DomName('StyleSheet.href')
-  @DocsEditable()
   final String href;
 
-  @DomName('StyleSheet.media')
-  @DocsEditable()
   final MediaList media;
 
-  @DomName('StyleSheet.ownerNode')
-  @DocsEditable()
   final Node ownerNode;
 
-  @DomName('StyleSheet.parentStyleSheet')
-  @DocsEditable()
   final StyleSheet parentStyleSheet;
 
-  @DomName('StyleSheet.title')
-  @DocsEditable()
   final String title;
 
-  @DomName('StyleSheet.type')
-  @DocsEditable()
   final String type;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SyncEvent')
-@Experimental() // untriaged
 @Native("SyncEvent")
 class SyncEvent extends ExtendableEvent {
   // To suppress missing implicit constructor warnings.
@@ -38118,8 +27883,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SyncEvent.SyncEvent')
-  @DocsEditable()
   factory SyncEvent(String type, Map init) {
     var init_1 = convertDartToNative_Dictionary(init);
     return SyncEvent._create_1(type, init_1);
@@ -38127,23 +27890,14 @@
   static SyncEvent _create_1(type, init) =>
       JS('SyncEvent', 'new SyncEvent(#,#)', type, init);
 
-  @DomName('SyncEvent.lastChance')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool lastChance;
 
-  @DomName('SyncEvent.tag')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String tag;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SyncManager')
-@Experimental() // untriaged
 @Native("SyncManager")
 class SyncManager extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -38151,15 +27905,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SyncManager.getTags')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<List<String>> getTags() =>
       promiseToFuture<List<String>>(JS("", "#.getTags()", this));
 
-  @DomName('SyncManager.register')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future register(String tag) =>
       promiseToFuture(JS("", "#.register(#)", this, tag));
 }
@@ -38167,8 +27915,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.
 
-@DocsEditable()
-@DomName('HTMLTableCaptionElement')
 @Native("HTMLTableCaptionElement")
 class TableCaptionElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -38176,8 +27922,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLTableCaptionElement.HTMLTableCaptionElement')
-  @DocsEditable()
   factory TableCaptionElement() => JS(
       'returns:TableCaptionElement;creates:TableCaptionElement;new:true',
       '#.createElement(#)',
@@ -38194,8 +27938,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.
 
-@DocsEditable()
-@DomName('HTMLTableCellElement')
 @Native(
     "HTMLTableCellElement,HTMLTableDataCellElement,HTMLTableHeaderCellElement")
 class TableCellElement extends HtmlElement {
@@ -38204,8 +27946,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLTableCellElement.HTMLTableCellElement')
-  @DocsEditable()
   factory TableCellElement() => JS(
       'returns:TableCellElement;creates:TableCellElement;new:true',
       '#.createElement(#)',
@@ -38218,28 +27958,18 @@
    */
   TableCellElement.created() : super.created();
 
-  @DomName('HTMLTableCellElement.cellIndex')
-  @DocsEditable()
   final int cellIndex;
 
-  @DomName('HTMLTableCellElement.colSpan')
-  @DocsEditable()
   int colSpan;
 
-  @DomName('HTMLTableCellElement.headers')
-  @DocsEditable()
   String headers;
 
-  @DomName('HTMLTableCellElement.rowSpan')
-  @DocsEditable()
   int rowSpan;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLTableColElement')
 @Native("HTMLTableColElement")
 class TableColElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -38247,8 +27977,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLTableColElement.HTMLTableColElement')
-  @DocsEditable()
   factory TableColElement() => JS(
       'returns:TableColElement;creates:TableColElement;new:true',
       '#.createElement(#)',
@@ -38261,23 +27989,17 @@
    */
   TableColElement.created() : super.created();
 
-  @DomName('HTMLTableColElement.span')
-  @DocsEditable()
   int span;
 }
 // Copyright (c) 2013, 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.
 
-@DocsEditable()
-@DomName('HTMLTableElement')
 @Native("HTMLTableElement")
 class TableElement extends HtmlElement {
-  @DomName('HTMLTableElement.tBodies')
   List<TableSectionElement> get tBodies =>
       new _WrappedList<TableSectionElement>(_tBodies);
 
-  @DomName('HTMLTableElement.rows')
   List<TableRowElement> get rows => new _WrappedList<TableRowElement>(_rows);
 
   TableRowElement addRow() {
@@ -38323,8 +28045,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLTableElement.HTMLTableElement')
-  @DocsEditable()
   factory TableElement() => JS(
       'returns:TableElement;creates:TableElement;new:true',
       '#.createElement(#)',
@@ -38337,77 +28057,48 @@
    */
   TableElement.created() : super.created();
 
-  @DomName('HTMLTableElement.caption')
-  @DocsEditable()
   TableCaptionElement caption;
 
   @JSName('rows')
-  @DomName('HTMLTableElement.rows')
-  @DocsEditable()
   @Returns('HtmlCollection|Null')
   @Creates('HtmlCollection')
   final List<Node> _rows;
 
   @JSName('tBodies')
-  @DomName('HTMLTableElement.tBodies')
-  @DocsEditable()
   @Returns('HtmlCollection|Null')
   @Creates('HtmlCollection')
   final List<Node> _tBodies;
 
-  @DomName('HTMLTableElement.tFoot')
-  @DocsEditable()
   TableSectionElement tFoot;
 
-  @DomName('HTMLTableElement.tHead')
-  @DocsEditable()
   TableSectionElement tHead;
 
   @JSName('createCaption')
-  @DomName('HTMLTableElement.createCaption')
-  @DocsEditable()
   TableCaptionElement _createCaption() native;
 
   @JSName('createTFoot')
-  @DomName('HTMLTableElement.createTFoot')
-  @DocsEditable()
   TableSectionElement _createTFoot() native;
 
   @JSName('createTHead')
-  @DomName('HTMLTableElement.createTHead')
-  @DocsEditable()
   TableSectionElement _createTHead() native;
 
-  @DomName('HTMLTableElement.deleteCaption')
-  @DocsEditable()
   void deleteCaption() native;
 
-  @DomName('HTMLTableElement.deleteRow')
-  @DocsEditable()
   void deleteRow(int index) native;
 
-  @DomName('HTMLTableElement.deleteTFoot')
-  @DocsEditable()
   void deleteTFoot() native;
 
-  @DomName('HTMLTableElement.deleteTHead')
-  @DocsEditable()
   void deleteTHead() native;
 
   @JSName('insertRow')
-  @DomName('HTMLTableElement.insertRow')
-  @DocsEditable()
   TableRowElement _insertRow([int index]) native;
 }
 // Copyright (c) 2013, 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.
 
-@DocsEditable()
-@DomName('HTMLTableRowElement')
 @Native("HTMLTableRowElement")
 class TableRowElement extends HtmlElement {
-  @DomName('HTMLTableRowElement.cells')
   List<TableCellElement> get cells =>
       new _WrappedList<TableCellElement>(_cells);
 
@@ -38440,8 +28131,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLTableRowElement.HTMLTableRowElement')
-  @DocsEditable()
   factory TableRowElement() => JS(
       'returns:TableRowElement;creates:TableRowElement;new:true',
       '#.createElement(#)',
@@ -38455,38 +28144,25 @@
   TableRowElement.created() : super.created();
 
   @JSName('cells')
-  @DomName('HTMLTableRowElement.cells')
-  @DocsEditable()
   @Returns('HtmlCollection|Null')
   @Creates('HtmlCollection')
   final List<Node> _cells;
 
-  @DomName('HTMLTableRowElement.rowIndex')
-  @DocsEditable()
   final int rowIndex;
 
-  @DomName('HTMLTableRowElement.sectionRowIndex')
-  @DocsEditable()
   final int sectionRowIndex;
 
-  @DomName('HTMLTableRowElement.deleteCell')
-  @DocsEditable()
   void deleteCell(int index) native;
 
   @JSName('insertCell')
-  @DomName('HTMLTableRowElement.insertCell')
-  @DocsEditable()
   HtmlElement _insertCell([int index]) native;
 }
 // Copyright (c) 2013, 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.
 
-@DocsEditable()
-@DomName('HTMLTableSectionElement')
 @Native("HTMLTableSectionElement")
 class TableSectionElement extends HtmlElement {
-  @DomName('HTMLTableSectionElement.rows')
   List<TableRowElement> get rows => new _WrappedList<TableRowElement>(_rows);
 
   TableRowElement addRow() {
@@ -38524,28 +28200,19 @@
   TableSectionElement.created() : super.created();
 
   @JSName('rows')
-  @DomName('HTMLTableSectionElement.rows')
-  @DocsEditable()
   @Returns('HtmlCollection|Null')
   @Creates('HtmlCollection')
   final List<Node> _rows;
 
-  @DomName('HTMLTableSectionElement.deleteRow')
-  @DocsEditable()
   void deleteRow(int index) native;
 
   @JSName('insertRow')
-  @DomName('HTMLTableSectionElement.insertRow')
-  @DocsEditable()
   HtmlElement _insertRow([int index]) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('TaskAttributionTiming')
-@Experimental() // untriaged
 @Native("TaskAttributionTiming")
 class TaskAttributionTiming extends PerformanceEntry {
   // To suppress missing implicit constructor warnings.
@@ -38553,30 +28220,15 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('TaskAttributionTiming.containerId')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String containerId;
 
-  @DomName('TaskAttributionTiming.containerName')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String containerName;
 
-  @DomName('TaskAttributionTiming.containerSrc')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String containerSrc;
 
-  @DomName('TaskAttributionTiming.containerType')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String containerType;
 
   @JSName('scriptURL')
-  @DomName('TaskAttributionTiming.scriptURL')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String scriptUrl;
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -38585,11 +28237,7 @@
 
 // WARNING: Do not edit - generated code.
 
-@Experimental()
-@DomName('HTMLTemplateElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
-@Experimental()
-// https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/index.html#template-element
 @Native("HTMLTemplateElement")
 class TemplateElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -38597,8 +28245,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLTemplateElement.HTMLTemplateElement')
-  @DocsEditable()
   factory TemplateElement() => document.createElement("template");
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
@@ -38610,8 +28256,6 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('template');
 
-  @DomName('HTMLTemplateElement.content')
-  @DocsEditable()
   final DocumentFragment content;
 
   /**
@@ -38636,7 +28280,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('Text')
 @Native("Text")
 class Text extends CharacterData {
   factory Text(String data) => JS(
@@ -38649,32 +28292,20 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Text.assignedSlot')
-  @DocsEditable()
-  @Experimental() // untriaged
   final SlotElement assignedSlot;
 
-  @DomName('Text.wholeText')
-  @DocsEditable()
   final String wholeText;
 
-  @DomName('Text.getDestinationInsertionPoints')
-  @DocsEditable()
-  @Experimental() // untriaged
   @Returns('NodeList|Null')
   @Creates('NodeList')
   List<Node> getDestinationInsertionPoints() native;
 
-  @DomName('Text.splitText')
-  @DocsEditable()
   Text splitText(int offset) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLTextAreaElement')
 @Native("HTMLTextAreaElement")
 class TextAreaElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -38682,8 +28313,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLTextAreaElement.HTMLTextAreaElement')
-  @DocsEditable()
   factory TextAreaElement() => JS(
       'returns:TextAreaElement;creates:TextAreaElement;new:true',
       '#.createElement(#)',
@@ -38696,148 +28325,76 @@
    */
   TextAreaElement.created() : super.created();
 
-  @DomName('HTMLTextAreaElement.autocapitalize')
-  @DocsEditable()
-  @Experimental() // untriaged
   String autocapitalize;
 
-  @DomName('HTMLTextAreaElement.autofocus')
-  @DocsEditable()
   bool autofocus;
 
-  @DomName('HTMLTextAreaElement.cols')
-  @DocsEditable()
   int cols;
 
-  @DomName('HTMLTextAreaElement.defaultValue')
-  @DocsEditable()
   String defaultValue;
 
-  @DomName('HTMLTextAreaElement.dirName')
-  @DocsEditable()
-  // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#dom-textarea-dirname
-  @Experimental()
   String dirName;
 
-  @DomName('HTMLTextAreaElement.disabled')
-  @DocsEditable()
   bool disabled;
 
-  @DomName('HTMLTextAreaElement.form')
-  @DocsEditable()
   final FormElement form;
 
-  @DomName('HTMLTextAreaElement.labels')
-  @DocsEditable()
   @Unstable()
   @Returns('NodeList|Null')
   @Creates('NodeList')
   final List<Node> labels;
 
-  @DomName('HTMLTextAreaElement.maxLength')
-  @DocsEditable()
   int maxLength;
 
-  @DomName('HTMLTextAreaElement.minLength')
-  @DocsEditable()
-  @Experimental() // untriaged
   int minLength;
 
-  @DomName('HTMLTextAreaElement.name')
-  @DocsEditable()
   String name;
 
-  @DomName('HTMLTextAreaElement.placeholder')
-  @DocsEditable()
   String placeholder;
 
-  @DomName('HTMLTextAreaElement.readOnly')
-  @DocsEditable()
   bool readOnly;
 
-  @DomName('HTMLTextAreaElement.required')
-  @DocsEditable()
   bool required;
 
-  @DomName('HTMLTextAreaElement.rows')
-  @DocsEditable()
   int rows;
 
-  @DomName('HTMLTextAreaElement.selectionDirection')
-  @DocsEditable()
   String selectionDirection;
 
-  @DomName('HTMLTextAreaElement.selectionEnd')
-  @DocsEditable()
   int selectionEnd;
 
-  @DomName('HTMLTextAreaElement.selectionStart')
-  @DocsEditable()
   int selectionStart;
 
-  @DomName('HTMLTextAreaElement.textLength')
-  @DocsEditable()
   final int textLength;
 
-  @DomName('HTMLTextAreaElement.type')
-  @DocsEditable()
   final String type;
 
-  @DomName('HTMLTextAreaElement.validationMessage')
-  @DocsEditable()
   final String validationMessage;
 
-  @DomName('HTMLTextAreaElement.validity')
-  @DocsEditable()
   final ValidityState validity;
 
-  @DomName('HTMLTextAreaElement.value')
-  @DocsEditable()
   String value;
 
-  @DomName('HTMLTextAreaElement.willValidate')
-  @DocsEditable()
   final bool willValidate;
 
-  @DomName('HTMLTextAreaElement.wrap')
-  @DocsEditable()
   String wrap;
 
-  @DomName('HTMLTextAreaElement.checkValidity')
-  @DocsEditable()
   bool checkValidity() native;
 
-  @DomName('HTMLTextAreaElement.reportValidity')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool reportValidity() native;
 
-  @DomName('HTMLTextAreaElement.select')
-  @DocsEditable()
   void select() native;
 
-  @DomName('HTMLTextAreaElement.setCustomValidity')
-  @DocsEditable()
   void setCustomValidity(String error) native;
 
-  @DomName('HTMLTextAreaElement.setRangeText')
-  @DocsEditable()
-  // http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#dom-textarea/input-setrangetext
-  @Experimental()
   void setRangeText(String replacement,
       {int start, int end, String selectionMode}) native;
 
-  @DomName('HTMLTextAreaElement.setSelectionRange')
-  @DocsEditable()
   void setSelectionRange(int start, int end, [String direction]) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('TextDetector')
-@Experimental() // untriaged
 @Native("TextDetector")
 class TextDetector extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -38845,16 +28402,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('TextDetector.TextDetector')
-  @DocsEditable()
   factory TextDetector() {
     return TextDetector._create_1();
   }
   static TextDetector _create_1() => JS('TextDetector', 'new TextDetector()');
 
-  @DomName('TextDetector.detect')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<List<DetectedText>> detect(/*ImageBitmapSource*/ image) =>
       promiseToFuture<List<DetectedText>>(JS("", "#.detect(#)", this, image));
 }
@@ -38864,7 +28416,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('TextEvent')
 @Unstable()
 @Native("TextEvent")
 class TextEvent extends UIEvent {
@@ -38885,13 +28436,9 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('TextEvent.data')
-  @DocsEditable()
   final String data;
 
   @JSName('initTextEvent')
-  @DomName('TextEvent.initTextEvent')
-  @DocsEditable()
   void _initTextEvent(String type, bool bubbles, bool cancelable, Window view,
       String data) native;
 }
@@ -38899,8 +28446,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.
 
-@DocsEditable()
-@DomName('TextMetrics')
 @Native("TextMetrics")
 class TextMetrics extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -38908,73 +28453,34 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('TextMetrics.actualBoundingBoxAscent')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num actualBoundingBoxAscent;
 
-  @DomName('TextMetrics.actualBoundingBoxDescent')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num actualBoundingBoxDescent;
 
-  @DomName('TextMetrics.actualBoundingBoxLeft')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num actualBoundingBoxLeft;
 
-  @DomName('TextMetrics.actualBoundingBoxRight')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num actualBoundingBoxRight;
 
-  @DomName('TextMetrics.alphabeticBaseline')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num alphabeticBaseline;
 
-  @DomName('TextMetrics.emHeightAscent')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num emHeightAscent;
 
-  @DomName('TextMetrics.emHeightDescent')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num emHeightDescent;
 
-  @DomName('TextMetrics.fontBoundingBoxAscent')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num fontBoundingBoxAscent;
 
-  @DomName('TextMetrics.fontBoundingBoxDescent')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num fontBoundingBoxDescent;
 
-  @DomName('TextMetrics.hangingBaseline')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num hangingBaseline;
 
-  @DomName('TextMetrics.ideographicBaseline')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num ideographicBaseline;
 
-  @DomName('TextMetrics.width')
-  @DocsEditable()
   final num width;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('TextTrack')
-// http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrack
-@Experimental()
 @Native("TextTrack")
 class TextTrack extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -38988,61 +28494,34 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('TextTrack.cuechangeEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> cueChangeEvent =
       const EventStreamProvider<Event>('cuechange');
 
-  @DomName('TextTrack.activeCues')
-  @DocsEditable()
   final TextTrackCueList activeCues;
 
-  @DomName('TextTrack.cues')
-  @DocsEditable()
   final TextTrackCueList cues;
 
-  @DomName('TextTrack.id')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String id;
 
-  @DomName('TextTrack.kind')
-  @DocsEditable()
   final String kind;
 
-  @DomName('TextTrack.label')
-  @DocsEditable()
   final String label;
 
-  @DomName('TextTrack.language')
-  @DocsEditable()
   final String language;
 
-  @DomName('TextTrack.mode')
-  @DocsEditable()
   String mode;
 
-  @DomName('TextTrack.addCue')
-  @DocsEditable()
   void addCue(TextTrackCue cue) native;
 
-  @DomName('TextTrack.removeCue')
-  @DocsEditable()
   void removeCue(TextTrackCue cue) native;
 
   /// Stream of `cuechange` events handled by this [TextTrack].
-  @DomName('TextTrack.oncuechange')
-  @DocsEditable()
   Stream<Event> get onCueChange => cueChangeEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('TextTrackCue')
-// http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrackcue
-@Experimental()
 @Native("TextTrackCue")
 class TextTrackCue extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -39056,8 +28535,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('TextTrackCue.enterEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> enterEvent =
       const EventStreamProvider<Event>('enter');
 
@@ -39067,49 +28544,29 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('TextTrackCue.exitEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> exitEvent =
       const EventStreamProvider<Event>('exit');
 
-  @DomName('TextTrackCue.endTime')
-  @DocsEditable()
   num endTime;
 
-  @DomName('TextTrackCue.id')
-  @DocsEditable()
   String id;
 
-  @DomName('TextTrackCue.pauseOnExit')
-  @DocsEditable()
   bool pauseOnExit;
 
-  @DomName('TextTrackCue.startTime')
-  @DocsEditable()
   num startTime;
 
-  @DomName('TextTrackCue.track')
-  @DocsEditable()
   final TextTrack track;
 
   /// Stream of `enter` events handled by this [TextTrackCue].
-  @DomName('TextTrackCue.onenter')
-  @DocsEditable()
   Stream<Event> get onEnter => enterEvent.forTarget(this);
 
   /// Stream of `exit` events handled by this [TextTrackCue].
-  @DomName('TextTrackCue.onexit')
-  @DocsEditable()
   Stream<Event> get onExit => exitEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('TextTrackCueList')
-// http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrackcuelist
-@Experimental()
 @Native("TextTrackCueList")
 class TextTrackCueList extends Interceptor
     with ListMixin<TextTrackCue>, ImmutableListMixin<TextTrackCue>
@@ -39119,8 +28576,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('TextTrackCueList.length')
-  @DocsEditable()
   int get length => JS("int", "#.length", this);
 
   TextTrackCue operator [](int index) {
@@ -39166,23 +28621,14 @@
   TextTrackCue elementAt(int index) => this[index];
   // -- end List<TextTrackCue> mixins.
 
-  @DomName('TextTrackCueList.__getter__')
-  @DocsEditable()
-  @Experimental() // untriaged
   TextTrackCue __getter__(int index) native;
 
-  @DomName('TextTrackCueList.getCueById')
-  @DocsEditable()
   TextTrackCue getCueById(String id) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('TextTrackList')
-// http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttracklist
-@Experimental()
 @Native("TextTrackList")
 class TextTrackList extends EventTarget
     with ListMixin<TextTrack>, ImmutableListMixin<TextTrack>
@@ -39198,19 +28644,12 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('TextTrackList.addtrackEvent')
-  @DocsEditable()
   static const EventStreamProvider<TrackEvent> addTrackEvent =
       const EventStreamProvider<TrackEvent>('addtrack');
 
-  @DomName('TextTrackList.changeEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> changeEvent =
       const EventStreamProvider<Event>('change');
 
-  @DomName('TextTrackList.length')
-  @DocsEditable()
   int get length => JS("int", "#.length", this);
 
   TextTrack operator [](int index) {
@@ -39256,33 +28695,19 @@
   TextTrack elementAt(int index) => this[index];
   // -- end List<TextTrack> mixins.
 
-  @DomName('TextTrackList.__getter__')
-  @DocsEditable()
-  @Experimental() // untriaged
   TextTrack __getter__(int index) native;
 
-  @DomName('TextTrackList.getTrackById')
-  @DocsEditable()
-  @Experimental() // untriaged
   TextTrack getTrackById(String id) native;
 
   /// Stream of `addtrack` events handled by this [TextTrackList].
-  @DomName('TextTrackList.onaddtrack')
-  @DocsEditable()
   Stream<TrackEvent> get onAddTrack => addTrackEvent.forTarget(this);
 
-  @DomName('TextTrackList.onchange')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onChange => changeEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLTimeElement')
-@Experimental() // untriaged
 @Native("HTMLTimeElement")
 class TimeElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -39296,17 +28721,12 @@
    */
   TimeElement.created() : super.created();
 
-  @DomName('HTMLTimeElement.dateTime')
-  @DocsEditable()
-  @Experimental() // untriaged
   String dateTime;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('TimeRanges')
 @Unstable()
 @Native("TimeRanges")
 class TimeRanges extends Interceptor {
@@ -39315,16 +28735,10 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('TimeRanges.length')
-  @DocsEditable()
   final int length;
 
-  @DomName('TimeRanges.end')
-  @DocsEditable()
   double end(int index) native;
 
-  @DomName('TimeRanges.start')
-  @DocsEditable()
   double start(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -39333,14 +28747,11 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('TimeoutHandler')
 typedef void TimeoutHandler();
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLTitleElement')
 @Native("HTMLTitleElement")
 class TitleElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -39348,8 +28759,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLTitleElement.HTMLTitleElement')
-  @DocsEditable()
   factory TitleElement() => JS(
       'returns:TitleElement;creates:TitleElement;new:true',
       '#.createElement(#)',
@@ -39366,10 +28775,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.
 
-@DocsEditable()
-@DomName('Touch')
-// http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-@Experimental()
 @Native("Touch")
 class Touch extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -39377,8 +28782,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Touch.Touch')
-  @DocsEditable()
   factory Touch(Map initDict) {
     var initDict_1 = convertDartToNative_Dictionary(initDict);
     return Touch._create_1(initDict_1);
@@ -39386,72 +28789,39 @@
   static Touch _create_1(initDict) => JS('Touch', 'new Touch(#)', initDict);
 
   @JSName('clientX')
-  @DomName('Touch.clientX')
-  @DocsEditable()
   final num _clientX;
 
   @JSName('clientY')
-  @DomName('Touch.clientY')
-  @DocsEditable()
   final num _clientY;
 
-  @DomName('Touch.force')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num force;
 
-  @DomName('Touch.identifier')
-  @DocsEditable()
   final int identifier;
 
   @JSName('pageX')
-  @DomName('Touch.pageX')
-  @DocsEditable()
   final num _pageX;
 
   @JSName('pageY')
-  @DomName('Touch.pageY')
-  @DocsEditable()
   final num _pageY;
 
   @JSName('radiusX')
-  @DomName('Touch.radiusX')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num _radiusX;
 
   @JSName('radiusY')
-  @DomName('Touch.radiusY')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num _radiusY;
 
-  @DomName('Touch.region')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String region;
 
-  @DomName('Touch.rotationAngle')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num rotationAngle;
 
   @JSName('screenX')
-  @DomName('Touch.screenX')
-  @DocsEditable()
   final num _screenX;
 
   @JSName('screenY')
-  @DomName('Touch.screenY')
-  @DocsEditable()
   final num _screenY;
 
-  @DomName('Touch.target')
-  @DocsEditable()
   EventTarget get target => _convertNativeToDart_EventTarget(this._get_target);
   @JSName('target')
-  @DomName('Touch.target')
-  @DocsEditable()
   @Creates('Element|Document')
   @Returns('Element|Document')
   final dynamic _get_target;
@@ -39467,30 +28837,18 @@
   int get __radiusX => JS('num', '#.radiusX', this).round();
   int get __radiusY => JS('num', '#.radiusY', this).round();
 
-  @DomName('Touch.clientX')
-  @DomName('Touch.clientY')
   Point get client => new Point(__clientX, __clientY);
 
-  @DomName('Touch.pageX')
-  @DomName('Touch.pageY')
   Point get page => new Point(__pageX, __pageY);
 
-  @DomName('Touch.screenX')
-  @DomName('Touch.screenY')
   Point get screen => new Point(__screenX, __screenY);
 
-  @DomName('Touch.radiusX')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
   int get radiusX => __radiusX;
 
-  @DomName('Touch.radiusY')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
   int get radiusY => __radiusY;
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -39499,9 +28857,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('TouchEvent')
-// http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-@Experimental()
 @Native("TouchEvent")
 class TouchEvent extends UIEvent {
   // To suppress missing implicit constructor warnings.
@@ -39509,8 +28864,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('TouchEvent.TouchEvent')
-  @DocsEditable()
   factory TouchEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -39523,32 +28876,18 @@
   static TouchEvent _create_2(type) =>
       JS('TouchEvent', 'new TouchEvent(#)', type);
 
-  @DomName('TouchEvent.altKey')
-  @DocsEditable()
   final bool altKey;
 
-  @DomName('TouchEvent.changedTouches')
-  @DocsEditable()
   final TouchList changedTouches;
 
-  @DomName('TouchEvent.ctrlKey')
-  @DocsEditable()
   final bool ctrlKey;
 
-  @DomName('TouchEvent.metaKey')
-  @DocsEditable()
   final bool metaKey;
 
-  @DomName('TouchEvent.shiftKey')
-  @DocsEditable()
   final bool shiftKey;
 
-  @DomName('TouchEvent.targetTouches')
-  @DocsEditable()
   final TouchList targetTouches;
 
-  @DomName('TouchEvent.touches')
-  @DocsEditable()
   final TouchList touches;
 
   /**
@@ -39565,9 +28904,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('TouchList')
-// http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-@Experimental()
 @Native("TouchList")
 class TouchList extends Interceptor
     with ListMixin<Touch>, ImmutableListMixin<Touch>
@@ -39585,8 +28921,6 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => JS('bool', '!!document.createTouchList');
 
-  @DomName('TouchList.length')
-  @DocsEditable()
   int get length => JS("int", "#.length", this);
 
   Touch operator [](int index) {
@@ -39632,17 +28966,12 @@
   Touch elementAt(int index) => this[index];
   // -- end List<Touch> mixins.
 
-  @DomName('TouchList.item')
-  @DocsEditable()
   Touch item(int index) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('TrackDefault')
-@Experimental() // untriaged
 @Native("TrackDefault")
 class TrackDefault extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -39650,8 +28979,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('TrackDefault.TrackDefault')
-  @DocsEditable()
   factory TrackDefault(
       String type, String language, String label, List<String> kinds,
       [String byteStreamTrackID]) {
@@ -39675,38 +29002,20 @@
       label,
       kinds);
 
-  @DomName('TrackDefault.byteStreamTrackID')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String byteStreamTrackID;
 
-  @DomName('TrackDefault.kinds')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Object kinds;
 
-  @DomName('TrackDefault.label')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String label;
 
-  @DomName('TrackDefault.language')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String language;
 
-  @DomName('TrackDefault.type')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String type;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('TrackDefaultList')
-@Experimental() // untriaged
 @Native("TrackDefaultList")
 class TrackDefaultList extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -39714,8 +29023,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('TrackDefaultList.TrackDefaultList')
-  @DocsEditable()
   factory TrackDefaultList([List<TrackDefault> trackDefaults]) {
     if (trackDefaults != null) {
       return TrackDefaultList._create_1(trackDefaults);
@@ -39727,27 +29034,17 @@
   static TrackDefaultList _create_2() =>
       JS('TrackDefaultList', 'new TrackDefaultList()');
 
-  @DomName('TrackDefaultList.length')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int length;
 
-  @DomName('TrackDefaultList.item')
-  @DocsEditable()
-  @Experimental() // untriaged
   TrackDefault item(int index) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLTrackElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
-// http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#the-track-element
-@Experimental()
 @Native("HTMLTrackElement")
 class TrackElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -39755,8 +29052,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLTrackElement.HTMLTrackElement')
-  @DocsEditable()
   factory TrackElement() => document.createElement("track");
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
@@ -39768,57 +29063,33 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('track');
 
-  @DomName('HTMLTrackElement.ERROR')
-  @DocsEditable()
   static const int ERROR = 3;
 
-  @DomName('HTMLTrackElement.LOADED')
-  @DocsEditable()
   static const int LOADED = 2;
 
-  @DomName('HTMLTrackElement.LOADING')
-  @DocsEditable()
   static const int LOADING = 1;
 
-  @DomName('HTMLTrackElement.NONE')
-  @DocsEditable()
   static const int NONE = 0;
 
   @JSName('default')
-  @DomName('HTMLTrackElement.default')
-  @DocsEditable()
   bool defaultValue;
 
-  @DomName('HTMLTrackElement.kind')
-  @DocsEditable()
   String kind;
 
-  @DomName('HTMLTrackElement.label')
-  @DocsEditable()
   String label;
 
-  @DomName('HTMLTrackElement.readyState')
-  @DocsEditable()
   final int readyState;
 
-  @DomName('HTMLTrackElement.src')
-  @DocsEditable()
   String src;
 
-  @DomName('HTMLTrackElement.srclang')
-  @DocsEditable()
   String srclang;
 
-  @DomName('HTMLTrackElement.track')
-  @DocsEditable()
   final TextTrack track;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('TrackEvent')
 @Unstable()
 @Native("TrackEvent")
 class TrackEvent extends Event {
@@ -39827,8 +29098,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('TrackEvent.TrackEvent')
-  @DocsEditable()
   factory TrackEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -39841,8 +29110,6 @@
   static TrackEvent _create_2(type) =>
       JS('TrackEvent', 'new TrackEvent(#)', type);
 
-  @DomName('TrackEvent.track')
-  @DocsEditable()
   @Creates('Null')
   final Object track;
 }
@@ -39850,8 +29117,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.
 
-@DocsEditable()
-@DomName('TransitionEvent')
 @Native("TransitionEvent,WebKitTransitionEvent")
 class TransitionEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -39859,8 +29124,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('TransitionEvent.TransitionEvent')
-  @DocsEditable()
   factory TransitionEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -39873,23 +29136,16 @@
   static TransitionEvent _create_2(type) =>
       JS('TransitionEvent', 'new TransitionEvent(#)', type);
 
-  @DomName('TransitionEvent.elapsedTime')
-  @DocsEditable()
   final num elapsedTime;
 
-  @DomName('TransitionEvent.propertyName')
-  @DocsEditable()
   final String propertyName;
 
-  @DomName('TransitionEvent.pseudoElement')
-  @DocsEditable()
   final String pseudoElement;
 }
 // Copyright (c) 2013, 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.
 
-@DomName('TreeWalker')
 @Unstable()
 @Native("TreeWalker")
 class TreeWalker extends Interceptor {
@@ -39901,57 +29157,32 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('TreeWalker.currentNode')
-  @DocsEditable()
   Node currentNode;
 
-  @DomName('TreeWalker.filter')
-  @DocsEditable()
   final NodeFilter filter;
 
-  @DomName('TreeWalker.root')
-  @DocsEditable()
   final Node root;
 
-  @DomName('TreeWalker.whatToShow')
-  @DocsEditable()
   final int whatToShow;
 
-  @DomName('TreeWalker.firstChild')
-  @DocsEditable()
   Node firstChild() native;
 
-  @DomName('TreeWalker.lastChild')
-  @DocsEditable()
   Node lastChild() native;
 
-  @DomName('TreeWalker.nextNode')
-  @DocsEditable()
   Node nextNode() native;
 
-  @DomName('TreeWalker.nextSibling')
-  @DocsEditable()
   Node nextSibling() native;
 
-  @DomName('TreeWalker.parentNode')
-  @DocsEditable()
   Node parentNode() native;
 
-  @DomName('TreeWalker.previousNode')
-  @DocsEditable()
   Node previousNode() native;
 
-  @DomName('TreeWalker.previousSibling')
-  @DocsEditable()
   Node previousSibling() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('TrustedHTML')
-@Experimental() // untriaged
 @Native("TrustedHTML")
 class TrustedHtml extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -39959,23 +29190,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('TrustedHTML.escape')
-  @DocsEditable()
-  @Experimental() // untriaged
   static TrustedHtml escape(String html) native;
 
-  @DomName('TrustedHTML.unsafelyCreate')
-  @DocsEditable()
-  @Experimental() // untriaged
   static TrustedHtml unsafelyCreate(String html) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('TrustedScriptURL')
-@Experimental() // untriaged
 @Native("TrustedScriptURL")
 class TrustedScriptUrl extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -39983,18 +29205,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('TrustedScriptURL.unsafelyCreate')
-  @DocsEditable()
-  @Experimental() // untriaged
   static TrustedScriptUrl unsafelyCreate(String url) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('TrustedURL')
-@Experimental() // untriaged
 @Native("TrustedURL")
 class TrustedUrl extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -40002,14 +29218,8 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('TrustedURL.create')
-  @DocsEditable()
-  @Experimental() // untriaged
   static TrustedUrl create(String url) native;
 
-  @DomName('TrustedURL.unsafelyCreate')
-  @DocsEditable()
-  @Experimental() // untriaged
   static TrustedUrl unsafelyCreate(String url) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -40018,7 +29228,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('UIEvent')
 @Native("UIEvent")
 class UIEvent extends Event {
   // In JS, canBubble and cancelable are technically required parameters to
@@ -40040,8 +29249,6 @@
     return e;
   }
 
-  @DomName('UIEvent.UIEvent')
-  @DocsEditable()
   factory UIEvent._(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -40053,34 +29260,21 @@
       JS('UIEvent', 'new UIEvent(#,#)', type, eventInitDict);
   static UIEvent _create_2(type) => JS('UIEvent', 'new UIEvent(#)', type);
 
-  @DomName('UIEvent.detail')
-  @DocsEditable()
   final int detail;
 
-  @DomName('UIEvent.sourceCapabilities')
-  @DocsEditable()
-  @Experimental() // untriaged
   final InputDeviceCapabilities sourceCapabilities;
 
-  @DomName('UIEvent.view')
-  @DocsEditable()
   WindowBase get view => _convertNativeToDart_Window(this._get_view);
   @JSName('view')
-  @DomName('UIEvent.view')
-  @DocsEditable()
   @Creates('Window|=Object')
   @Returns('Window|=Object')
   final dynamic _get_view;
 
   @JSName('which')
-  @DomName('UIEvent.which')
-  @DocsEditable()
   @Unstable()
   final int _which;
 
   @JSName('initUIEvent')
-  @DomName('UIEvent.initUIEvent')
-  @DocsEditable()
   void _initUIEvent(String type, bool bubbles, bool cancelable, Window view,
       int detail) native;
 }
@@ -40088,8 +29282,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.
 
-@DocsEditable()
-@DomName('HTMLUListElement')
 @Native("HTMLUListElement")
 class UListElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -40097,8 +29289,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLUListElement.HTMLUListElement')
-  @DocsEditable()
   factory UListElement() => JS(
       'returns:UListElement;creates:UListElement;new:true',
       '#.createElement(#)',
@@ -40115,9 +29305,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.
 
-@DocsEditable()
-@DomName('UnderlyingSourceBase')
-@Experimental() // untriaged
 @Native("UnderlyingSourceBase")
 class UnderlyingSourceBase extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -40125,30 +29312,15 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('UnderlyingSourceBase.cancel')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future cancel(Object reason) =>
       promiseToFuture(JS("", "#.cancel(#)", this, reason));
 
-  @DomName('UnderlyingSourceBase.notifyLockAcquired')
-  @DocsEditable()
-  @Experimental() // untriaged
   void notifyLockAcquired() native;
 
-  @DomName('UnderlyingSourceBase.notifyLockReleased')
-  @DocsEditable()
-  @Experimental() // untriaged
   void notifyLockReleased() native;
 
-  @DomName('UnderlyingSourceBase.pull')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future pull() => promiseToFuture(JS("", "#.pull()", this));
 
-  @DomName('UnderlyingSourceBase.start')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future start(Object stream) =>
       promiseToFuture(JS("", "#.start(#)", this, stream));
 }
@@ -40156,8 +29328,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.
 
-@DocsEditable()
-@DomName('HTMLUnknownElement')
 @Native("HTMLUnknownElement")
 class UnknownElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
@@ -40175,7 +29345,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.
 
-@DomName('URL')
 @Native("URL")
 class Url extends Interceptor {
   static String createObjectUrl(blob_OR_source_OR_stream) => JS(
@@ -40195,8 +29364,6 @@
   static void revokeObjectUrl(String url) =>
       JS('void', '(self.URL || self.webkitURL).revokeObjectURL(#)', url);
 
-  @DomName('URL.toString')
-  @DocsEditable()
   String toString() => JS('String', 'String(#)', this);
 
   // To suppress missing implicit constructor warnings.
@@ -40204,73 +29371,34 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('URL.hash')
-  @DocsEditable()
-  @Experimental() // untriaged
   String hash;
 
-  @DomName('URL.host')
-  @DocsEditable()
-  @Experimental() // untriaged
   String host;
 
-  @DomName('URL.hostname')
-  @DocsEditable()
-  @Experimental() // untriaged
   String hostname;
 
-  @DomName('URL.href')
-  @DocsEditable()
-  @Experimental() // untriaged
   String href;
 
-  @DomName('URL.origin')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String origin;
 
-  @DomName('URL.password')
-  @DocsEditable()
-  @Experimental() // untriaged
   String password;
 
-  @DomName('URL.pathname')
-  @DocsEditable()
-  @Experimental() // untriaged
   String pathname;
 
-  @DomName('URL.port')
-  @DocsEditable()
-  @Experimental() // untriaged
   String port;
 
-  @DomName('URL.protocol')
-  @DocsEditable()
-  @Experimental() // untriaged
   String protocol;
 
-  @DomName('URL.search')
-  @DocsEditable()
-  @Experimental() // untriaged
   String search;
 
-  @DomName('URL.searchParams')
-  @DocsEditable()
-  @Experimental() // untriaged
   final UrlSearchParams searchParams;
 
-  @DomName('URL.username')
-  @DocsEditable()
-  @Experimental() // untriaged
   String username;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('URLSearchParams')
-@Experimental() // untriaged
 @Native("URLSearchParams")
 class UrlSearchParams extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -40278,8 +29406,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('URLSearchParams.URLSearchParams')
-  @DocsEditable()
   factory UrlSearchParams([Object init]) {
     if (init != null) {
       return UrlSearchParams._create_1(init);
@@ -40291,48 +29417,24 @@
   static UrlSearchParams _create_2() =>
       JS('UrlSearchParams', 'new URLSearchParams()');
 
-  @DomName('URLSearchParams.append')
-  @DocsEditable()
-  @Experimental() // untriaged
   void append(String name, String value) native;
 
-  @DomName('URLSearchParams.delete')
-  @DocsEditable()
-  @Experimental() // untriaged
   void delete(String name) native;
 
-  @DomName('URLSearchParams.get')
-  @DocsEditable()
-  @Experimental() // untriaged
   String get(String name) native;
 
-  @DomName('URLSearchParams.getAll')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<String> getAll(String name) native;
 
-  @DomName('URLSearchParams.has')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool has(String name) native;
 
-  @DomName('URLSearchParams.set')
-  @DocsEditable()
-  @Experimental() // untriaged
   void set(String name, String value) native;
 
-  @DomName('URLSearchParams.sort')
-  @DocsEditable()
-  @Experimental() // untriaged
   void sort() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('URLUtilsReadOnly')
-@Experimental() // untriaged
 abstract class UrlUtilsReadOnly extends Interceptor {
   // To suppress missing implicit constructor warnings.
   factory UrlUtilsReadOnly._() {
@@ -40361,9 +29463,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.
 
-@DocsEditable()
-@DomName('VR')
-@Experimental() // untriaged
 @Native("VR")
 class VR extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -40371,18 +29470,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VR.getDevices')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future getDevices() => promiseToFuture(JS("", "#.getDevices()", this));
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('VRCoordinateSystem')
-@Experimental() // untriaged
 @Native("VRCoordinateSystem")
 class VRCoordinateSystem extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -40390,18 +29483,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VRCoordinateSystem.getTransformTo')
-  @DocsEditable()
-  @Experimental() // untriaged
   Float32List getTransformTo(VRCoordinateSystem other) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('VRDevice')
-@Experimental() // untriaged
 @Native("VRDevice")
 class VRDevice extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -40409,19 +29496,10 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VRDevice.deviceName')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String deviceName;
 
-  @DomName('VRDevice.isExternal')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool isExternal;
 
-  @DomName('VRDevice.requestSession')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future requestSession([Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -40431,19 +29509,10 @@
   }
 
   @JSName('requestSession')
-  @DomName('VRDevice.requestSession')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _requestSession_1(options) native;
   @JSName('requestSession')
-  @DomName('VRDevice.requestSession')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _requestSession_2() native;
 
-  @DomName('VRDevice.supportsSession')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future supportsSession([Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -40453,23 +29522,14 @@
   }
 
   @JSName('supportsSession')
-  @DomName('VRDevice.supportsSession')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _supportsSession_1(options) native;
   @JSName('supportsSession')
-  @DomName('VRDevice.supportsSession')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _supportsSession_2() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('VRDeviceEvent')
-@Experimental() // untriaged
 @Native("VRDeviceEvent")
 class VRDeviceEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -40477,8 +29537,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VRDeviceEvent.VRDeviceEvent')
-  @DocsEditable()
   factory VRDeviceEvent(String type, Map eventInitDict) {
     var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
     return VRDeviceEvent._create_1(type, eventInitDict_1);
@@ -40486,18 +29544,12 @@
   static VRDeviceEvent _create_1(type, eventInitDict) =>
       JS('VRDeviceEvent', 'new VRDeviceEvent(#,#)', type, eventInitDict);
 
-  @DomName('VRDeviceEvent.device')
-  @DocsEditable()
-  @Experimental() // untriaged
   final VRDevice device;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('VRDisplay')
-@Experimental() // untriaged
 @Native("VRDisplay")
 class VRDisplay extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -40505,89 +29557,41 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VRDisplay.capabilities')
-  @DocsEditable()
-  @Experimental() // untriaged
   final VRDisplayCapabilities capabilities;
 
-  @DomName('VRDisplay.depthFar')
-  @DocsEditable()
-  @Experimental() // untriaged
   num depthFar;
 
-  @DomName('VRDisplay.depthNear')
-  @DocsEditable()
-  @Experimental() // untriaged
   num depthNear;
 
-  @DomName('VRDisplay.displayId')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int displayId;
 
-  @DomName('VRDisplay.displayName')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String displayName;
 
-  @DomName('VRDisplay.isPresenting')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool isPresenting;
 
-  @DomName('VRDisplay.stageParameters')
-  @DocsEditable()
-  @Experimental() // untriaged
   final VRStageParameters stageParameters;
 
-  @DomName('VRDisplay.cancelAnimationFrame')
-  @DocsEditable()
-  @Experimental() // untriaged
   void cancelAnimationFrame(int handle) native;
 
-  @DomName('VRDisplay.exitPresent')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future exitPresent() => promiseToFuture(JS("", "#.exitPresent()", this));
 
-  @DomName('VRDisplay.getEyeParameters')
-  @DocsEditable()
-  @Experimental() // untriaged
   VREyeParameters getEyeParameters(String whichEye) native;
 
-  @DomName('VRDisplay.getFrameData')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool getFrameData(VRFrameData frameData) native;
 
-  @DomName('VRDisplay.getLayers')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<Map> getLayers() native;
 
-  @DomName('VRDisplay.requestAnimationFrame')
-  @DocsEditable()
-  @Experimental() // untriaged
   int requestAnimationFrame(FrameRequestCallback callback) native;
 
-  @DomName('VRDisplay.requestPresent')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future requestPresent(List<Map> layers) =>
       promiseToFuture(JS("", "#.requestPresent(#)", this, layers));
 
-  @DomName('VRDisplay.submitFrame')
-  @DocsEditable()
-  @Experimental() // untriaged
   void submitFrame() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('VRDisplayCapabilities')
-@Experimental() // untriaged
 @Native("VRDisplayCapabilities")
 class VRDisplayCapabilities extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -40595,33 +29599,18 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VRDisplayCapabilities.canPresent')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool canPresent;
 
-  @DomName('VRDisplayCapabilities.hasExternalDisplay')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool hasExternalDisplay;
 
-  @DomName('VRDisplayCapabilities.hasPosition')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool hasPosition;
 
-  @DomName('VRDisplayCapabilities.maxLayers')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int maxLayers;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('VRDisplayEvent')
-@Experimental() // untriaged
 @Native("VRDisplayEvent")
 class VRDisplayEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -40629,8 +29618,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VRDisplayEvent.VRDisplayEvent')
-  @DocsEditable()
   factory VRDisplayEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -40643,23 +29630,14 @@
   static VRDisplayEvent _create_2(type) =>
       JS('VRDisplayEvent', 'new VRDisplayEvent(#)', type);
 
-  @DomName('VRDisplayEvent.display')
-  @DocsEditable()
-  @Experimental() // untriaged
   final VRDisplay display;
 
-  @DomName('VRDisplayEvent.reason')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String reason;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('VREyeParameters')
-@Experimental() // untriaged
 @Native("VREyeParameters")
 class VREyeParameters extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -40667,28 +29645,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VREyeParameters.offset')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Float32List offset;
 
-  @DomName('VREyeParameters.renderHeight')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int renderHeight;
 
-  @DomName('VREyeParameters.renderWidth')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int renderWidth;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('VRFrameData')
-@Experimental() // untriaged
 @Native("VRFrameData")
 class VRFrameData extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -40696,45 +29662,25 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VRFrameData.VRFrameData')
-  @DocsEditable()
   factory VRFrameData() {
     return VRFrameData._create_1();
   }
   static VRFrameData _create_1() => JS('VRFrameData', 'new VRFrameData()');
 
-  @DomName('VRFrameData.leftProjectionMatrix')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Float32List leftProjectionMatrix;
 
-  @DomName('VRFrameData.leftViewMatrix')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Float32List leftViewMatrix;
 
-  @DomName('VRFrameData.pose')
-  @DocsEditable()
-  @Experimental() // untriaged
   final VRPose pose;
 
-  @DomName('VRFrameData.rightProjectionMatrix')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Float32List rightProjectionMatrix;
 
-  @DomName('VRFrameData.rightViewMatrix')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Float32List rightViewMatrix;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('VRFrameOfReference')
-@Experimental() // untriaged
 @Native("VRFrameOfReference")
 class VRFrameOfReference extends VRCoordinateSystem {
   // To suppress missing implicit constructor warnings.
@@ -40742,23 +29688,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VRFrameOfReference.bounds')
-  @DocsEditable()
-  @Experimental() // untriaged
   final VRStageBounds bounds;
 
-  @DomName('VRFrameOfReference.emulatedHeight')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num emulatedHeight;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('VRPose')
-@Experimental() // untriaged
 @Native("VRPose")
 class VRPose extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -40766,43 +29703,22 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VRPose.angularAcceleration')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Float32List angularAcceleration;
 
-  @DomName('VRPose.angularVelocity')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Float32List angularVelocity;
 
-  @DomName('VRPose.linearAcceleration')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Float32List linearAcceleration;
 
-  @DomName('VRPose.linearVelocity')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Float32List linearVelocity;
 
-  @DomName('VRPose.orientation')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Float32List orientation;
 
-  @DomName('VRPose.position')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Float32List position;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('VRSession')
-@Experimental() // untriaged
 @Native("VRSession")
 class VRSession extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -40810,46 +29726,22 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VRSession.blurEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> blurEvent =
       const EventStreamProvider<Event>('blur');
 
-  @DomName('VRSession.focusEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> focusEvent =
       const EventStreamProvider<Event>('focus');
 
-  @DomName('VRSession.depthFar')
-  @DocsEditable()
-  @Experimental() // untriaged
   num depthFar;
 
-  @DomName('VRSession.depthNear')
-  @DocsEditable()
-  @Experimental() // untriaged
   num depthNear;
 
-  @DomName('VRSession.device')
-  @DocsEditable()
-  @Experimental() // untriaged
   final VRDevice device;
 
-  @DomName('VRSession.exclusive')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool exclusive;
 
-  @DomName('VRSession.end')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future end() => promiseToFuture(JS("", "#.end()", this));
 
-  @DomName('VRSession.requestFrameOfReference')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future requestFrameOfReference(String type, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -40859,33 +29751,18 @@
   }
 
   @JSName('requestFrameOfReference')
-  @DomName('VRSession.requestFrameOfReference')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _requestFrameOfReference_1(type, options) native;
   @JSName('requestFrameOfReference')
-  @DomName('VRSession.requestFrameOfReference')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _requestFrameOfReference_2(type) native;
 
-  @DomName('VRSession.onblur')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onBlur => blurEvent.forTarget(this);
 
-  @DomName('VRSession.onfocus')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onFocus => focusEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('VRSessionEvent')
-@Experimental() // untriaged
 @Native("VRSessionEvent")
 class VRSessionEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -40893,8 +29770,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VRSessionEvent.VRSessionEvent')
-  @DocsEditable()
   factory VRSessionEvent(String type, Map eventInitDict) {
     var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
     return VRSessionEvent._create_1(type, eventInitDict_1);
@@ -40902,18 +29777,12 @@
   static VRSessionEvent _create_1(type, eventInitDict) =>
       JS('VRSessionEvent', 'new VRSessionEvent(#,#)', type, eventInitDict);
 
-  @DomName('VRSessionEvent.session')
-  @DocsEditable()
-  @Experimental() // untriaged
   final VRSession session;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('VRStageBounds')
-@Experimental() // untriaged
 @Native("VRStageBounds")
 class VRStageBounds extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -40921,18 +29790,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VRStageBounds.geometry')
-  @DocsEditable()
-  @Experimental() // untriaged
   final List<VRStageBoundsPoint> geometry;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('VRStageBoundsPoint')
-@Experimental() // untriaged
 @Native("VRStageBoundsPoint")
 class VRStageBoundsPoint extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -40940,23 +29803,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VRStageBoundsPoint.x')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num x;
 
-  @DomName('VRStageBoundsPoint.z')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num z;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('VRStageParameters')
-@Experimental() // untriaged
 @Native("VRStageParameters")
 class VRStageParameters extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -40964,27 +29818,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VRStageParameters.sittingToStandingTransform')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Float32List sittingToStandingTransform;
 
-  @DomName('VRStageParameters.sizeX')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num sizeX;
 
-  @DomName('VRStageParameters.sizeZ')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num sizeZ;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('ValidityState')
 @Native("ValidityState")
 class ValidityState extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -40992,56 +29835,32 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ValidityState.badInput')
-  @DocsEditable()
   final bool badInput;
 
-  @DomName('ValidityState.customError')
-  @DocsEditable()
   final bool customError;
 
-  @DomName('ValidityState.patternMismatch')
-  @DocsEditable()
   final bool patternMismatch;
 
-  @DomName('ValidityState.rangeOverflow')
-  @DocsEditable()
   final bool rangeOverflow;
 
-  @DomName('ValidityState.rangeUnderflow')
-  @DocsEditable()
   final bool rangeUnderflow;
 
-  @DomName('ValidityState.stepMismatch')
-  @DocsEditable()
   final bool stepMismatch;
 
-  @DomName('ValidityState.tooLong')
-  @DocsEditable()
   final bool tooLong;
 
-  @DomName('ValidityState.tooShort')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool tooShort;
 
-  @DomName('ValidityState.typeMismatch')
-  @DocsEditable()
   final bool typeMismatch;
 
-  @DomName('ValidityState.valid')
-  @DocsEditable()
   final bool valid;
 
-  @DomName('ValidityState.valueMissing')
-  @DocsEditable()
   final bool valueMissing;
 }
 // Copyright (c) 2012, 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.
 
-@DomName('HTMLVideoElement')
 @Native("HTMLVideoElement")
 class VideoElement extends MediaElement implements CanvasImageSource {
   // To suppress missing implicit constructor warnings.
@@ -41049,8 +29868,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('HTMLVideoElement.HTMLVideoElement')
-  @DocsEditable()
   factory VideoElement() => JS(
       'returns:VideoElement;creates:VideoElement;new:true',
       '#.createElement(#)',
@@ -41063,72 +29880,42 @@
    */
   VideoElement.created() : super.created();
 
-  @DomName('HTMLVideoElement.height')
-  @DocsEditable()
   int height;
 
-  @DomName('HTMLVideoElement.poster')
-  @DocsEditable()
   String poster;
 
-  @DomName('HTMLVideoElement.videoHeight')
-  @DocsEditable()
   final int videoHeight;
 
-  @DomName('HTMLVideoElement.videoWidth')
-  @DocsEditable()
   final int videoWidth;
 
   @JSName('webkitDecodedFrameCount')
-  @DomName('HTMLVideoElement.webkitDecodedFrameCount')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
   final int decodedFrameCount;
 
   @JSName('webkitDroppedFrameCount')
-  @DomName('HTMLVideoElement.webkitDroppedFrameCount')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
   final int droppedFrameCount;
 
-  @DomName('HTMLVideoElement.width')
-  @DocsEditable()
   int width;
 
-  @DomName('HTMLVideoElement.getVideoPlaybackQuality')
-  @DocsEditable()
-  @Experimental() // untriaged
   VideoPlaybackQuality getVideoPlaybackQuality() native;
 
   @JSName('webkitEnterFullscreen')
-  @DomName('HTMLVideoElement.webkitEnterFullscreen')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html
   void enterFullscreen() native;
 
   @JSName('webkitExitFullscreen')
-  @DomName('HTMLVideoElement.webkitExitFullscreen')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#dom-document-exitfullscreen
   void exitFullscreen() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('VideoPlaybackQuality')
-@Experimental() // untriaged
 @Native("VideoPlaybackQuality")
 class VideoPlaybackQuality extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -41136,33 +29923,18 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VideoPlaybackQuality.corruptedVideoFrames')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int corruptedVideoFrames;
 
-  @DomName('VideoPlaybackQuality.creationTime')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num creationTime;
 
-  @DomName('VideoPlaybackQuality.droppedVideoFrames')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int droppedVideoFrames;
 
-  @DomName('VideoPlaybackQuality.totalVideoFrames')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int totalVideoFrames;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('VideoTrack')
-@Experimental() // untriaged
 @Native("VideoTrack")
 class VideoTrack extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -41170,43 +29942,22 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VideoTrack.id')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String id;
 
-  @DomName('VideoTrack.kind')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String kind;
 
-  @DomName('VideoTrack.label')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String label;
 
-  @DomName('VideoTrack.language')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String language;
 
-  @DomName('VideoTrack.selected')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool selected;
 
-  @DomName('VideoTrack.sourceBuffer')
-  @DocsEditable()
-  @Experimental() // untriaged
   final SourceBuffer sourceBuffer;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('VideoTrackList')
-@Experimental() // untriaged
 @Native("VideoTrackList")
 class VideoTrackList extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -41214,44 +29965,23 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VideoTrackList.changeEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> changeEvent =
       const EventStreamProvider<Event>('change');
 
-  @DomName('VideoTrackList.length')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int length;
 
-  @DomName('VideoTrackList.selectedIndex')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int selectedIndex;
 
-  @DomName('VideoTrackList.__getter__')
-  @DocsEditable()
-  @Experimental() // untriaged
   VideoTrack __getter__(int index) native;
 
-  @DomName('VideoTrackList.getTrackById')
-  @DocsEditable()
-  @Experimental() // untriaged
   VideoTrack getTrackById(String id) native;
 
-  @DomName('VideoTrackList.onchange')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onChange => changeEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('VisualViewport')
-@Experimental() // untriaged
 @Native("VisualViewport")
 class VisualViewport extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -41259,61 +29989,28 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VisualViewport.resizeEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> resizeEvent =
       const EventStreamProvider<Event>('resize');
 
-  @DomName('VisualViewport.scrollEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> scrollEvent =
       const EventStreamProvider<Event>('scroll');
 
-  @DomName('VisualViewport.height')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num height;
 
-  @DomName('VisualViewport.offsetLeft')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num offsetLeft;
 
-  @DomName('VisualViewport.offsetTop')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num offsetTop;
 
-  @DomName('VisualViewport.pageLeft')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num pageLeft;
 
-  @DomName('VisualViewport.pageTop')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num pageTop;
 
-  @DomName('VisualViewport.scale')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num scale;
 
-  @DomName('VisualViewport.width')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num width;
 
-  @DomName('VisualViewport.onresize')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onResize => resizeEvent.forTarget(this);
 
-  @DomName('VisualViewport.onscroll')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onScroll => scrollEvent.forTarget(this);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -41322,17 +30019,11 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('VoidCallback')
-// http://www.w3.org/TR/file-system-api/#the-voidcallback-interface
-@Experimental()
 typedef void VoidCallback();
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('VTTCue')
-@Experimental() // untriaged
 @Native("VTTCue")
 class VttCue extends TextTrackCue {
   // To suppress missing implicit constructor warnings.
@@ -41340,71 +30031,39 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VTTCue.VTTCue')
-  @DocsEditable()
   factory VttCue(num startTime, num endTime, String text) {
     return VttCue._create_1(startTime, endTime, text);
   }
   static VttCue _create_1(startTime, endTime, text) =>
       JS('VttCue', 'new VTTCue(#,#,#)', startTime, endTime, text);
 
-  @DomName('VTTCue.align')
-  @DocsEditable()
-  @Experimental() // untriaged
   String align;
 
-  @DomName('VTTCue.line')
-  @DocsEditable()
-  @Experimental() // untriaged
   @Creates('Null')
   @Returns('num|String')
   Object line;
 
-  @DomName('VTTCue.position')
-  @DocsEditable()
-  @Experimental() // untriaged
   @Creates('Null')
   @Returns('num|String')
   Object position;
 
-  @DomName('VTTCue.region')
-  @DocsEditable()
-  @Experimental() // untriaged
   VttRegion region;
 
-  @DomName('VTTCue.size')
-  @DocsEditable()
-  @Experimental() // untriaged
   num size;
 
-  @DomName('VTTCue.snapToLines')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool snapToLines;
 
-  @DomName('VTTCue.text')
-  @DocsEditable()
-  @Experimental() // untriaged
   String text;
 
-  @DomName('VTTCue.vertical')
-  @DocsEditable()
-  @Experimental() // untriaged
   String vertical;
 
   @JSName('getCueAsHTML')
-  @DomName('VTTCue.getCueAsHTML')
-  @DocsEditable()
-  @Experimental() // untriaged
   DocumentFragment getCueAsHtml() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('VTTRegion')
-@Experimental() // untriaged
 @Native("VTTRegion")
 class VttRegion extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -41412,58 +30071,31 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VTTRegion.VTTRegion')
-  @DocsEditable()
   factory VttRegion() {
     return VttRegion._create_1();
   }
   static VttRegion _create_1() => JS('VttRegion', 'new VTTRegion()');
 
-  @DomName('VTTRegion.id')
-  @DocsEditable()
-  @Experimental() // untriaged
   String id;
 
-  @DomName('VTTRegion.lines')
-  @DocsEditable()
-  @Experimental() // untriaged
   int lines;
 
-  @DomName('VTTRegion.regionAnchorX')
-  @DocsEditable()
-  @Experimental() // untriaged
   num regionAnchorX;
 
-  @DomName('VTTRegion.regionAnchorY')
-  @DocsEditable()
-  @Experimental() // untriaged
   num regionAnchorY;
 
-  @DomName('VTTRegion.scroll')
-  @DocsEditable()
-  @Experimental() // untriaged
   String scroll;
 
-  @DomName('VTTRegion.viewportAnchorX')
-  @DocsEditable()
-  @Experimental() // untriaged
   num viewportAnchorX;
 
-  @DomName('VTTRegion.viewportAnchorY')
-  @DocsEditable()
-  @Experimental() // untriaged
   num viewportAnchorY;
 
-  @DomName('VTTRegion.width')
-  @DocsEditable()
-  @Experimental() // untriaged
   num width;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
 /**
  * Use the WebSocket interface to connect to a WebSocket,
  * and to send and receive data on that WebSocket.
@@ -41498,7 +30130,6 @@
  * [Introducing WebSockets](http://www.html5rocks.com/en/tutorials/websockets/basics/),
  * an HTML5Rocks.com tutorial.
  */
-@DomName('WebSocket')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -41517,8 +30148,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('WebSocket.closeEvent')
-  @DocsEditable()
   static const EventStreamProvider<CloseEvent> closeEvent =
       const EventStreamProvider<CloseEvent>('close');
 
@@ -41528,8 +30157,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('WebSocket.errorEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
@@ -41539,8 +30166,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('WebSocket.messageEvent')
-  @DocsEditable()
   static const EventStreamProvider<MessageEvent> messageEvent =
       const EventStreamProvider<MessageEvent>('message');
 
@@ -41550,13 +30175,9 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('WebSocket.openEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> openEvent =
       const EventStreamProvider<Event>('open');
 
-  @DomName('WebSocket.WebSocket')
-  @DocsEditable()
   factory WebSocket(String url, [Object protocols]) {
     if (protocols != null) {
       return WebSocket._create_1(url, protocols);
@@ -41571,48 +30192,26 @@
   static bool get supported =>
       JS('bool', 'typeof window.WebSocket != "undefined"');
 
-  @DomName('WebSocket.CLOSED')
-  @DocsEditable()
   static const int CLOSED = 3;
 
-  @DomName('WebSocket.CLOSING')
-  @DocsEditable()
   static const int CLOSING = 2;
 
-  @DomName('WebSocket.CONNECTING')
-  @DocsEditable()
   static const int CONNECTING = 0;
 
-  @DomName('WebSocket.OPEN')
-  @DocsEditable()
   static const int OPEN = 1;
 
-  @DomName('WebSocket.binaryType')
-  @DocsEditable()
   String binaryType;
 
-  @DomName('WebSocket.bufferedAmount')
-  @DocsEditable()
   final int bufferedAmount;
 
-  @DomName('WebSocket.extensions')
-  @DocsEditable()
   final String extensions;
 
-  @DomName('WebSocket.protocol')
-  @DocsEditable()
   final String protocol;
 
-  @DomName('WebSocket.readyState')
-  @DocsEditable()
   final int readyState;
 
-  @DomName('WebSocket.url')
-  @DocsEditable()
   final String url;
 
-  @DomName('WebSocket.close')
-  @DocsEditable()
   void close([int code, String reason]) native;
 
   /**
@@ -41622,8 +30221,6 @@
    * [TypedData]. Named variants [sendBlob], [sendByteBuffer], [sendString],
    * or [sendTypedData], in contrast, only accept data of the specified type.
    */
-  @DomName('WebSocket.send')
-  @DocsEditable()
   void send(data) native;
 
   @JSName('send')
@@ -41634,8 +30231,6 @@
    * [TypedData]. Named variants [sendBlob], [sendByteBuffer], [sendString],
    * or [sendTypedData], in contrast, only accept data of the specified type.
    */
-  @DomName('WebSocket.send')
-  @DocsEditable()
   void sendBlob(Blob data) native;
 
   @JSName('send')
@@ -41646,8 +30241,6 @@
    * [TypedData]. Named variants [sendBlob], [sendByteBuffer], [sendString],
    * or [sendTypedData], in contrast, only accept data of the specified type.
    */
-  @DomName('WebSocket.send')
-  @DocsEditable()
   void sendByteBuffer(ByteBuffer data) native;
 
   @JSName('send')
@@ -41658,8 +30251,6 @@
    * [TypedData]. Named variants [sendBlob], [sendByteBuffer], [sendString],
    * or [sendTypedData], in contrast, only accept data of the specified type.
    */
-  @DomName('WebSocket.send')
-  @DocsEditable()
   void sendString(String data) native;
 
   @JSName('send')
@@ -41670,35 +30261,24 @@
    * [TypedData]. Named variants [sendBlob], [sendByteBuffer], [sendString],
    * or [sendTypedData], in contrast, only accept data of the specified type.
    */
-  @DomName('WebSocket.send')
-  @DocsEditable()
   void sendTypedData(TypedData data) native;
 
   /// Stream of `close` events handled by this [WebSocket].
-  @DomName('WebSocket.onclose')
-  @DocsEditable()
   Stream<CloseEvent> get onClose => closeEvent.forTarget(this);
 
   /// Stream of `error` events handled by this [WebSocket].
-  @DomName('WebSocket.onerror')
-  @DocsEditable()
   Stream<Event> get onError => errorEvent.forTarget(this);
 
   /// Stream of `message` events handled by this [WebSocket].
-  @DomName('WebSocket.onmessage')
-  @DocsEditable()
   Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
 
   /// Stream of `open` events handled by this [WebSocket].
-  @DomName('WebSocket.onopen')
-  @DocsEditable()
   Stream<Event> get onOpen => openEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DomName('WheelEvent')
 @Native("WheelEvent")
 class WheelEvent extends MouseEvent {
   factory WheelEvent(String type,
@@ -41749,8 +30329,6 @@
         convertDartToNative_Dictionary(options));
   }
 
-  @DomName('WheelEvent.WheelEvent')
-  @DocsEditable()
   factory WheelEvent._(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -41763,30 +30341,18 @@
   static WheelEvent _create_2(type) =>
       JS('WheelEvent', 'new WheelEvent(#)', type);
 
-  @DomName('WheelEvent.DOM_DELTA_LINE')
-  @DocsEditable()
   static const int DOM_DELTA_LINE = 0x01;
 
-  @DomName('WheelEvent.DOM_DELTA_PAGE')
-  @DocsEditable()
   static const int DOM_DELTA_PAGE = 0x02;
 
-  @DomName('WheelEvent.DOM_DELTA_PIXEL')
-  @DocsEditable()
   static const int DOM_DELTA_PIXEL = 0x00;
 
   @JSName('deltaX')
-  @DomName('WheelEvent.deltaX')
-  @DocsEditable()
   final num _deltaX;
 
   @JSName('deltaY')
-  @DomName('WheelEvent.deltaY')
-  @DocsEditable()
   final num _deltaY;
 
-  @DomName('WheelEvent.deltaZ')
-  @DocsEditable()
   final num deltaZ;
 
   /**
@@ -41797,7 +30363,6 @@
    *
    * * [WheelEvent.deltaY](http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html#events-WheelEvent-deltaY) from the W3C.
    */
-  @DomName('WheelEvent.deltaY')
   num get deltaY {
     if (JS('bool', '#.deltaY !== undefined', this)) {
       // W3C WheelEvent
@@ -41814,7 +30379,6 @@
    *
    * * [WheelEvent.deltaX](http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html#events-WheelEvent-deltaX) from the W3C.
    */
-  @DomName('WheelEvent.deltaX')
   num get deltaX {
     if (JS('bool', '#.deltaX !== undefined', this)) {
       // W3C WheelEvent
@@ -41823,7 +30387,6 @@
     throw new UnsupportedError('deltaX is not supported');
   }
 
-  @DomName('WheelEvent.deltaMode')
   int get deltaMode {
     if (JS('bool', '!!(#.deltaMode)', this)) {
       return JS('int', '#.deltaMode', this);
@@ -41882,7 +30445,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.
 
-@DocsEditable()
 /**
  * Top-level container for the current browser tab or window.
  *
@@ -41916,7 +30478,6 @@
  * * [DOM Window](https://developer.mozilla.org/en-US/docs/DOM/window) from MDN.
  * * [Window](http://www.w3.org/TR/Window/) from the W3C.
  */
-@DomName('Window')
 @Native("Window,DOMWindow")
 class Window extends EventTarget
     implements
@@ -42024,7 +30585,6 @@
    * Note: The supplied [callback] needs to call [requestAnimationFrame] again
    * for the animation to continue.
    */
-  @DomName('Window.requestAnimationFrame')
   int requestAnimationFrame(FrameRequestCallback callback) {
     _ensureRequestAnimationFrame();
     return _requestAnimationFrame(_wrapZone(callback));
@@ -42084,7 +30644,6 @@
   @SupportedBrowser(SupportedBrowser.CHROME, '23.0')
   @SupportedBrowser(SupportedBrowser.FIREFOX, '15.0')
   @SupportedBrowser(SupportedBrowser.IE, '10.0')
-  @Experimental()
   IdbFactory get indexedDB => JS(
       'IdbFactory|Null', // If not supported, returns null.
       '#.indexedDB || #.webkitIndexedDB || #.mozIndexedDB',
@@ -42093,7 +30652,6 @@
       this);
 
   /// The debugging console for this window.
-  @DomName('Window.console')
   Console get console => Console._safeConsole;
 
   /**
@@ -42124,8 +30682,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Window.DOMContentLoadedEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> contentLoadedEvent =
       const EventStreamProvider<Event>('DOMContentLoaded');
 
@@ -42135,10 +30691,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Window.devicemotionEvent')
-  @DocsEditable()
-  // http://dev.w3.org/geo/api/spec-source-orientation.html#devicemotion
-  @Experimental()
   static const EventStreamProvider<DeviceMotionEvent> deviceMotionEvent =
       const EventStreamProvider<DeviceMotionEvent>('devicemotion');
 
@@ -42148,10 +30700,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Window.deviceorientationEvent')
-  @DocsEditable()
-  // http://dev.w3.org/geo/api/spec-source-orientation.html#devicemotion
-  @Experimental()
   static const EventStreamProvider<DeviceOrientationEvent>
       deviceOrientationEvent =
       const EventStreamProvider<DeviceOrientationEvent>('deviceorientation');
@@ -42162,13 +30710,9 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Window.hashchangeEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> hashChangeEvent =
       const EventStreamProvider<Event>('hashchange');
 
-  @DomName('Window.loadstartEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> loadStartEvent =
       const EventStreamProvider<Event>('loadstart');
 
@@ -42178,8 +30722,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Window.messageEvent')
-  @DocsEditable()
   static const EventStreamProvider<MessageEvent> messageEvent =
       const EventStreamProvider<MessageEvent>('message');
 
@@ -42189,8 +30731,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Window.offlineEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> offlineEvent =
       const EventStreamProvider<Event>('offline');
 
@@ -42200,8 +30740,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Window.onlineEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> onlineEvent =
       const EventStreamProvider<Event>('online');
 
@@ -42211,8 +30749,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Window.pagehideEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> pageHideEvent =
       const EventStreamProvider<Event>('pagehide');
 
@@ -42222,8 +30758,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Window.pageshowEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> pageShowEvent =
       const EventStreamProvider<Event>('pageshow');
 
@@ -42233,13 +30767,9 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Window.popstateEvent')
-  @DocsEditable()
   static const EventStreamProvider<PopStateEvent> popStateEvent =
       const EventStreamProvider<PopStateEvent>('popstate');
 
-  @DomName('Window.progressEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> progressEvent =
       const EventStreamProvider<Event>('progress');
 
@@ -42249,8 +30779,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Window.storageEvent')
-  @DocsEditable()
   static const EventStreamProvider<StorageEvent> storageEvent =
       const EventStreamProvider<StorageEvent>('storage');
 
@@ -42260,8 +30788,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Window.unloadEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> unloadEvent =
       const EventStreamProvider<Event>('unload');
 
@@ -42271,11 +30797,8 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Window.webkitAnimationEndEvent')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
   static const EventStreamProvider<AnimationEvent> animationEndEvent =
       const EventStreamProvider<AnimationEvent>('webkitAnimationEnd');
 
@@ -42285,11 +30808,8 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Window.webkitAnimationIterationEvent')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
   static const EventStreamProvider<AnimationEvent> animationIterationEvent =
       const EventStreamProvider<AnimationEvent>('webkitAnimationIteration');
 
@@ -42299,11 +30819,8 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Window.webkitAnimationStartEvent')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
   static const EventStreamProvider<AnimationEvent> animationStartEvent =
       const EventStreamProvider<AnimationEvent>('webkitAnimationStart');
 
@@ -42319,10 +30836,6 @@
    * * [File API](http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem)
    *   from W3C.
    */
-  @DomName('Window.PERSISTENT')
-  @DocsEditable()
-  // http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem
-  @Experimental()
   static const int PERSISTENT = 1;
 
   /**
@@ -42335,15 +30848,8 @@
    * * [File API](http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem)
    *   from W3C.
    */
-  @DomName('Window.TEMPORARY')
-  @DocsEditable()
-  // http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem
-  @Experimental()
   static const int TEMPORARY = 0;
 
-  @DomName('Window.animationWorklet')
-  @DocsEditable()
-  @Experimental() // untriaged
   final _Worklet animationWorklet;
 
   /**
@@ -42358,27 +30864,14 @@
    *   API](https://html.spec.whatwg.org/multipage/browsers.html#application-cache-api)
    *   from WHATWG.
    */
-  @DomName('Window.applicationCache')
-  @DocsEditable()
   final ApplicationCache applicationCache;
 
-  @DomName('Window.audioWorklet')
-  @DocsEditable()
-  @Experimental() // untriaged
   final _Worklet audioWorklet;
 
-  @DomName('Window.caches')
-  @DocsEditable()
-  @Experimental() // untriaged
   final CacheStorage caches;
 
-  @DomName('Window.closed')
-  @DocsEditable()
   final bool closed;
 
-  @DomName('Window.cookieStore')
-  @DocsEditable()
-  @Experimental() // untriaged
   final CookieStore cookieStore;
 
   /**
@@ -42388,27 +30881,14 @@
    *
    * * [Web cryptography API](http://www.w3.org/TR/WebCryptoAPI/) from W3C.
    */
-  @DomName('Window.crypto')
-  @DocsEditable()
-  // http://www.w3.org/TR/WebCryptoAPI/
-  @Experimental()
   final Crypto crypto;
 
-  @DomName('Window.customElements')
-  @DocsEditable()
-  @Experimental() // untriaged
   final CustomElementRegistry customElements;
 
   /// *Deprecated*.
-  @DomName('Window.defaultStatus')
-  @DocsEditable()
-  @Experimental() // non-standard
   String defaultStatus;
 
   /// *Deprecated*.
-  @DomName('Window.defaultstatus')
-  @DocsEditable()
-  @Experimental() // non-standard
   String defaultstatus;
 
   /**
@@ -42421,15 +30901,8 @@
    * * [More about devicePixelRatio](http://www.quirksmode.org/blog/archives/2012/07/more_about_devi.html)
    *   from quirksmode.
    */
-  @DomName('Window.devicePixelRatio')
-  @DocsEditable()
-  // http://www.quirksmode.org/blog/archives/2012/06/devicepixelrati.html
-  @Experimental() // non-standard
   final num devicePixelRatio;
 
-  @DomName('Window.external')
-  @DocsEditable()
-  @Experimental() // untriaged
   final External external;
 
   /**
@@ -42440,8 +30913,6 @@
    * * [Loading web pages](https://html.spec.whatwg.org/multipage/browsers.html)
    *   from WHATWG.
    */
-  @DomName('Window.history')
-  @DocsEditable()
   final History history;
 
   /**
@@ -42452,8 +30923,6 @@
    * * [innerHeight](http://docs.webplatform.org/wiki/css/cssom/properties/innerHeight)
    *   from WebPlatform.org.
    */
-  @DomName('Window.innerHeight')
-  @DocsEditable()
   final int innerHeight;
 
   /**
@@ -42464,13 +30933,8 @@
    * * [innerWidth](http://docs.webplatform.org/wiki/css/cssom/properties/innerWidth)
    *   from WebPlatform.org.
    */
-  @DomName('Window.innerWidth')
-  @DocsEditable()
   final int innerWidth;
 
-  @DomName('Window.isSecureContext')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool isSecureContext;
 
   /**
@@ -42485,8 +30949,6 @@
    * * [Local storage specification](http://www.w3.org/TR/webstorage/#the-localstorage-attribute)
    *   from W3C.
    */
-  @DomName('Window.localStorage')
-  @DocsEditable()
   final Storage localStorage;
 
   /**
@@ -42498,8 +30960,6 @@
    *   elements](https://html.spec.whatwg.org/multipage/browsers.html#browser-interface-elements)
    *   from WHATWG.
    */
-  @DomName('Window.locationbar')
-  @DocsEditable()
   final BarProp locationbar;
 
   /**
@@ -42511,8 +30971,6 @@
    *   elements](https://html.spec.whatwg.org/multipage/browsers.html#browser-interface-elements)
    *   from WHATWG.
    */
-  @DomName('Window.menubar')
-  @DocsEditable()
   final BarProp menubar;
 
   /**
@@ -42523,8 +30981,6 @@
    * * [Window name](http://docs.webplatform.org/wiki/html/attributes/name_(window))
    *   from WebPlatform.org.
    */
-  @DomName('Window.name')
-  @DocsEditable()
   String name;
 
   /**
@@ -42536,8 +30992,6 @@
    *   object](https://html.spec.whatwg.org/multipage/webappapis.html#the-navigator-object)
    *   from WHATWG.
    */
-  @DomName('Window.navigator')
-  @DocsEditable()
   final Navigator navigator;
 
   /**
@@ -42548,17 +31002,10 @@
    * * [offscreenBuffering](http://docs.webplatform.org/wiki/dom/properties/offscreenBuffering)
    *   from WebPlatform.org.
    */
-  @DomName('Window.offscreenBuffering')
-  @DocsEditable()
-  @Experimental() // non-standard
   final bool offscreenBuffering;
 
-  @DomName('Window.opener')
-  @DocsEditable()
   WindowBase get opener => _convertNativeToDart_Window(this._get_opener);
   @JSName('opener')
-  @DomName('Window.opener')
-  @DocsEditable()
   @Creates('Window|=Object')
   @Returns('Window|=Object')
   final dynamic _get_opener;
@@ -42567,14 +31014,8 @@
     JS("void", "#.opener = #", this, value);
   }
 
-  @DomName('Window.orientation')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int orientation;
 
-  @DomName('Window.origin')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String origin;
 
   /**
@@ -42585,8 +31026,6 @@
    * * [outerHeight](http://docs.webplatform.org/wiki/css/cssom/properties/outerHeight)
    *   from WebPlatform.org.
    */
-  @DomName('Window.outerHeight')
-  @DocsEditable()
   final int outerHeight;
 
   /**
@@ -42597,8 +31036,6 @@
    * * [outerWidth](http://docs.webplatform.org/wiki/css/cssom/properties/outerWidth)
    *   from WebPlatform.org.
    */
-  @DomName('Window.outerWidth')
-  @DocsEditable()
   final int outerWidth;
 
   @JSName('pageXOffset')
@@ -42615,8 +31052,6 @@
    *   pageXOffset](https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollX)
    *   from MDN.
    */
-  @DomName('Window.pageXOffset')
-  @DocsEditable()
   final num _pageXOffset;
 
   @JSName('pageYOffset')
@@ -42633,16 +31068,10 @@
    *   pageYOffset](https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollY)
    *   from MDN.
    */
-  @DomName('Window.pageYOffset')
-  @DocsEditable()
   final num _pageYOffset;
 
-  @DomName('Window.parent')
-  @DocsEditable()
   WindowBase get parent => _convertNativeToDart_Window(this._get_parent);
   @JSName('parent')
-  @DomName('Window.parent')
-  @DocsEditable()
   @Creates('Window|=Object')
   @Returns('Window|=Object')
   final dynamic _get_parent;
@@ -42658,8 +31087,6 @@
    * * [Navigation timing
    *   specification](http://www.w3.org/TR/navigation-timing/) from W3C.
    */
-  @DomName('Window.performance')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE)
@@ -42673,8 +31100,6 @@
    * * [The Screen interface specification](http://www.w3.org/TR/cssom-view/#screen)
    *   from W3C.
    */
-  @DomName('Window.screen')
-  @DocsEditable()
   final Screen screen;
 
   /**
@@ -42686,8 +31111,6 @@
    * * [The Screen interface specification](http://www.w3.org/TR/cssom-view/#screen)
    *   from W3C.
    */
-  @DomName('Window.screenLeft')
-  @DocsEditable()
   final int screenLeft;
 
   /**
@@ -42698,8 +31121,6 @@
    * * [The Screen interface specification](http://www.w3.org/TR/cssom-view/#screen)
    *   from W3C.
    */
-  @DomName('Window.screenTop')
-  @DocsEditable()
   final int screenTop;
 
   /**
@@ -42710,8 +31131,6 @@
    * * [The Screen interface specification](http://www.w3.org/TR/cssom-view/#screen)
    *   from W3C.
    */
-  @DomName('Window.screenX')
-  @DocsEditable()
   final int screenX;
 
   /**
@@ -42722,8 +31141,6 @@
    * * [The Screen interface specification](http://www.w3.org/TR/cssom-view/#screen)
    *   from W3C.
    */
-  @DomName('Window.screenY')
-  @DocsEditable()
   final int screenY;
 
   /**
@@ -42735,8 +31152,6 @@
    *   elements](https://html.spec.whatwg.org/multipage/browsers.html#browser-interface-elements)
    *   from WHATWG.
    */
-  @DomName('Window.scrollbars')
-  @DocsEditable()
   final BarProp scrollbars;
 
   /**
@@ -42747,8 +31162,6 @@
    * * [Window.self](https://developer.mozilla.org/en-US/docs/Web/API/Window.self)
    *   from MDN.
    */
-  @DomName('Window.self')
-  @DocsEditable()
   WindowBase get self => _convertNativeToDart_Window(this._get_self);
   @JSName('self')
   /**
@@ -42759,8 +31172,6 @@
    * * [Window.self](https://developer.mozilla.org/en-US/docs/Web/API/Window.self)
    *   from MDN.
    */
-  @DomName('Window.self')
-  @DocsEditable()
   @Creates('Window|=Object')
   @Returns('Window|=Object')
   final dynamic _get_self;
@@ -42778,8 +31189,6 @@
    * * [Local storage
    *   specification](http://www.w3.org/TR/webstorage/#dom-sessionstorage) from W3C.
    */
-  @DomName('Window.sessionStorage')
-  @DocsEditable()
   final Storage sessionStorage;
 
   /**
@@ -42791,15 +31200,9 @@
    *   specification](https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section)
    *   from W3C.
    */
-  @DomName('Window.speechSynthesis')
-  @DocsEditable()
-  // https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section
-  @Experimental()
   final SpeechSynthesis speechSynthesis;
 
   /// *Deprecated*.
-  @DomName('Window.status')
-  @DocsEditable()
   String status;
 
   /**
@@ -42811,8 +31214,6 @@
    *   elements](https://html.spec.whatwg.org/multipage/browsers.html#browser-interface-elements)
    *   from WHATWG.
    */
-  @DomName('Window.statusbar')
-  @DocsEditable()
   final BarProp statusbar;
 
   /**
@@ -42824,10 +31225,6 @@
    *   reference](https://developer.apple.com/library/safari/documentation/SafariDOMAdditions/Reference/StyleMedia/)
    *   from Safari Developer Library.
    */
-  @DomName('Window.styleMedia')
-  @DocsEditable()
-  // http://developer.apple.com/library/safari/#documentation/SafariDOMAdditions/Reference/StyleMedia/StyleMedia/StyleMedia.html
-  @Experimental() // nonstandard
   final StyleMedia styleMedia;
 
   /**
@@ -42839,23 +31236,14 @@
    *   elements](https://html.spec.whatwg.org/multipage/browsers.html#browser-interface-elements)
    *   from WHATWG.
    */
-  @DomName('Window.toolbar')
-  @DocsEditable()
   final BarProp toolbar;
 
-  @DomName('Window.top')
-  @DocsEditable()
   WindowBase get top => _convertNativeToDart_Window(this._get_top);
   @JSName('top')
-  @DomName('Window.top')
-  @DocsEditable()
   @Creates('Window|=Object')
   @Returns('Window|=Object')
   final dynamic _get_top;
 
-  @DomName('Window.visualViewport')
-  @DocsEditable()
-  @Experimental() // untriaged
   final VisualViewport visualViewport;
 
   /**
@@ -42866,8 +31254,6 @@
    * * [Window.window](https://developer.mozilla.org/en-US/docs/Web/API/Window.window)
    *   from MDN.
    */
-  @DomName('Window.window')
-  @DocsEditable()
   WindowBase get window => _convertNativeToDart_Window(this._get_window);
   @JSName('window')
   /**
@@ -42878,14 +31264,10 @@
    * * [Window.window](https://developer.mozilla.org/en-US/docs/Web/API/Window.window)
    *   from MDN.
    */
-  @DomName('Window.window')
-  @DocsEditable()
   @Creates('Window|=Object')
   @Returns('Window|=Object')
   final dynamic _get_window;
 
-  @DomName('Window.__getter__')
-  @DocsEditable()
   @Creates('Window|=Object')
   @Returns('Window|=Object')
   WindowBase __getter__(index_OR_name) {
@@ -42899,14 +31281,10 @@
   }
 
   @JSName('__getter__')
-  @DomName('Window.__getter__')
-  @DocsEditable()
   @Creates('Window|=Object')
   @Returns('Window|=Object')
   __getter___1(int index) native;
   @JSName('__getter__')
-  @DomName('Window.__getter__')
-  @DocsEditable()
   @Creates('Window|=Object')
   @Returns('Window|=Object')
   __getter___2(String name) native;
@@ -42919,17 +31297,10 @@
    * * [User prompts](https://html.spec.whatwg.org/multipage/webappapis.html#user-prompts)
    *   from WHATWG.
    */
-  @DomName('Window.alert')
-  @DocsEditable()
   void alert([String message]) native;
 
-  @DomName('Window.cancelIdleCallback')
-  @DocsEditable()
-  @Experimental() // untriaged
   void cancelIdleCallback(int handle) native;
 
-  @DomName('Window.close')
-  @DocsEditable()
   void close() native;
 
   /**
@@ -42940,13 +31311,8 @@
    * * [User prompts](https://html.spec.whatwg.org/multipage/webappapis.html#user-prompts)
    *   from WHATWG.
    */
-  @DomName('Window.confirm')
-  @DocsEditable()
   bool confirm([String message]) native;
 
-  @DomName('Window.fetch')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future fetch(/*RequestInfo*/ input, [Map init]) {
     if (init != null) {
       var init_1 = convertDartToNative_Dictionary(init);
@@ -42956,14 +31322,8 @@
   }
 
   @JSName('fetch')
-  @DomName('Window.fetch')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _fetch_1(input, init) native;
   @JSName('fetch')
-  @DomName('Window.fetch')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _fetch_2(input) native;
 
   /**
@@ -42974,20 +31334,12 @@
    * * [Window.find](https://developer.mozilla.org/en-US/docs/Web/API/Window.find)
    *   from MDN.
    */
-  @DomName('Window.find')
-  @DocsEditable()
-  @Experimental() // non-standard
   bool find(String string, bool caseSensitive, bool backwards, bool wrap,
       bool wholeWord, bool searchInFrames, bool showDialog) native;
 
   @JSName('getComputedStyle')
-  @DomName('Window.getComputedStyle')
-  @DocsEditable()
   CssStyleDeclaration _getComputedStyle(Element elt, [String pseudoElt]) native;
 
-  @DomName('Window.getComputedStyleMap')
-  @DocsEditable()
-  @Experimental() // untriaged
   StylePropertyMapReadonly getComputedStyleMap(
       Element element, String pseudoElement) native;
 
@@ -42995,9 +31347,6 @@
   /**
    * Returns all CSS rules that apply to the element's pseudo-element.
    */
-  @DomName('Window.getMatchedCSSRules')
-  @DocsEditable()
-  @Experimental() // non-standard
   @Returns('_CssRuleList|Null')
   @Creates('_CssRuleList')
   List<CssRule> getMatchedCssRules(Element element, String pseudoElement)
@@ -43011,8 +31360,6 @@
    * * [Window.getSelection](https://developer.mozilla.org/en-US/docs/Web/API/Window.getSelection)
    *   from MDN.
    */
-  @DomName('Window.getSelection')
-  @DocsEditable()
   Selection getSelection() native;
 
   /**
@@ -43026,8 +31373,6 @@
    * * [The MediaQueryList
    *   specification](http://www.w3.org/TR/cssom-view/#the-mediaquerylist-interface) from W3C.
    */
-  @DomName('Window.matchMedia')
-  @DocsEditable()
   MediaQueryList matchMedia(String query) native;
 
   /**
@@ -43041,32 +31386,21 @@
    *   from MDN.
    * * [Window.moveBy](http://dev.w3.org/csswg/cssom-view/#dom-window-moveby) from W3C.
    */
-  @DomName('Window.moveBy')
-  @DocsEditable()
   void moveBy(int x, int y) native;
 
   @JSName('moveTo')
-  @DomName('Window.moveTo')
-  @DocsEditable()
   void _moveTo(int x, int y) native;
 
   @JSName('openDatabase')
 
   /// *Deprecated.*
-  @DomName('Window.openDatabase')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  // http://www.w3.org/TR/webdatabase/
-  @Experimental() // deprecated
   @Creates('SqlDatabase')
   SqlDatabase _openDatabase(
       String name, String version, String displayName, int estimatedSize,
       [DatabaseCallback creationCallback]) native;
 
-  @DomName('Window.postMessage')
-  @DocsEditable()
   void postMessage(/*any*/ message, String targetOrigin,
       [List<Object> transfer]) {
     if (transfer != null) {
@@ -43080,12 +31414,8 @@
   }
 
   @JSName('postMessage')
-  @DomName('Window.postMessage')
-  @DocsEditable()
   void _postMessage_1(message, targetOrigin, List<Object> transfer) native;
   @JSName('postMessage')
-  @DomName('Window.postMessage')
-  @DocsEditable()
   void _postMessage_2(message, targetOrigin) native;
 
   /**
@@ -43096,13 +31426,8 @@
    * * [Window.print](https://developer.mozilla.org/en-US/docs/Web/API/Window.print)
    *   from MDN.
    */
-  @DomName('Window.print')
-  @DocsEditable()
   void print() native;
 
-  @DomName('Window.requestIdleCallback')
-  @DocsEditable()
-  @Experimental() // untriaged
   int requestIdleCallback(IdleRequestCallback callback, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -43112,14 +31437,8 @@
   }
 
   @JSName('requestIdleCallback')
-  @DomName('Window.requestIdleCallback')
-  @DocsEditable()
-  @Experimental() // untriaged
   int _requestIdleCallback_1(IdleRequestCallback callback, options) native;
   @JSName('requestIdleCallback')
-  @DomName('Window.requestIdleCallback')
-  @DocsEditable()
-  @Experimental() // untriaged
   int _requestIdleCallback_2(IdleRequestCallback callback) native;
 
   /**
@@ -43130,8 +31449,6 @@
    * * [Window resizeBy](http://docs.webplatform.org/wiki/dom/methods/resizeBy)
    *   from WebPlatform.org.
    */
-  @DomName('Window.resizeBy')
-  @DocsEditable()
   void resizeBy(int x, int y) native;
 
   /**
@@ -43142,8 +31459,6 @@
    * * [Window resizeTo](http://docs.webplatform.org/wiki/dom/methods/resizeTo)
    *   from WebPlatform.org.
    */
-  @DomName('Window.resizeTo')
-  @DocsEditable()
   void resizeTo(int x, int y) native;
 
   /**
@@ -43156,8 +31471,6 @@
    * * [Window scroll](http://docs.webplatform.org/wiki/dom/methods/scroll)
    *   from WebPlatform.org.
    */
-  @DomName('Window.scroll')
-  @DocsEditable()
   void scroll([options_OR_x, y, Map scrollOptions]) {
     if (options_OR_x == null && y == null && scrollOptions == null) {
       _scroll_1();
@@ -43195,8 +31508,6 @@
    * * [Window scroll](http://docs.webplatform.org/wiki/dom/methods/scroll)
    *   from WebPlatform.org.
    */
-  @DomName('Window.scroll')
-  @DocsEditable()
   void _scroll_1() native;
   @JSName('scroll')
   /**
@@ -43209,8 +31520,6 @@
    * * [Window scroll](http://docs.webplatform.org/wiki/dom/methods/scroll)
    *   from WebPlatform.org.
    */
-  @DomName('Window.scroll')
-  @DocsEditable()
   void _scroll_2(options) native;
   @JSName('scroll')
   /**
@@ -43223,8 +31532,6 @@
    * * [Window scroll](http://docs.webplatform.org/wiki/dom/methods/scroll)
    *   from WebPlatform.org.
    */
-  @DomName('Window.scroll')
-  @DocsEditable()
   void _scroll_3(num x, num y) native;
   @JSName('scroll')
   /**
@@ -43237,8 +31544,6 @@
    * * [Window scroll](http://docs.webplatform.org/wiki/dom/methods/scroll)
    *   from WebPlatform.org.
    */
-  @DomName('Window.scroll')
-  @DocsEditable()
   void _scroll_4(int x, int y) native;
   @JSName('scroll')
   /**
@@ -43251,8 +31556,6 @@
    * * [Window scroll](http://docs.webplatform.org/wiki/dom/methods/scroll)
    *   from WebPlatform.org.
    */
-  @DomName('Window.scroll')
-  @DocsEditable()
   void _scroll_5(int x, int y, scrollOptions) native;
 
   /**
@@ -43263,8 +31566,6 @@
    * * [Window scrollBy](http://docs.webplatform.org/wiki/dom/methods/scrollBy)
    *   from WebPlatform.org.
    */
-  @DomName('Window.scrollBy')
-  @DocsEditable()
   void scrollBy([options_OR_x, y, Map scrollOptions]) {
     if (options_OR_x == null && y == null && scrollOptions == null) {
       _scrollBy_1();
@@ -43300,8 +31601,6 @@
    * * [Window scrollBy](http://docs.webplatform.org/wiki/dom/methods/scrollBy)
    *   from WebPlatform.org.
    */
-  @DomName('Window.scrollBy')
-  @DocsEditable()
   void _scrollBy_1() native;
   @JSName('scrollBy')
   /**
@@ -43312,8 +31611,6 @@
    * * [Window scrollBy](http://docs.webplatform.org/wiki/dom/methods/scrollBy)
    *   from WebPlatform.org.
    */
-  @DomName('Window.scrollBy')
-  @DocsEditable()
   void _scrollBy_2(options) native;
   @JSName('scrollBy')
   /**
@@ -43324,8 +31621,6 @@
    * * [Window scrollBy](http://docs.webplatform.org/wiki/dom/methods/scrollBy)
    *   from WebPlatform.org.
    */
-  @DomName('Window.scrollBy')
-  @DocsEditable()
   void _scrollBy_3(num x, num y) native;
   @JSName('scrollBy')
   /**
@@ -43336,8 +31631,6 @@
    * * [Window scrollBy](http://docs.webplatform.org/wiki/dom/methods/scrollBy)
    *   from WebPlatform.org.
    */
-  @DomName('Window.scrollBy')
-  @DocsEditable()
   void _scrollBy_4(int x, int y) native;
   @JSName('scrollBy')
   /**
@@ -43348,8 +31641,6 @@
    * * [Window scrollBy](http://docs.webplatform.org/wiki/dom/methods/scrollBy)
    *   from WebPlatform.org.
    */
-  @DomName('Window.scrollBy')
-  @DocsEditable()
   void _scrollBy_5(int x, int y, scrollOptions) native;
 
   /**
@@ -43362,8 +31653,6 @@
    * * [Window scrollTo](http://docs.webplatform.org/wiki/dom/methods/scrollTo)
    *   from WebPlatform.org.
    */
-  @DomName('Window.scrollTo')
-  @DocsEditable()
   void scrollTo([options_OR_x, y, Map scrollOptions]) {
     if (options_OR_x == null && y == null && scrollOptions == null) {
       _scrollTo_1();
@@ -43401,8 +31690,6 @@
    * * [Window scrollTo](http://docs.webplatform.org/wiki/dom/methods/scrollTo)
    *   from WebPlatform.org.
    */
-  @DomName('Window.scrollTo')
-  @DocsEditable()
   void _scrollTo_1() native;
   @JSName('scrollTo')
   /**
@@ -43415,8 +31702,6 @@
    * * [Window scrollTo](http://docs.webplatform.org/wiki/dom/methods/scrollTo)
    *   from WebPlatform.org.
    */
-  @DomName('Window.scrollTo')
-  @DocsEditable()
   void _scrollTo_2(options) native;
   @JSName('scrollTo')
   /**
@@ -43429,8 +31714,6 @@
    * * [Window scrollTo](http://docs.webplatform.org/wiki/dom/methods/scrollTo)
    *   from WebPlatform.org.
    */
-  @DomName('Window.scrollTo')
-  @DocsEditable()
   void _scrollTo_3(num x, num y) native;
   @JSName('scrollTo')
   /**
@@ -43443,8 +31726,6 @@
    * * [Window scrollTo](http://docs.webplatform.org/wiki/dom/methods/scrollTo)
    *   from WebPlatform.org.
    */
-  @DomName('Window.scrollTo')
-  @DocsEditable()
   void _scrollTo_4(int x, int y) native;
   @JSName('scrollTo')
   /**
@@ -43457,8 +31738,6 @@
    * * [Window scrollTo](http://docs.webplatform.org/wiki/dom/methods/scrollTo)
    *   from WebPlatform.org.
    */
-  @DomName('Window.scrollTo')
-  @DocsEditable()
   void _scrollTo_5(int x, int y, scrollOptions) native;
 
   /**
@@ -43470,26 +31749,16 @@
    *   object](http://www.w3.org/html/wg/drafts/html/master/browsers.html#the-window-object)
    *   from W3C.
    */
-  @DomName('Window.stop')
-  @DocsEditable()
   void stop() native;
 
   @JSName('webkitRequestFileSystem')
-  @DomName('Window.webkitRequestFileSystem')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
-  @Experimental()
-  // http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem
   void __requestFileSystem(
       int type, int size, _FileSystemCallback successCallback,
       [_ErrorCallback errorCallback]) native;
 
   @JSName('webkitRequestFileSystem')
-  @DomName('Window.webkitRequestFileSystem')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
-  @Experimental()
-  // http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem
   Future<FileSystem> _requestFileSystem(int type, int size) {
     var completer = new Completer<FileSystem>();
     __requestFileSystem(type, size, (value) {
@@ -43512,11 +31781,7 @@
    *   points](http://www.w3.org/TR/file-system-api/#obtaining-access-to-file-system-entry-points)
    * from W3C.
    */
-  @DomName('Window.webkitResolveLocalFileSystemURL')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
-  @Experimental()
-  // http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem
   void _resolveLocalFileSystemUrl(String url, _EntryCallback successCallback,
       [_ErrorCallback errorCallback]) native;
 
@@ -43530,11 +31795,7 @@
    *   points](http://www.w3.org/TR/file-system-api/#obtaining-access-to-file-system-entry-points)
    * from W3C.
    */
-  @DomName('Window.webkitResolveLocalFileSystemURL')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
-  @Experimental()
-  // http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem
   Future<Entry> resolveLocalFileSystemUrl(String url) {
     var completer = new Completer<Entry>();
     _resolveLocalFileSystemUrl(url, (value) {
@@ -43547,434 +31808,249 @@
 
   // From WindowBase64
 
-  @DomName('Window.atob')
-  @DocsEditable()
   String atob(String atob) native;
 
-  @DomName('Window.btoa')
-  @DocsEditable()
   String btoa(String btoa) native;
 
   // From WindowTimers
 
   @JSName('setInterval')
-  @DomName('Window.setInterval')
-  @DocsEditable()
   int _setInterval_String(String handler, [int timeout, Object arguments])
       native;
 
   @JSName('setTimeout')
-  @DomName('Window.setTimeout')
-  @DocsEditable()
   int _setTimeout_String(String handler, [int timeout, Object arguments])
       native;
 
   @JSName('clearInterval')
-  @DomName('Window.clearInterval')
-  @DocsEditable()
   void _clearInterval([int handle]) native;
 
   @JSName('clearTimeout')
-  @DomName('Window.clearTimeout')
-  @DocsEditable()
   void _clearTimeout([int handle]) native;
 
   @JSName('setInterval')
-  @DomName('Window.setInterval')
-  @DocsEditable()
   int _setInterval(Object handler, [int timeout]) native;
 
   @JSName('setTimeout')
-  @DomName('Window.setTimeout')
-  @DocsEditable()
   int _setTimeout(Object handler, [int timeout]) native;
 
   /// Stream of `contentloaded` events handled by this [Window].
-  @DomName('Window.onDOMContentLoaded')
-  @DocsEditable()
   Stream<Event> get onContentLoaded => contentLoadedEvent.forTarget(this);
 
   /// Stream of `abort` events handled by this [Window].
-  @DomName('Window.onabort')
-  @DocsEditable()
   Stream<Event> get onAbort => Element.abortEvent.forTarget(this);
 
   /// Stream of `blur` events handled by this [Window].
-  @DomName('Window.onblur')
-  @DocsEditable()
   Stream<Event> get onBlur => Element.blurEvent.forTarget(this);
 
-  @DomName('Window.oncanplay')
-  @DocsEditable()
   Stream<Event> get onCanPlay => Element.canPlayEvent.forTarget(this);
 
-  @DomName('Window.oncanplaythrough')
-  @DocsEditable()
   Stream<Event> get onCanPlayThrough =>
       Element.canPlayThroughEvent.forTarget(this);
 
   /// Stream of `change` events handled by this [Window].
-  @DomName('Window.onchange')
-  @DocsEditable()
   Stream<Event> get onChange => Element.changeEvent.forTarget(this);
 
   /// Stream of `click` events handled by this [Window].
-  @DomName('Window.onclick')
-  @DocsEditable()
   Stream<MouseEvent> get onClick => Element.clickEvent.forTarget(this);
 
   /// Stream of `contextmenu` events handled by this [Window].
-  @DomName('Window.oncontextmenu')
-  @DocsEditable()
   Stream<MouseEvent> get onContextMenu =>
       Element.contextMenuEvent.forTarget(this);
 
   /// Stream of `doubleclick` events handled by this [Window].
-  @DomName('Window.ondblclick')
-  @DocsEditable()
   Stream<Event> get onDoubleClick => Element.doubleClickEvent.forTarget(this);
 
   /// Stream of `devicemotion` events handled by this [Window].
-  @DomName('Window.ondevicemotion')
-  @DocsEditable()
-  // http://dev.w3.org/geo/api/spec-source-orientation.html#devicemotion
-  @Experimental()
   Stream<DeviceMotionEvent> get onDeviceMotion =>
       deviceMotionEvent.forTarget(this);
 
   /// Stream of `deviceorientation` events handled by this [Window].
-  @DomName('Window.ondeviceorientation')
-  @DocsEditable()
-  // http://dev.w3.org/geo/api/spec-source-orientation.html#devicemotion
-  @Experimental()
   Stream<DeviceOrientationEvent> get onDeviceOrientation =>
       deviceOrientationEvent.forTarget(this);
 
   /// Stream of `drag` events handled by this [Window].
-  @DomName('Window.ondrag')
-  @DocsEditable()
   Stream<MouseEvent> get onDrag => Element.dragEvent.forTarget(this);
 
   /// Stream of `dragend` events handled by this [Window].
-  @DomName('Window.ondragend')
-  @DocsEditable()
   Stream<MouseEvent> get onDragEnd => Element.dragEndEvent.forTarget(this);
 
   /// Stream of `dragenter` events handled by this [Window].
-  @DomName('Window.ondragenter')
-  @DocsEditable()
   Stream<MouseEvent> get onDragEnter => Element.dragEnterEvent.forTarget(this);
 
   /// Stream of `dragleave` events handled by this [Window].
-  @DomName('Window.ondragleave')
-  @DocsEditable()
   Stream<MouseEvent> get onDragLeave => Element.dragLeaveEvent.forTarget(this);
 
   /// Stream of `dragover` events handled by this [Window].
-  @DomName('Window.ondragover')
-  @DocsEditable()
   Stream<MouseEvent> get onDragOver => Element.dragOverEvent.forTarget(this);
 
   /// Stream of `dragstart` events handled by this [Window].
-  @DomName('Window.ondragstart')
-  @DocsEditable()
   Stream<MouseEvent> get onDragStart => Element.dragStartEvent.forTarget(this);
 
   /// Stream of `drop` events handled by this [Window].
-  @DomName('Window.ondrop')
-  @DocsEditable()
   Stream<MouseEvent> get onDrop => Element.dropEvent.forTarget(this);
 
-  @DomName('Window.ondurationchange')
-  @DocsEditable()
   Stream<Event> get onDurationChange =>
       Element.durationChangeEvent.forTarget(this);
 
-  @DomName('Window.onemptied')
-  @DocsEditable()
   Stream<Event> get onEmptied => Element.emptiedEvent.forTarget(this);
 
-  @DomName('Window.onended')
-  @DocsEditable()
   Stream<Event> get onEnded => Element.endedEvent.forTarget(this);
 
   /// Stream of `error` events handled by this [Window].
-  @DomName('Window.onerror')
-  @DocsEditable()
   Stream<Event> get onError => Element.errorEvent.forTarget(this);
 
   /// Stream of `focus` events handled by this [Window].
-  @DomName('Window.onfocus')
-  @DocsEditable()
   Stream<Event> get onFocus => Element.focusEvent.forTarget(this);
 
   /// Stream of `hashchange` events handled by this [Window].
-  @DomName('Window.onhashchange')
-  @DocsEditable()
   Stream<Event> get onHashChange => hashChangeEvent.forTarget(this);
 
   /// Stream of `input` events handled by this [Window].
-  @DomName('Window.oninput')
-  @DocsEditable()
   Stream<Event> get onInput => Element.inputEvent.forTarget(this);
 
   /// Stream of `invalid` events handled by this [Window].
-  @DomName('Window.oninvalid')
-  @DocsEditable()
   Stream<Event> get onInvalid => Element.invalidEvent.forTarget(this);
 
   /// Stream of `keydown` events handled by this [Window].
-  @DomName('Window.onkeydown')
-  @DocsEditable()
   Stream<KeyboardEvent> get onKeyDown => Element.keyDownEvent.forTarget(this);
 
   /// Stream of `keypress` events handled by this [Window].
-  @DomName('Window.onkeypress')
-  @DocsEditable()
   Stream<KeyboardEvent> get onKeyPress => Element.keyPressEvent.forTarget(this);
 
   /// Stream of `keyup` events handled by this [Window].
-  @DomName('Window.onkeyup')
-  @DocsEditable()
   Stream<KeyboardEvent> get onKeyUp => Element.keyUpEvent.forTarget(this);
 
   /// Stream of `load` events handled by this [Window].
-  @DomName('Window.onload')
-  @DocsEditable()
   Stream<Event> get onLoad => Element.loadEvent.forTarget(this);
 
-  @DomName('Window.onloadeddata')
-  @DocsEditable()
   Stream<Event> get onLoadedData => Element.loadedDataEvent.forTarget(this);
 
-  @DomName('Window.onloadedmetadata')
-  @DocsEditable()
   Stream<Event> get onLoadedMetadata =>
       Element.loadedMetadataEvent.forTarget(this);
 
-  @DomName('Window.onloadstart')
-  @DocsEditable()
   Stream<Event> get onLoadStart => loadStartEvent.forTarget(this);
 
   /// Stream of `message` events handled by this [Window].
-  @DomName('Window.onmessage')
-  @DocsEditable()
   Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
 
   /// Stream of `mousedown` events handled by this [Window].
-  @DomName('Window.onmousedown')
-  @DocsEditable()
   Stream<MouseEvent> get onMouseDown => Element.mouseDownEvent.forTarget(this);
 
   /// Stream of `mouseenter` events handled by this [Window].
-  @DomName('Window.onmouseenter')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MouseEvent> get onMouseEnter =>
       Element.mouseEnterEvent.forTarget(this);
 
   /// Stream of `mouseleave` events handled by this [Window].
-  @DomName('Window.onmouseleave')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MouseEvent> get onMouseLeave =>
       Element.mouseLeaveEvent.forTarget(this);
 
   /// Stream of `mousemove` events handled by this [Window].
-  @DomName('Window.onmousemove')
-  @DocsEditable()
   Stream<MouseEvent> get onMouseMove => Element.mouseMoveEvent.forTarget(this);
 
   /// Stream of `mouseout` events handled by this [Window].
-  @DomName('Window.onmouseout')
-  @DocsEditable()
   Stream<MouseEvent> get onMouseOut => Element.mouseOutEvent.forTarget(this);
 
   /// Stream of `mouseover` events handled by this [Window].
-  @DomName('Window.onmouseover')
-  @DocsEditable()
   Stream<MouseEvent> get onMouseOver => Element.mouseOverEvent.forTarget(this);
 
   /// Stream of `mouseup` events handled by this [Window].
-  @DomName('Window.onmouseup')
-  @DocsEditable()
   Stream<MouseEvent> get onMouseUp => Element.mouseUpEvent.forTarget(this);
 
   /// Stream of `mousewheel` events handled by this [Window].
-  @DomName('Window.onmousewheel')
-  @DocsEditable()
   Stream<WheelEvent> get onMouseWheel =>
       Element.mouseWheelEvent.forTarget(this);
 
   /// Stream of `offline` events handled by this [Window].
-  @DomName('Window.onoffline')
-  @DocsEditable()
   Stream<Event> get onOffline => offlineEvent.forTarget(this);
 
   /// Stream of `online` events handled by this [Window].
-  @DomName('Window.ononline')
-  @DocsEditable()
   Stream<Event> get onOnline => onlineEvent.forTarget(this);
 
   /// Stream of `pagehide` events handled by this [Window].
-  @DomName('Window.onpagehide')
-  @DocsEditable()
   Stream<Event> get onPageHide => pageHideEvent.forTarget(this);
 
   /// Stream of `pageshow` events handled by this [Window].
-  @DomName('Window.onpageshow')
-  @DocsEditable()
   Stream<Event> get onPageShow => pageShowEvent.forTarget(this);
 
-  @DomName('Window.onpause')
-  @DocsEditable()
   Stream<Event> get onPause => Element.pauseEvent.forTarget(this);
 
-  @DomName('Window.onplay')
-  @DocsEditable()
   Stream<Event> get onPlay => Element.playEvent.forTarget(this);
 
-  @DomName('Window.onplaying')
-  @DocsEditable()
   Stream<Event> get onPlaying => Element.playingEvent.forTarget(this);
 
   /// Stream of `popstate` events handled by this [Window].
-  @DomName('Window.onpopstate')
-  @DocsEditable()
   Stream<PopStateEvent> get onPopState => popStateEvent.forTarget(this);
 
-  @DomName('Window.onprogress')
-  @DocsEditable()
   Stream<Event> get onProgress => progressEvent.forTarget(this);
 
-  @DomName('Window.onratechange')
-  @DocsEditable()
   Stream<Event> get onRateChange => Element.rateChangeEvent.forTarget(this);
 
   /// Stream of `reset` events handled by this [Window].
-  @DomName('Window.onreset')
-  @DocsEditable()
   Stream<Event> get onReset => Element.resetEvent.forTarget(this);
 
   /// Stream of `resize` events handled by this [Window].
-  @DomName('Window.onresize')
-  @DocsEditable()
   Stream<Event> get onResize => Element.resizeEvent.forTarget(this);
 
   /// Stream of `scroll` events handled by this [Window].
-  @DomName('Window.onscroll')
-  @DocsEditable()
   Stream<Event> get onScroll => Element.scrollEvent.forTarget(this);
 
   /// Stream of `search` events handled by this [Window].
-  @DomName('Window.onsearch')
-  @DocsEditable()
-  // http://www.w3.org/TR/html-markup/input.search.html
-  @Experimental()
   Stream<Event> get onSearch => Element.searchEvent.forTarget(this);
 
-  @DomName('Window.onseeked')
-  @DocsEditable()
   Stream<Event> get onSeeked => Element.seekedEvent.forTarget(this);
 
-  @DomName('Window.onseeking')
-  @DocsEditable()
   Stream<Event> get onSeeking => Element.seekingEvent.forTarget(this);
 
   /// Stream of `select` events handled by this [Window].
-  @DomName('Window.onselect')
-  @DocsEditable()
   Stream<Event> get onSelect => Element.selectEvent.forTarget(this);
 
-  @DomName('Window.onstalled')
-  @DocsEditable()
   Stream<Event> get onStalled => Element.stalledEvent.forTarget(this);
 
   /// Stream of `storage` events handled by this [Window].
-  @DomName('Window.onstorage')
-  @DocsEditable()
   Stream<StorageEvent> get onStorage => storageEvent.forTarget(this);
 
   /// Stream of `submit` events handled by this [Window].
-  @DomName('Window.onsubmit')
-  @DocsEditable()
   Stream<Event> get onSubmit => Element.submitEvent.forTarget(this);
 
-  @DomName('Window.onsuspend')
-  @DocsEditable()
   Stream<Event> get onSuspend => Element.suspendEvent.forTarget(this);
 
-  @DomName('Window.ontimeupdate')
-  @DocsEditable()
   Stream<Event> get onTimeUpdate => Element.timeUpdateEvent.forTarget(this);
 
   /// Stream of `touchcancel` events handled by this [Window].
-  @DomName('Window.ontouchcancel')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   Stream<TouchEvent> get onTouchCancel =>
       Element.touchCancelEvent.forTarget(this);
 
   /// Stream of `touchend` events handled by this [Window].
-  @DomName('Window.ontouchend')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   Stream<TouchEvent> get onTouchEnd => Element.touchEndEvent.forTarget(this);
 
   /// Stream of `touchmove` events handled by this [Window].
-  @DomName('Window.ontouchmove')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   Stream<TouchEvent> get onTouchMove => Element.touchMoveEvent.forTarget(this);
 
   /// Stream of `touchstart` events handled by this [Window].
-  @DomName('Window.ontouchstart')
-  @DocsEditable()
-  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
-  @Experimental()
   Stream<TouchEvent> get onTouchStart =>
       Element.touchStartEvent.forTarget(this);
 
   /// Stream of `transitionend` events handled by this [Window].
-  @DomName('Window.ontransitionend')
-  @DocsEditable()
   Stream<TransitionEvent> get onTransitionEnd =>
       Element.transitionEndEvent.forTarget(this);
 
   /// Stream of `unload` events handled by this [Window].
-  @DomName('Window.onunload')
-  @DocsEditable()
   Stream<Event> get onUnload => unloadEvent.forTarget(this);
 
-  @DomName('Window.onvolumechange')
-  @DocsEditable()
   Stream<Event> get onVolumeChange => Element.volumeChangeEvent.forTarget(this);
 
-  @DomName('Window.onwaiting')
-  @DocsEditable()
   Stream<Event> get onWaiting => Element.waitingEvent.forTarget(this);
 
   /// Stream of `animationend` events handled by this [Window].
-  @DomName('Window.onwebkitAnimationEnd')
-  @DocsEditable()
-  @Experimental()
   Stream<AnimationEvent> get onAnimationEnd =>
       animationEndEvent.forTarget(this);
 
   /// Stream of `animationiteration` events handled by this [Window].
-  @DomName('Window.onwebkitAnimationIteration')
-  @DocsEditable()
-  @Experimental()
   Stream<AnimationEvent> get onAnimationIteration =>
       animationIterationEvent.forTarget(this);
 
   /// Stream of `animationstart` events handled by this [Window].
-  @DomName('Window.onwebkitAnimationStart')
-  @DocsEditable()
-  @Experimental()
   Stream<AnimationEvent> get onAnimationStart =>
       animationStartEvent.forTarget(this);
 
@@ -43984,16 +32060,13 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Window.beforeunloadEvent')
   static const EventStreamProvider<BeforeUnloadEvent> beforeUnloadEvent =
       const _BeforeUnloadEventStreamProvider('beforeunload');
 
   /// Stream of `beforeunload` events handled by this [Window].
-  @DomName('Window.onbeforeunload')
   Stream<Event> get onBeforeUnload => beforeUnloadEvent.forTarget(this);
 
   /// Stream of `wheel` events handled by this [Window].
-  @DomName('Window.onWheel')
   Stream<WheelEvent> get onWheel => Element.wheelEvent.forTarget(this);
 
   /**
@@ -44013,11 +32086,8 @@
   }
 
   @JSName('openDatabase')
-  @DomName('Window.openDatabase')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
   @Creates('SqlDatabase')
   SqlDatabase openDatabase(
       String name, String version, String displayName, int estimatedSize,
@@ -44034,12 +32104,8 @@
     return db;
   }
 
-  @DomName('Window.pageXOffset')
-  @DocsEditable()
   int get pageXOffset => JS('num', '#.pageXOffset', this).round();
 
-  @DomName('Window.pageYOffset')
-  @DocsEditable()
   int get pageYOffset => JS('num', '#.pageYOffset', this).round();
 
   /**
@@ -44052,8 +32118,6 @@
    * * [scrollX](https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollX)
    *   from MDN.
    */
-  @DomName('Window.scrollX')
-  @DocsEditable()
   int get scrollX => JS('bool', '("scrollX" in #)', this)
       ? JS('num', '#.scrollX', this).round()
       : document.documentElement.scrollLeft;
@@ -44068,8 +32132,6 @@
    * * [scrollY](https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollY)
    *   from MDN.
    */
-  @DomName('Window.scrollY')
-  @DocsEditable()
   int get scrollY => JS('bool', '("scrollY" in #)', this)
       ? JS('num', '#.scrollY', this).round()
       : document.documentElement.scrollTop;
@@ -44133,9 +32195,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.
 
-@DocsEditable()
-@DomName('WindowBase64')
-@Experimental() // untriaged
 abstract class WindowBase64 extends Interceptor {
   // To suppress missing implicit constructor warnings.
   factory WindowBase64._() {
@@ -44150,9 +32209,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.
 
-@DocsEditable()
-@DomName('WindowClient')
-@Experimental() // untriaged
 @Native("WindowClient")
 class WindowClient extends Client {
   // To suppress missing implicit constructor warnings.
@@ -44160,25 +32216,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('WindowClient.focused')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool focused;
 
-  @DomName('WindowClient.visibilityState')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String visibilityState;
 
-  @DomName('WindowClient.focus')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<WindowClient> focus() =>
       promiseToFuture<WindowClient>(JS("", "#.focus()", this));
 
-  @DomName('WindowClient.navigate')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<WindowClient> navigate(String url) =>
       promiseToFuture<WindowClient>(JS("", "#.navigate(#)", this, url));
 }
@@ -44186,104 +32230,55 @@
 // 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.
 
-@DocsEditable()
-@DomName('WindowEventHandlers')
-@Experimental() // untriaged
 abstract class WindowEventHandlers extends EventTarget {
   // To suppress missing implicit constructor warnings.
   factory WindowEventHandlers._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('WindowEventHandlers.hashchangeEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> hashChangeEvent =
       const EventStreamProvider<Event>('hashchange');
 
-  @DomName('WindowEventHandlers.messageEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MessageEvent> messageEvent =
       const EventStreamProvider<MessageEvent>('message');
 
-  @DomName('WindowEventHandlers.offlineEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> offlineEvent =
       const EventStreamProvider<Event>('offline');
 
-  @DomName('WindowEventHandlers.onlineEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> onlineEvent =
       const EventStreamProvider<Event>('online');
 
-  @DomName('WindowEventHandlers.popstateEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<PopStateEvent> popStateEvent =
       const EventStreamProvider<PopStateEvent>('popstate');
 
-  @DomName('WindowEventHandlers.storageEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<StorageEvent> storageEvent =
       const EventStreamProvider<StorageEvent>('storage');
 
-  @DomName('WindowEventHandlers.unloadEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> unloadEvent =
       const EventStreamProvider<Event>('unload');
 
-  @DomName('WindowEventHandlers.onhashchange')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onHashChange => hashChangeEvent.forTarget(this);
 
-  @DomName('WindowEventHandlers.onmessage')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
 
-  @DomName('WindowEventHandlers.onoffline')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onOffline => offlineEvent.forTarget(this);
 
-  @DomName('WindowEventHandlers.ononline')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onOnline => onlineEvent.forTarget(this);
 
-  @DomName('WindowEventHandlers.onpopstate')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<PopStateEvent> get onPopState => popStateEvent.forTarget(this);
 
-  @DomName('WindowEventHandlers.onstorage')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<StorageEvent> get onStorage => storageEvent.forTarget(this);
 
-  @DomName('WindowEventHandlers.onunload')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onUnload => unloadEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('Worker')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
-// http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html#worker
-@Experimental() // stable
 @Native("Worker")
 class Worker extends EventTarget implements AbstractWorker {
   // To suppress missing implicit constructor warnings.
@@ -44297,9 +32292,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Worker.errorEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
@@ -44309,13 +32301,9 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Worker.messageEvent')
-  @DocsEditable()
   static const EventStreamProvider<MessageEvent> messageEvent =
       const EventStreamProvider<MessageEvent>('message');
 
-  @DomName('Worker.Worker')
-  @DocsEditable()
   factory Worker(String scriptUrl) {
     return Worker._create_1(scriptUrl);
   }
@@ -44326,32 +32314,20 @@
   static bool get supported =>
       JS('bool', '(typeof window.Worker != "undefined")');
 
-  @DomName('Worker.postMessage')
-  @DocsEditable()
   void postMessage(Object message, [List<Object> transfer]) native;
 
-  @DomName('Worker.terminate')
-  @DocsEditable()
   void terminate() native;
 
   /// Stream of `error` events handled by this [Worker].
-  @DomName('Worker.onerror')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onError => errorEvent.forTarget(this);
 
   /// Stream of `message` events handled by this [Worker].
-  @DomName('Worker.onmessage')
-  @DocsEditable()
   Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('WorkerGlobalScope')
-@Experimental() // untriaged
 @Native("WorkerGlobalScope")
 class WorkerGlobalScope extends EventTarget
     implements _WindowTimers, WindowBase64 {
@@ -44366,65 +32342,29 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('WorkerGlobalScope.errorEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
-  @DomName('WorkerGlobalScope.addressSpace')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String addressSpace;
 
-  @DomName('WorkerGlobalScope.caches')
-  @DocsEditable()
-  @Experimental() // untriaged
   final CacheStorage caches;
 
-  @DomName('WorkerGlobalScope.crypto')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Crypto crypto;
 
-  @DomName('WorkerGlobalScope.indexedDB')
-  @DocsEditable()
-  @Experimental() // untriaged
   final IdbFactory indexedDB;
 
-  @DomName('WorkerGlobalScope.isSecureContext')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool isSecureContext;
 
-  @DomName('WorkerGlobalScope.location')
-  @DocsEditable()
-  @Experimental() // untriaged
   final _WorkerLocation location;
 
-  @DomName('WorkerGlobalScope.navigator')
-  @DocsEditable()
-  @Experimental() // untriaged
   final _WorkerNavigator navigator;
 
-  @DomName('WorkerGlobalScope.origin')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String origin;
 
-  @DomName('WorkerGlobalScope.performance')
-  @DocsEditable()
-  @Experimental() // untriaged
   final WorkerPerformance performance;
 
-  @DomName('WorkerGlobalScope.self')
-  @DocsEditable()
-  @Experimental() // untriaged
   final WorkerGlobalScope self;
 
-  @DomName('WorkerGlobalScope.fetch')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future fetch(/*RequestInfo*/ input, [Map init]) {
     if (init != null) {
       var init_1 = convertDartToNative_Dictionary(init);
@@ -44434,86 +32374,47 @@
   }
 
   @JSName('fetch')
-  @DomName('WorkerGlobalScope.fetch')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _fetch_1(input, init) native;
   @JSName('fetch')
-  @DomName('WorkerGlobalScope.fetch')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future _fetch_2(input) native;
 
-  @DomName('WorkerGlobalScope.importScripts')
-  @DocsEditable()
-  @Experimental() // untriaged
   void importScripts(String urls) native;
 
   // From WindowBase64
 
-  @DomName('WorkerGlobalScope.atob')
-  @DocsEditable()
-  @Experimental() // untriaged
   String atob(String atob) native;
 
-  @DomName('WorkerGlobalScope.btoa')
-  @DocsEditable()
-  @Experimental() // untriaged
   String btoa(String btoa) native;
 
   // From WindowTimers
 
   @JSName('setInterval')
-  @DomName('WorkerGlobalScope.setInterval')
-  @DocsEditable()
-  @Experimental() // untriaged
   int _setInterval_String(String handler, [int timeout, Object arguments])
       native;
 
   @JSName('setTimeout')
-  @DomName('WorkerGlobalScope.setTimeout')
-  @DocsEditable()
-  @Experimental() // untriaged
   int _setTimeout_String(String handler, [int timeout, Object arguments])
       native;
 
   @JSName('clearInterval')
-  @DomName('WorkerGlobalScope.clearInterval')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _clearInterval([int handle]) native;
 
   @JSName('clearTimeout')
-  @DomName('WorkerGlobalScope.clearTimeout')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _clearTimeout([int handle]) native;
 
   @JSName('setInterval')
-  @DomName('WorkerGlobalScope.setInterval')
-  @DocsEditable()
-  @Experimental() // untriaged
   int _setInterval(Object handler, [int timeout]) native;
 
   @JSName('setTimeout')
-  @DomName('WorkerGlobalScope.setTimeout')
-  @DocsEditable()
-  @Experimental() // untriaged
   int _setTimeout(Object handler, [int timeout]) native;
 
   /// Stream of `error` events handled by this [WorkerGlobalScope].
-  @DomName('WorkerGlobalScope.onerror')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onError => errorEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('WorkerPerformance')
-@Experimental() // untriaged
 @Native("WorkerPerformance")
 class WorkerPerformance extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -44521,73 +32422,34 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('WorkerPerformance.memory')
-  @DocsEditable()
-  @Experimental() // untriaged
   final MemoryInfo memory;
 
-  @DomName('WorkerPerformance.timeOrigin')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num timeOrigin;
 
-  @DomName('WorkerPerformance.clearMarks')
-  @DocsEditable()
-  @Experimental() // untriaged
   void clearMarks(String markName) native;
 
-  @DomName('WorkerPerformance.clearMeasures')
-  @DocsEditable()
-  @Experimental() // untriaged
   void clearMeasures(String measureName) native;
 
-  @DomName('WorkerPerformance.clearResourceTimings')
-  @DocsEditable()
-  @Experimental() // untriaged
   void clearResourceTimings() native;
 
-  @DomName('WorkerPerformance.getEntries')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<PerformanceEntry> getEntries() native;
 
-  @DomName('WorkerPerformance.getEntriesByName')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<PerformanceEntry> getEntriesByName(String name, String entryType) native;
 
-  @DomName('WorkerPerformance.getEntriesByType')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<PerformanceEntry> getEntriesByType(String entryType) native;
 
-  @DomName('WorkerPerformance.mark')
-  @DocsEditable()
-  @Experimental() // untriaged
   void mark(String markName) native;
 
-  @DomName('WorkerPerformance.measure')
-  @DocsEditable()
-  @Experimental() // untriaged
   void measure(String measureName, String startMark, String endMark) native;
 
-  @DomName('WorkerPerformance.now')
-  @DocsEditable()
-  @Experimental() // untriaged
   double now() native;
 
-  @DomName('WorkerPerformance.setResourceTimingBufferSize')
-  @DocsEditable()
-  @Experimental() // untriaged
   void setResourceTimingBufferSize(int maxSize) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('WorkletAnimation')
-@Experimental() // untriaged
 @Native("WorkletAnimation")
 class WorkletAnimation extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -44595,8 +32457,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('WorkletAnimation.WorkletAnimation')
-  @DocsEditable()
   factory WorkletAnimation(
       String animatorName,
       List<KeyframeEffectReadOnly> effects,
@@ -44611,28 +32471,16 @@
       JS('WorkletAnimation', 'new WorkletAnimation(#,#,#,#)', animatorName,
           effects, timelines, options);
 
-  @DomName('WorkletAnimation.playState')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String playState;
 
-  @DomName('WorkletAnimation.cancel')
-  @DocsEditable()
-  @Experimental() // untriaged
   void cancel() native;
 
-  @DomName('WorkletAnimation.play')
-  @DocsEditable()
-  @Experimental() // untriaged
   void play() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('WorkletGlobalScope')
-@Experimental() // untriaged
 @Native("WorkletGlobalScope")
 class WorkletGlobalScope extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -44644,8 +32492,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.
 
-@DocsEditable()
-@DomName('XPathEvaluator')
 // http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator
 @deprecated // experimental
 @Native("XPathEvaluator")
@@ -44655,25 +32501,17 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('XPathEvaluator.XPathEvaluator')
-  @DocsEditable()
   factory XPathEvaluator() {
     return XPathEvaluator._create_1();
   }
   static XPathEvaluator _create_1() =>
       JS('XPathEvaluator', 'new XPathEvaluator()');
 
-  @DomName('XPathEvaluator.createExpression')
-  @DocsEditable()
   XPathExpression createExpression(String expression, XPathNSResolver resolver)
       native;
 
-  @DomName('XPathEvaluator.createNSResolver')
-  @DocsEditable()
   XPathNSResolver createNSResolver(Node nodeResolver) native;
 
-  @DomName('XPathEvaluator.evaluate')
-  @DocsEditable()
   XPathResult evaluate(
       String expression, Node contextNode, XPathNSResolver resolver,
       [int type, Object inResult]) native;
@@ -44682,8 +32520,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.
 
-@DocsEditable()
-@DomName('XPathExpression')
 // http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathExpression
 @deprecated // experimental
 @Native("XPathExpression")
@@ -44693,16 +32529,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('XPathExpression.evaluate')
-  @DocsEditable()
   XPathResult evaluate(Node contextNode, [int type, Object inResult]) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('XPathNSResolver')
 // http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNSResolver
 @deprecated // experimental
 @Native("XPathNSResolver")
@@ -44713,16 +32545,12 @@
   }
 
   @JSName('lookupNamespaceURI')
-  @DomName('XPathNSResolver.lookupNamespaceURI')
-  @DocsEditable()
   String lookupNamespaceUri(String prefix) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('XPathResult')
 // http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult
 @deprecated // experimental
 @Native("XPathResult")
@@ -44732,89 +32560,48 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('XPathResult.ANY_TYPE')
-  @DocsEditable()
   static const int ANY_TYPE = 0;
 
-  @DomName('XPathResult.ANY_UNORDERED_NODE_TYPE')
-  @DocsEditable()
   static const int ANY_UNORDERED_NODE_TYPE = 8;
 
-  @DomName('XPathResult.BOOLEAN_TYPE')
-  @DocsEditable()
   static const int BOOLEAN_TYPE = 3;
 
-  @DomName('XPathResult.FIRST_ORDERED_NODE_TYPE')
-  @DocsEditable()
   static const int FIRST_ORDERED_NODE_TYPE = 9;
 
-  @DomName('XPathResult.NUMBER_TYPE')
-  @DocsEditable()
   static const int NUMBER_TYPE = 1;
 
-  @DomName('XPathResult.ORDERED_NODE_ITERATOR_TYPE')
-  @DocsEditable()
   static const int ORDERED_NODE_ITERATOR_TYPE = 5;
 
-  @DomName('XPathResult.ORDERED_NODE_SNAPSHOT_TYPE')
-  @DocsEditable()
   static const int ORDERED_NODE_SNAPSHOT_TYPE = 7;
 
-  @DomName('XPathResult.STRING_TYPE')
-  @DocsEditable()
   static const int STRING_TYPE = 2;
 
-  @DomName('XPathResult.UNORDERED_NODE_ITERATOR_TYPE')
-  @DocsEditable()
   static const int UNORDERED_NODE_ITERATOR_TYPE = 4;
 
-  @DomName('XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE')
-  @DocsEditable()
   static const int UNORDERED_NODE_SNAPSHOT_TYPE = 6;
 
-  @DomName('XPathResult.booleanValue')
-  @DocsEditable()
   final bool booleanValue;
 
-  @DomName('XPathResult.invalidIteratorState')
-  @DocsEditable()
   final bool invalidIteratorState;
 
-  @DomName('XPathResult.numberValue')
-  @DocsEditable()
   final num numberValue;
 
-  @DomName('XPathResult.resultType')
-  @DocsEditable()
   final int resultType;
 
-  @DomName('XPathResult.singleNodeValue')
-  @DocsEditable()
   final Node singleNodeValue;
 
-  @DomName('XPathResult.snapshotLength')
-  @DocsEditable()
   final int snapshotLength;
 
-  @DomName('XPathResult.stringValue')
-  @DocsEditable()
   final String stringValue;
 
-  @DomName('XPathResult.iterateNext')
-  @DocsEditable()
   Node iterateNext() native;
 
-  @DomName('XPathResult.snapshotItem')
-  @DocsEditable()
   Node snapshotItem(int index) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('XMLDocument')
-@Experimental() // untriaged
 @Native("XMLDocument")
 class XmlDocument extends Document {
   // To suppress missing implicit constructor warnings.
@@ -44826,8 +32613,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.
 
-@DocsEditable()
-@DomName('XMLSerializer')
 // http://domparsing.spec.whatwg.org/#the-xmlserializer-interface
 @deprecated // stable
 @Native("XMLSerializer")
@@ -44837,24 +32622,18 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('XMLSerializer.XMLSerializer')
-  @DocsEditable()
   factory XmlSerializer() {
     return XmlSerializer._create_1();
   }
   static XmlSerializer _create_1() =>
       JS('XmlSerializer', 'new XMLSerializer()');
 
-  @DomName('XMLSerializer.serializeToString')
-  @DocsEditable()
   String serializeToString(Node root) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('XSLTProcessor')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
@@ -44866,8 +32645,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('XSLTProcessor.XSLTProcessor')
-  @DocsEditable()
   factory XsltProcessor() {
     return XsltProcessor._create_1();
   }
@@ -44877,44 +32654,26 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => JS('bool', '!!(window.XSLTProcessor)');
 
-  @DomName('XSLTProcessor.clearParameters')
-  @DocsEditable()
   void clearParameters() native;
 
-  @DomName('XSLTProcessor.getParameter')
-  @DocsEditable()
   String getParameter(String namespaceURI, String localName) native;
 
-  @DomName('XSLTProcessor.importStylesheet')
-  @DocsEditable()
   void importStylesheet(Node style) native;
 
-  @DomName('XSLTProcessor.removeParameter')
-  @DocsEditable()
   void removeParameter(String namespaceURI, String localName) native;
 
-  @DomName('XSLTProcessor.reset')
-  @DocsEditable()
   void reset() native;
 
-  @DomName('XSLTProcessor.setParameter')
-  @DocsEditable()
   void setParameter(String namespaceURI, String localName, String value) native;
 
-  @DomName('XSLTProcessor.transformToDocument')
-  @DocsEditable()
   Document transformToDocument(Node source) native;
 
-  @DomName('XSLTProcessor.transformToFragment')
-  @DocsEditable()
   DocumentFragment transformToFragment(Node source, Document output) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('Attr')
 @Native("Attr")
 class _Attr extends Node {
   // To suppress missing implicit constructor warnings.
@@ -44923,32 +32682,19 @@
   }
 
   @JSName('localName')
-  @DomName('Attr.localName')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String _localName;
 
-  @DomName('Attr.name')
-  @DocsEditable()
   final String name;
 
   @JSName('namespaceURI')
-  @DomName('Attr.namespaceURI')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String _namespaceUri;
 
-  @DomName('Attr.value')
-  @DocsEditable()
   String value;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('Bluetooth')
-@Experimental() // untriaged
 @Native("Bluetooth")
 abstract class _Bluetooth extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -44960,9 +32706,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.
 
-@DocsEditable()
-@DomName('BluetoothCharacteristicProperties')
-@Experimental() // untriaged
 @Native("BluetoothCharacteristicProperties")
 abstract class _BluetoothCharacteristicProperties extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -44974,9 +32717,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.
 
-@DocsEditable()
-@DomName('BluetoothDevice')
-@Experimental() // untriaged
 @Native("BluetoothDevice")
 abstract class _BluetoothDevice extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -44988,9 +32728,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.
 
-@DocsEditable()
-@DomName('BluetoothRemoteGATTCharacteristic')
-@Experimental() // untriaged
 @Native("BluetoothRemoteGATTCharacteristic")
 abstract class _BluetoothRemoteGATTCharacteristic extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -45002,9 +32739,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.
 
-@DocsEditable()
-@DomName('BluetoothRemoteGATTServer')
-@Experimental() // untriaged
 @Native("BluetoothRemoteGATTServer")
 abstract class _BluetoothRemoteGATTServer extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -45016,9 +32750,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.
 
-@DocsEditable()
-@DomName('BluetoothRemoteGATTService')
-@Experimental() // untriaged
 @Native("BluetoothRemoteGATTService")
 abstract class _BluetoothRemoteGATTService extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -45030,9 +32761,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.
 
-@DocsEditable()
-@DomName('BluetoothUUID')
-@Experimental() // untriaged
 @Native("BluetoothUUID")
 abstract class _BluetoothUUID extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -45044,9 +32772,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.
 
-@DocsEditable()
-@DomName('BudgetService')
-@Experimental() // untriaged
 @Native("BudgetService")
 class _BudgetService extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -45054,21 +32779,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('BudgetService.getBudget')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<BudgetState> getBudget() =>
       promiseToFuture<BudgetState>(JS("", "#.getBudget()", this));
 
-  @DomName('BudgetService.getCost')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<double> getCost(String operation) =>
       promiseToFuture<double>(JS("", "#.getCost(#)", this, operation));
 
-  @DomName('BudgetService.reserve')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<bool> reserve(String operation) =>
       promiseToFuture<bool>(JS("", "#.reserve(#)", this, operation));
 }
@@ -45076,9 +32792,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.
 
-@DocsEditable()
-@DomName('Cache')
-@Experimental() // untriaged
 @Native("Cache")
 abstract class _Cache extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -45090,9 +32803,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.
 
-@DocsEditable()
-@DomName('CanvasPath')
-@Experimental() // untriaged
 abstract class _CanvasPath extends Interceptor {
   // To suppress missing implicit constructor warnings.
   factory _CanvasPath._() {
@@ -45103,8 +32813,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.
 
-@DocsEditable()
-@DomName('Clipboard')
 @Native("Clipboard")
 class _Clipboard extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -45112,27 +32820,15 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Clipboard.read')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<DataTransfer> read() =>
       promiseToFuture<DataTransfer>(JS("", "#.read()", this));
 
-  @DomName('Clipboard.readText')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<String> readText() =>
       promiseToFuture<String>(JS("", "#.readText()", this));
 
-  @DomName('Clipboard.write')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future write(DataTransfer data) =>
       promiseToFuture(JS("", "#.write(#)", this, data));
 
-  @DomName('Clipboard.writeText')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future writeText(String data) =>
       promiseToFuture(JS("", "#.writeText(#)", this, data));
 }
@@ -45140,8 +32836,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.
 
-@DocsEditable()
-@DomName('CSSRuleList')
 @Native("CSSRuleList")
 class _CssRuleList extends Interceptor
     with ListMixin<CssRule>, ImmutableListMixin<CssRule>
@@ -45151,8 +32845,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CSSRuleList.length')
-  @DocsEditable()
   int get length => JS("int", "#.length", this);
 
   CssRule operator [](int index) {
@@ -45198,19 +32890,13 @@
   CssRule elementAt(int index) => this[index];
   // -- end List<CssRule> mixins.
 
-  @DomName('CSSRuleList.item')
-  @DocsEditable()
   CssRule item(int index) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('DOMFileSystemSync')
 @SupportedBrowser(SupportedBrowser.CHROME)
-@Experimental()
-// http://www.w3.org/TR/file-system-api/#the-filesystemsync-interface
 @Native("DOMFileSystemSync")
 abstract class _DOMFileSystemSync extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -45222,10 +32908,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.
 
-@DocsEditable()
-@DomName('DirectoryEntrySync')
-// http://www.w3.org/TR/file-system-api/#the-directoryentrysync-interface
-@Experimental()
 @Native("DirectoryEntrySync")
 abstract class _DirectoryEntrySync extends _EntrySync {
   // To suppress missing implicit constructor warnings.
@@ -45237,10 +32919,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.
 
-@DocsEditable()
-@DomName('DirectoryReaderSync')
-// http://www.w3.org/TR/file-system-api/#idl-def-DirectoryReaderSync
-@Experimental()
 @Native("DirectoryReaderSync")
 abstract class _DirectoryReaderSync extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -45252,8 +32930,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.
 
-@DocsEditable()
-@DomName('DocumentType')
 // http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-412266927
 @deprecated // stable
 @Native("DocumentType")
@@ -45271,9 +32947,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.
 
-@DocsEditable()
-@DomName('DOMRect')
-@Experimental() // untriaged
 @Native("ClientRect,DOMRect")
 class _DomRect extends DomRectReadOnly implements Rectangle {
   // NOTE! All code below should be common with RectangleBase.
@@ -45370,8 +33043,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DOMRect.DOMRect')
-  @DocsEditable()
   factory _DomRect([num x, num y, num width, num height]) {
     if (height != null) {
       return _DomRect._create_1(x, y, width, height);
@@ -45464,10 +33135,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.
 
-@DocsEditable()
-@DomName('EntrySync')
-// http://www.w3.org/TR/file-system-api/#idl-def-EntrySync
-@Experimental()
 @Native("EntrySync")
 abstract class _EntrySync extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -45479,10 +33146,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.
 
-@DocsEditable()
-@DomName('FileEntrySync')
-// http://www.w3.org/TR/file-system-api/#the-fileentrysync-interface
-@Experimental()
 @Native("FileEntrySync")
 abstract class _FileEntrySync extends _EntrySync {
   // To suppress missing implicit constructor warnings.
@@ -45494,10 +33157,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.
 
-@DocsEditable()
-@DomName('FileReaderSync')
-// http://www.w3.org/TR/FileAPI/#FileReaderSync
-@Experimental()
 @Native("FileReaderSync")
 abstract class _FileReaderSync extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -45505,8 +33164,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('FileReaderSync.FileReaderSync')
-  @DocsEditable()
   factory _FileReaderSync() {
     return _FileReaderSync._create_1();
   }
@@ -45517,10 +33174,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.
 
-@DocsEditable()
-@DomName('FileWriterSync')
-// http://www.w3.org/TR/file-writer-api/#idl-def-FileWriterSync
-@Experimental()
 @Native("FileWriterSync")
 abstract class _FileWriterSync extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -45532,10 +33185,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.
 
-@DocsEditable()
-@DomName('GamepadList')
-// https://dvcs.w3.org/hg/gamepad/raw-file/default/gamepad.html
-@Experimental()
 @Native("GamepadList")
 class _GamepadList extends Interceptor
     with ListMixin<Gamepad>, ImmutableListMixin<Gamepad>
@@ -45545,8 +33194,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('GamepadList.length')
-  @DocsEditable()
   int get length => JS("int", "#.length", this);
 
   Gamepad operator [](int index) {
@@ -45592,16 +33239,12 @@
   Gamepad elementAt(int index) => this[index];
   // -- end List<Gamepad> mixins.
 
-  @DomName('GamepadList.item')
-  @DocsEditable()
   Gamepad item(int index) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLAllCollection')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#dom-document-all
 @deprecated // deprecated
 @Native("HTMLAllCollection")
@@ -45612,16 +33255,12 @@
   }
 
   @JSName('item')
-  @DomName('HTMLAllCollection.item')
-  @DocsEditable()
   Element _item(int index) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('HTMLDirectoryElement')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#dir
 @deprecated // deprecated
 @Native("HTMLDirectoryElement")
@@ -45641,8 +33280,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.
 
-@DocsEditable()
-@DomName('HTMLFontElement')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#htmlfontelement
 @deprecated // deprecated
 @Native("HTMLFontElement")
@@ -45662,8 +33299,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.
 
-@DocsEditable()
-@DomName('HTMLFrameElement')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#htmlframeelement
 @deprecated // deprecated
 @Native("HTMLFrameElement")
@@ -45683,8 +33318,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.
 
-@DocsEditable()
-@DomName('HTMLFrameSetElement')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#frameset
 @deprecated // deprecated
 @Native("HTMLFrameSetElement")
@@ -45706,8 +33339,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.
 
-@DocsEditable()
-@DomName('HTMLMarqueeElement')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#the-marquee-element
 @deprecated // deprecated
 @Native("HTMLMarqueeElement")
@@ -45727,9 +33358,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.
 
-@DocsEditable()
-@DomName('Mojo')
-@Experimental() // untriaged
 @Native("Mojo")
 abstract class _Mojo extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -45741,9 +33369,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.
 
-@DocsEditable()
-@DomName('MojoHandle')
-@Experimental() // untriaged
 @Native("MojoHandle")
 abstract class _MojoHandle extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -45755,9 +33380,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.
 
-@DocsEditable()
-@DomName('MojoInterfaceInterceptor')
-@Experimental() // untriaged
 @Native("MojoInterfaceInterceptor")
 abstract class _MojoInterfaceInterceptor extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -45765,8 +33387,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MojoInterfaceInterceptor.MojoInterfaceInterceptor')
-  @DocsEditable()
   factory _MojoInterfaceInterceptor(String interfaceName, [String scope]) {
     if (scope != null) {
       return _MojoInterfaceInterceptor._create_1(interfaceName, scope);
@@ -45787,9 +33407,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.
 
-@DocsEditable()
-@DomName('MojoInterfaceRequestEvent')
-@Experimental() // untriaged
 @Native("MojoInterfaceRequestEvent")
 abstract class _MojoInterfaceRequestEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -45797,8 +33414,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MojoInterfaceRequestEvent.MojoInterfaceRequestEvent')
-  @DocsEditable()
   factory _MojoInterfaceRequestEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -45818,9 +33433,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.
 
-@DocsEditable()
-@DomName('MojoWatcher')
-@Experimental() // untriaged
 @Native("MojoWatcher")
 abstract class _MojoWatcher extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -45832,9 +33444,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.
 
-@DocsEditable()
-@DomName('NFC')
-@Experimental() // untriaged
 @Native("NFC")
 abstract class _NFC extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -45846,8 +33455,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.
 
-@DocsEditable()
-@DomName('NamedNodeMap')
 // http://dom.spec.whatwg.org/#namednodemap
 @deprecated // deprecated
 @Native("NamedNodeMap,MozNamedAttrMap")
@@ -45859,8 +33466,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('NamedNodeMap.length')
-  @DocsEditable()
   int get length => JS("int", "#.length", this);
 
   Node operator [](int index) {
@@ -45906,40 +33511,24 @@
   Node elementAt(int index) => this[index];
   // -- end List<Node> mixins.
 
-  @DomName('NamedNodeMap.getNamedItem')
-  @DocsEditable()
   _Attr getNamedItem(String name) native;
 
-  @DomName('NamedNodeMap.getNamedItemNS')
-  @DocsEditable()
   _Attr getNamedItemNS(String namespaceURI, String localName) native;
 
-  @DomName('NamedNodeMap.item')
-  @DocsEditable()
   _Attr item(int index) native;
 
-  @DomName('NamedNodeMap.removeNamedItem')
-  @DocsEditable()
   _Attr removeNamedItem(String name) native;
 
-  @DomName('NamedNodeMap.removeNamedItemNS')
-  @DocsEditable()
   _Attr removeNamedItemNS(String namespaceURI, String localName) native;
 
-  @DomName('NamedNodeMap.setNamedItem')
-  @DocsEditable()
   _Attr setNamedItem(_Attr attr) native;
 
-  @DomName('NamedNodeMap.setNamedItemNS')
-  @DocsEditable()
   _Attr setNamedItemNS(_Attr attr) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PagePopupController')
 @deprecated // nonstandard
 @Native("PagePopupController")
 abstract class _PagePopupController extends Interceptor {
@@ -45960,9 +33549,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.
 
-@DocsEditable()
-@DomName('Report')
-@Experimental() // untriaged
 @Native("Report")
 class _Report extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -45970,28 +33556,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Report.body')
-  @DocsEditable()
-  @Experimental() // untriaged
   final ReportBody body;
 
-  @DomName('Report.type')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String type;
 
-  @DomName('Report.url')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String url;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('Request')
-@Experimental() // untriaged
 @Native("Request")
 class _Request extends Body {
   // To suppress missing implicit constructor warnings.
@@ -45999,8 +33573,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Request.Request')
-  @DocsEditable()
   factory _Request(Object input, [Map requestInitDict]) {
     if (requestInitDict != null) {
       var requestInitDict_1 = convertDartToNative_Dictionary(requestInitDict);
@@ -46012,62 +33584,30 @@
       JS('_Request', 'new Request(#,#)', input, requestInitDict);
   static _Request _create_2(input) => JS('_Request', 'new Request(#)', input);
 
-  @DomName('Request.cache')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String cache;
 
-  @DomName('Request.credentials')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String credentials;
 
-  @DomName('Request.headers')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Headers headers;
 
-  @DomName('Request.integrity')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String integrity;
 
-  @DomName('Request.mode')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String mode;
 
-  @DomName('Request.redirect')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String redirect;
 
-  @DomName('Request.referrer')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String referrer;
 
-  @DomName('Request.referrerPolicy')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String referrerPolicy;
 
-  @DomName('Request.url')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String url;
 
-  @DomName('Request.clone')
-  @DocsEditable()
-  @Experimental() // untriaged
   _Request clone() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('ResourceProgressEvent')
 // https://chromiumcodereview.appspot.com/14773025/
 @deprecated // experimental
 @Native("ResourceProgressEvent")
@@ -46081,9 +33621,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.
 
-@DocsEditable()
-@DomName('Response')
-@Experimental() // untriaged
 @Native("Response")
 abstract class _Response extends Body {
   // To suppress missing implicit constructor warnings.
@@ -46091,8 +33628,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Response.Response')
-  @DocsEditable()
   factory _Response([Object body, Map init]) {
     if (init != null) {
       var init_1 = convertDartToNative_Dictionary(init);
@@ -46112,10 +33647,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.
 
-@DocsEditable()
-@DomName('SpeechRecognitionResultList')
-// https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#speechrecognitionresultlist
-@Experimental()
 @Native("SpeechRecognitionResultList")
 class _SpeechRecognitionResultList extends Interceptor
     with
@@ -46129,8 +33660,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SpeechRecognitionResultList.length')
-  @DocsEditable()
   int get length => JS("int", "#.length", this);
 
   SpeechRecognitionResult operator [](int index) {
@@ -46176,16 +33705,12 @@
   SpeechRecognitionResult elementAt(int index) => this[index];
   // -- end List<SpeechRecognitionResult> mixins.
 
-  @DomName('SpeechRecognitionResultList.item')
-  @DocsEditable()
   SpeechRecognitionResult item(int index) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('StyleSheetList')
 @Native("StyleSheetList")
 class _StyleSheetList extends Interceptor
     with ListMixin<StyleSheet>, ImmutableListMixin<StyleSheet>
@@ -46195,8 +33720,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('StyleSheetList.length')
-  @DocsEditable()
   int get length => JS("int", "#.length", this);
 
   StyleSheet operator [](int index) {
@@ -46242,21 +33765,14 @@
   StyleSheet elementAt(int index) => this[index];
   // -- end List<StyleSheet> mixins.
 
-  @DomName('StyleSheetList.__getter__')
-  @DocsEditable()
   CssStyleSheet __getter__(String name) native;
 
-  @DomName('StyleSheetList.item')
-  @DocsEditable()
   StyleSheet item(int index) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SubtleCrypto')
-@Experimental() // untriaged
 @Native("SubtleCrypto")
 abstract class _SubtleCrypto extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -46268,9 +33784,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.
 
-@DocsEditable()
-@DomName('USB')
-@Experimental() // untriaged
 @Native("USB")
 abstract class _USB extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -46282,9 +33795,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.
 
-@DocsEditable()
-@DomName('USBAlternateInterface')
-@Experimental() // untriaged
 @Native("USBAlternateInterface")
 abstract class _USBAlternateInterface extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -46292,8 +33802,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('USBAlternateInterface.USBAlternateInterface')
-  @DocsEditable()
   factory _USBAlternateInterface(
       _USBInterface deviceInterface, int alternateSetting) {
     return _USBAlternateInterface._create_1(deviceInterface, alternateSetting);
@@ -46306,9 +33814,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.
 
-@DocsEditable()
-@DomName('USBConfiguration')
-@Experimental() // untriaged
 @Native("USBConfiguration")
 abstract class _USBConfiguration extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -46316,8 +33821,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('USBConfiguration.USBConfiguration')
-  @DocsEditable()
   factory _USBConfiguration(_USBDevice device, int configurationValue) {
     return _USBConfiguration._create_1(device, configurationValue);
   }
@@ -46331,9 +33834,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.
 
-@DocsEditable()
-@DomName('USBConnectionEvent')
-@Experimental() // untriaged
 @Native("USBConnectionEvent")
 abstract class _USBConnectionEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -46341,8 +33841,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('USBConnectionEvent.USBConnectionEvent')
-  @DocsEditable()
   factory _USBConnectionEvent(String type, Map eventInitDict) {
     var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
     return _USBConnectionEvent._create_1(type, eventInitDict_1);
@@ -46357,9 +33855,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.
 
-@DocsEditable()
-@DomName('USBDevice')
-@Experimental() // untriaged
 @Native("USBDevice")
 abstract class _USBDevice extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -46371,9 +33866,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.
 
-@DocsEditable()
-@DomName('USBEndpoint')
-@Experimental() // untriaged
 @Native("USBEndpoint")
 abstract class _USBEndpoint extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -46381,8 +33873,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('USBEndpoint.USBEndpoint')
-  @DocsEditable()
   factory _USBEndpoint(
       _USBAlternateInterface alternate, int endpointNumber, String direction) {
     return _USBEndpoint._create_1(alternate, endpointNumber, direction);
@@ -46398,9 +33888,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.
 
-@DocsEditable()
-@DomName('USBInTransferResult')
-@Experimental() // untriaged
 @Native("USBInTransferResult")
 abstract class _USBInTransferResult extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -46408,8 +33895,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('USBInTransferResult.USBInTransferResult')
-  @DocsEditable()
   factory _USBInTransferResult(String status, [ByteData data]) {
     if (data != null) {
       return _USBInTransferResult._create_1(status, data);
@@ -46425,9 +33910,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.
 
-@DocsEditable()
-@DomName('USBInterface')
-@Experimental() // untriaged
 @Native("USBInterface")
 abstract class _USBInterface extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -46435,8 +33917,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('USBInterface.USBInterface')
-  @DocsEditable()
   factory _USBInterface(_USBConfiguration configuration, int interfaceNumber) {
     return _USBInterface._create_1(configuration, interfaceNumber);
   }
@@ -46447,9 +33927,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.
 
-@DocsEditable()
-@DomName('USBIsochronousInTransferPacket')
-@Experimental() // untriaged
 @Native("USBIsochronousInTransferPacket")
 abstract class _USBIsochronousInTransferPacket extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -46457,8 +33934,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('USBIsochronousInTransferPacket.USBIsochronousInTransferPacket')
-  @DocsEditable()
   factory _USBIsochronousInTransferPacket(String status, [ByteData data]) {
     if (data != null) {
       return _USBIsochronousInTransferPacket._create_1(status, data);
@@ -46479,9 +33954,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.
 
-@DocsEditable()
-@DomName('USBIsochronousInTransferResult')
-@Experimental() // untriaged
 @Native("USBIsochronousInTransferResult")
 abstract class _USBIsochronousInTransferResult extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -46489,8 +33961,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('USBIsochronousInTransferResult.USBIsochronousInTransferResult')
-  @DocsEditable()
   factory _USBIsochronousInTransferResult(
       List<_USBIsochronousInTransferPacket> packets,
       [ByteData data]) {
@@ -46513,9 +33983,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.
 
-@DocsEditable()
-@DomName('USBIsochronousOutTransferPacket')
-@Experimental() // untriaged
 @Native("USBIsochronousOutTransferPacket")
 abstract class _USBIsochronousOutTransferPacket extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -46523,8 +33990,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('USBIsochronousOutTransferPacket.USBIsochronousOutTransferPacket')
-  @DocsEditable()
   factory _USBIsochronousOutTransferPacket(String status, [int bytesWritten]) {
     if (bytesWritten != null) {
       return _USBIsochronousOutTransferPacket._create_1(status, bytesWritten);
@@ -46545,9 +34010,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.
 
-@DocsEditable()
-@DomName('USBIsochronousOutTransferResult')
-@Experimental() // untriaged
 @Native("USBIsochronousOutTransferResult")
 abstract class _USBIsochronousOutTransferResult extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -46555,8 +34017,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('USBIsochronousOutTransferResult.USBIsochronousOutTransferResult')
-  @DocsEditable()
   factory _USBIsochronousOutTransferResult(
       List<_USBIsochronousOutTransferPacket> packets) {
     return _USBIsochronousOutTransferResult._create_1(packets);
@@ -46570,9 +34030,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.
 
-@DocsEditable()
-@DomName('USBOutTransferResult')
-@Experimental() // untriaged
 @Native("USBOutTransferResult")
 abstract class _USBOutTransferResult extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -46580,8 +34037,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('USBOutTransferResult.USBOutTransferResult')
-  @DocsEditable()
   factory _USBOutTransferResult(String status, [int bytesWritten]) {
     if (bytesWritten != null) {
       return _USBOutTransferResult._create_1(status, bytesWritten);
@@ -46600,9 +34055,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.
 
-@DocsEditable()
-@DomName('WindowTimers')
-@Experimental() // untriaged
 abstract class _WindowTimers extends Interceptor {
   // To suppress missing implicit constructor warnings.
   factory _WindowTimers._() {
@@ -46625,10 +34077,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.
 
-@DocsEditable()
-@DomName('WorkerLocation')
-// http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html#workerlocation
-@Experimental()
 @Native("WorkerLocation")
 abstract class _WorkerLocation extends Interceptor implements UrlUtilsReadOnly {
   // To suppress missing implicit constructor warnings.
@@ -46644,10 +34092,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.
 
-@DocsEditable()
-@DomName('WorkerNavigator')
-// http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html#workernavigator
-@Experimental()
 @Native("WorkerNavigator")
 abstract class _WorkerNavigator extends NavigatorConcurrentHardware
     implements NavigatorOnLine, NavigatorID {
@@ -46666,9 +34110,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.
 
-@DocsEditable()
-@DomName('Worklet')
-@Experimental() // untriaged
 @Native("Worklet")
 abstract class _Worklet extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -47881,7 +35322,6 @@
  * [length measurement](https://developer.mozilla.org/en-US/docs/Web/CSS/length)
  * in CSS.
  */
-@Experimental()
 class Dimension {
   num _value;
   String _unit;
@@ -50850,95 +38290,73 @@
 
   bool get _isConsoleDefined => JS('bool', 'typeof console != "undefined"');
 
-  @DomName('Console.memory')
   MemoryInfo get memory =>
       _isConsoleDefined ? JS('MemoryInfo', 'window.console.memory') : null;
 
-  @DomName('Console.assertCondition')
   void assertCondition(bool condition, Object arg) => _isConsoleDefined
       ? JS('void', 'window.console.assertCondition(#, #)', condition, arg)
       : null;
 
-  @DomName('Console.clear')
   void clear(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.clear(#)', arg) : null;
 
-  @DomName('Console.count')
   void count(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.count(#)', arg) : null;
 
-  @DomName('Console.debug')
   void debug(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.debug(#)', arg) : null;
 
-  @DomName('Console.dir')
   void dir(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.dir(#)', arg) : null;
 
-  @DomName('Console.dirxml')
   void dirxml(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.dirxml(#)', arg) : null;
 
-  @DomName('Console.error')
   void error(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.error(#)', arg) : null;
 
-  @DomName('Console.group')
   void group(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.group(#)', arg) : null;
 
-  @DomName('Console.groupCollapsed')
   void groupCollapsed(Object arg) => _isConsoleDefined
       ? JS('void', 'window.console.groupCollapsed(#)', arg)
       : null;
 
-  @DomName('Console.groupEnd')
   void groupEnd() =>
       _isConsoleDefined ? JS('void', 'window.console.groupEnd()') : null;
 
-  @DomName('Console.info')
   void info(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.info(#)', arg) : null;
 
-  @DomName('Console.log')
   void log(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.log(#)', arg) : null;
 
-  @DomName('Console.markTimeline')
   void markTimeline(Object arg) => _isConsoleDefined
       ? JS('void', 'window.console.markTimeline(#)', arg)
       : null;
 
-  @DomName('Console.profile')
   void profile(String title) =>
       _isConsoleDefined ? JS('void', 'window.console.profile(#)', title) : null;
 
-  @DomName('Console.profileEnd')
   void profileEnd(String title) => _isConsoleDefined
       ? JS('void', 'window.console.profileEnd(#)', title)
       : null;
 
-  @DomName('Console.table')
   void table(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.table(#)', arg) : null;
 
-  @DomName('Console.time')
   void time(String title) =>
       _isConsoleDefined ? JS('void', 'window.console.time(#)', title) : null;
 
-  @DomName('Console.timeEnd')
   void timeEnd(String title) =>
       _isConsoleDefined ? JS('void', 'window.console.timeEnd(#)', title) : null;
 
-  @DomName('Console.timeStamp')
   void timeStamp(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.timeStamp(#)', arg) : null;
 
-  @DomName('Console.trace')
   void trace(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.trace(#)', arg) : null;
 
-  @DomName('Console.warn')
   void warn(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.warn(#)', arg) : null;
 }
@@ -51360,7 +38778,6 @@
  * on how we can make this class work with as many international keyboards as
  * possible. Bugs welcome!
  */
-@Experimental()
 class KeyEvent extends _WrappedEvent implements KeyboardEvent {
   /** The parent KeyboardEvent that this KeyEvent is wrapping and "fixing". */
   KeyboardEvent _parent;
@@ -51565,10 +38982,8 @@
         "Cannot initialize a KeyboardEvent from a KeyEvent.");
   }
 
-  @Experimental() // untriaged
   bool getModifierState(String keyArgument) => throw new UnimplementedError();
 
-  @Experimental() // untriaged
   bool get repeat => throw new UnimplementedError();
   bool get isComposed => throw new UnimplementedError();
   dynamic get _get_view => throw new UnimplementedError();
@@ -51675,7 +39090,6 @@
    *   from W3C.
    */
   // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#extensions-to-event
-  @Experimental()
   List<Node> get path => wrapped.path;
 
   dynamic get _get_currentTarget => wrapped._get_currentTarget;
@@ -51735,7 +39149,7 @@
  * For details about CSS selector syntax, see the
  * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
  */
-ElementList<Element> querySelectorAll(String selectors) =>
+ElementList<T> querySelectorAll<T extends Element>(String selectors) =>
     document.querySelectorAll(selectors);
 
 /// A utility for changing the Dart wrapper type for elements.
diff --git a/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart b/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart
index e17e1e2..3429925 100644
--- a/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart
+++ b/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart
@@ -210,11 +210,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-@DomName('IDBCursor')
 @Unstable()
 @Native("IDBCursor")
 class Cursor extends Interceptor {
-  @DomName('IDBCursor.delete')
   Future delete() {
     try {
       return _completeRequest(_delete());
@@ -223,7 +221,6 @@
     }
   }
 
-  @DomName('IDBCursor.value')
   Future update(value) {
     try {
       return _completeRequest(_update(value));
@@ -233,7 +230,6 @@
   }
 
   @JSName('continue')
-  @DomName('IDBCursor.continue')
   void next([Object key]) {
     if (key == null) {
       JS('void', '#.continue()', this);
@@ -247,60 +243,39 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('IDBCursor.direction')
-  @DocsEditable()
   final String direction;
 
-  @DomName('IDBCursor.key')
-  @DocsEditable()
   @_annotation_Creates_IDBKey
   @_annotation_Returns_IDBKey
   final Object key;
 
-  @DomName('IDBCursor.primaryKey')
-  @DocsEditable()
   @_annotation_Creates_IDBKey
   @_annotation_Returns_IDBKey
   final Object primaryKey;
 
-  @DomName('IDBCursor.source')
-  @DocsEditable()
   @Creates('Null')
   @Returns('ObjectStore|Index|Null')
   final Object source;
 
-  @DomName('IDBCursor.advance')
-  @DocsEditable()
   void advance(int count) native;
 
-  @DomName('IDBCursor.continuePrimaryKey')
-  @DocsEditable()
-  @Experimental() // untriaged
   void continuePrimaryKey(Object key, Object primaryKey) native;
 
   @JSName('delete')
-  @DomName('IDBCursor.delete')
-  @DocsEditable()
   Request _delete() native;
 
-  @DomName('IDBCursor.update')
-  @DocsEditable()
   Request _update(/*any*/ value) {
     var value_1 = convertDartToNative_SerializedScriptValue(value);
     return _update_1(value_1);
   }
 
   @JSName('update')
-  @DomName('IDBCursor.update')
-  @DocsEditable()
   Request _update_1(value) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('IDBCursorWithValue')
 @Unstable()
 @Native("IDBCursorWithValue")
 class CursorWithValue extends Cursor {
@@ -309,12 +284,8 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('IDBCursorWithValue.value')
-  @DocsEditable()
   dynamic get value => _convertNativeToDart_IDBAny(this._get_value);
   @JSName('value')
-  @DomName('IDBCursorWithValue.value')
-  @DocsEditable()
   @annotation_Creates_SerializedScriptValue
   @annotation_Returns_SerializedScriptValue
   final dynamic _get_value;
@@ -323,21 +294,16 @@
 // 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.
 
-@DocsEditable()
 /**
  * An indexed database object for storing client-side data
  * in web apps.
  */
-@DomName('IDBDatabase')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX, '15')
 @SupportedBrowser(SupportedBrowser.IE, '10')
-@Experimental()
 @Unstable()
 @Native("IDBDatabase")
 class Database extends EventTarget {
-  @DomName('IDBDatabase.createObjectStore')
-  @DocsEditable()
   ObjectStore createObjectStore(String name,
       {String keyPath, bool autoIncrement}) {
     var options = {};
@@ -404,8 +370,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('IDBDatabase.abortEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> abortEvent =
       const EventStreamProvider<Event>('abort');
 
@@ -415,10 +379,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('IDBDatabase.closeEvent')
-  @DocsEditable()
-  // https://www.w3.org/Bugs/Public/show_bug.cgi?id=22540
-  @Experimental()
   static const EventStreamProvider<Event> closeEvent =
       const EventStreamProvider<Event>('close');
 
@@ -428,8 +388,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('IDBDatabase.errorEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
@@ -439,33 +397,21 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('IDBDatabase.versionchangeEvent')
-  @DocsEditable()
   static const EventStreamProvider<VersionChangeEvent> versionChangeEvent =
       const EventStreamProvider<VersionChangeEvent>('versionchange');
 
-  @DomName('IDBDatabase.name')
-  @DocsEditable()
   final String name;
 
-  @DomName('IDBDatabase.objectStoreNames')
-  @DocsEditable()
   @Returns('DomStringList|Null')
   @Creates('DomStringList')
   final List<String> objectStoreNames;
 
-  @DomName('IDBDatabase.version')
-  @DocsEditable()
   @Creates('int|String|Null')
   @Returns('int|String|Null')
   final int version;
 
-  @DomName('IDBDatabase.close')
-  @DocsEditable()
   void close() native;
 
-  @DomName('IDBDatabase.createObjectStore')
-  @DocsEditable()
   ObjectStore _createObjectStore(String name, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -475,38 +421,22 @@
   }
 
   @JSName('createObjectStore')
-  @DomName('IDBDatabase.createObjectStore')
-  @DocsEditable()
   ObjectStore _createObjectStore_1(name, options) native;
   @JSName('createObjectStore')
-  @DomName('IDBDatabase.createObjectStore')
-  @DocsEditable()
   ObjectStore _createObjectStore_2(name) native;
 
-  @DomName('IDBDatabase.deleteObjectStore')
-  @DocsEditable()
   void deleteObjectStore(String name) native;
 
   /// Stream of `abort` events handled by this [Database].
-  @DomName('IDBDatabase.onabort')
-  @DocsEditable()
   Stream<Event> get onAbort => abortEvent.forTarget(this);
 
   /// Stream of `close` events handled by this [Database].
-  @DomName('IDBDatabase.onclose')
-  @DocsEditable()
-  // https://www.w3.org/Bugs/Public/show_bug.cgi?id=22540
-  @Experimental()
   Stream<Event> get onClose => closeEvent.forTarget(this);
 
   /// Stream of `error` events handled by this [Database].
-  @DomName('IDBDatabase.onerror')
-  @DocsEditable()
   Stream<Event> get onError => errorEvent.forTarget(this);
 
   /// Stream of `versionchange` events handled by this [Database].
-  @DomName('IDBDatabase.onversionchange')
-  @DocsEditable()
   Stream<VersionChangeEvent> get onVersionChange =>
       versionChangeEvent.forTarget(this);
 }
@@ -516,18 +446,14 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('IDBObserverCallback')
-@Experimental() // untriaged
 typedef void ObserverCallback(ObserverChanges changes);
 // Copyright (c) 2012, 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.
 
-@DomName('IDBFactory')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX, '15')
 @SupportedBrowser(SupportedBrowser.IE, '10')
-@Experimental()
 @Unstable()
 @Native("IDBFactory")
 class IdbFactory extends Interceptor {
@@ -542,7 +468,6 @@
         'window.mozIndexedDB)');
   }
 
-  @DomName('IDBFactory.open')
   Future<Database> open(String name,
       {int version,
       void onUpgradeNeeded(VersionChangeEvent event),
@@ -571,7 +496,6 @@
     }
   }
 
-  @DomName('IDBFactory.deleteDatabase')
   Future<IdbFactory> deleteDatabase(String name, {void onBlocked(Event e)}) {
     try {
       var request = _deleteDatabase(name);
@@ -605,18 +529,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('IDBFactory.cmp')
-  @DocsEditable()
   int cmp(Object first, Object second) native;
 
   @JSName('deleteDatabase')
-  @DomName('IDBFactory.deleteDatabase')
-  @DocsEditable()
   OpenDBRequest _deleteDatabase(String name) native;
 
   @JSName('open')
-  @DomName('IDBFactory.open')
-  @DocsEditable()
   @Returns('Request')
   @Creates('Request')
   @Creates('Database')
@@ -642,11 +560,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-@DomName('IDBIndex')
 @Unstable()
 @Native("IDBIndex")
 class Index extends Interceptor {
-  @DomName('IDBIndex.count')
   Future<int> count([key_OR_range]) {
     try {
       var request = _count(key_OR_range);
@@ -656,7 +572,6 @@
     }
   }
 
-  @DomName('IDBIndex.get')
   Future get(key) {
     try {
       var request = _get(key);
@@ -667,7 +582,6 @@
     }
   }
 
-  @DomName('IDBIndex.getKey')
   Future getKey(key) {
     try {
       var request = _getKey(key);
@@ -739,53 +653,31 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('IDBIndex.keyPath')
-  @DocsEditable()
   @annotation_Creates_SerializedScriptValue
   final Object keyPath;
 
-  @DomName('IDBIndex.multiEntry')
-  @DocsEditable()
   final bool multiEntry;
 
-  @DomName('IDBIndex.name')
-  @DocsEditable()
   String name;
 
-  @DomName('IDBIndex.objectStore')
-  @DocsEditable()
   final ObjectStore objectStore;
 
-  @DomName('IDBIndex.unique')
-  @DocsEditable()
   final bool unique;
 
   @JSName('count')
-  @DomName('IDBIndex.count')
-  @DocsEditable()
   Request _count(Object key) native;
 
   @JSName('get')
-  @DomName('IDBIndex.get')
-  @DocsEditable()
   @Returns('Request')
   @Creates('Request')
   @annotation_Creates_SerializedScriptValue
   Request _get(Object key) native;
 
-  @DomName('IDBIndex.getAll')
-  @DocsEditable()
-  @Experimental() // untriaged
   Request getAll(Object query, [int count]) native;
 
-  @DomName('IDBIndex.getAllKeys')
-  @DocsEditable()
-  @Experimental() // untriaged
   Request getAllKeys(Object query, [int count]) native;
 
   @JSName('getKey')
-  @DomName('IDBIndex.getKey')
-  @DocsEditable()
   @Returns('Request')
   @Creates('Request')
   @annotation_Creates_SerializedScriptValue
@@ -793,16 +685,12 @@
   Request _getKey(Object key) native;
 
   @JSName('openCursor')
-  @DomName('IDBIndex.openCursor')
-  @DocsEditable()
   @Returns('Request')
   @Creates('Request')
   @Creates('Cursor')
   Request _openCursor(Object range, [String direction]) native;
 
   @JSName('openKeyCursor')
-  @DomName('IDBIndex.openKeyCursor')
-  @DocsEditable()
   @Returns('Request')
   @Creates('Request')
   @Creates('Cursor')
@@ -812,23 +700,18 @@
 // 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.
 
-@DomName('IDBKeyRange')
 @Unstable()
 @Native("IDBKeyRange")
 class KeyRange extends Interceptor {
-  @DomName('IDBKeyRange.only')
   factory KeyRange.only(/*Key*/ value) =>
       _KeyRangeFactoryProvider.createKeyRange_only(value);
 
-  @DomName('IDBKeyRange.lowerBound')
   factory KeyRange.lowerBound(/*Key*/ bound, [bool open = false]) =>
       _KeyRangeFactoryProvider.createKeyRange_lowerBound(bound, open);
 
-  @DomName('IDBKeyRange.upperBound')
   factory KeyRange.upperBound(/*Key*/ bound, [bool open = false]) =>
       _KeyRangeFactoryProvider.createKeyRange_upperBound(bound, open);
 
-  @DomName('KeyRange.bound')
   factory KeyRange.bound(/*Key*/ lower, /*Key*/ upper,
           [bool lowerOpen = false, bool upperOpen = false]) =>
       _KeyRangeFactoryProvider.createKeyRange_bound(
@@ -839,59 +722,38 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('IDBKeyRange.lower')
-  @DocsEditable()
   @annotation_Creates_SerializedScriptValue
   final Object lower;
 
-  @DomName('IDBKeyRange.lowerOpen')
-  @DocsEditable()
   final bool lowerOpen;
 
-  @DomName('IDBKeyRange.upper')
-  @DocsEditable()
   @annotation_Creates_SerializedScriptValue
   final Object upper;
 
-  @DomName('IDBKeyRange.upperOpen')
-  @DocsEditable()
   final bool upperOpen;
 
   @JSName('bound')
-  @DomName('IDBKeyRange.bound')
-  @DocsEditable()
   static KeyRange bound_(Object lower, Object upper,
       [bool lowerOpen, bool upperOpen]) native;
 
-  @DomName('IDBKeyRange.includes')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool includes(Object key) native;
 
   @JSName('lowerBound')
-  @DomName('IDBKeyRange.lowerBound')
-  @DocsEditable()
   static KeyRange lowerBound_(Object bound, [bool open]) native;
 
   @JSName('only')
-  @DomName('IDBKeyRange.only')
-  @DocsEditable()
   static KeyRange only_(Object value) native;
 
   @JSName('upperBound')
-  @DomName('IDBKeyRange.upperBound')
-  @DocsEditable()
   static KeyRange upperBound_(Object bound, [bool open]) native;
 }
 // Copyright (c) 2012, 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.
 
-@DomName('IDBObjectStore')
 @Unstable()
 @Native("IDBObjectStore")
 class ObjectStore extends Interceptor {
-  @DomName('IDBObjectStore.add')
   Future add(value, [key]) {
     try {
       var request;
@@ -906,7 +768,6 @@
     }
   }
 
-  @DomName('IDBObjectStore.clear')
   Future clear() {
     try {
       return _completeRequest(_clear());
@@ -915,7 +776,6 @@
     }
   }
 
-  @DomName('IDBObjectStore.delete')
   Future delete(key_OR_keyRange) {
     try {
       return _completeRequest(_delete(key_OR_keyRange));
@@ -924,7 +784,6 @@
     }
   }
 
-  @DomName('IDBObjectStore.count')
   Future<int> count([key_OR_range]) {
     try {
       var request = _count(key_OR_range);
@@ -934,7 +793,6 @@
     }
   }
 
-  @DomName('IDBObjectStore.put')
   Future put(value, [key]) {
     try {
       var request;
@@ -949,7 +807,6 @@
     }
   }
 
-  @DomName('IDBObjectStore.get')
   Future getObject(key) {
     try {
       var request = _get(key);
@@ -981,7 +838,6 @@
    * must be done synchronously unless they are additional async requests to
    * the current transaction.
    */
-  @DomName('IDBObjectStore.openCursor')
   Stream<CursorWithValue> openCursor(
       {key, KeyRange range, String direction, bool autoAdvance}) {
     var key_OR_range = null;
@@ -1004,7 +860,6 @@
     return _cursorStreamFromResult(request, autoAdvance);
   }
 
-  @DomName('IDBObjectStore.createIndex')
   Index createIndex(String name, keyPath, {bool unique, bool multiEntry}) {
     var options = {};
     if (unique != null) {
@@ -1022,31 +877,19 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('IDBObjectStore.autoIncrement')
-  @DocsEditable()
   final bool autoIncrement;
 
-  @DomName('IDBObjectStore.indexNames')
-  @DocsEditable()
   @Returns('DomStringList|Null')
   @Creates('DomStringList')
   final List<String> indexNames;
 
-  @DomName('IDBObjectStore.keyPath')
-  @DocsEditable()
   @annotation_Creates_SerializedScriptValue
   final Object keyPath;
 
-  @DomName('IDBObjectStore.name')
-  @DocsEditable()
   String name;
 
-  @DomName('IDBObjectStore.transaction')
-  @DocsEditable()
   final Transaction transaction;
 
-  @DomName('IDBObjectStore.add')
-  @DocsEditable()
   @Returns('Request')
   @Creates('Request')
   @_annotation_Creates_IDBKey
@@ -1061,32 +904,22 @@
   }
 
   @JSName('add')
-  @DomName('IDBObjectStore.add')
-  @DocsEditable()
   @Returns('Request')
   @Creates('Request')
   @_annotation_Creates_IDBKey
   Request _add_1(value, key) native;
   @JSName('add')
-  @DomName('IDBObjectStore.add')
-  @DocsEditable()
   @Returns('Request')
   @Creates('Request')
   @_annotation_Creates_IDBKey
   Request _add_2(value) native;
 
   @JSName('clear')
-  @DomName('IDBObjectStore.clear')
-  @DocsEditable()
   Request _clear() native;
 
   @JSName('count')
-  @DomName('IDBObjectStore.count')
-  @DocsEditable()
   Request _count(Object key) native;
 
-  @DomName('IDBObjectStore.createIndex')
-  @DocsEditable()
   Index _createIndex(String name, Object keyPath, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -1096,65 +929,37 @@
   }
 
   @JSName('createIndex')
-  @DomName('IDBObjectStore.createIndex')
-  @DocsEditable()
   Index _createIndex_1(name, keyPath, options) native;
   @JSName('createIndex')
-  @DomName('IDBObjectStore.createIndex')
-  @DocsEditable()
   Index _createIndex_2(name, keyPath) native;
 
   @JSName('delete')
-  @DomName('IDBObjectStore.delete')
-  @DocsEditable()
   Request _delete(Object key) native;
 
-  @DomName('IDBObjectStore.deleteIndex')
-  @DocsEditable()
   void deleteIndex(String name) native;
 
   @JSName('get')
-  @DomName('IDBObjectStore.get')
-  @DocsEditable()
   @Returns('Request')
   @Creates('Request')
   @annotation_Creates_SerializedScriptValue
   Request _get(Object key) native;
 
-  @DomName('IDBObjectStore.getAll')
-  @DocsEditable()
-  @Experimental() // untriaged
   Request getAll(Object query, [int count]) native;
 
-  @DomName('IDBObjectStore.getAllKeys')
-  @DocsEditable()
-  @Experimental() // untriaged
   Request getAllKeys(Object query, [int count]) native;
 
-  @DomName('IDBObjectStore.getKey')
-  @DocsEditable()
-  @Experimental() // untriaged
   Request getKey(Object key) native;
 
-  @DomName('IDBObjectStore.index')
-  @DocsEditable()
   Index index(String name) native;
 
   @JSName('openCursor')
-  @DomName('IDBObjectStore.openCursor')
-  @DocsEditable()
   @Returns('Request')
   @Creates('Request')
   @Creates('Cursor')
   Request _openCursor(Object range, [String direction]) native;
 
-  @DomName('IDBObjectStore.openKeyCursor')
-  @DocsEditable()
-  @Experimental() // untriaged
   Request openKeyCursor(Object range, [String direction]) native;
 
-  @DomName('IDBObjectStore.put')
-  @DocsEditable()
   @Returns('Request')
   @Creates('Request')
   @_annotation_Creates_IDBKey
@@ -1169,15 +974,11 @@
   }
 
   @JSName('put')
-  @DomName('IDBObjectStore.put')
-  @DocsEditable()
   @Returns('Request')
   @Creates('Request')
   @_annotation_Creates_IDBKey
   Request _put_1(value, key) native;
   @JSName('put')
-  @DomName('IDBObjectStore.put')
-  @DocsEditable()
   @Returns('Request')
   @Creates('Request')
   @_annotation_Creates_IDBKey
@@ -1214,9 +1015,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.
 
-@DocsEditable()
-@DomName('IDBObservation')
-@Experimental() // untriaged
 @Native("IDBObservation")
 class Observation extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1224,28 +1022,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('IDBObservation.key')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Object key;
 
-  @DomName('IDBObservation.type')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String type;
 
-  @DomName('IDBObservation.value')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Object value;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('IDBObserver')
-@Experimental() // untriaged
 @Native("IDBObserver")
 class Observer extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1253,17 +1039,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('IDBObserver.IDBObserver')
-  @DocsEditable()
   factory Observer(ObserverCallback callback) {
     return Observer._create_1(callback);
   }
   static Observer _create_1(callback) =>
       JS('Observer', 'new IDBObserver(#)', callback);
 
-  @DomName('IDBObserver.observe')
-  @DocsEditable()
-  @Experimental() // untriaged
   void observe(Database db, Transaction tx, Map options) {
     var options_1 = convertDartToNative_Dictionary(options);
     _observe_1(db, tx, options_1);
@@ -1271,23 +1052,14 @@
   }
 
   @JSName('observe')
-  @DomName('IDBObserver.observe')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _observe_1(Database db, Transaction tx, options) native;
 
-  @DomName('IDBObserver.unobserve')
-  @DocsEditable()
-  @Experimental() // untriaged
   void unobserve(Database db) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('IDBObserverChanges')
-@Experimental() // untriaged
 @Native("IDBObserverChanges")
 class ObserverChanges extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1295,27 +1067,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('IDBObserverChanges.database')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Database database;
 
-  @DomName('IDBObserverChanges.records')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Object records;
 
-  @DomName('IDBObserverChanges.transaction')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Transaction transaction;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('IDBOpenDBRequest')
 @Unstable()
 @Native("IDBOpenDBRequest,IDBVersionChangeRequest")
 class OpenDBRequest extends Request {
@@ -1330,8 +1091,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('IDBOpenDBRequest.blockedEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> blockedEvent =
       const EventStreamProvider<Event>('blocked');
 
@@ -1341,19 +1100,13 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('IDBOpenDBRequest.upgradeneededEvent')
-  @DocsEditable()
   static const EventStreamProvider<VersionChangeEvent> upgradeNeededEvent =
       const EventStreamProvider<VersionChangeEvent>('upgradeneeded');
 
   /// Stream of `blocked` events handled by this [OpenDBRequest].
-  @DomName('IDBOpenDBRequest.onblocked')
-  @DocsEditable()
   Stream<Event> get onBlocked => blockedEvent.forTarget(this);
 
   /// Stream of `upgradeneeded` events handled by this [OpenDBRequest].
-  @DomName('IDBOpenDBRequest.onupgradeneeded')
-  @DocsEditable()
   Stream<VersionChangeEvent> get onUpgradeNeeded =>
       upgradeNeededEvent.forTarget(this);
 }
@@ -1361,8 +1114,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.
 
-@DocsEditable()
-@DomName('IDBRequest')
 @Unstable()
 @Native("IDBRequest")
 class Request extends EventTarget {
@@ -1377,8 +1128,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('IDBRequest.errorEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
@@ -1388,52 +1137,33 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('IDBRequest.successEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> successEvent =
       const EventStreamProvider<Event>('success');
 
-  @DomName('IDBRequest.error')
-  @DocsEditable()
   final DomException error;
 
-  @DomName('IDBRequest.readyState')
-  @DocsEditable()
   final String readyState;
 
-  @DomName('IDBRequest.result')
-  @DocsEditable()
   dynamic get result => _convertNativeToDart_IDBAny(this._get_result);
   @JSName('result')
-  @DomName('IDBRequest.result')
-  @DocsEditable()
   @Creates('Null')
   final dynamic _get_result;
 
-  @DomName('IDBRequest.source')
-  @DocsEditable()
   @Creates('Null')
   final Object source;
 
-  @DomName('IDBRequest.transaction')
-  @DocsEditable()
   final Transaction transaction;
 
   /// Stream of `error` events handled by this [Request].
-  @DomName('IDBRequest.onerror')
-  @DocsEditable()
   Stream<Event> get onError => errorEvent.forTarget(this);
 
   /// Stream of `success` events handled by this [Request].
-  @DomName('IDBRequest.onsuccess')
-  @DocsEditable()
   Stream<Event> get onSuccess => successEvent.forTarget(this);
 }
 // Copyright (c) 2013, 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.
 
-@DomName('IDBTransaction')
 @Unstable()
 @Native("IDBTransaction")
 class Transaction extends EventTarget {
@@ -1476,8 +1206,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('IDBTransaction.abortEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> abortEvent =
       const EventStreamProvider<Event>('abort');
 
@@ -1487,8 +1215,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('IDBTransaction.completeEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> completeEvent =
       const EventStreamProvider<Event>('complete');
 
@@ -1498,58 +1224,36 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('IDBTransaction.errorEvent')
-  @DocsEditable()
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
-  @DomName('IDBTransaction.db')
-  @DocsEditable()
   final Database db;
 
-  @DomName('IDBTransaction.error')
-  @DocsEditable()
   final DomException error;
 
-  @DomName('IDBTransaction.mode')
-  @DocsEditable()
   final String mode;
 
-  @DomName('IDBTransaction.objectStoreNames')
-  @DocsEditable()
-  @Experimental() // untriaged
   @Returns('DomStringList|Null')
   @Creates('DomStringList')
   final List<String> objectStoreNames;
 
-  @DomName('IDBTransaction.abort')
-  @DocsEditable()
   void abort() native;
 
-  @DomName('IDBTransaction.objectStore')
-  @DocsEditable()
   ObjectStore objectStore(String name) native;
 
   /// Stream of `abort` events handled by this [Transaction].
-  @DomName('IDBTransaction.onabort')
-  @DocsEditable()
   Stream<Event> get onAbort => abortEvent.forTarget(this);
 
   /// Stream of `complete` events handled by this [Transaction].
-  @DomName('IDBTransaction.oncomplete')
-  @DocsEditable()
   Stream<Event> get onComplete => completeEvent.forTarget(this);
 
   /// Stream of `error` events handled by this [Transaction].
-  @DomName('IDBTransaction.onerror')
-  @DocsEditable()
   Stream<Event> get onError => errorEvent.forTarget(this);
 }
 // Copyright (c) 2018, 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.
 
-@DomName('IDBVersionChangeEvent')
 @Unstable()
 @Native("IDBVersionChangeEvent")
 class VersionChangeEvent extends Event {
@@ -1558,8 +1262,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('IDBVersionChangeEvent.IDBVersionChangeEvent')
-  @DocsEditable()
   factory VersionChangeEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
@@ -1575,30 +1277,18 @@
   static VersionChangeEvent _create_2(type) =>
       JS('VersionChangeEvent', 'new IDBVersionChangeEvent(#)', type);
 
-  @DomName('IDBVersionChangeEvent.dataLoss')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String dataLoss;
 
-  @DomName('IDBVersionChangeEvent.dataLossMessage')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String dataLossMessage;
 
-  @DomName('IDBVersionChangeEvent.newVersion')
-  @DocsEditable()
   @Creates('int|String|Null')
   @Returns('int|String|Null')
   final int newVersion;
 
-  @DomName('IDBVersionChangeEvent.oldVersion')
-  @DocsEditable()
   @Creates('int|String|Null')
   @Returns('int|String|Null')
   final int oldVersion;
 
   @JSName('target')
-  @DomName('IDBVersionChangeEvent.target')
-  @DocsEditable()
   final OpenDBRequest target;
 }
diff --git a/sdk/lib/internal/async_cast.dart b/sdk/lib/internal/async_cast.dart
index cb1e112..e041ff3 100644
--- a/sdk/lib/internal/async_cast.dart
+++ b/sdk/lib/internal/async_cast.dart
@@ -13,9 +13,10 @@
 
   StreamSubscription<T> listen(void onData(T data),
       {Function onError, void onDone(), bool cancelOnError}) {
-    return new CastStreamSubscription<S, T>(_source.listen(null,
-        onError: onError, onDone: onDone, cancelOnError: cancelOnError))
-      ..onData(onData);
+    return new CastStreamSubscription<S, T>(
+        _source.listen(null, onDone: onDone, cancelOnError: cancelOnError))
+      ..onData(onData)
+      ..onError(onError);
   }
 
   Stream<R> cast<R>() => new CastStream<S, R>(_source);
@@ -24,23 +25,62 @@
 class CastStreamSubscription<S, T> implements StreamSubscription<T> {
   final StreamSubscription<S> _source;
 
-  CastStreamSubscription(this._source);
+  /// Zone where listen was called.
+  final Zone _zone = Zone.current;
+
+  /// User's data handler. May be null.
+  void Function(T) _handleData;
+
+  /// Copy of _source's handleError so we can report errors in onData.
+  /// May be null.
+  Function _handleError;
+
+  CastStreamSubscription(this._source) {
+    _source.onData(_onData);
+  }
 
   Future cancel() => _source.cancel();
 
   void onData(void handleData(T data)) {
-    _source
-        .onData(handleData == null ? null : (S data) => handleData(data as T));
+    _handleData = handleData == null
+        ? null
+        : _zone.registerUnaryCallback<dynamic, T>(handleData);
   }
 
   void onError(Function handleError) {
     _source.onError(handleError);
+    if (handleError == null) {
+      _handleError = null;
+    } else if (handleError is Function(Null, Null)) {
+      _handleError = _zone
+          .registerBinaryCallback<dynamic, Object, StackTrace>(handleError);
+    } else {
+      _handleError = _zone.registerUnaryCallback<dynamic, Object>(handleError);
+    }
   }
 
   void onDone(void handleDone()) {
     _source.onDone(handleDone);
   }
 
+  void _onData(S data) {
+    if (_handleData == null) return;
+    T targetData;
+    try {
+      targetData = data as T;
+    } catch (error, stack) {
+      if (_handleError == null) {
+        _zone.handleUncaughtError(error, stack);
+      } else if (_handleError is Function(Null, Null)) {
+        _zone.runBinaryGuarded(_handleError, error, stack);
+      } else {
+        _zone.runUnaryGuarded(_handleError, error);
+      }
+      return;
+    }
+    _zone.runUnaryGuarded(_handleData, targetData);
+  }
+
   void pause([Future resumeSignal]) {
     _source.pause(resumeSignal);
   }
diff --git a/sdk/lib/internal/internal.dart b/sdk/lib/internal/internal.dart
index 96bbddf..7ffc482 100644
--- a/sdk/lib/internal/internal.dart
+++ b/sdk/lib/internal/internal.dart
@@ -12,7 +12,8 @@
         Stream,
         StreamSubscription,
         StreamTransformer,
-        StreamTransformerBase;
+        StreamTransformerBase,
+        Zone;
 import 'dart:convert' show Converter;
 import 'dart:core' hide Symbol;
 import 'dart:core' as core;
diff --git a/sdk/lib/svg/dart2js/svg_dart2js.dart b/sdk/lib/svg/dart2js/svg_dart2js.dart
index 23c0a70..fdd5a68 100644
--- a/sdk/lib/svg/dart2js/svg_dart2js.dart
+++ b/sdk/lib/svg/dart2js/svg_dart2js.dart
@@ -37,8 +37,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.
 
-@DocsEditable()
-@DomName('SVGAElement')
 @Unstable()
 @Native("SVGAElement")
 class AElement extends GraphicsElement implements UriReference {
@@ -47,8 +45,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGAElement.SVGAElement')
-  @DocsEditable()
   factory AElement() => _SvgElementFactoryProvider.createSvgElement_tag("a");
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
@@ -57,22 +53,16 @@
    */
   AElement.created() : super.created();
 
-  @DomName('SVGAElement.target')
-  @DocsEditable()
   final AnimatedString target;
 
   // From SVGURIReference
 
-  @DomName('SVGAElement.href')
-  @DocsEditable()
   final AnimatedString href;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGAngle')
 @Unstable()
 @Native("SVGAngle")
 class Angle extends Interceptor {
@@ -81,56 +71,32 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGAngle.SVG_ANGLETYPE_DEG')
-  @DocsEditable()
   static const int SVG_ANGLETYPE_DEG = 2;
 
-  @DomName('SVGAngle.SVG_ANGLETYPE_GRAD')
-  @DocsEditable()
   static const int SVG_ANGLETYPE_GRAD = 4;
 
-  @DomName('SVGAngle.SVG_ANGLETYPE_RAD')
-  @DocsEditable()
   static const int SVG_ANGLETYPE_RAD = 3;
 
-  @DomName('SVGAngle.SVG_ANGLETYPE_UNKNOWN')
-  @DocsEditable()
   static const int SVG_ANGLETYPE_UNKNOWN = 0;
 
-  @DomName('SVGAngle.SVG_ANGLETYPE_UNSPECIFIED')
-  @DocsEditable()
   static const int SVG_ANGLETYPE_UNSPECIFIED = 1;
 
-  @DomName('SVGAngle.unitType')
-  @DocsEditable()
   final int unitType;
 
-  @DomName('SVGAngle.value')
-  @DocsEditable()
   num value;
 
-  @DomName('SVGAngle.valueAsString')
-  @DocsEditable()
   String valueAsString;
 
-  @DomName('SVGAngle.valueInSpecifiedUnits')
-  @DocsEditable()
   num valueInSpecifiedUnits;
 
-  @DomName('SVGAngle.convertToSpecifiedUnits')
-  @DocsEditable()
   void convertToSpecifiedUnits(int unitType) native;
 
-  @DomName('SVGAngle.newValueSpecifiedUnits')
-  @DocsEditable()
   void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGAnimateElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
@@ -142,8 +108,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGAnimateElement.SVGAnimateElement')
-  @DocsEditable()
   factory AnimateElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("animate");
   /**
@@ -162,8 +126,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.
 
-@DocsEditable()
-@DomName('SVGAnimateMotionElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
@@ -175,8 +137,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGAnimateMotionElement.SVGAnimateMotionElement')
-  @DocsEditable()
   factory AnimateMotionElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("animateMotion");
   /**
@@ -195,8 +155,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.
 
-@DocsEditable()
-@DomName('SVGAnimateTransformElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
@@ -208,8 +166,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGAnimateTransformElement.SVGAnimateTransformElement')
-  @DocsEditable()
   factory AnimateTransformElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("animateTransform");
   /**
@@ -228,8 +184,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.
 
-@DocsEditable()
-@DomName('SVGAnimatedAngle')
 @Unstable()
 @Native("SVGAnimatedAngle")
 class AnimatedAngle extends Interceptor {
@@ -238,20 +192,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGAnimatedAngle.animVal')
-  @DocsEditable()
   final Angle animVal;
 
-  @DomName('SVGAnimatedAngle.baseVal')
-  @DocsEditable()
   final Angle baseVal;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGAnimatedBoolean')
 @Unstable()
 @Native("SVGAnimatedBoolean")
 class AnimatedBoolean extends Interceptor {
@@ -260,20 +208,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGAnimatedBoolean.animVal')
-  @DocsEditable()
   final bool animVal;
 
-  @DomName('SVGAnimatedBoolean.baseVal')
-  @DocsEditable()
   bool baseVal;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGAnimatedEnumeration')
 @Unstable()
 @Native("SVGAnimatedEnumeration")
 class AnimatedEnumeration extends Interceptor {
@@ -282,20 +224,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGAnimatedEnumeration.animVal')
-  @DocsEditable()
   final int animVal;
 
-  @DomName('SVGAnimatedEnumeration.baseVal')
-  @DocsEditable()
   int baseVal;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGAnimatedInteger')
 @Unstable()
 @Native("SVGAnimatedInteger")
 class AnimatedInteger extends Interceptor {
@@ -304,20 +240,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGAnimatedInteger.animVal')
-  @DocsEditable()
   final int animVal;
 
-  @DomName('SVGAnimatedInteger.baseVal')
-  @DocsEditable()
   int baseVal;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGAnimatedLength')
 @Unstable()
 @Native("SVGAnimatedLength")
 class AnimatedLength extends Interceptor {
@@ -326,20 +256,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGAnimatedLength.animVal')
-  @DocsEditable()
   final Length animVal;
 
-  @DomName('SVGAnimatedLength.baseVal')
-  @DocsEditable()
   final Length baseVal;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGAnimatedLengthList')
 @Unstable()
 @Native("SVGAnimatedLengthList")
 class AnimatedLengthList extends Interceptor {
@@ -348,20 +272,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGAnimatedLengthList.animVal')
-  @DocsEditable()
   final LengthList animVal;
 
-  @DomName('SVGAnimatedLengthList.baseVal')
-  @DocsEditable()
   final LengthList baseVal;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGAnimatedNumber')
 @Unstable()
 @Native("SVGAnimatedNumber")
 class AnimatedNumber extends Interceptor {
@@ -370,20 +288,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGAnimatedNumber.animVal')
-  @DocsEditable()
   final num animVal;
 
-  @DomName('SVGAnimatedNumber.baseVal')
-  @DocsEditable()
   num baseVal;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGAnimatedNumberList')
 @Unstable()
 @Native("SVGAnimatedNumberList")
 class AnimatedNumberList extends Interceptor {
@@ -392,20 +304,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGAnimatedNumberList.animVal')
-  @DocsEditable()
   final NumberList animVal;
 
-  @DomName('SVGAnimatedNumberList.baseVal')
-  @DocsEditable()
   final NumberList baseVal;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGAnimatedPreserveAspectRatio')
 @Unstable()
 @Native("SVGAnimatedPreserveAspectRatio")
 class AnimatedPreserveAspectRatio extends Interceptor {
@@ -414,20 +320,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGAnimatedPreserveAspectRatio.animVal')
-  @DocsEditable()
   final PreserveAspectRatio animVal;
 
-  @DomName('SVGAnimatedPreserveAspectRatio.baseVal')
-  @DocsEditable()
   final PreserveAspectRatio baseVal;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGAnimatedRect')
 @Unstable()
 @Native("SVGAnimatedRect")
 class AnimatedRect extends Interceptor {
@@ -436,20 +336,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGAnimatedRect.animVal')
-  @DocsEditable()
   final Rect animVal;
 
-  @DomName('SVGAnimatedRect.baseVal')
-  @DocsEditable()
   final Rect baseVal;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGAnimatedString')
 @Unstable()
 @Native("SVGAnimatedString")
 class AnimatedString extends Interceptor {
@@ -458,20 +352,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGAnimatedString.animVal')
-  @DocsEditable()
   final String animVal;
 
-  @DomName('SVGAnimatedString.baseVal')
-  @DocsEditable()
   String baseVal;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGAnimatedTransformList')
 @Unstable()
 @Native("SVGAnimatedTransformList")
 class AnimatedTransformList extends Interceptor {
@@ -480,20 +368,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGAnimatedTransformList.animVal')
-  @DocsEditable()
   final TransformList animVal;
 
-  @DomName('SVGAnimatedTransformList.baseVal')
-  @DocsEditable()
   final TransformList baseVal;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGAnimationElement')
 @Unstable()
 @Native("SVGAnimationElement")
 class AnimationElement extends SvgElement implements Tests {
@@ -502,8 +384,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGAnimationElement.SVGAnimationElement')
-  @DocsEditable()
   factory AnimationElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("animation");
   /**
@@ -513,54 +393,32 @@
    */
   AnimationElement.created() : super.created();
 
-  @DomName('SVGAnimationElement.targetElement')
-  @DocsEditable()
   final SvgElement targetElement;
 
-  @DomName('SVGAnimationElement.beginElement')
-  @DocsEditable()
   void beginElement() native;
 
-  @DomName('SVGAnimationElement.beginElementAt')
-  @DocsEditable()
   void beginElementAt(num offset) native;
 
-  @DomName('SVGAnimationElement.endElement')
-  @DocsEditable()
   void endElement() native;
 
-  @DomName('SVGAnimationElement.endElementAt')
-  @DocsEditable()
   void endElementAt(num offset) native;
 
-  @DomName('SVGAnimationElement.getCurrentTime')
-  @DocsEditable()
   double getCurrentTime() native;
 
-  @DomName('SVGAnimationElement.getSimpleDuration')
-  @DocsEditable()
   double getSimpleDuration() native;
 
-  @DomName('SVGAnimationElement.getStartTime')
-  @DocsEditable()
   double getStartTime() native;
 
   // From SVGTests
 
-  @DomName('SVGAnimationElement.requiredExtensions')
-  @DocsEditable()
   final StringList requiredExtensions;
 
-  @DomName('SVGAnimationElement.systemLanguage')
-  @DocsEditable()
   final StringList systemLanguage;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGCircleElement')
 @Unstable()
 @Native("SVGCircleElement")
 class CircleElement extends GeometryElement {
@@ -569,8 +427,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGCircleElement.SVGCircleElement')
-  @DocsEditable()
   factory CircleElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("circle");
   /**
@@ -580,24 +436,16 @@
    */
   CircleElement.created() : super.created();
 
-  @DomName('SVGCircleElement.cx')
-  @DocsEditable()
   final AnimatedLength cx;
 
-  @DomName('SVGCircleElement.cy')
-  @DocsEditable()
   final AnimatedLength cy;
 
-  @DomName('SVGCircleElement.r')
-  @DocsEditable()
   final AnimatedLength r;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGClipPathElement')
 @Unstable()
 @Native("SVGClipPathElement")
 class ClipPathElement extends GraphicsElement {
@@ -606,8 +454,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGClipPathElement.SVGClipPathElement')
-  @DocsEditable()
   factory ClipPathElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("clipPath");
   /**
@@ -617,16 +463,12 @@
    */
   ClipPathElement.created() : super.created();
 
-  @DomName('SVGClipPathElement.clipPathUnits')
-  @DocsEditable()
   final AnimatedEnumeration clipPathUnits;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGDefsElement')
 @Unstable()
 @Native("SVGDefsElement")
 class DefsElement extends GraphicsElement {
@@ -635,8 +477,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGDefsElement.SVGDefsElement')
-  @DocsEditable()
   factory DefsElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("defs");
   /**
@@ -650,8 +490,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.
 
-@DocsEditable()
-@DomName('SVGDescElement')
 @Unstable()
 @Native("SVGDescElement")
 class DescElement extends SvgElement {
@@ -660,8 +498,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGDescElement.SVGDescElement')
-  @DocsEditable()
   factory DescElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("desc");
   /**
@@ -675,9 +511,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.
 
-@DocsEditable()
-@DomName('SVGDiscardElement')
-@Experimental() // untriaged
 @Native("SVGDiscardElement")
 class DiscardElement extends SvgElement {
   // To suppress missing implicit constructor warnings.
@@ -695,8 +528,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.
 
-@DocsEditable()
-@DomName('SVGEllipseElement')
 @Unstable()
 @Native("SVGEllipseElement")
 class EllipseElement extends GeometryElement {
@@ -705,8 +536,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGEllipseElement.SVGEllipseElement')
-  @DocsEditable()
   factory EllipseElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("ellipse");
   /**
@@ -716,28 +545,18 @@
    */
   EllipseElement.created() : super.created();
 
-  @DomName('SVGEllipseElement.cx')
-  @DocsEditable()
   final AnimatedLength cx;
 
-  @DomName('SVGEllipseElement.cy')
-  @DocsEditable()
   final AnimatedLength cy;
 
-  @DomName('SVGEllipseElement.rx')
-  @DocsEditable()
   final AnimatedLength rx;
 
-  @DomName('SVGEllipseElement.ry')
-  @DocsEditable()
   final AnimatedLength ry;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGFEBlendElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -751,8 +570,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGFEBlendElement.SVGFEBlendElement')
-  @DocsEditable()
   factory FEBlendElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("feBlend");
   /**
@@ -767,70 +584,40 @@
       SvgElement.isTagSupported('feBlend') &&
       (new SvgElement.tag('feBlend') is FEBlendElement);
 
-  @DomName('SVGFEBlendElement.SVG_FEBLEND_MODE_DARKEN')
-  @DocsEditable()
   static const int SVG_FEBLEND_MODE_DARKEN = 4;
 
-  @DomName('SVGFEBlendElement.SVG_FEBLEND_MODE_LIGHTEN')
-  @DocsEditable()
   static const int SVG_FEBLEND_MODE_LIGHTEN = 5;
 
-  @DomName('SVGFEBlendElement.SVG_FEBLEND_MODE_MULTIPLY')
-  @DocsEditable()
   static const int SVG_FEBLEND_MODE_MULTIPLY = 2;
 
-  @DomName('SVGFEBlendElement.SVG_FEBLEND_MODE_NORMAL')
-  @DocsEditable()
   static const int SVG_FEBLEND_MODE_NORMAL = 1;
 
-  @DomName('SVGFEBlendElement.SVG_FEBLEND_MODE_SCREEN')
-  @DocsEditable()
   static const int SVG_FEBLEND_MODE_SCREEN = 3;
 
-  @DomName('SVGFEBlendElement.SVG_FEBLEND_MODE_UNKNOWN')
-  @DocsEditable()
   static const int SVG_FEBLEND_MODE_UNKNOWN = 0;
 
-  @DomName('SVGFEBlendElement.in1')
-  @DocsEditable()
   final AnimatedString in1;
 
-  @DomName('SVGFEBlendElement.in2')
-  @DocsEditable()
   final AnimatedString in2;
 
-  @DomName('SVGFEBlendElement.mode')
-  @DocsEditable()
   final AnimatedEnumeration mode;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  @DomName('SVGFEBlendElement.height')
-  @DocsEditable()
   final AnimatedLength height;
 
-  @DomName('SVGFEBlendElement.result')
-  @DocsEditable()
   final AnimatedString result;
 
-  @DomName('SVGFEBlendElement.width')
-  @DocsEditable()
   final AnimatedLength width;
 
-  @DomName('SVGFEBlendElement.x')
-  @DocsEditable()
   final AnimatedLength x;
 
-  @DomName('SVGFEBlendElement.y')
-  @DocsEditable()
   final AnimatedLength y;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGFEColorMatrixElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -844,8 +631,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGFEColorMatrixElement.SVGFEColorMatrixElement')
-  @DocsEditable()
   factory FEColorMatrixElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("feColorMatrix");
   /**
@@ -860,66 +645,38 @@
       SvgElement.isTagSupported('feColorMatrix') &&
       (new SvgElement.tag('feColorMatrix') is FEColorMatrixElement);
 
-  @DomName('SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_HUEROTATE')
-  @DocsEditable()
   static const int SVG_FECOLORMATRIX_TYPE_HUEROTATE = 3;
 
-  @DomName('SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA')
-  @DocsEditable()
   static const int SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA = 4;
 
-  @DomName('SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX')
-  @DocsEditable()
   static const int SVG_FECOLORMATRIX_TYPE_MATRIX = 1;
 
-  @DomName('SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_SATURATE')
-  @DocsEditable()
   static const int SVG_FECOLORMATRIX_TYPE_SATURATE = 2;
 
-  @DomName('SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_UNKNOWN')
-  @DocsEditable()
   static const int SVG_FECOLORMATRIX_TYPE_UNKNOWN = 0;
 
-  @DomName('SVGFEColorMatrixElement.in1')
-  @DocsEditable()
   final AnimatedString in1;
 
-  @DomName('SVGFEColorMatrixElement.type')
-  @DocsEditable()
   final AnimatedEnumeration type;
 
-  @DomName('SVGFEColorMatrixElement.values')
-  @DocsEditable()
   final AnimatedNumberList values;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  @DomName('SVGFEColorMatrixElement.height')
-  @DocsEditable()
   final AnimatedLength height;
 
-  @DomName('SVGFEColorMatrixElement.result')
-  @DocsEditable()
   final AnimatedString result;
 
-  @DomName('SVGFEColorMatrixElement.width')
-  @DocsEditable()
   final AnimatedLength width;
 
-  @DomName('SVGFEColorMatrixElement.x')
-  @DocsEditable()
   final AnimatedLength x;
 
-  @DomName('SVGFEColorMatrixElement.y')
-  @DocsEditable()
   final AnimatedLength y;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGFEComponentTransferElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -933,8 +690,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGFEComponentTransferElement.SVGFEComponentTransferElement')
-  @DocsEditable()
   factory FEComponentTransferElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("feComponentTransfer");
   /**
@@ -949,38 +704,24 @@
       SvgElement.isTagSupported('feComponentTransfer') &&
       (new SvgElement.tag('feComponentTransfer') is FEComponentTransferElement);
 
-  @DomName('SVGFEComponentTransferElement.in1')
-  @DocsEditable()
   final AnimatedString in1;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  @DomName('SVGFEComponentTransferElement.height')
-  @DocsEditable()
   final AnimatedLength height;
 
-  @DomName('SVGFEComponentTransferElement.result')
-  @DocsEditable()
   final AnimatedString result;
 
-  @DomName('SVGFEComponentTransferElement.width')
-  @DocsEditable()
   final AnimatedLength width;
 
-  @DomName('SVGFEComponentTransferElement.x')
-  @DocsEditable()
   final AnimatedLength x;
 
-  @DomName('SVGFEComponentTransferElement.y')
-  @DocsEditable()
   final AnimatedLength y;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGFECompositeElement')
 @Unstable()
 @Native("SVGFECompositeElement")
 class FECompositeElement extends SvgElement
@@ -996,90 +737,50 @@
    */
   FECompositeElement.created() : super.created();
 
-  @DomName('SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_ARITHMETIC')
-  @DocsEditable()
   static const int SVG_FECOMPOSITE_OPERATOR_ARITHMETIC = 6;
 
-  @DomName('SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_ATOP')
-  @DocsEditable()
   static const int SVG_FECOMPOSITE_OPERATOR_ATOP = 4;
 
-  @DomName('SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_IN')
-  @DocsEditable()
   static const int SVG_FECOMPOSITE_OPERATOR_IN = 2;
 
-  @DomName('SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OUT')
-  @DocsEditable()
   static const int SVG_FECOMPOSITE_OPERATOR_OUT = 3;
 
-  @DomName('SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER')
-  @DocsEditable()
   static const int SVG_FECOMPOSITE_OPERATOR_OVER = 1;
 
-  @DomName('SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_UNKNOWN')
-  @DocsEditable()
   static const int SVG_FECOMPOSITE_OPERATOR_UNKNOWN = 0;
 
-  @DomName('SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_XOR')
-  @DocsEditable()
   static const int SVG_FECOMPOSITE_OPERATOR_XOR = 5;
 
-  @DomName('SVGFECompositeElement.in1')
-  @DocsEditable()
   final AnimatedString in1;
 
-  @DomName('SVGFECompositeElement.in2')
-  @DocsEditable()
   final AnimatedString in2;
 
-  @DomName('SVGFECompositeElement.k1')
-  @DocsEditable()
   final AnimatedNumber k1;
 
-  @DomName('SVGFECompositeElement.k2')
-  @DocsEditable()
   final AnimatedNumber k2;
 
-  @DomName('SVGFECompositeElement.k3')
-  @DocsEditable()
   final AnimatedNumber k3;
 
-  @DomName('SVGFECompositeElement.k4')
-  @DocsEditable()
   final AnimatedNumber k4;
 
-  @DomName('SVGFECompositeElement.operator')
-  @DocsEditable()
   final AnimatedEnumeration operator;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  @DomName('SVGFECompositeElement.height')
-  @DocsEditable()
   final AnimatedLength height;
 
-  @DomName('SVGFECompositeElement.result')
-  @DocsEditable()
   final AnimatedString result;
 
-  @DomName('SVGFECompositeElement.width')
-  @DocsEditable()
   final AnimatedLength width;
 
-  @DomName('SVGFECompositeElement.x')
-  @DocsEditable()
   final AnimatedLength x;
 
-  @DomName('SVGFECompositeElement.y')
-  @DocsEditable()
   final AnimatedLength y;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGFEConvolveMatrixElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -1093,8 +794,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGFEConvolveMatrixElement.SVGFEConvolveMatrixElement')
-  @DocsEditable()
   factory FEConvolveMatrixElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("feConvolveMatrix");
   /**
@@ -1109,98 +808,54 @@
       SvgElement.isTagSupported('feConvolveMatrix') &&
       (new SvgElement.tag('feConvolveMatrix') is FEConvolveMatrixElement);
 
-  @DomName('SVGFEConvolveMatrixElement.SVG_EDGEMODE_DUPLICATE')
-  @DocsEditable()
   static const int SVG_EDGEMODE_DUPLICATE = 1;
 
-  @DomName('SVGFEConvolveMatrixElement.SVG_EDGEMODE_NONE')
-  @DocsEditable()
   static const int SVG_EDGEMODE_NONE = 3;
 
-  @DomName('SVGFEConvolveMatrixElement.SVG_EDGEMODE_UNKNOWN')
-  @DocsEditable()
   static const int SVG_EDGEMODE_UNKNOWN = 0;
 
-  @DomName('SVGFEConvolveMatrixElement.SVG_EDGEMODE_WRAP')
-  @DocsEditable()
   static const int SVG_EDGEMODE_WRAP = 2;
 
-  @DomName('SVGFEConvolveMatrixElement.bias')
-  @DocsEditable()
   final AnimatedNumber bias;
 
-  @DomName('SVGFEConvolveMatrixElement.divisor')
-  @DocsEditable()
   final AnimatedNumber divisor;
 
-  @DomName('SVGFEConvolveMatrixElement.edgeMode')
-  @DocsEditable()
   final AnimatedEnumeration edgeMode;
 
-  @DomName('SVGFEConvolveMatrixElement.in1')
-  @DocsEditable()
   final AnimatedString in1;
 
-  @DomName('SVGFEConvolveMatrixElement.kernelMatrix')
-  @DocsEditable()
   final AnimatedNumberList kernelMatrix;
 
-  @DomName('SVGFEConvolveMatrixElement.kernelUnitLengthX')
-  @DocsEditable()
   final AnimatedNumber kernelUnitLengthX;
 
-  @DomName('SVGFEConvolveMatrixElement.kernelUnitLengthY')
-  @DocsEditable()
   final AnimatedNumber kernelUnitLengthY;
 
-  @DomName('SVGFEConvolveMatrixElement.orderX')
-  @DocsEditable()
   final AnimatedInteger orderX;
 
-  @DomName('SVGFEConvolveMatrixElement.orderY')
-  @DocsEditable()
   final AnimatedInteger orderY;
 
-  @DomName('SVGFEConvolveMatrixElement.preserveAlpha')
-  @DocsEditable()
   final AnimatedBoolean preserveAlpha;
 
-  @DomName('SVGFEConvolveMatrixElement.targetX')
-  @DocsEditable()
   final AnimatedInteger targetX;
 
-  @DomName('SVGFEConvolveMatrixElement.targetY')
-  @DocsEditable()
   final AnimatedInteger targetY;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  @DomName('SVGFEConvolveMatrixElement.height')
-  @DocsEditable()
   final AnimatedLength height;
 
-  @DomName('SVGFEConvolveMatrixElement.result')
-  @DocsEditable()
   final AnimatedString result;
 
-  @DomName('SVGFEConvolveMatrixElement.width')
-  @DocsEditable()
   final AnimatedLength width;
 
-  @DomName('SVGFEConvolveMatrixElement.x')
-  @DocsEditable()
   final AnimatedLength x;
 
-  @DomName('SVGFEConvolveMatrixElement.y')
-  @DocsEditable()
   final AnimatedLength y;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGFEDiffuseLightingElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -1214,8 +869,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGFEDiffuseLightingElement.SVGFEDiffuseLightingElement')
-  @DocsEditable()
   factory FEDiffuseLightingElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("feDiffuseLighting");
   /**
@@ -1230,54 +883,32 @@
       SvgElement.isTagSupported('feDiffuseLighting') &&
       (new SvgElement.tag('feDiffuseLighting') is FEDiffuseLightingElement);
 
-  @DomName('SVGFEDiffuseLightingElement.diffuseConstant')
-  @DocsEditable()
   final AnimatedNumber diffuseConstant;
 
-  @DomName('SVGFEDiffuseLightingElement.in1')
-  @DocsEditable()
   final AnimatedString in1;
 
-  @DomName('SVGFEDiffuseLightingElement.kernelUnitLengthX')
-  @DocsEditable()
   final AnimatedNumber kernelUnitLengthX;
 
-  @DomName('SVGFEDiffuseLightingElement.kernelUnitLengthY')
-  @DocsEditable()
   final AnimatedNumber kernelUnitLengthY;
 
-  @DomName('SVGFEDiffuseLightingElement.surfaceScale')
-  @DocsEditable()
   final AnimatedNumber surfaceScale;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  @DomName('SVGFEDiffuseLightingElement.height')
-  @DocsEditable()
   final AnimatedLength height;
 
-  @DomName('SVGFEDiffuseLightingElement.result')
-  @DocsEditable()
   final AnimatedString result;
 
-  @DomName('SVGFEDiffuseLightingElement.width')
-  @DocsEditable()
   final AnimatedLength width;
 
-  @DomName('SVGFEDiffuseLightingElement.x')
-  @DocsEditable()
   final AnimatedLength x;
 
-  @DomName('SVGFEDiffuseLightingElement.y')
-  @DocsEditable()
   final AnimatedLength y;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGFEDisplacementMapElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -1291,8 +922,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGFEDisplacementMapElement.SVGFEDisplacementMapElement')
-  @DocsEditable()
   factory FEDisplacementMapElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("feDisplacementMap");
   /**
@@ -1307,74 +936,42 @@
       SvgElement.isTagSupported('feDisplacementMap') &&
       (new SvgElement.tag('feDisplacementMap') is FEDisplacementMapElement);
 
-  @DomName('SVGFEDisplacementMapElement.SVG_CHANNEL_A')
-  @DocsEditable()
   static const int SVG_CHANNEL_A = 4;
 
-  @DomName('SVGFEDisplacementMapElement.SVG_CHANNEL_B')
-  @DocsEditable()
   static const int SVG_CHANNEL_B = 3;
 
-  @DomName('SVGFEDisplacementMapElement.SVG_CHANNEL_G')
-  @DocsEditable()
   static const int SVG_CHANNEL_G = 2;
 
-  @DomName('SVGFEDisplacementMapElement.SVG_CHANNEL_R')
-  @DocsEditable()
   static const int SVG_CHANNEL_R = 1;
 
-  @DomName('SVGFEDisplacementMapElement.SVG_CHANNEL_UNKNOWN')
-  @DocsEditable()
   static const int SVG_CHANNEL_UNKNOWN = 0;
 
-  @DomName('SVGFEDisplacementMapElement.in1')
-  @DocsEditable()
   final AnimatedString in1;
 
-  @DomName('SVGFEDisplacementMapElement.in2')
-  @DocsEditable()
   final AnimatedString in2;
 
-  @DomName('SVGFEDisplacementMapElement.scale')
-  @DocsEditable()
   final AnimatedNumber scale;
 
-  @DomName('SVGFEDisplacementMapElement.xChannelSelector')
-  @DocsEditable()
   final AnimatedEnumeration xChannelSelector;
 
-  @DomName('SVGFEDisplacementMapElement.yChannelSelector')
-  @DocsEditable()
   final AnimatedEnumeration yChannelSelector;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  @DomName('SVGFEDisplacementMapElement.height')
-  @DocsEditable()
   final AnimatedLength height;
 
-  @DomName('SVGFEDisplacementMapElement.result')
-  @DocsEditable()
   final AnimatedString result;
 
-  @DomName('SVGFEDisplacementMapElement.width')
-  @DocsEditable()
   final AnimatedLength width;
 
-  @DomName('SVGFEDisplacementMapElement.x')
-  @DocsEditable()
   final AnimatedLength x;
 
-  @DomName('SVGFEDisplacementMapElement.y')
-  @DocsEditable()
   final AnimatedLength y;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGFEDistantLightElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -1387,8 +984,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGFEDistantLightElement.SVGFEDistantLightElement')
-  @DocsEditable()
   factory FEDistantLightElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("feDistantLight");
   /**
@@ -1403,20 +998,14 @@
       SvgElement.isTagSupported('feDistantLight') &&
       (new SvgElement.tag('feDistantLight') is FEDistantLightElement);
 
-  @DomName('SVGFEDistantLightElement.azimuth')
-  @DocsEditable()
   final AnimatedNumber azimuth;
 
-  @DomName('SVGFEDistantLightElement.elevation')
-  @DocsEditable()
   final AnimatedNumber elevation;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGFEFloodElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -1430,8 +1019,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGFEFloodElement.SVGFEFloodElement')
-  @DocsEditable()
   factory FEFloodElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("feFlood");
   /**
@@ -1448,32 +1035,20 @@
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  @DomName('SVGFEFloodElement.height')
-  @DocsEditable()
   final AnimatedLength height;
 
-  @DomName('SVGFEFloodElement.result')
-  @DocsEditable()
   final AnimatedString result;
 
-  @DomName('SVGFEFloodElement.width')
-  @DocsEditable()
   final AnimatedLength width;
 
-  @DomName('SVGFEFloodElement.x')
-  @DocsEditable()
   final AnimatedLength x;
 
-  @DomName('SVGFEFloodElement.y')
-  @DocsEditable()
   final AnimatedLength y;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGFEFuncAElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -1486,8 +1061,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGFEFuncAElement.SVGFEFuncAElement')
-  @DocsEditable()
   factory FEFuncAElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("feFuncA");
   /**
@@ -1506,8 +1079,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.
 
-@DocsEditable()
-@DomName('SVGFEFuncBElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -1520,8 +1091,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGFEFuncBElement.SVGFEFuncBElement')
-  @DocsEditable()
   factory FEFuncBElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("feFuncB");
   /**
@@ -1540,8 +1109,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.
 
-@DocsEditable()
-@DomName('SVGFEFuncGElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -1554,8 +1121,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGFEFuncGElement.SVGFEFuncGElement')
-  @DocsEditable()
   factory FEFuncGElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("feFuncG");
   /**
@@ -1574,8 +1139,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.
 
-@DocsEditable()
-@DomName('SVGFEFuncRElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -1588,8 +1151,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGFEFuncRElement.SVGFEFuncRElement')
-  @DocsEditable()
   factory FEFuncRElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("feFuncR");
   /**
@@ -1608,8 +1169,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.
 
-@DocsEditable()
-@DomName('SVGFEGaussianBlurElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -1623,8 +1182,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGFEGaussianBlurElement.SVGFEGaussianBlurElement')
-  @DocsEditable()
   factory FEGaussianBlurElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("feGaussianBlur");
   /**
@@ -1639,50 +1196,30 @@
       SvgElement.isTagSupported('feGaussianBlur') &&
       (new SvgElement.tag('feGaussianBlur') is FEGaussianBlurElement);
 
-  @DomName('SVGFEGaussianBlurElement.in1')
-  @DocsEditable()
   final AnimatedString in1;
 
-  @DomName('SVGFEGaussianBlurElement.stdDeviationX')
-  @DocsEditable()
   final AnimatedNumber stdDeviationX;
 
-  @DomName('SVGFEGaussianBlurElement.stdDeviationY')
-  @DocsEditable()
   final AnimatedNumber stdDeviationY;
 
-  @DomName('SVGFEGaussianBlurElement.setStdDeviation')
-  @DocsEditable()
   void setStdDeviation(num stdDeviationX, num stdDeviationY) native;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  @DomName('SVGFEGaussianBlurElement.height')
-  @DocsEditable()
   final AnimatedLength height;
 
-  @DomName('SVGFEGaussianBlurElement.result')
-  @DocsEditable()
   final AnimatedString result;
 
-  @DomName('SVGFEGaussianBlurElement.width')
-  @DocsEditable()
   final AnimatedLength width;
 
-  @DomName('SVGFEGaussianBlurElement.x')
-  @DocsEditable()
   final AnimatedLength x;
 
-  @DomName('SVGFEGaussianBlurElement.y')
-  @DocsEditable()
   final AnimatedLength y;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGFEImageElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -1696,8 +1233,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGFEImageElement.SVGFEImageElement')
-  @DocsEditable()
   factory FEImageElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("feImage");
   /**
@@ -1712,44 +1247,28 @@
       SvgElement.isTagSupported('feImage') &&
       (new SvgElement.tag('feImage') is FEImageElement);
 
-  @DomName('SVGFEImageElement.preserveAspectRatio')
-  @DocsEditable()
   final AnimatedPreserveAspectRatio preserveAspectRatio;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  @DomName('SVGFEImageElement.height')
-  @DocsEditable()
   final AnimatedLength height;
 
-  @DomName('SVGFEImageElement.result')
-  @DocsEditable()
   final AnimatedString result;
 
-  @DomName('SVGFEImageElement.width')
-  @DocsEditable()
   final AnimatedLength width;
 
-  @DomName('SVGFEImageElement.x')
-  @DocsEditable()
   final AnimatedLength x;
 
-  @DomName('SVGFEImageElement.y')
-  @DocsEditable()
   final AnimatedLength y;
 
   // From SVGURIReference
 
-  @DomName('SVGFEImageElement.href')
-  @DocsEditable()
   final AnimatedString href;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGFEMergeElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -1763,8 +1282,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGFEMergeElement.SVGFEMergeElement')
-  @DocsEditable()
   factory FEMergeElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("feMerge");
   /**
@@ -1781,32 +1298,20 @@
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  @DomName('SVGFEMergeElement.height')
-  @DocsEditable()
   final AnimatedLength height;
 
-  @DomName('SVGFEMergeElement.result')
-  @DocsEditable()
   final AnimatedString result;
 
-  @DomName('SVGFEMergeElement.width')
-  @DocsEditable()
   final AnimatedLength width;
 
-  @DomName('SVGFEMergeElement.x')
-  @DocsEditable()
   final AnimatedLength x;
 
-  @DomName('SVGFEMergeElement.y')
-  @DocsEditable()
   final AnimatedLength y;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGFEMergeNodeElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -1819,8 +1324,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGFEMergeNodeElement.SVGFEMergeNodeElement')
-  @DocsEditable()
   factory FEMergeNodeElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("feMergeNode");
   /**
@@ -1835,16 +1338,12 @@
       SvgElement.isTagSupported('feMergeNode') &&
       (new SvgElement.tag('feMergeNode') is FEMergeNodeElement);
 
-  @DomName('SVGFEMergeNodeElement.in1')
-  @DocsEditable()
   final AnimatedString in1;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGFEMorphologyElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -1864,62 +1363,36 @@
    */
   FEMorphologyElement.created() : super.created();
 
-  @DomName('SVGFEMorphologyElement.SVG_MORPHOLOGY_OPERATOR_DILATE')
-  @DocsEditable()
   static const int SVG_MORPHOLOGY_OPERATOR_DILATE = 2;
 
-  @DomName('SVGFEMorphologyElement.SVG_MORPHOLOGY_OPERATOR_ERODE')
-  @DocsEditable()
   static const int SVG_MORPHOLOGY_OPERATOR_ERODE = 1;
 
-  @DomName('SVGFEMorphologyElement.SVG_MORPHOLOGY_OPERATOR_UNKNOWN')
-  @DocsEditable()
   static const int SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0;
 
-  @DomName('SVGFEMorphologyElement.in1')
-  @DocsEditable()
   final AnimatedString in1;
 
-  @DomName('SVGFEMorphologyElement.operator')
-  @DocsEditable()
   final AnimatedEnumeration operator;
 
-  @DomName('SVGFEMorphologyElement.radiusX')
-  @DocsEditable()
   final AnimatedNumber radiusX;
 
-  @DomName('SVGFEMorphologyElement.radiusY')
-  @DocsEditable()
   final AnimatedNumber radiusY;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  @DomName('SVGFEMorphologyElement.height')
-  @DocsEditable()
   final AnimatedLength height;
 
-  @DomName('SVGFEMorphologyElement.result')
-  @DocsEditable()
   final AnimatedString result;
 
-  @DomName('SVGFEMorphologyElement.width')
-  @DocsEditable()
   final AnimatedLength width;
 
-  @DomName('SVGFEMorphologyElement.x')
-  @DocsEditable()
   final AnimatedLength x;
 
-  @DomName('SVGFEMorphologyElement.y')
-  @DocsEditable()
   final AnimatedLength y;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGFEOffsetElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -1933,8 +1406,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGFEOffsetElement.SVGFEOffsetElement')
-  @DocsEditable()
   factory FEOffsetElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("feOffset");
   /**
@@ -1949,46 +1420,28 @@
       SvgElement.isTagSupported('feOffset') &&
       (new SvgElement.tag('feOffset') is FEOffsetElement);
 
-  @DomName('SVGFEOffsetElement.dx')
-  @DocsEditable()
   final AnimatedNumber dx;
 
-  @DomName('SVGFEOffsetElement.dy')
-  @DocsEditable()
   final AnimatedNumber dy;
 
-  @DomName('SVGFEOffsetElement.in1')
-  @DocsEditable()
   final AnimatedString in1;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  @DomName('SVGFEOffsetElement.height')
-  @DocsEditable()
   final AnimatedLength height;
 
-  @DomName('SVGFEOffsetElement.result')
-  @DocsEditable()
   final AnimatedString result;
 
-  @DomName('SVGFEOffsetElement.width')
-  @DocsEditable()
   final AnimatedLength width;
 
-  @DomName('SVGFEOffsetElement.x')
-  @DocsEditable()
   final AnimatedLength x;
 
-  @DomName('SVGFEOffsetElement.y')
-  @DocsEditable()
   final AnimatedLength y;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGFEPointLightElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -2001,8 +1454,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGFEPointLightElement.SVGFEPointLightElement')
-  @DocsEditable()
   factory FEPointLightElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("fePointLight");
   /**
@@ -2017,24 +1468,16 @@
       SvgElement.isTagSupported('fePointLight') &&
       (new SvgElement.tag('fePointLight') is FEPointLightElement);
 
-  @DomName('SVGFEPointLightElement.x')
-  @DocsEditable()
   final AnimatedNumber x;
 
-  @DomName('SVGFEPointLightElement.y')
-  @DocsEditable()
   final AnimatedNumber y;
 
-  @DomName('SVGFEPointLightElement.z')
-  @DocsEditable()
   final AnimatedNumber z;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGFESpecularLightingElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -2048,8 +1491,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGFESpecularLightingElement.SVGFESpecularLightingElement')
-  @DocsEditable()
   factory FESpecularLightingElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("feSpecularLighting");
   /**
@@ -2064,60 +1505,34 @@
       SvgElement.isTagSupported('feSpecularLighting') &&
       (new SvgElement.tag('feSpecularLighting') is FESpecularLightingElement);
 
-  @DomName('SVGFESpecularLightingElement.in1')
-  @DocsEditable()
   final AnimatedString in1;
 
-  @DomName('SVGFESpecularLightingElement.kernelUnitLengthX')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AnimatedNumber kernelUnitLengthX;
 
-  @DomName('SVGFESpecularLightingElement.kernelUnitLengthY')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AnimatedNumber kernelUnitLengthY;
 
-  @DomName('SVGFESpecularLightingElement.specularConstant')
-  @DocsEditable()
   final AnimatedNumber specularConstant;
 
-  @DomName('SVGFESpecularLightingElement.specularExponent')
-  @DocsEditable()
   final AnimatedNumber specularExponent;
 
-  @DomName('SVGFESpecularLightingElement.surfaceScale')
-  @DocsEditable()
   final AnimatedNumber surfaceScale;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  @DomName('SVGFESpecularLightingElement.height')
-  @DocsEditable()
   final AnimatedLength height;
 
-  @DomName('SVGFESpecularLightingElement.result')
-  @DocsEditable()
   final AnimatedString result;
 
-  @DomName('SVGFESpecularLightingElement.width')
-  @DocsEditable()
   final AnimatedLength width;
 
-  @DomName('SVGFESpecularLightingElement.x')
-  @DocsEditable()
   final AnimatedLength x;
 
-  @DomName('SVGFESpecularLightingElement.y')
-  @DocsEditable()
   final AnimatedLength y;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGFESpotLightElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -2130,8 +1545,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGFESpotLightElement.SVGFESpotLightElement')
-  @DocsEditable()
   factory FESpotLightElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("feSpotLight");
   /**
@@ -2146,44 +1559,26 @@
       SvgElement.isTagSupported('feSpotLight') &&
       (new SvgElement.tag('feSpotLight') is FESpotLightElement);
 
-  @DomName('SVGFESpotLightElement.limitingConeAngle')
-  @DocsEditable()
   final AnimatedNumber limitingConeAngle;
 
-  @DomName('SVGFESpotLightElement.pointsAtX')
-  @DocsEditable()
   final AnimatedNumber pointsAtX;
 
-  @DomName('SVGFESpotLightElement.pointsAtY')
-  @DocsEditable()
   final AnimatedNumber pointsAtY;
 
-  @DomName('SVGFESpotLightElement.pointsAtZ')
-  @DocsEditable()
   final AnimatedNumber pointsAtZ;
 
-  @DomName('SVGFESpotLightElement.specularExponent')
-  @DocsEditable()
   final AnimatedNumber specularExponent;
 
-  @DomName('SVGFESpotLightElement.x')
-  @DocsEditable()
   final AnimatedNumber x;
 
-  @DomName('SVGFESpotLightElement.y')
-  @DocsEditable()
   final AnimatedNumber y;
 
-  @DomName('SVGFESpotLightElement.z')
-  @DocsEditable()
   final AnimatedNumber z;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGFETileElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -2197,8 +1592,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGFETileElement.SVGFETileElement')
-  @DocsEditable()
   factory FETileElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("feTile");
   /**
@@ -2213,38 +1606,24 @@
       SvgElement.isTagSupported('feTile') &&
       (new SvgElement.tag('feTile') is FETileElement);
 
-  @DomName('SVGFETileElement.in1')
-  @DocsEditable()
   final AnimatedString in1;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  @DomName('SVGFETileElement.height')
-  @DocsEditable()
   final AnimatedLength height;
 
-  @DomName('SVGFETileElement.result')
-  @DocsEditable()
   final AnimatedString result;
 
-  @DomName('SVGFETileElement.width')
-  @DocsEditable()
   final AnimatedLength width;
 
-  @DomName('SVGFETileElement.x')
-  @DocsEditable()
   final AnimatedLength x;
 
-  @DomName('SVGFETileElement.y')
-  @DocsEditable()
   final AnimatedLength y;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGFETurbulenceElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -2258,8 +1637,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGFETurbulenceElement.SVGFETurbulenceElement')
-  @DocsEditable()
   factory FETurbulenceElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("feTurbulence");
   /**
@@ -2274,82 +1651,46 @@
       SvgElement.isTagSupported('feTurbulence') &&
       (new SvgElement.tag('feTurbulence') is FETurbulenceElement);
 
-  @DomName('SVGFETurbulenceElement.SVG_STITCHTYPE_NOSTITCH')
-  @DocsEditable()
   static const int SVG_STITCHTYPE_NOSTITCH = 2;
 
-  @DomName('SVGFETurbulenceElement.SVG_STITCHTYPE_STITCH')
-  @DocsEditable()
   static const int SVG_STITCHTYPE_STITCH = 1;
 
-  @DomName('SVGFETurbulenceElement.SVG_STITCHTYPE_UNKNOWN')
-  @DocsEditable()
   static const int SVG_STITCHTYPE_UNKNOWN = 0;
 
-  @DomName('SVGFETurbulenceElement.SVG_TURBULENCE_TYPE_FRACTALNOISE')
-  @DocsEditable()
   static const int SVG_TURBULENCE_TYPE_FRACTALNOISE = 1;
 
-  @DomName('SVGFETurbulenceElement.SVG_TURBULENCE_TYPE_TURBULENCE')
-  @DocsEditable()
   static const int SVG_TURBULENCE_TYPE_TURBULENCE = 2;
 
-  @DomName('SVGFETurbulenceElement.SVG_TURBULENCE_TYPE_UNKNOWN')
-  @DocsEditable()
   static const int SVG_TURBULENCE_TYPE_UNKNOWN = 0;
 
-  @DomName('SVGFETurbulenceElement.baseFrequencyX')
-  @DocsEditable()
   final AnimatedNumber baseFrequencyX;
 
-  @DomName('SVGFETurbulenceElement.baseFrequencyY')
-  @DocsEditable()
   final AnimatedNumber baseFrequencyY;
 
-  @DomName('SVGFETurbulenceElement.numOctaves')
-  @DocsEditable()
   final AnimatedInteger numOctaves;
 
-  @DomName('SVGFETurbulenceElement.seed')
-  @DocsEditable()
   final AnimatedNumber seed;
 
-  @DomName('SVGFETurbulenceElement.stitchTiles')
-  @DocsEditable()
   final AnimatedEnumeration stitchTiles;
 
-  @DomName('SVGFETurbulenceElement.type')
-  @DocsEditable()
   final AnimatedEnumeration type;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  @DomName('SVGFETurbulenceElement.height')
-  @DocsEditable()
   final AnimatedLength height;
 
-  @DomName('SVGFETurbulenceElement.result')
-  @DocsEditable()
   final AnimatedString result;
 
-  @DomName('SVGFETurbulenceElement.width')
-  @DocsEditable()
   final AnimatedLength width;
 
-  @DomName('SVGFETurbulenceElement.x')
-  @DocsEditable()
   final AnimatedLength x;
 
-  @DomName('SVGFETurbulenceElement.y')
-  @DocsEditable()
   final AnimatedLength y;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGFilterElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
@@ -2362,8 +1703,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGFilterElement.SVGFilterElement')
-  @DocsEditable()
   factory FilterElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("filter");
   /**
@@ -2378,42 +1717,26 @@
       SvgElement.isTagSupported('filter') &&
       (new SvgElement.tag('filter') is FilterElement);
 
-  @DomName('SVGFilterElement.filterUnits')
-  @DocsEditable()
   final AnimatedEnumeration filterUnits;
 
-  @DomName('SVGFilterElement.height')
-  @DocsEditable()
   final AnimatedLength height;
 
-  @DomName('SVGFilterElement.primitiveUnits')
-  @DocsEditable()
   final AnimatedEnumeration primitiveUnits;
 
-  @DomName('SVGFilterElement.width')
-  @DocsEditable()
   final AnimatedLength width;
 
-  @DomName('SVGFilterElement.x')
-  @DocsEditable()
   final AnimatedLength x;
 
-  @DomName('SVGFilterElement.y')
-  @DocsEditable()
   final AnimatedLength y;
 
   // From SVGURIReference
 
-  @DomName('SVGFilterElement.href')
-  @DocsEditable()
   final AnimatedString href;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGFilterPrimitiveStandardAttributes')
 @Unstable()
 abstract class FilterPrimitiveStandardAttributes extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -2435,8 +1758,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.
 
-@DocsEditable()
-@DomName('SVGFitToViewBox')
 @Unstable()
 abstract class FitToViewBox extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -2452,8 +1773,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.
 
-@DocsEditable()
-@DomName('SVGForeignObjectElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
@@ -2465,8 +1784,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGForeignObjectElement.SVGForeignObjectElement')
-  @DocsEditable()
   factory ForeignObjectElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("foreignObject");
   /**
@@ -2481,28 +1798,18 @@
       SvgElement.isTagSupported('foreignObject') &&
       (new SvgElement.tag('foreignObject') is ForeignObjectElement);
 
-  @DomName('SVGForeignObjectElement.height')
-  @DocsEditable()
   final AnimatedLength height;
 
-  @DomName('SVGForeignObjectElement.width')
-  @DocsEditable()
   final AnimatedLength width;
 
-  @DomName('SVGForeignObjectElement.x')
-  @DocsEditable()
   final AnimatedLength x;
 
-  @DomName('SVGForeignObjectElement.y')
-  @DocsEditable()
   final AnimatedLength y;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGGElement')
 @Unstable()
 @Native("SVGGElement")
 class GElement extends GraphicsElement {
@@ -2511,8 +1818,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGGElement.SVGGElement')
-  @DocsEditable()
   factory GElement() => _SvgElementFactoryProvider.createSvgElement_tag("g");
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
@@ -2525,9 +1830,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.
 
-@DocsEditable()
-@DomName('SVGGeometryElement')
-@Experimental() // untriaged
 @Native("SVGGeometryElement")
 class GeometryElement extends GraphicsElement {
   // To suppress missing implicit constructor warnings.
@@ -2541,38 +1843,20 @@
    */
   GeometryElement.created() : super.created();
 
-  @DomName('SVGGeometryElement.pathLength')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AnimatedNumber pathLength;
 
-  @DomName('SVGGeometryElement.getPointAtLength')
-  @DocsEditable()
-  @Experimental() // untriaged
   Point getPointAtLength(num distance) native;
 
-  @DomName('SVGGeometryElement.getTotalLength')
-  @DocsEditable()
-  @Experimental() // untriaged
   double getTotalLength() native;
 
-  @DomName('SVGGeometryElement.isPointInFill')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool isPointInFill(Point point) native;
 
-  @DomName('SVGGeometryElement.isPointInStroke')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool isPointInStroke(Point point) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGGraphicsElement')
-@Experimental() // untriaged
 @Native("SVGGraphicsElement")
 class GraphicsElement extends SvgElement implements Tests {
   // To suppress missing implicit constructor warnings.
@@ -2586,56 +1870,30 @@
    */
   GraphicsElement.created() : super.created();
 
-  @DomName('SVGGraphicsElement.farthestViewportElement')
-  @DocsEditable()
-  @Experimental() // untriaged
   final SvgElement farthestViewportElement;
 
-  @DomName('SVGGraphicsElement.nearestViewportElement')
-  @DocsEditable()
-  @Experimental() // untriaged
   final SvgElement nearestViewportElement;
 
-  @DomName('SVGGraphicsElement.transform')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AnimatedTransformList transform;
 
-  @DomName('SVGGraphicsElement.getBBox')
-  @DocsEditable()
-  @Experimental() // untriaged
   Rect getBBox() native;
 
   @JSName('getCTM')
-  @DomName('SVGGraphicsElement.getCTM')
-  @DocsEditable()
-  @Experimental() // untriaged
   Matrix getCtm() native;
 
   @JSName('getScreenCTM')
-  @DomName('SVGGraphicsElement.getScreenCTM')
-  @DocsEditable()
-  @Experimental() // untriaged
   Matrix getScreenCtm() native;
 
   // From SVGTests
 
-  @DomName('SVGGraphicsElement.requiredExtensions')
-  @DocsEditable()
-  @Experimental() // untriaged
   final StringList requiredExtensions;
 
-  @DomName('SVGGraphicsElement.systemLanguage')
-  @DocsEditable()
-  @Experimental() // untriaged
   final StringList systemLanguage;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGImageElement')
 @Unstable()
 @Native("SVGImageElement")
 class ImageElement extends GraphicsElement implements UriReference {
@@ -2644,8 +1902,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGImageElement.SVGImageElement')
-  @DocsEditable()
   factory ImageElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("image");
   /**
@@ -2655,48 +1911,28 @@
    */
   ImageElement.created() : super.created();
 
-  @DomName('SVGImageElement.async')
-  @DocsEditable()
-  @Experimental() // untriaged
   String async;
 
-  @DomName('SVGImageElement.height')
-  @DocsEditable()
   final AnimatedLength height;
 
-  @DomName('SVGImageElement.preserveAspectRatio')
-  @DocsEditable()
   final AnimatedPreserveAspectRatio preserveAspectRatio;
 
-  @DomName('SVGImageElement.width')
-  @DocsEditable()
   final AnimatedLength width;
 
-  @DomName('SVGImageElement.x')
-  @DocsEditable()
   final AnimatedLength x;
 
-  @DomName('SVGImageElement.y')
-  @DocsEditable()
   final AnimatedLength y;
 
-  @DomName('SVGImageElement.decode')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future decode() => promiseToFuture(JS("", "#.decode()", this));
 
   // From SVGURIReference
 
-  @DomName('SVGImageElement.href')
-  @DocsEditable()
   final AnimatedString href;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGLength')
 @Unstable()
 @Native("SVGLength")
 class Length extends Interceptor {
@@ -2705,80 +1941,44 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGLength.SVG_LENGTHTYPE_CM')
-  @DocsEditable()
   static const int SVG_LENGTHTYPE_CM = 6;
 
-  @DomName('SVGLength.SVG_LENGTHTYPE_EMS')
-  @DocsEditable()
   static const int SVG_LENGTHTYPE_EMS = 3;
 
-  @DomName('SVGLength.SVG_LENGTHTYPE_EXS')
-  @DocsEditable()
   static const int SVG_LENGTHTYPE_EXS = 4;
 
-  @DomName('SVGLength.SVG_LENGTHTYPE_IN')
-  @DocsEditable()
   static const int SVG_LENGTHTYPE_IN = 8;
 
-  @DomName('SVGLength.SVG_LENGTHTYPE_MM')
-  @DocsEditable()
   static const int SVG_LENGTHTYPE_MM = 7;
 
-  @DomName('SVGLength.SVG_LENGTHTYPE_NUMBER')
-  @DocsEditable()
   static const int SVG_LENGTHTYPE_NUMBER = 1;
 
-  @DomName('SVGLength.SVG_LENGTHTYPE_PC')
-  @DocsEditable()
   static const int SVG_LENGTHTYPE_PC = 10;
 
-  @DomName('SVGLength.SVG_LENGTHTYPE_PERCENTAGE')
-  @DocsEditable()
   static const int SVG_LENGTHTYPE_PERCENTAGE = 2;
 
-  @DomName('SVGLength.SVG_LENGTHTYPE_PT')
-  @DocsEditable()
   static const int SVG_LENGTHTYPE_PT = 9;
 
-  @DomName('SVGLength.SVG_LENGTHTYPE_PX')
-  @DocsEditable()
   static const int SVG_LENGTHTYPE_PX = 5;
 
-  @DomName('SVGLength.SVG_LENGTHTYPE_UNKNOWN')
-  @DocsEditable()
   static const int SVG_LENGTHTYPE_UNKNOWN = 0;
 
-  @DomName('SVGLength.unitType')
-  @DocsEditable()
   final int unitType;
 
-  @DomName('SVGLength.value')
-  @DocsEditable()
   num value;
 
-  @DomName('SVGLength.valueAsString')
-  @DocsEditable()
   String valueAsString;
 
-  @DomName('SVGLength.valueInSpecifiedUnits')
-  @DocsEditable()
   num valueInSpecifiedUnits;
 
-  @DomName('SVGLength.convertToSpecifiedUnits')
-  @DocsEditable()
   void convertToSpecifiedUnits(int unitType) native;
 
-  @DomName('SVGLength.newValueSpecifiedUnits')
-  @DocsEditable()
   void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGLengthList')
 @Unstable()
 @Native("SVGLengthList")
 class LengthList extends Interceptor
@@ -2789,13 +1989,8 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGLengthList.length')
-  @DocsEditable()
-  @Experimental() // untriaged
   int get length => JS("int", "#.length", this);
 
-  @DomName('SVGLengthList.numberOfItems')
-  @DocsEditable()
   final int numberOfItems;
 
   Length operator [](int index) {
@@ -2841,45 +2036,26 @@
   Length elementAt(int index) => this[index];
   // -- end List<Length> mixins.
 
-  @DomName('SVGLengthList.__setter__')
-  @DocsEditable()
-  @Experimental() // untriaged
   void __setter__(int index, Length newItem) native;
 
-  @DomName('SVGLengthList.appendItem')
-  @DocsEditable()
   Length appendItem(Length newItem) native;
 
-  @DomName('SVGLengthList.clear')
-  @DocsEditable()
   void clear() native;
 
-  @DomName('SVGLengthList.getItem')
-  @DocsEditable()
   Length getItem(int index) native;
 
-  @DomName('SVGLengthList.initialize')
-  @DocsEditable()
   Length initialize(Length newItem) native;
 
-  @DomName('SVGLengthList.insertItemBefore')
-  @DocsEditable()
   Length insertItemBefore(Length newItem, int index) native;
 
-  @DomName('SVGLengthList.removeItem')
-  @DocsEditable()
   Length removeItem(int index) native;
 
-  @DomName('SVGLengthList.replaceItem')
-  @DocsEditable()
   Length replaceItem(Length newItem, int index) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGLineElement')
 @Unstable()
 @Native("SVGLineElement")
 class LineElement extends GeometryElement {
@@ -2888,8 +2064,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGLineElement.SVGLineElement')
-  @DocsEditable()
   factory LineElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("line");
   /**
@@ -2899,28 +2073,18 @@
    */
   LineElement.created() : super.created();
 
-  @DomName('SVGLineElement.x1')
-  @DocsEditable()
   final AnimatedLength x1;
 
-  @DomName('SVGLineElement.x2')
-  @DocsEditable()
   final AnimatedLength x2;
 
-  @DomName('SVGLineElement.y1')
-  @DocsEditable()
   final AnimatedLength y1;
 
-  @DomName('SVGLineElement.y2')
-  @DocsEditable()
   final AnimatedLength y2;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGLinearGradientElement')
 @Unstable()
 @Native("SVGLinearGradientElement")
 class LinearGradientElement extends _GradientElement {
@@ -2929,8 +2093,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGLinearGradientElement.SVGLinearGradientElement')
-  @DocsEditable()
   factory LinearGradientElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("linearGradient");
   /**
@@ -2940,28 +2102,18 @@
    */
   LinearGradientElement.created() : super.created();
 
-  @DomName('SVGLinearGradientElement.x1')
-  @DocsEditable()
   final AnimatedLength x1;
 
-  @DomName('SVGLinearGradientElement.x2')
-  @DocsEditable()
   final AnimatedLength x2;
 
-  @DomName('SVGLinearGradientElement.y1')
-  @DocsEditable()
   final AnimatedLength y1;
 
-  @DomName('SVGLinearGradientElement.y2')
-  @DocsEditable()
   final AnimatedLength y2;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGMarkerElement')
 @Unstable()
 @Native("SVGMarkerElement")
 class MarkerElement extends SvgElement implements FitToViewBox {
@@ -2970,8 +2122,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGMarkerElement.SVGMarkerElement')
-  @DocsEditable()
   factory MarkerElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("marker");
   /**
@@ -2981,82 +2131,46 @@
    */
   MarkerElement.created() : super.created();
 
-  @DomName('SVGMarkerElement.SVG_MARKERUNITS_STROKEWIDTH')
-  @DocsEditable()
   static const int SVG_MARKERUNITS_STROKEWIDTH = 2;
 
-  @DomName('SVGMarkerElement.SVG_MARKERUNITS_UNKNOWN')
-  @DocsEditable()
   static const int SVG_MARKERUNITS_UNKNOWN = 0;
 
-  @DomName('SVGMarkerElement.SVG_MARKERUNITS_USERSPACEONUSE')
-  @DocsEditable()
   static const int SVG_MARKERUNITS_USERSPACEONUSE = 1;
 
-  @DomName('SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE')
-  @DocsEditable()
   static const int SVG_MARKER_ORIENT_ANGLE = 2;
 
-  @DomName('SVGMarkerElement.SVG_MARKER_ORIENT_AUTO')
-  @DocsEditable()
   static const int SVG_MARKER_ORIENT_AUTO = 1;
 
-  @DomName('SVGMarkerElement.SVG_MARKER_ORIENT_UNKNOWN')
-  @DocsEditable()
   static const int SVG_MARKER_ORIENT_UNKNOWN = 0;
 
-  @DomName('SVGMarkerElement.markerHeight')
-  @DocsEditable()
   final AnimatedLength markerHeight;
 
-  @DomName('SVGMarkerElement.markerUnits')
-  @DocsEditable()
   final AnimatedEnumeration markerUnits;
 
-  @DomName('SVGMarkerElement.markerWidth')
-  @DocsEditable()
   final AnimatedLength markerWidth;
 
-  @DomName('SVGMarkerElement.orientAngle')
-  @DocsEditable()
   final AnimatedAngle orientAngle;
 
-  @DomName('SVGMarkerElement.orientType')
-  @DocsEditable()
   final AnimatedEnumeration orientType;
 
-  @DomName('SVGMarkerElement.refX')
-  @DocsEditable()
   final AnimatedLength refX;
 
-  @DomName('SVGMarkerElement.refY')
-  @DocsEditable()
   final AnimatedLength refY;
 
-  @DomName('SVGMarkerElement.setOrientToAngle')
-  @DocsEditable()
   void setOrientToAngle(Angle angle) native;
 
-  @DomName('SVGMarkerElement.setOrientToAuto')
-  @DocsEditable()
   void setOrientToAuto() native;
 
   // From SVGFitToViewBox
 
-  @DomName('SVGMarkerElement.preserveAspectRatio')
-  @DocsEditable()
   final AnimatedPreserveAspectRatio preserveAspectRatio;
 
-  @DomName('SVGMarkerElement.viewBox')
-  @DocsEditable()
   final AnimatedRect viewBox;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGMaskElement')
 @Unstable()
 @Native("SVGMaskElement")
 class MaskElement extends SvgElement implements Tests {
@@ -3065,8 +2179,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGMaskElement.SVGMaskElement')
-  @DocsEditable()
   factory MaskElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("mask");
   /**
@@ -3076,46 +2188,28 @@
    */
   MaskElement.created() : super.created();
 
-  @DomName('SVGMaskElement.height')
-  @DocsEditable()
   final AnimatedLength height;
 
-  @DomName('SVGMaskElement.maskContentUnits')
-  @DocsEditable()
   final AnimatedEnumeration maskContentUnits;
 
-  @DomName('SVGMaskElement.maskUnits')
-  @DocsEditable()
   final AnimatedEnumeration maskUnits;
 
-  @DomName('SVGMaskElement.width')
-  @DocsEditable()
   final AnimatedLength width;
 
-  @DomName('SVGMaskElement.x')
-  @DocsEditable()
   final AnimatedLength x;
 
-  @DomName('SVGMaskElement.y')
-  @DocsEditable()
   final AnimatedLength y;
 
   // From SVGTests
 
-  @DomName('SVGMaskElement.requiredExtensions')
-  @DocsEditable()
   final StringList requiredExtensions;
 
-  @DomName('SVGMaskElement.systemLanguage')
-  @DocsEditable()
   final StringList systemLanguage;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGMatrix')
 @Unstable()
 @Native("SVGMatrix")
 class Matrix extends Interceptor {
@@ -3124,80 +2218,44 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGMatrix.a')
-  @DocsEditable()
   num a;
 
-  @DomName('SVGMatrix.b')
-  @DocsEditable()
   num b;
 
-  @DomName('SVGMatrix.c')
-  @DocsEditable()
   num c;
 
-  @DomName('SVGMatrix.d')
-  @DocsEditable()
   num d;
 
-  @DomName('SVGMatrix.e')
-  @DocsEditable()
   num e;
 
-  @DomName('SVGMatrix.f')
-  @DocsEditable()
   num f;
 
-  @DomName('SVGMatrix.flipX')
-  @DocsEditable()
   Matrix flipX() native;
 
-  @DomName('SVGMatrix.flipY')
-  @DocsEditable()
   Matrix flipY() native;
 
-  @DomName('SVGMatrix.inverse')
-  @DocsEditable()
   Matrix inverse() native;
 
-  @DomName('SVGMatrix.multiply')
-  @DocsEditable()
   Matrix multiply(Matrix secondMatrix) native;
 
-  @DomName('SVGMatrix.rotate')
-  @DocsEditable()
   Matrix rotate(num angle) native;
 
-  @DomName('SVGMatrix.rotateFromVector')
-  @DocsEditable()
   Matrix rotateFromVector(num x, num y) native;
 
-  @DomName('SVGMatrix.scale')
-  @DocsEditable()
   Matrix scale(num scaleFactor) native;
 
-  @DomName('SVGMatrix.scaleNonUniform')
-  @DocsEditable()
   Matrix scaleNonUniform(num scaleFactorX, num scaleFactorY) native;
 
-  @DomName('SVGMatrix.skewX')
-  @DocsEditable()
   Matrix skewX(num angle) native;
 
-  @DomName('SVGMatrix.skewY')
-  @DocsEditable()
   Matrix skewY(num angle) native;
 
-  @DomName('SVGMatrix.translate')
-  @DocsEditable()
   Matrix translate(num x, num y) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGMetadataElement')
 @Unstable()
 @Native("SVGMetadataElement")
 class MetadataElement extends SvgElement {
@@ -3216,8 +2274,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.
 
-@DocsEditable()
-@DomName('SVGNumber')
 @Unstable()
 @Native("SVGNumber")
 class Number extends Interceptor {
@@ -3226,16 +2282,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGNumber.value')
-  @DocsEditable()
   num value;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGNumberList')
 @Unstable()
 @Native("SVGNumberList")
 class NumberList extends Interceptor
@@ -3246,13 +2298,8 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGNumberList.length')
-  @DocsEditable()
-  @Experimental() // untriaged
   int get length => JS("int", "#.length", this);
 
-  @DomName('SVGNumberList.numberOfItems')
-  @DocsEditable()
   final int numberOfItems;
 
   Number operator [](int index) {
@@ -3298,45 +2345,26 @@
   Number elementAt(int index) => this[index];
   // -- end List<Number> mixins.
 
-  @DomName('SVGNumberList.__setter__')
-  @DocsEditable()
-  @Experimental() // untriaged
   void __setter__(int index, Number newItem) native;
 
-  @DomName('SVGNumberList.appendItem')
-  @DocsEditable()
   Number appendItem(Number newItem) native;
 
-  @DomName('SVGNumberList.clear')
-  @DocsEditable()
   void clear() native;
 
-  @DomName('SVGNumberList.getItem')
-  @DocsEditable()
   Number getItem(int index) native;
 
-  @DomName('SVGNumberList.initialize')
-  @DocsEditable()
   Number initialize(Number newItem) native;
 
-  @DomName('SVGNumberList.insertItemBefore')
-  @DocsEditable()
   Number insertItemBefore(Number newItem, int index) native;
 
-  @DomName('SVGNumberList.removeItem')
-  @DocsEditable()
   Number removeItem(int index) native;
 
-  @DomName('SVGNumberList.replaceItem')
-  @DocsEditable()
   Number replaceItem(Number newItem, int index) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGPathElement')
 @Unstable()
 @Native("SVGPathElement")
 class PathElement extends GeometryElement {
@@ -3345,8 +2373,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGPathElement.SVGPathElement')
-  @DocsEditable()
   factory PathElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("path");
   /**
@@ -3360,8 +2386,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.
 
-@DocsEditable()
-@DomName('SVGPatternElement')
 @Unstable()
 @Native("SVGPatternElement")
 class PatternElement extends SvgElement
@@ -3371,8 +2395,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGPatternElement.SVGPatternElement')
-  @DocsEditable()
   factory PatternElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("pattern");
   /**
@@ -3382,66 +2404,40 @@
    */
   PatternElement.created() : super.created();
 
-  @DomName('SVGPatternElement.height')
-  @DocsEditable()
   final AnimatedLength height;
 
-  @DomName('SVGPatternElement.patternContentUnits')
-  @DocsEditable()
   final AnimatedEnumeration patternContentUnits;
 
-  @DomName('SVGPatternElement.patternTransform')
-  @DocsEditable()
   final AnimatedTransformList patternTransform;
 
-  @DomName('SVGPatternElement.patternUnits')
-  @DocsEditable()
   final AnimatedEnumeration patternUnits;
 
-  @DomName('SVGPatternElement.width')
-  @DocsEditable()
   final AnimatedLength width;
 
-  @DomName('SVGPatternElement.x')
-  @DocsEditable()
   final AnimatedLength x;
 
-  @DomName('SVGPatternElement.y')
-  @DocsEditable()
   final AnimatedLength y;
 
   // From SVGFitToViewBox
 
-  @DomName('SVGPatternElement.preserveAspectRatio')
-  @DocsEditable()
   final AnimatedPreserveAspectRatio preserveAspectRatio;
 
-  @DomName('SVGPatternElement.viewBox')
-  @DocsEditable()
   final AnimatedRect viewBox;
 
   // From SVGTests
 
-  @DomName('SVGPatternElement.requiredExtensions')
-  @DocsEditable()
   final StringList requiredExtensions;
 
-  @DomName('SVGPatternElement.systemLanguage')
-  @DocsEditable()
   final StringList systemLanguage;
 
   // From SVGURIReference
 
-  @DomName('SVGPatternElement.href')
-  @DocsEditable()
   final AnimatedString href;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGPoint')
 @Unstable()
 @Native("SVGPoint")
 class Point extends Interceptor {
@@ -3450,24 +2446,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGPoint.x')
-  @DocsEditable()
   num x;
 
-  @DomName('SVGPoint.y')
-  @DocsEditable()
   num y;
 
-  @DomName('SVGPoint.matrixTransform')
-  @DocsEditable()
   Point matrixTransform(Matrix matrix) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGPointList')
 @Unstable()
 @Native("SVGPointList")
 class PointList extends Interceptor {
@@ -3476,54 +2464,30 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGPointList.length')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int length;
 
-  @DomName('SVGPointList.numberOfItems')
-  @DocsEditable()
   final int numberOfItems;
 
-  @DomName('SVGPointList.__setter__')
-  @DocsEditable()
-  @Experimental() // untriaged
   void __setter__(int index, Point newItem) native;
 
-  @DomName('SVGPointList.appendItem')
-  @DocsEditable()
   Point appendItem(Point newItem) native;
 
-  @DomName('SVGPointList.clear')
-  @DocsEditable()
   void clear() native;
 
-  @DomName('SVGPointList.getItem')
-  @DocsEditable()
   Point getItem(int index) native;
 
-  @DomName('SVGPointList.initialize')
-  @DocsEditable()
   Point initialize(Point newItem) native;
 
-  @DomName('SVGPointList.insertItemBefore')
-  @DocsEditable()
   Point insertItemBefore(Point newItem, int index) native;
 
-  @DomName('SVGPointList.removeItem')
-  @DocsEditable()
   Point removeItem(int index) native;
 
-  @DomName('SVGPointList.replaceItem')
-  @DocsEditable()
   Point replaceItem(Point newItem, int index) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGPolygonElement')
 @Unstable()
 @Native("SVGPolygonElement")
 class PolygonElement extends GeometryElement {
@@ -3532,8 +2496,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGPolygonElement.SVGPolygonElement')
-  @DocsEditable()
   factory PolygonElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("polygon");
   /**
@@ -3543,20 +2505,14 @@
    */
   PolygonElement.created() : super.created();
 
-  @DomName('SVGPolygonElement.animatedPoints')
-  @DocsEditable()
   final PointList animatedPoints;
 
-  @DomName('SVGPolygonElement.points')
-  @DocsEditable()
   final PointList points;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGPolylineElement')
 @Unstable()
 @Native("SVGPolylineElement")
 class PolylineElement extends GeometryElement {
@@ -3565,8 +2521,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGPolylineElement.SVGPolylineElement')
-  @DocsEditable()
   factory PolylineElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("polyline");
   /**
@@ -3576,20 +2530,14 @@
    */
   PolylineElement.created() : super.created();
 
-  @DomName('SVGPolylineElement.animatedPoints')
-  @DocsEditable()
   final PointList animatedPoints;
 
-  @DomName('SVGPolylineElement.points')
-  @DocsEditable()
   final PointList points;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGPreserveAspectRatio')
 @Unstable()
 @Native("SVGPreserveAspectRatio")
 class PreserveAspectRatio extends Interceptor {
@@ -3598,76 +2546,42 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGPreserveAspectRatio.SVG_MEETORSLICE_MEET')
-  @DocsEditable()
   static const int SVG_MEETORSLICE_MEET = 1;
 
-  @DomName('SVGPreserveAspectRatio.SVG_MEETORSLICE_SLICE')
-  @DocsEditable()
   static const int SVG_MEETORSLICE_SLICE = 2;
 
-  @DomName('SVGPreserveAspectRatio.SVG_MEETORSLICE_UNKNOWN')
-  @DocsEditable()
   static const int SVG_MEETORSLICE_UNKNOWN = 0;
 
-  @DomName('SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_NONE')
-  @DocsEditable()
   static const int SVG_PRESERVEASPECTRATIO_NONE = 1;
 
-  @DomName('SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_UNKNOWN')
-  @DocsEditable()
   static const int SVG_PRESERVEASPECTRATIO_UNKNOWN = 0;
 
-  @DomName('SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMAX')
-  @DocsEditable()
   static const int SVG_PRESERVEASPECTRATIO_XMAXYMAX = 10;
 
-  @DomName('SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMID')
-  @DocsEditable()
   static const int SVG_PRESERVEASPECTRATIO_XMAXYMID = 7;
 
-  @DomName('SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMAXYMIN')
-  @DocsEditable()
   static const int SVG_PRESERVEASPECTRATIO_XMAXYMIN = 4;
 
-  @DomName('SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMAX')
-  @DocsEditable()
   static const int SVG_PRESERVEASPECTRATIO_XMIDYMAX = 9;
 
-  @DomName('SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMID')
-  @DocsEditable()
   static const int SVG_PRESERVEASPECTRATIO_XMIDYMID = 6;
 
-  @DomName('SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMIN')
-  @DocsEditable()
   static const int SVG_PRESERVEASPECTRATIO_XMIDYMIN = 3;
 
-  @DomName('SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMAX')
-  @DocsEditable()
   static const int SVG_PRESERVEASPECTRATIO_XMINYMAX = 8;
 
-  @DomName('SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMID')
-  @DocsEditable()
   static const int SVG_PRESERVEASPECTRATIO_XMINYMID = 5;
 
-  @DomName('SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMIN')
-  @DocsEditable()
   static const int SVG_PRESERVEASPECTRATIO_XMINYMIN = 2;
 
-  @DomName('SVGPreserveAspectRatio.align')
-  @DocsEditable()
   int align;
 
-  @DomName('SVGPreserveAspectRatio.meetOrSlice')
-  @DocsEditable()
   int meetOrSlice;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGRadialGradientElement')
 @Unstable()
 @Native("SVGRadialGradientElement")
 class RadialGradientElement extends _GradientElement {
@@ -3676,8 +2590,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGRadialGradientElement.SVGRadialGradientElement')
-  @DocsEditable()
   factory RadialGradientElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("radialGradient");
   /**
@@ -3687,36 +2599,22 @@
    */
   RadialGradientElement.created() : super.created();
 
-  @DomName('SVGRadialGradientElement.cx')
-  @DocsEditable()
   final AnimatedLength cx;
 
-  @DomName('SVGRadialGradientElement.cy')
-  @DocsEditable()
   final AnimatedLength cy;
 
-  @DomName('SVGRadialGradientElement.fr')
-  @DocsEditable()
   final AnimatedLength fr;
 
-  @DomName('SVGRadialGradientElement.fx')
-  @DocsEditable()
   final AnimatedLength fx;
 
-  @DomName('SVGRadialGradientElement.fy')
-  @DocsEditable()
   final AnimatedLength fy;
 
-  @DomName('SVGRadialGradientElement.r')
-  @DocsEditable()
   final AnimatedLength r;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGRect')
 @Unstable()
 @Native("SVGRect")
 class Rect extends Interceptor {
@@ -3725,28 +2623,18 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGRect.height')
-  @DocsEditable()
   num height;
 
-  @DomName('SVGRect.width')
-  @DocsEditable()
   num width;
 
-  @DomName('SVGRect.x')
-  @DocsEditable()
   num x;
 
-  @DomName('SVGRect.y')
-  @DocsEditable()
   num y;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGRectElement')
 @Unstable()
 @Native("SVGRectElement")
 class RectElement extends GeometryElement {
@@ -3755,8 +2643,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGRectElement.SVGRectElement')
-  @DocsEditable()
   factory RectElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("rect");
   /**
@@ -3766,36 +2652,22 @@
    */
   RectElement.created() : super.created();
 
-  @DomName('SVGRectElement.height')
-  @DocsEditable()
   final AnimatedLength height;
 
-  @DomName('SVGRectElement.rx')
-  @DocsEditable()
   final AnimatedLength rx;
 
-  @DomName('SVGRectElement.ry')
-  @DocsEditable()
   final AnimatedLength ry;
 
-  @DomName('SVGRectElement.width')
-  @DocsEditable()
   final AnimatedLength width;
 
-  @DomName('SVGRectElement.x')
-  @DocsEditable()
   final AnimatedLength x;
 
-  @DomName('SVGRectElement.y')
-  @DocsEditable()
   final AnimatedLength y;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGScriptElement')
 @Unstable()
 @Native("SVGScriptElement")
 class ScriptElement extends SvgElement implements UriReference {
@@ -3804,8 +2676,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGScriptElement.SVGScriptElement')
-  @DocsEditable()
   factory ScriptElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("script");
   /**
@@ -3815,22 +2685,16 @@
    */
   ScriptElement.created() : super.created();
 
-  @DomName('SVGScriptElement.type')
-  @DocsEditable()
   String type;
 
   // From SVGURIReference
 
-  @DomName('SVGScriptElement.href')
-  @DocsEditable()
   final AnimatedString href;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGSetElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
@@ -3842,8 +2706,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGSetElement.SVGSetElement')
-  @DocsEditable()
   factory SetElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("set");
   /**
@@ -3862,8 +2724,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.
 
-@DocsEditable()
-@DomName('SVGStopElement')
 @Unstable()
 @Native("SVGStopElement")
 class StopElement extends SvgElement {
@@ -3872,8 +2732,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGStopElement.SVGStopElement')
-  @DocsEditable()
   factory StopElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("stop");
   /**
@@ -3884,16 +2742,12 @@
   StopElement.created() : super.created();
 
   @JSName('offset')
-  @DomName('SVGStopElement.offset')
-  @DocsEditable()
   final AnimatedNumber gradientOffset;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGStringList')
 @Unstable()
 @Native("SVGStringList")
 class StringList extends Interceptor
@@ -3904,13 +2758,8 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGStringList.length')
-  @DocsEditable()
-  @Experimental() // untriaged
   int get length => JS("int", "#.length", this);
 
-  @DomName('SVGStringList.numberOfItems')
-  @DocsEditable()
   final int numberOfItems;
 
   String operator [](int index) {
@@ -3956,47 +2805,26 @@
   String elementAt(int index) => this[index];
   // -- end List<String> mixins.
 
-  @DomName('SVGStringList.__setter__')
-  @DocsEditable()
-  @Experimental() // untriaged
   void __setter__(int index, String newItem) native;
 
-  @DomName('SVGStringList.appendItem')
-  @DocsEditable()
   String appendItem(String newItem) native;
 
-  @DomName('SVGStringList.clear')
-  @DocsEditable()
   void clear() native;
 
-  @DomName('SVGStringList.getItem')
-  @DocsEditable()
   String getItem(int index) native;
 
-  @DomName('SVGStringList.initialize')
-  @DocsEditable()
   String initialize(String newItem) native;
 
-  @DomName('SVGStringList.insertItemBefore')
-  @DocsEditable()
   String insertItemBefore(String item, int index) native;
 
-  @DomName('SVGStringList.removeItem')
-  @DocsEditable()
   String removeItem(int index) native;
 
-  @DomName('SVGStringList.replaceItem')
-  @DocsEditable()
   String replaceItem(String newItem, int index) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGStyleElement')
-// http://www.w3.org/TR/SVG/types.html#InterfaceSVGStylable
-@Experimental() // nonstandard
 @Native("SVGStyleElement")
 class StyleElement extends SvgElement {
   // To suppress missing implicit constructor warnings.
@@ -4004,8 +2832,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGStyleElement.SVGStyleElement')
-  @DocsEditable()
   factory StyleElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("style");
   /**
@@ -4015,24 +2841,15 @@
    */
   StyleElement.created() : super.created();
 
-  @DomName('SVGStyleElement.disabled')
-  @DocsEditable()
   bool disabled;
 
-  @DomName('SVGStyleElement.media')
-  @DocsEditable()
   String media;
 
-  @DomName('SVGStyleElement.sheet')
-  @DocsEditable()
-  @Experimental() // untriaged
   final StyleSheet sheet;
 
   // Use implementation from Element.
   // final String title;
 
-  @DomName('SVGStyleElement.type')
-  @DocsEditable()
   String type;
 }
 // Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
@@ -4068,7 +2885,6 @@
   }
 }
 
-@DomName('SVGElement')
 @Unstable()
 @Native("SVGElement")
 class SvgElement extends Element implements GlobalEventHandlers, NoncedElement {
@@ -4147,18 +2963,15 @@
 
   // Unsupported methods inherited from Element.
 
-  @DomName('Element.insertAdjacentText')
   void insertAdjacentText(String where, String text) {
     throw new UnsupportedError("Cannot invoke insertAdjacentText on SVG.");
   }
 
-  @DomName('Element.insertAdjacentHTML')
   void insertAdjacentHtml(String where, String text,
       {NodeValidator validator, NodeTreeSanitizer treeSanitizer}) {
     throw new UnsupportedError("Cannot invoke insertAdjacentHtml on SVG.");
   }
 
-  @DomName('Element.insertAdjacentElement')
   Element insertAdjacentElement(String where, Element element) {
     throw new UnsupportedError("Cannot invoke insertAdjacentElement on SVG.");
   }
@@ -4187,345 +3000,174 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGElement.abortEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> abortEvent =
       const EventStreamProvider<Event>('abort');
 
-  @DomName('SVGElement.blurEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> blurEvent =
       const EventStreamProvider<Event>('blur');
 
-  @DomName('SVGElement.canplayEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> canPlayEvent =
       const EventStreamProvider<Event>('canplay');
 
-  @DomName('SVGElement.canplaythroughEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> canPlayThroughEvent =
       const EventStreamProvider<Event>('canplaythrough');
 
-  @DomName('SVGElement.changeEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> changeEvent =
       const EventStreamProvider<Event>('change');
 
-  @DomName('SVGElement.clickEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> clickEvent =
       const EventStreamProvider<MouseEvent>('click');
 
-  @DomName('SVGElement.contextmenuEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> contextMenuEvent =
       const EventStreamProvider<MouseEvent>('contextmenu');
 
-  @DomName('SVGElement.dblclickEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> doubleClickEvent =
       const EventStreamProvider<Event>('dblclick');
 
-  @DomName('SVGElement.dragEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> dragEvent =
       const EventStreamProvider<MouseEvent>('drag');
 
-  @DomName('SVGElement.dragendEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> dragEndEvent =
       const EventStreamProvider<MouseEvent>('dragend');
 
-  @DomName('SVGElement.dragenterEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> dragEnterEvent =
       const EventStreamProvider<MouseEvent>('dragenter');
 
-  @DomName('SVGElement.dragleaveEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> dragLeaveEvent =
       const EventStreamProvider<MouseEvent>('dragleave');
 
-  @DomName('SVGElement.dragoverEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> dragOverEvent =
       const EventStreamProvider<MouseEvent>('dragover');
 
-  @DomName('SVGElement.dragstartEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> dragStartEvent =
       const EventStreamProvider<MouseEvent>('dragstart');
 
-  @DomName('SVGElement.dropEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> dropEvent =
       const EventStreamProvider<MouseEvent>('drop');
 
-  @DomName('SVGElement.durationchangeEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> durationChangeEvent =
       const EventStreamProvider<Event>('durationchange');
 
-  @DomName('SVGElement.emptiedEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> emptiedEvent =
       const EventStreamProvider<Event>('emptied');
 
-  @DomName('SVGElement.endedEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> endedEvent =
       const EventStreamProvider<Event>('ended');
 
-  @DomName('SVGElement.errorEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
-  @DomName('SVGElement.focusEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> focusEvent =
       const EventStreamProvider<Event>('focus');
 
-  @DomName('SVGElement.inputEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> inputEvent =
       const EventStreamProvider<Event>('input');
 
-  @DomName('SVGElement.invalidEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> invalidEvent =
       const EventStreamProvider<Event>('invalid');
 
-  @DomName('SVGElement.keydownEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<KeyboardEvent> keyDownEvent =
       const EventStreamProvider<KeyboardEvent>('keydown');
 
-  @DomName('SVGElement.keypressEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<KeyboardEvent> keyPressEvent =
       const EventStreamProvider<KeyboardEvent>('keypress');
 
-  @DomName('SVGElement.keyupEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<KeyboardEvent> keyUpEvent =
       const EventStreamProvider<KeyboardEvent>('keyup');
 
-  @DomName('SVGElement.loadEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> loadEvent =
       const EventStreamProvider<Event>('load');
 
-  @DomName('SVGElement.loadeddataEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> loadedDataEvent =
       const EventStreamProvider<Event>('loadeddata');
 
-  @DomName('SVGElement.loadedmetadataEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> loadedMetadataEvent =
       const EventStreamProvider<Event>('loadedmetadata');
 
-  @DomName('SVGElement.mousedownEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> mouseDownEvent =
       const EventStreamProvider<MouseEvent>('mousedown');
 
-  @DomName('SVGElement.mouseenterEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> mouseEnterEvent =
       const EventStreamProvider<MouseEvent>('mouseenter');
 
-  @DomName('SVGElement.mouseleaveEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> mouseLeaveEvent =
       const EventStreamProvider<MouseEvent>('mouseleave');
 
-  @DomName('SVGElement.mousemoveEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> mouseMoveEvent =
       const EventStreamProvider<MouseEvent>('mousemove');
 
-  @DomName('SVGElement.mouseoutEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> mouseOutEvent =
       const EventStreamProvider<MouseEvent>('mouseout');
 
-  @DomName('SVGElement.mouseoverEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> mouseOverEvent =
       const EventStreamProvider<MouseEvent>('mouseover');
 
-  @DomName('SVGElement.mouseupEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<MouseEvent> mouseUpEvent =
       const EventStreamProvider<MouseEvent>('mouseup');
 
-  @DomName('SVGElement.mousewheelEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<WheelEvent> mouseWheelEvent =
       const EventStreamProvider<WheelEvent>('mousewheel');
 
-  @DomName('SVGElement.pauseEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> pauseEvent =
       const EventStreamProvider<Event>('pause');
 
-  @DomName('SVGElement.playEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> playEvent =
       const EventStreamProvider<Event>('play');
 
-  @DomName('SVGElement.playingEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> playingEvent =
       const EventStreamProvider<Event>('playing');
 
-  @DomName('SVGElement.ratechangeEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> rateChangeEvent =
       const EventStreamProvider<Event>('ratechange');
 
-  @DomName('SVGElement.resetEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> resetEvent =
       const EventStreamProvider<Event>('reset');
 
-  @DomName('SVGElement.resizeEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> resizeEvent =
       const EventStreamProvider<Event>('resize');
 
-  @DomName('SVGElement.scrollEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> scrollEvent =
       const EventStreamProvider<Event>('scroll');
 
-  @DomName('SVGElement.seekedEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> seekedEvent =
       const EventStreamProvider<Event>('seeked');
 
-  @DomName('SVGElement.seekingEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> seekingEvent =
       const EventStreamProvider<Event>('seeking');
 
-  @DomName('SVGElement.selectEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> selectEvent =
       const EventStreamProvider<Event>('select');
 
-  @DomName('SVGElement.stalledEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> stalledEvent =
       const EventStreamProvider<Event>('stalled');
 
-  @DomName('SVGElement.submitEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> submitEvent =
       const EventStreamProvider<Event>('submit');
 
-  @DomName('SVGElement.suspendEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> suspendEvent =
       const EventStreamProvider<Event>('suspend');
 
-  @DomName('SVGElement.timeupdateEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> timeUpdateEvent =
       const EventStreamProvider<Event>('timeupdate');
 
-  @DomName('SVGElement.touchcancelEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<TouchEvent> touchCancelEvent =
       const EventStreamProvider<TouchEvent>('touchcancel');
 
-  @DomName('SVGElement.touchendEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<TouchEvent> touchEndEvent =
       const EventStreamProvider<TouchEvent>('touchend');
 
-  @DomName('SVGElement.touchmoveEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<TouchEvent> touchMoveEvent =
       const EventStreamProvider<TouchEvent>('touchmove');
 
-  @DomName('SVGElement.touchstartEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<TouchEvent> touchStartEvent =
       const EventStreamProvider<TouchEvent>('touchstart');
 
-  @DomName('SVGElement.volumechangeEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> volumeChangeEvent =
       const EventStreamProvider<Event>('volumechange');
 
-  @DomName('SVGElement.waitingEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> waitingEvent =
       const EventStreamProvider<Event>('waiting');
 
-  @DomName('SVGElement.wheelEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<WheelEvent> wheelEvent =
       const EventStreamProvider<WheelEvent>('wheel');
   /**
@@ -4539,8 +3181,6 @@
   AnimatedString get _svgClassName => JS("AnimatedString", "#.className", this);
 
   @JSName('ownerSVGElement')
-  @DomName('SVGElement.ownerSVGElement')
-  @DocsEditable()
   final SvgSvgElement ownerSvgElement;
 
   // Use implementation from Element.
@@ -4549,326 +3189,143 @@
   // Use implementation from Element.
   // final int tabIndex;
 
-  @DomName('SVGElement.viewportElement')
-  @DocsEditable()
   final SvgElement viewportElement;
 
-  @DomName('SVGElement.blur')
-  @DocsEditable()
-  @Experimental() // untriaged
   void blur() native;
 
-  @DomName('SVGElement.focus')
-  @DocsEditable()
-  @Experimental() // untriaged
   void focus() native;
 
   // From NoncedElement
 
-  @DomName('SVGElement.nonce')
-  @DocsEditable()
-  @Experimental() // untriaged
   String nonce;
 
-  @DomName('SVGElement.onabort')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onAbort => abortEvent.forElement(this);
 
-  @DomName('SVGElement.onblur')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onBlur => blurEvent.forElement(this);
 
-  @DomName('SVGElement.oncanplay')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onCanPlay => canPlayEvent.forElement(this);
 
-  @DomName('SVGElement.oncanplaythrough')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onCanPlayThrough =>
       canPlayThroughEvent.forElement(this);
 
-  @DomName('SVGElement.onchange')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onChange => changeEvent.forElement(this);
 
-  @DomName('SVGElement.onclick')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<MouseEvent> get onClick => clickEvent.forElement(this);
 
-  @DomName('SVGElement.oncontextmenu')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<MouseEvent> get onContextMenu =>
       contextMenuEvent.forElement(this);
 
-  @DomName('SVGElement.ondblclick')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onDoubleClick => doubleClickEvent.forElement(this);
 
-  @DomName('SVGElement.ondrag')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<MouseEvent> get onDrag => dragEvent.forElement(this);
 
-  @DomName('SVGElement.ondragend')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<MouseEvent> get onDragEnd => dragEndEvent.forElement(this);
 
-  @DomName('SVGElement.ondragenter')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<MouseEvent> get onDragEnter => dragEnterEvent.forElement(this);
 
-  @DomName('SVGElement.ondragleave')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<MouseEvent> get onDragLeave => dragLeaveEvent.forElement(this);
 
-  @DomName('SVGElement.ondragover')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<MouseEvent> get onDragOver => dragOverEvent.forElement(this);
 
-  @DomName('SVGElement.ondragstart')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<MouseEvent> get onDragStart => dragStartEvent.forElement(this);
 
-  @DomName('SVGElement.ondrop')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<MouseEvent> get onDrop => dropEvent.forElement(this);
 
-  @DomName('SVGElement.ondurationchange')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onDurationChange =>
       durationChangeEvent.forElement(this);
 
-  @DomName('SVGElement.onemptied')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onEmptied => emptiedEvent.forElement(this);
 
-  @DomName('SVGElement.onended')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onEnded => endedEvent.forElement(this);
 
-  @DomName('SVGElement.onerror')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onError => errorEvent.forElement(this);
 
-  @DomName('SVGElement.onfocus')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onFocus => focusEvent.forElement(this);
 
-  @DomName('SVGElement.oninput')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onInput => inputEvent.forElement(this);
 
-  @DomName('SVGElement.oninvalid')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onInvalid => invalidEvent.forElement(this);
 
-  @DomName('SVGElement.onkeydown')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<KeyboardEvent> get onKeyDown => keyDownEvent.forElement(this);
 
-  @DomName('SVGElement.onkeypress')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<KeyboardEvent> get onKeyPress => keyPressEvent.forElement(this);
 
-  @DomName('SVGElement.onkeyup')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<KeyboardEvent> get onKeyUp => keyUpEvent.forElement(this);
 
-  @DomName('SVGElement.onload')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onLoad => loadEvent.forElement(this);
 
-  @DomName('SVGElement.onloadeddata')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onLoadedData => loadedDataEvent.forElement(this);
 
-  @DomName('SVGElement.onloadedmetadata')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onLoadedMetadata =>
       loadedMetadataEvent.forElement(this);
 
-  @DomName('SVGElement.onmousedown')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<MouseEvent> get onMouseDown => mouseDownEvent.forElement(this);
 
-  @DomName('SVGElement.onmouseenter')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<MouseEvent> get onMouseEnter =>
       mouseEnterEvent.forElement(this);
 
-  @DomName('SVGElement.onmouseleave')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<MouseEvent> get onMouseLeave =>
       mouseLeaveEvent.forElement(this);
 
-  @DomName('SVGElement.onmousemove')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<MouseEvent> get onMouseMove => mouseMoveEvent.forElement(this);
 
-  @DomName('SVGElement.onmouseout')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<MouseEvent> get onMouseOut => mouseOutEvent.forElement(this);
 
-  @DomName('SVGElement.onmouseover')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<MouseEvent> get onMouseOver => mouseOverEvent.forElement(this);
 
-  @DomName('SVGElement.onmouseup')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<MouseEvent> get onMouseUp => mouseUpEvent.forElement(this);
 
-  @DomName('SVGElement.onmousewheel')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<WheelEvent> get onMouseWheel =>
       mouseWheelEvent.forElement(this);
 
-  @DomName('SVGElement.onpause')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onPause => pauseEvent.forElement(this);
 
-  @DomName('SVGElement.onplay')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onPlay => playEvent.forElement(this);
 
-  @DomName('SVGElement.onplaying')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onPlaying => playingEvent.forElement(this);
 
-  @DomName('SVGElement.onratechange')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onRateChange => rateChangeEvent.forElement(this);
 
-  @DomName('SVGElement.onreset')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onReset => resetEvent.forElement(this);
 
-  @DomName('SVGElement.onresize')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onResize => resizeEvent.forElement(this);
 
-  @DomName('SVGElement.onscroll')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onScroll => scrollEvent.forElement(this);
 
-  @DomName('SVGElement.onseeked')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onSeeked => seekedEvent.forElement(this);
 
-  @DomName('SVGElement.onseeking')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onSeeking => seekingEvent.forElement(this);
 
-  @DomName('SVGElement.onselect')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onSelect => selectEvent.forElement(this);
 
-  @DomName('SVGElement.onstalled')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onStalled => stalledEvent.forElement(this);
 
-  @DomName('SVGElement.onsubmit')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onSubmit => submitEvent.forElement(this);
 
-  @DomName('SVGElement.onsuspend')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onSuspend => suspendEvent.forElement(this);
 
-  @DomName('SVGElement.ontimeupdate')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onTimeUpdate => timeUpdateEvent.forElement(this);
 
-  @DomName('SVGElement.ontouchcancel')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<TouchEvent> get onTouchCancel =>
       touchCancelEvent.forElement(this);
 
-  @DomName('SVGElement.ontouchend')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<TouchEvent> get onTouchEnd => touchEndEvent.forElement(this);
 
-  @DomName('SVGElement.ontouchmove')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<TouchEvent> get onTouchMove => touchMoveEvent.forElement(this);
 
-  @DomName('SVGElement.ontouchstart')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<TouchEvent> get onTouchStart =>
       touchStartEvent.forElement(this);
 
-  @DomName('SVGElement.onvolumechange')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onVolumeChange => volumeChangeEvent.forElement(this);
 
-  @DomName('SVGElement.onwaiting')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<Event> get onWaiting => waitingEvent.forElement(this);
 
-  @DomName('SVGElement.onwheel')
-  @DocsEditable()
-  @Experimental() // untriaged
   ElementStream<WheelEvent> get onWheel => wheelEvent.forElement(this);
 }
 // Copyright (c) 2012, 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.
 
-@DomName('SVGSVGElement')
 @Unstable()
 @Native("SVGSVGElement")
 class SvgSvgElement extends GraphicsElement
@@ -4891,156 +3348,90 @@
    */
   SvgSvgElement.created() : super.created();
 
-  @DomName('SVGSVGElement.currentScale')
-  @DocsEditable()
   num currentScale;
 
-  @DomName('SVGSVGElement.currentTranslate')
-  @DocsEditable()
   final Point currentTranslate;
 
-  @DomName('SVGSVGElement.height')
-  @DocsEditable()
   final AnimatedLength height;
 
-  @DomName('SVGSVGElement.width')
-  @DocsEditable()
   final AnimatedLength width;
 
-  @DomName('SVGSVGElement.x')
-  @DocsEditable()
   final AnimatedLength x;
 
-  @DomName('SVGSVGElement.y')
-  @DocsEditable()
   final AnimatedLength y;
 
-  @DomName('SVGSVGElement.animationsPaused')
-  @DocsEditable()
   bool animationsPaused() native;
 
-  @DomName('SVGSVGElement.checkEnclosure')
-  @DocsEditable()
   bool checkEnclosure(SvgElement element, Rect rect) native;
 
-  @DomName('SVGSVGElement.checkIntersection')
-  @DocsEditable()
   bool checkIntersection(SvgElement element, Rect rect) native;
 
   @JSName('createSVGAngle')
-  @DomName('SVGSVGElement.createSVGAngle')
-  @DocsEditable()
   Angle createSvgAngle() native;
 
   @JSName('createSVGLength')
-  @DomName('SVGSVGElement.createSVGLength')
-  @DocsEditable()
   Length createSvgLength() native;
 
   @JSName('createSVGMatrix')
-  @DomName('SVGSVGElement.createSVGMatrix')
-  @DocsEditable()
   Matrix createSvgMatrix() native;
 
   @JSName('createSVGNumber')
-  @DomName('SVGSVGElement.createSVGNumber')
-  @DocsEditable()
   Number createSvgNumber() native;
 
   @JSName('createSVGPoint')
-  @DomName('SVGSVGElement.createSVGPoint')
-  @DocsEditable()
   Point createSvgPoint() native;
 
   @JSName('createSVGRect')
-  @DomName('SVGSVGElement.createSVGRect')
-  @DocsEditable()
   Rect createSvgRect() native;
 
   @JSName('createSVGTransform')
-  @DomName('SVGSVGElement.createSVGTransform')
-  @DocsEditable()
   Transform createSvgTransform() native;
 
   @JSName('createSVGTransformFromMatrix')
-  @DomName('SVGSVGElement.createSVGTransformFromMatrix')
-  @DocsEditable()
   Transform createSvgTransformFromMatrix(Matrix matrix) native;
 
-  @DomName('SVGSVGElement.deselectAll')
-  @DocsEditable()
   void deselectAll() native;
 
-  @DomName('SVGSVGElement.forceRedraw')
-  @DocsEditable()
   void forceRedraw() native;
 
-  @DomName('SVGSVGElement.getCurrentTime')
-  @DocsEditable()
   double getCurrentTime() native;
 
-  @DomName('SVGSVGElement.getElementById')
-  @DocsEditable()
   Element getElementById(String elementId) native;
 
-  @DomName('SVGSVGElement.getEnclosureList')
-  @DocsEditable()
   @Returns('NodeList|Null')
   @Creates('NodeList')
   List<Node> getEnclosureList(Rect rect, SvgElement referenceElement) native;
 
-  @DomName('SVGSVGElement.getIntersectionList')
-  @DocsEditable()
   @Returns('NodeList|Null')
   @Creates('NodeList')
   List<Node> getIntersectionList(Rect rect, SvgElement referenceElement) native;
 
-  @DomName('SVGSVGElement.pauseAnimations')
-  @DocsEditable()
   void pauseAnimations() native;
 
-  @DomName('SVGSVGElement.setCurrentTime')
-  @DocsEditable()
   void setCurrentTime(num seconds) native;
 
-  @DomName('SVGSVGElement.suspendRedraw')
-  @DocsEditable()
   int suspendRedraw(int maxWaitMilliseconds) native;
 
-  @DomName('SVGSVGElement.unpauseAnimations')
-  @DocsEditable()
   void unpauseAnimations() native;
 
-  @DomName('SVGSVGElement.unsuspendRedraw')
-  @DocsEditable()
   void unsuspendRedraw(int suspendHandleId) native;
 
-  @DomName('SVGSVGElement.unsuspendRedrawAll')
-  @DocsEditable()
   void unsuspendRedrawAll() native;
 
   // From SVGFitToViewBox
 
-  @DomName('SVGSVGElement.preserveAspectRatio')
-  @DocsEditable()
   final AnimatedPreserveAspectRatio preserveAspectRatio;
 
-  @DomName('SVGSVGElement.viewBox')
-  @DocsEditable()
   final AnimatedRect viewBox;
 
   // From SVGZoomAndPan
 
-  @DomName('SVGSVGElement.zoomAndPan')
-  @DocsEditable()
   int zoomAndPan;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGSwitchElement')
 @Unstable()
 @Native("SVGSwitchElement")
 class SwitchElement extends GraphicsElement {
@@ -5049,8 +3440,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGSwitchElement.SVGSwitchElement')
-  @DocsEditable()
   factory SwitchElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("switch");
   /**
@@ -5064,8 +3453,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.
 
-@DocsEditable()
-@DomName('SVGSymbolElement')
 @Unstable()
 @Native("SVGSymbolElement")
 class SymbolElement extends SvgElement implements FitToViewBox {
@@ -5074,8 +3461,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGSymbolElement.SVGSymbolElement')
-  @DocsEditable()
   factory SymbolElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("symbol");
   /**
@@ -5087,20 +3472,14 @@
 
   // From SVGFitToViewBox
 
-  @DomName('SVGSymbolElement.preserveAspectRatio')
-  @DocsEditable()
   final AnimatedPreserveAspectRatio preserveAspectRatio;
 
-  @DomName('SVGSymbolElement.viewBox')
-  @DocsEditable()
   final AnimatedRect viewBox;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGTSpanElement')
 @Unstable()
 @Native("SVGTSpanElement")
 class TSpanElement extends TextPositioningElement {
@@ -5109,8 +3488,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGTSpanElement.SVGTSpanElement')
-  @DocsEditable()
   factory TSpanElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("tspan");
   /**
@@ -5124,8 +3501,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.
 
-@DocsEditable()
-@DomName('SVGTests')
 @Unstable()
 abstract class Tests extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -5141,8 +3516,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.
 
-@DocsEditable()
-@DomName('SVGTextContentElement')
 @Unstable()
 @Native("SVGTextContentElement")
 class TextContentElement extends GraphicsElement {
@@ -5157,68 +3530,38 @@
    */
   TextContentElement.created() : super.created();
 
-  @DomName('SVGTextContentElement.LENGTHADJUST_SPACING')
-  @DocsEditable()
   static const int LENGTHADJUST_SPACING = 1;
 
-  @DomName('SVGTextContentElement.LENGTHADJUST_SPACINGANDGLYPHS')
-  @DocsEditable()
   static const int LENGTHADJUST_SPACINGANDGLYPHS = 2;
 
-  @DomName('SVGTextContentElement.LENGTHADJUST_UNKNOWN')
-  @DocsEditable()
   static const int LENGTHADJUST_UNKNOWN = 0;
 
-  @DomName('SVGTextContentElement.lengthAdjust')
-  @DocsEditable()
   final AnimatedEnumeration lengthAdjust;
 
-  @DomName('SVGTextContentElement.textLength')
-  @DocsEditable()
   final AnimatedLength textLength;
 
-  @DomName('SVGTextContentElement.getCharNumAtPosition')
-  @DocsEditable()
   int getCharNumAtPosition(Point point) native;
 
-  @DomName('SVGTextContentElement.getComputedTextLength')
-  @DocsEditable()
   double getComputedTextLength() native;
 
-  @DomName('SVGTextContentElement.getEndPositionOfChar')
-  @DocsEditable()
   Point getEndPositionOfChar(int charnum) native;
 
-  @DomName('SVGTextContentElement.getExtentOfChar')
-  @DocsEditable()
   Rect getExtentOfChar(int charnum) native;
 
-  @DomName('SVGTextContentElement.getNumberOfChars')
-  @DocsEditable()
   int getNumberOfChars() native;
 
-  @DomName('SVGTextContentElement.getRotationOfChar')
-  @DocsEditable()
   double getRotationOfChar(int charnum) native;
 
-  @DomName('SVGTextContentElement.getStartPositionOfChar')
-  @DocsEditable()
   Point getStartPositionOfChar(int charnum) native;
 
-  @DomName('SVGTextContentElement.getSubStringLength')
-  @DocsEditable()
   double getSubStringLength(int charnum, int nchars) native;
 
-  @DomName('SVGTextContentElement.selectSubString')
-  @DocsEditable()
   void selectSubString(int charnum, int nchars) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGTextElement')
 @Unstable()
 @Native("SVGTextElement")
 class TextElement extends TextPositioningElement {
@@ -5227,8 +3570,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGTextElement.SVGTextElement')
-  @DocsEditable()
   factory TextElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("text");
   /**
@@ -5242,8 +3583,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.
 
-@DocsEditable()
-@DomName('SVGTextPathElement')
 @Unstable()
 @Native("SVGTextPathElement")
 class TextPathElement extends TextContentElement implements UriReference {
@@ -5258,54 +3597,32 @@
    */
   TextPathElement.created() : super.created();
 
-  @DomName('SVGTextPathElement.TEXTPATH_METHODTYPE_ALIGN')
-  @DocsEditable()
   static const int TEXTPATH_METHODTYPE_ALIGN = 1;
 
-  @DomName('SVGTextPathElement.TEXTPATH_METHODTYPE_STRETCH')
-  @DocsEditable()
   static const int TEXTPATH_METHODTYPE_STRETCH = 2;
 
-  @DomName('SVGTextPathElement.TEXTPATH_METHODTYPE_UNKNOWN')
-  @DocsEditable()
   static const int TEXTPATH_METHODTYPE_UNKNOWN = 0;
 
-  @DomName('SVGTextPathElement.TEXTPATH_SPACINGTYPE_AUTO')
-  @DocsEditable()
   static const int TEXTPATH_SPACINGTYPE_AUTO = 1;
 
-  @DomName('SVGTextPathElement.TEXTPATH_SPACINGTYPE_EXACT')
-  @DocsEditable()
   static const int TEXTPATH_SPACINGTYPE_EXACT = 2;
 
-  @DomName('SVGTextPathElement.TEXTPATH_SPACINGTYPE_UNKNOWN')
-  @DocsEditable()
   static const int TEXTPATH_SPACINGTYPE_UNKNOWN = 0;
 
-  @DomName('SVGTextPathElement.method')
-  @DocsEditable()
   final AnimatedEnumeration method;
 
-  @DomName('SVGTextPathElement.spacing')
-  @DocsEditable()
   final AnimatedEnumeration spacing;
 
-  @DomName('SVGTextPathElement.startOffset')
-  @DocsEditable()
   final AnimatedLength startOffset;
 
   // From SVGURIReference
 
-  @DomName('SVGTextPathElement.href')
-  @DocsEditable()
   final AnimatedString href;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGTextPositioningElement')
 @Unstable()
 @Native("SVGTextPositioningElement")
 class TextPositioningElement extends TextContentElement {
@@ -5320,32 +3637,20 @@
    */
   TextPositioningElement.created() : super.created();
 
-  @DomName('SVGTextPositioningElement.dx')
-  @DocsEditable()
   final AnimatedLengthList dx;
 
-  @DomName('SVGTextPositioningElement.dy')
-  @DocsEditable()
   final AnimatedLengthList dy;
 
-  @DomName('SVGTextPositioningElement.rotate')
-  @DocsEditable()
   final AnimatedNumberList rotate;
 
-  @DomName('SVGTextPositioningElement.x')
-  @DocsEditable()
   final AnimatedLengthList x;
 
-  @DomName('SVGTextPositioningElement.y')
-  @DocsEditable()
   final AnimatedLengthList y;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGTitleElement')
 @Unstable()
 @Native("SVGTitleElement")
 class TitleElement extends SvgElement {
@@ -5354,8 +3659,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGTitleElement.SVGTitleElement')
-  @DocsEditable()
   factory TitleElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("title");
   /**
@@ -5369,8 +3672,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.
 
-@DocsEditable()
-@DomName('SVGTransform')
 @Unstable()
 @Native("SVGTransform")
 class Transform extends Interceptor {
@@ -5379,76 +3680,42 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGTransform.SVG_TRANSFORM_MATRIX')
-  @DocsEditable()
   static const int SVG_TRANSFORM_MATRIX = 1;
 
-  @DomName('SVGTransform.SVG_TRANSFORM_ROTATE')
-  @DocsEditable()
   static const int SVG_TRANSFORM_ROTATE = 4;
 
-  @DomName('SVGTransform.SVG_TRANSFORM_SCALE')
-  @DocsEditable()
   static const int SVG_TRANSFORM_SCALE = 3;
 
-  @DomName('SVGTransform.SVG_TRANSFORM_SKEWX')
-  @DocsEditable()
   static const int SVG_TRANSFORM_SKEWX = 5;
 
-  @DomName('SVGTransform.SVG_TRANSFORM_SKEWY')
-  @DocsEditable()
   static const int SVG_TRANSFORM_SKEWY = 6;
 
-  @DomName('SVGTransform.SVG_TRANSFORM_TRANSLATE')
-  @DocsEditable()
   static const int SVG_TRANSFORM_TRANSLATE = 2;
 
-  @DomName('SVGTransform.SVG_TRANSFORM_UNKNOWN')
-  @DocsEditable()
   static const int SVG_TRANSFORM_UNKNOWN = 0;
 
-  @DomName('SVGTransform.angle')
-  @DocsEditable()
   final num angle;
 
-  @DomName('SVGTransform.matrix')
-  @DocsEditable()
   final Matrix matrix;
 
-  @DomName('SVGTransform.type')
-  @DocsEditable()
   final int type;
 
-  @DomName('SVGTransform.setMatrix')
-  @DocsEditable()
   void setMatrix(Matrix matrix) native;
 
-  @DomName('SVGTransform.setRotate')
-  @DocsEditable()
   void setRotate(num angle, num cx, num cy) native;
 
-  @DomName('SVGTransform.setScale')
-  @DocsEditable()
   void setScale(num sx, num sy) native;
 
-  @DomName('SVGTransform.setSkewX')
-  @DocsEditable()
   void setSkewX(num angle) native;
 
-  @DomName('SVGTransform.setSkewY')
-  @DocsEditable()
   void setSkewY(num angle) native;
 
-  @DomName('SVGTransform.setTranslate')
-  @DocsEditable()
   void setTranslate(num tx, num ty) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGTransformList')
 @Unstable()
 @Native("SVGTransformList")
 class TransformList extends Interceptor
@@ -5459,13 +3726,8 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGTransformList.length')
-  @DocsEditable()
-  @Experimental() // untriaged
   int get length => JS("int", "#.length", this);
 
-  @DomName('SVGTransformList.numberOfItems')
-  @DocsEditable()
   final int numberOfItems;
 
   Transform operator [](int index) {
@@ -5511,54 +3773,31 @@
   Transform elementAt(int index) => this[index];
   // -- end List<Transform> mixins.
 
-  @DomName('SVGTransformList.__setter__')
-  @DocsEditable()
-  @Experimental() // untriaged
   void __setter__(int index, Transform newItem) native;
 
-  @DomName('SVGTransformList.appendItem')
-  @DocsEditable()
   Transform appendItem(Transform newItem) native;
 
-  @DomName('SVGTransformList.clear')
-  @DocsEditable()
   void clear() native;
 
-  @DomName('SVGTransformList.consolidate')
-  @DocsEditable()
   Transform consolidate() native;
 
   @JSName('createSVGTransformFromMatrix')
-  @DomName('SVGTransformList.createSVGTransformFromMatrix')
-  @DocsEditable()
   Transform createSvgTransformFromMatrix(Matrix matrix) native;
 
-  @DomName('SVGTransformList.getItem')
-  @DocsEditable()
   Transform getItem(int index) native;
 
-  @DomName('SVGTransformList.initialize')
-  @DocsEditable()
   Transform initialize(Transform newItem) native;
 
-  @DomName('SVGTransformList.insertItemBefore')
-  @DocsEditable()
   Transform insertItemBefore(Transform newItem, int index) native;
 
-  @DomName('SVGTransformList.removeItem')
-  @DocsEditable()
   Transform removeItem(int index) native;
 
-  @DomName('SVGTransformList.replaceItem')
-  @DocsEditable()
   Transform replaceItem(Transform newItem, int index) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGUnitTypes')
 @Unstable()
 @Native("SVGUnitTypes")
 class UnitTypes extends Interceptor {
@@ -5567,24 +3806,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGUnitTypes.SVG_UNIT_TYPE_OBJECTBOUNDINGBOX')
-  @DocsEditable()
   static const int SVG_UNIT_TYPE_OBJECTBOUNDINGBOX = 2;
 
-  @DomName('SVGUnitTypes.SVG_UNIT_TYPE_UNKNOWN')
-  @DocsEditable()
   static const int SVG_UNIT_TYPE_UNKNOWN = 0;
 
-  @DomName('SVGUnitTypes.SVG_UNIT_TYPE_USERSPACEONUSE')
-  @DocsEditable()
   static const int SVG_UNIT_TYPE_USERSPACEONUSE = 1;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGURIReference')
 @Unstable()
 abstract class UriReference extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -5598,8 +3829,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.
 
-@DocsEditable()
-@DomName('SVGUseElement')
 @Unstable()
 @Native("SVGUseElement")
 class UseElement extends GraphicsElement implements UriReference {
@@ -5608,8 +3837,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGUseElement.SVGUseElement')
-  @DocsEditable()
   factory UseElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("use");
   /**
@@ -5619,34 +3846,22 @@
    */
   UseElement.created() : super.created();
 
-  @DomName('SVGUseElement.height')
-  @DocsEditable()
   final AnimatedLength height;
 
-  @DomName('SVGUseElement.width')
-  @DocsEditable()
   final AnimatedLength width;
 
-  @DomName('SVGUseElement.x')
-  @DocsEditable()
   final AnimatedLength x;
 
-  @DomName('SVGUseElement.y')
-  @DocsEditable()
   final AnimatedLength y;
 
   // From SVGURIReference
 
-  @DomName('SVGUseElement.href')
-  @DocsEditable()
   final AnimatedString href;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGViewElement')
 @Unstable()
 @Native("SVGViewElement")
 class ViewElement extends SvgElement implements FitToViewBox, ZoomAndPan {
@@ -5655,8 +3870,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGViewElement.SVGViewElement')
-  @DocsEditable()
   factory ViewElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("view");
   /**
@@ -5668,26 +3881,18 @@
 
   // From SVGFitToViewBox
 
-  @DomName('SVGViewElement.preserveAspectRatio')
-  @DocsEditable()
   final AnimatedPreserveAspectRatio preserveAspectRatio;
 
-  @DomName('SVGViewElement.viewBox')
-  @DocsEditable()
   final AnimatedRect viewBox;
 
   // From SVGZoomAndPan
 
-  @DomName('SVGViewElement.zoomAndPan')
-  @DocsEditable()
   int zoomAndPan;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGZoomAndPan')
 @Unstable()
 abstract class ZoomAndPan extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -5695,16 +3900,10 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGZoomAndPan.SVG_ZOOMANDPAN_DISABLE')
-  @DocsEditable()
   static const int SVG_ZOOMANDPAN_DISABLE = 1;
 
-  @DomName('SVGZoomAndPan.SVG_ZOOMANDPAN_MAGNIFY')
-  @DocsEditable()
   static const int SVG_ZOOMANDPAN_MAGNIFY = 2;
 
-  @DomName('SVGZoomAndPan.SVG_ZOOMANDPAN_UNKNOWN')
-  @DocsEditable()
   static const int SVG_ZOOMANDPAN_UNKNOWN = 0;
 
   int zoomAndPan;
@@ -5713,8 +3912,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.
 
-@DocsEditable()
-@DomName('SVGGradientElement')
 @Unstable()
 @Native("SVGGradientElement")
 class _GradientElement extends SvgElement implements UriReference {
@@ -5729,46 +3926,28 @@
    */
   _GradientElement.created() : super.created();
 
-  @DomName('SVGGradientElement.SVG_SPREADMETHOD_PAD')
-  @DocsEditable()
   static const int SVG_SPREADMETHOD_PAD = 1;
 
-  @DomName('SVGGradientElement.SVG_SPREADMETHOD_REFLECT')
-  @DocsEditable()
   static const int SVG_SPREADMETHOD_REFLECT = 2;
 
-  @DomName('SVGGradientElement.SVG_SPREADMETHOD_REPEAT')
-  @DocsEditable()
   static const int SVG_SPREADMETHOD_REPEAT = 3;
 
-  @DomName('SVGGradientElement.SVG_SPREADMETHOD_UNKNOWN')
-  @DocsEditable()
   static const int SVG_SPREADMETHOD_UNKNOWN = 0;
 
-  @DomName('SVGGradientElement.gradientTransform')
-  @DocsEditable()
   final AnimatedTransformList gradientTransform;
 
-  @DomName('SVGGradientElement.gradientUnits')
-  @DocsEditable()
   final AnimatedEnumeration gradientUnits;
 
-  @DomName('SVGGradientElement.spreadMethod')
-  @DocsEditable()
   final AnimatedEnumeration spreadMethod;
 
   // From SVGURIReference
 
-  @DomName('SVGGradientElement.href')
-  @DocsEditable()
   final AnimatedString href;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SVGComponentTransferFunctionElement')
 @Unstable()
 @Native("SVGComponentTransferFunctionElement")
 abstract class _SVGComponentTransferFunctionElement extends SvgElement {
@@ -5787,9 +3966,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.
 
-@DocsEditable()
-@DomName('SVGFEDropShadowElement')
-@Experimental() // nonstandard
 @Native("SVGFEDropShadowElement")
 abstract class _SVGFEDropShadowElement extends SvgElement
     implements FilterPrimitiveStandardAttributes {
@@ -5812,8 +3988,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.
 
-@DocsEditable()
-@DomName('SVGMPathElement')
 @Native("SVGMPathElement")
 abstract class _SVGMPathElement extends SvgElement implements UriReference {
   // To suppress missing implicit constructor warnings.
@@ -5821,8 +3995,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SVGMPathElement.SVGMPathElement')
-  @DocsEditable()
   factory _SVGMPathElement() =>
       _SvgElementFactoryProvider.createSvgElement_tag("mpath");
   /**
diff --git a/sdk/lib/vmservice/running_isolates.dart b/sdk/lib/vmservice/running_isolates.dart
index 1b44ee3..4ef37d1 100644
--- a/sdk/lib/vmservice/running_isolates.dart
+++ b/sdk/lib/vmservice/running_isolates.dart
@@ -59,7 +59,7 @@
       return message.response;
     }
 
-    if (message.method == 'evaluateInFrame') {
+    if (message.method == 'evaluateInFrame' || message.method == 'evaluate') {
       return new _Evaluator(message, isolate, service).run();
     } else {
       return isolate.routeRequest(service, message);
@@ -76,12 +76,18 @@
 
   Future<Response> run() async {
     Response buildScopeResponse = await _buildScope();
-    dynamic responseJson = buildScopeResponse.decodeJson();
+    Map<String, dynamic> responseJson = buildScopeResponse.decodeJson();
+
+    if (responseJson.containsKey('error')) {
+      return new Response.from(encodeCompilationError(
+          _message, responseJson['error']['data']['details']));
+    }
+
     String kernelBase64;
     try {
       kernelBase64 = await _compileExpression(responseJson['result']);
     } catch (e) {
-      return Response.from(encodeCompilationError(_message, e.toString()));
+      return new Response.from(encodeCompilationError(_message, e.toString()));
     }
     return _evaluateCompiledExpression(kernelBase64);
   }
@@ -91,13 +97,12 @@
   VMService _service;
 
   Future<Response> _buildScope() {
+    Map<String, dynamic> params = _setupParams();
+    params['isolateId'] = _message.params['isolateId'];
     Map buildScopeParams = {
       'method': '_buildExpressionEvaluationScope',
       'id': _message.serial,
-      'params': {
-        'isolateId': _message.params['isolateId'],
-        'frameIndex': _message.params['frameIndex'],
-      },
+      'params': params,
     };
     if (_message.params['scope'] != null) {
       buildScopeParams['params']['scope'] = _message.params['scope'];
@@ -173,14 +178,13 @@
 
   Future<Response> _evaluateCompiledExpression(String kernelBase64) {
     if (kernelBase64.isNotEmpty) {
+      Map<String, dynamic> params = _setupParams();
+      params['isolateId'] = _message.params['isolateId'];
+      params['kernelBytes'] = kernelBase64;
       Map runParams = {
         'method': '_evaluateCompiledExpression',
         'id': _message.serial,
-        'params': {
-          'isolateId': _message.params['isolateId'],
-          'frameIndex': _message.params['frameIndex'],
-          'kernelBytes': kernelBase64,
-        },
+        'params': params,
       };
       if (_message.params['scope'] != null) {
         runParams['params']['scope'] = _message.params['scope'];
@@ -193,4 +197,13 @@
       return _isolate.routeRequest(_service, _message);
     }
   }
+
+  Map<String, dynamic> _setupParams() {
+    if (_message.method == 'evaluateInFrame') {
+      return <String, dynamic>{'frameIndex': _message.params['frameIndex']};
+    } else {
+      assert(_message.method == 'evaluate');
+      return <String, dynamic>{'targetId': _message.params['targetId']};
+    }
+  }
 }
diff --git a/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart b/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart
index c12fe76..4ded0e1 100644
--- a/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart
+++ b/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart
@@ -31,10 +31,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.
 
-@DocsEditable()
-@DomName('AnalyserNode')
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AnalyserNode
-@Experimental()
 @Native("AnalyserNode,RealtimeAnalyserNode")
 class AnalyserNode extends AudioNode {
   // To suppress missing implicit constructor warnings.
@@ -42,8 +38,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AnalyserNode.AnalyserNode')
-  @DocsEditable()
   factory AnalyserNode(BaseAudioContext context, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -56,51 +50,28 @@
   static AnalyserNode _create_2(context) =>
       JS('AnalyserNode', 'new AnalyserNode(#)', context);
 
-  @DomName('AnalyserNode.fftSize')
-  @DocsEditable()
   int fftSize;
 
-  @DomName('AnalyserNode.frequencyBinCount')
-  @DocsEditable()
   final int frequencyBinCount;
 
-  @DomName('AnalyserNode.maxDecibels')
-  @DocsEditable()
   num maxDecibels;
 
-  @DomName('AnalyserNode.minDecibels')
-  @DocsEditable()
   num minDecibels;
 
-  @DomName('AnalyserNode.smoothingTimeConstant')
-  @DocsEditable()
   num smoothingTimeConstant;
 
-  @DomName('AnalyserNode.getByteFrequencyData')
-  @DocsEditable()
   void getByteFrequencyData(Uint8List array) native;
 
-  @DomName('AnalyserNode.getByteTimeDomainData')
-  @DocsEditable()
   void getByteTimeDomainData(Uint8List array) native;
 
-  @DomName('AnalyserNode.getFloatFrequencyData')
-  @DocsEditable()
   void getFloatFrequencyData(Float32List array) native;
 
-  @DomName('AnalyserNode.getFloatTimeDomainData')
-  @DocsEditable()
-  @Experimental() // untriaged
   void getFloatTimeDomainData(Float32List array) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('AudioBuffer')
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioBuffer-section
-@Experimental()
 @Native("AudioBuffer")
 class AudioBuffer extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -108,8 +79,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AudioBuffer.AudioBuffer')
-  @DocsEditable()
   factory AudioBuffer(Map options) {
     var options_1 = convertDartToNative_Dictionary(options);
     return AudioBuffer._create_1(options_1);
@@ -117,48 +86,28 @@
   static AudioBuffer _create_1(options) =>
       JS('AudioBuffer', 'new AudioBuffer(#)', options);
 
-  @DomName('AudioBuffer.duration')
-  @DocsEditable()
   final num duration;
 
-  @DomName('AudioBuffer.length')
-  @DocsEditable()
   final int length;
 
-  @DomName('AudioBuffer.numberOfChannels')
-  @DocsEditable()
   final int numberOfChannels;
 
-  @DomName('AudioBuffer.sampleRate')
-  @DocsEditable()
   final num sampleRate;
 
-  @DomName('AudioBuffer.copyFromChannel')
-  @DocsEditable()
-  @Experimental() // untriaged
   void copyFromChannel(Float32List destination, int channelNumber,
       [int startInChannel]) native;
 
-  @DomName('AudioBuffer.copyToChannel')
-  @DocsEditable()
-  @Experimental() // untriaged
   void copyToChannel(Float32List source, int channelNumber,
       [int startInChannel]) native;
 
-  @DomName('AudioBuffer.getChannelData')
-  @DocsEditable()
   Float32List getChannelData(int channelIndex) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('AudioBufferSourceNode')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
-@Experimental()
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioBufferSourceNode-section
 @Native("AudioBufferSourceNode")
 class AudioBufferSourceNode extends AudioScheduledSourceNode {
   // To suppress missing implicit constructor warnings.
@@ -166,8 +115,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AudioBufferSourceNode.AudioBufferSourceNode')
-  @DocsEditable()
   factory AudioBufferSourceNode(BaseAudioContext context, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -183,44 +130,26 @@
   static AudioBufferSourceNode _create_2(context) =>
       JS('AudioBufferSourceNode', 'new AudioBufferSourceNode(#)', context);
 
-  @DomName('AudioBufferSourceNode.buffer')
-  @DocsEditable()
   AudioBuffer buffer;
 
-  @DomName('AudioBufferSourceNode.detune')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AudioParam detune;
 
-  @DomName('AudioBufferSourceNode.loop')
-  @DocsEditable()
   bool loop;
 
-  @DomName('AudioBufferSourceNode.loopEnd')
-  @DocsEditable()
   num loopEnd;
 
-  @DomName('AudioBufferSourceNode.loopStart')
-  @DocsEditable()
   num loopStart;
 
-  @DomName('AudioBufferSourceNode.playbackRate')
-  @DocsEditable()
   final AudioParam playbackRate;
 
-  @DomName('AudioBufferSourceNode.start')
-  @DocsEditable()
   void start([num when, num grainOffset, num grainDuration]) native;
 }
 // Copyright (c) 2012, 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.
 
-@DomName('AudioContext')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
-@Experimental()
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioContext-section
 @Native("AudioContext,webkitAudioContext")
 class AudioContext extends BaseAudioContext {
   // To suppress missing implicit constructor warnings.
@@ -232,32 +161,17 @@
   static bool get supported =>
       JS('bool', '!!(window.AudioContext || window.webkitAudioContext)');
 
-  @DomName('AudioContext.baseLatency')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num baseLatency;
 
-  @DomName('AudioContext.close')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future close() => promiseToFuture(JS("", "#.close()", this));
 
-  @DomName('AudioContext.getOutputTimestamp')
-  @DocsEditable()
-  @Experimental() // untriaged
   Map getOutputTimestamp() {
     return convertNativeToDart_Dictionary(_getOutputTimestamp_1());
   }
 
   @JSName('getOutputTimestamp')
-  @DomName('AudioContext.getOutputTimestamp')
-  @DocsEditable()
-  @Experimental() // untriaged
   _getOutputTimestamp_1() native;
 
-  @DomName('AudioContext.suspend')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future suspend() => promiseToFuture(JS("", "#.suspend()", this));
 
   factory AudioContext() => JS('AudioContext',
@@ -294,13 +208,10 @@
   }
 
   @JSName('decodeAudioData')
-  @DomName('AudioContext.decodeAudioData')
-  @DocsEditable()
   Future _decodeAudioData(ByteBuffer audioData,
       [DecodeSuccessCallback successCallback,
       DecodeErrorCallback errorCallback]) native;
 
-  @DomName('AudioContext.decodeAudioData')
   Future<AudioBuffer> decodeAudioData(ByteBuffer audioData,
       [DecodeSuccessCallback successCallback,
       DecodeErrorCallback errorCallback]) {
@@ -325,10 +236,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.
 
-@DocsEditable()
-@DomName('AudioDestinationNode')
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioDestinationNode-section
-@Experimental()
 @Native("AudioDestinationNode")
 class AudioDestinationNode extends AudioNode {
   // To suppress missing implicit constructor warnings.
@@ -336,18 +243,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AudioDestinationNode.maxChannelCount')
-  @DocsEditable()
   final int maxChannelCount;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('AudioListener')
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioListener-section
-@Experimental()
 @Native("AudioListener")
 class AudioListener extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -355,66 +256,32 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AudioListener.forwardX')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AudioParam forwardX;
 
-  @DomName('AudioListener.forwardY')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AudioParam forwardY;
 
-  @DomName('AudioListener.forwardZ')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AudioParam forwardZ;
 
-  @DomName('AudioListener.positionX')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AudioParam positionX;
 
-  @DomName('AudioListener.positionY')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AudioParam positionY;
 
-  @DomName('AudioListener.positionZ')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AudioParam positionZ;
 
-  @DomName('AudioListener.upX')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AudioParam upX;
 
-  @DomName('AudioListener.upY')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AudioParam upY;
 
-  @DomName('AudioListener.upZ')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AudioParam upZ;
 
-  @DomName('AudioListener.setOrientation')
-  @DocsEditable()
   void setOrientation(num x, num y, num z, num xUp, num yUp, num zUp) native;
 
-  @DomName('AudioListener.setPosition')
-  @DocsEditable()
   void setPosition(num x, num y, num z) native;
 }
 // Copyright (c) 2012, 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.
 
-@DomName('AudioNode')
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioNode-section
-@Experimental()
 @Native("AudioNode")
 class AudioNode extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -422,45 +289,27 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AudioNode.channelCount')
-  @DocsEditable()
   int channelCount;
 
-  @DomName('AudioNode.channelCountMode')
-  @DocsEditable()
   String channelCountMode;
 
-  @DomName('AudioNode.channelInterpretation')
-  @DocsEditable()
   String channelInterpretation;
 
-  @DomName('AudioNode.context')
-  @DocsEditable()
   final BaseAudioContext context;
 
-  @DomName('AudioNode.numberOfInputs')
-  @DocsEditable()
   final int numberOfInputs;
 
-  @DomName('AudioNode.numberOfOutputs')
-  @DocsEditable()
   final int numberOfOutputs;
 
   @JSName('connect')
-  @DomName('AudioNode.connect')
-  @DocsEditable()
   AudioNode _connect(destination, [int output, int input]) native;
 
-  @DomName('AudioNode.disconnect')
-  @DocsEditable()
   void disconnect([destination_OR_output, int output, int input]) native;
 
-  @DomName('AudioNode.connect')
   void connectNode(AudioNode destination, [int output = 0, int input = 0]) {
     _connect(destination, output, input);
   }
 
-  @DomName('AudioNode.connect')
   void connectParam(AudioParam destination, [int output = 0]) {
     _connect(destination, output);
   }
@@ -469,10 +318,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.
 
-@DocsEditable()
-@DomName('AudioParam')
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioParam
-@Experimental()
 @Native("AudioParam")
 class AudioParam extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -480,49 +325,26 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AudioParam.defaultValue')
-  @DocsEditable()
   final num defaultValue;
 
-  @DomName('AudioParam.maxValue')
-  @DocsEditable()
   final num maxValue;
 
-  @DomName('AudioParam.minValue')
-  @DocsEditable()
   final num minValue;
 
-  @DomName('AudioParam.value')
-  @DocsEditable()
   num value;
 
-  @DomName('AudioParam.cancelAndHoldAtTime')
-  @DocsEditable()
-  @Experimental() // untriaged
   AudioParam cancelAndHoldAtTime(num startTime) native;
 
-  @DomName('AudioParam.cancelScheduledValues')
-  @DocsEditable()
   AudioParam cancelScheduledValues(num startTime) native;
 
-  @DomName('AudioParam.exponentialRampToValueAtTime')
-  @DocsEditable()
   AudioParam exponentialRampToValueAtTime(num value, num time) native;
 
-  @DomName('AudioParam.linearRampToValueAtTime')
-  @DocsEditable()
   AudioParam linearRampToValueAtTime(num value, num time) native;
 
-  @DomName('AudioParam.setTargetAtTime')
-  @DocsEditable()
   AudioParam setTargetAtTime(num target, num time, num timeConstant) native;
 
-  @DomName('AudioParam.setValueAtTime')
-  @DocsEditable()
   AudioParam setValueAtTime(num value, num time) native;
 
-  @DomName('AudioParam.setValueCurveAtTime')
-  @DocsEditable()
   AudioParam setValueCurveAtTime(List<num> values, num time, num duration)
       native;
 }
@@ -530,9 +352,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.
 
-@DocsEditable()
-@DomName('AudioParamMap')
-@Experimental() // untriaged
 @Native("AudioParamMap")
 class AudioParamMap extends Interceptor with MapMixin<String, dynamic> {
   // To suppress missing implicit constructor warnings.
@@ -601,10 +420,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.
 
-@DocsEditable()
-@DomName('AudioProcessingEvent')
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioProcessingEvent-section
-@Experimental()
 @Native("AudioProcessingEvent")
 class AudioProcessingEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -612,8 +427,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AudioProcessingEvent.AudioProcessingEvent')
-  @DocsEditable()
   factory AudioProcessingEvent(String type, Map eventInitDict) {
     var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
     return AudioProcessingEvent._create_1(type, eventInitDict_1);
@@ -624,26 +437,16 @@
       type,
       eventInitDict);
 
-  @DomName('AudioProcessingEvent.inputBuffer')
-  @DocsEditable()
   final AudioBuffer inputBuffer;
 
-  @DomName('AudioProcessingEvent.outputBuffer')
-  @DocsEditable()
   final AudioBuffer outputBuffer;
 
-  @DomName('AudioProcessingEvent.playbackTime')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num playbackTime;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('AudioScheduledSourceNode')
-@Experimental() // untriaged
 @Native("AudioScheduledSourceNode")
 class AudioScheduledSourceNode extends AudioNode {
   // To suppress missing implicit constructor warnings.
@@ -651,35 +454,20 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AudioScheduledSourceNode.endedEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> endedEvent =
       const EventStreamProvider<Event>('ended');
 
   @JSName('start')
-  @DomName('AudioScheduledSourceNode.start')
-  @DocsEditable()
-  @Experimental() // untriaged
   void start2([num when]) native;
 
-  @DomName('AudioScheduledSourceNode.stop')
-  @DocsEditable()
-  @Experimental() // untriaged
   void stop([num when]) native;
 
-  @DomName('AudioScheduledSourceNode.onended')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onEnded => endedEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('AudioTrack')
-@Experimental() // untriaged
 @Native("AudioTrack")
 class AudioTrack extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -687,43 +475,22 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AudioTrack.enabled')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool enabled;
 
-  @DomName('AudioTrack.id')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String id;
 
-  @DomName('AudioTrack.kind')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String kind;
 
-  @DomName('AudioTrack.label')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String label;
 
-  @DomName('AudioTrack.language')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String language;
 
-  @DomName('AudioTrack.sourceBuffer')
-  @DocsEditable()
-  @Experimental() // untriaged
   final SourceBuffer sourceBuffer;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('AudioTrackList')
-@Experimental() // untriaged
 @Native("AudioTrackList")
 class AudioTrackList extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -731,39 +498,21 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AudioTrackList.changeEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<Event> changeEvent =
       const EventStreamProvider<Event>('change');
 
-  @DomName('AudioTrackList.length')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int length;
 
-  @DomName('AudioTrackList.__getter__')
-  @DocsEditable()
-  @Experimental() // untriaged
   AudioTrack __getter__(int index) native;
 
-  @DomName('AudioTrackList.getTrackById')
-  @DocsEditable()
-  @Experimental() // untriaged
   AudioTrack getTrackById(String id) native;
 
-  @DomName('AudioTrackList.onchange')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<Event> get onChange => changeEvent.forTarget(this);
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('AudioWorkletGlobalScope')
-@Experimental() // untriaged
 @Native("AudioWorkletGlobalScope")
 class AudioWorkletGlobalScope extends WorkletGlobalScope {
   // To suppress missing implicit constructor warnings.
@@ -771,28 +520,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AudioWorkletGlobalScope.currentTime')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num currentTime;
 
-  @DomName('AudioWorkletGlobalScope.sampleRate')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num sampleRate;
 
-  @DomName('AudioWorkletGlobalScope.registerProcessor')
-  @DocsEditable()
-  @Experimental() // untriaged
   void registerProcessor(String name, Object processorConstructor) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('AudioWorkletNode')
-@Experimental() // untriaged
 @Native("AudioWorkletNode")
 class AudioWorkletNode extends AudioNode {
   // To suppress missing implicit constructor warnings.
@@ -800,8 +537,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AudioWorkletNode.AudioWorkletNode')
-  @DocsEditable()
   factory AudioWorkletNode(BaseAudioContext context, String name,
       [Map options]) {
     if (options != null) {
@@ -819,18 +554,12 @@
   static AudioWorkletNode _create_2(context, name) =>
       JS('AudioWorkletNode', 'new AudioWorkletNode(#,#)', context, name);
 
-  @DomName('AudioWorkletNode.parameters')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AudioParamMap parameters;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('AudioWorkletProcessor')
-@Experimental() // untriaged
 @Native("AudioWorkletProcessor")
 class AudioWorkletProcessor extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -842,9 +571,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.
 
-@DocsEditable()
-@DomName('BaseAudioContext')
-@Experimental() // untriaged
 @Native("BaseAudioContext")
 class BaseAudioContext extends EventTarget {
   // To suppress missing implicit constructor warnings.
@@ -852,124 +578,55 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('BaseAudioContext.currentTime')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num currentTime;
 
-  @DomName('BaseAudioContext.destination')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AudioDestinationNode destination;
 
-  @DomName('BaseAudioContext.listener')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AudioListener listener;
 
-  @DomName('BaseAudioContext.sampleRate')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num sampleRate;
 
-  @DomName('BaseAudioContext.state')
-  @DocsEditable()
-  @Experimental() // untriaged
   final String state;
 
-  @DomName('BaseAudioContext.createAnalyser')
-  @DocsEditable()
-  @Experimental() // untriaged
   AnalyserNode createAnalyser() native;
 
-  @DomName('BaseAudioContext.createBiquadFilter')
-  @DocsEditable()
-  @Experimental() // untriaged
   BiquadFilterNode createBiquadFilter() native;
 
-  @DomName('BaseAudioContext.createBuffer')
-  @DocsEditable()
-  @Experimental() // untriaged
   AudioBuffer createBuffer(
       int numberOfChannels, int numberOfFrames, num sampleRate) native;
 
-  @DomName('BaseAudioContext.createBufferSource')
-  @DocsEditable()
-  @Experimental() // untriaged
   AudioBufferSourceNode createBufferSource() native;
 
-  @DomName('BaseAudioContext.createChannelMerger')
-  @DocsEditable()
-  @Experimental() // untriaged
   ChannelMergerNode createChannelMerger([int numberOfInputs]) native;
 
-  @DomName('BaseAudioContext.createChannelSplitter')
-  @DocsEditable()
-  @Experimental() // untriaged
   ChannelSplitterNode createChannelSplitter([int numberOfOutputs]) native;
 
-  @DomName('BaseAudioContext.createConstantSource')
-  @DocsEditable()
-  @Experimental() // untriaged
   ConstantSourceNode createConstantSource() native;
 
-  @DomName('BaseAudioContext.createConvolver')
-  @DocsEditable()
-  @Experimental() // untriaged
   ConvolverNode createConvolver() native;
 
-  @DomName('BaseAudioContext.createDelay')
-  @DocsEditable()
-  @Experimental() // untriaged
   DelayNode createDelay([num maxDelayTime]) native;
 
-  @DomName('BaseAudioContext.createDynamicsCompressor')
-  @DocsEditable()
-  @Experimental() // untriaged
   DynamicsCompressorNode createDynamicsCompressor() native;
 
-  @DomName('BaseAudioContext.createGain')
-  @DocsEditable()
-  @Experimental() // untriaged
   GainNode createGain() native;
 
   @JSName('createIIRFilter')
-  @DomName('BaseAudioContext.createIIRFilter')
-  @DocsEditable()
-  @Experimental() // untriaged
   IirFilterNode createIirFilter(List<num> feedForward, List<num> feedBack)
       native;
 
-  @DomName('BaseAudioContext.createMediaElementSource')
-  @DocsEditable()
-  @Experimental() // untriaged
   MediaElementAudioSourceNode createMediaElementSource(
       MediaElement mediaElement) native;
 
-  @DomName('BaseAudioContext.createMediaStreamDestination')
-  @DocsEditable()
-  @Experimental() // untriaged
   MediaStreamAudioDestinationNode createMediaStreamDestination() native;
 
-  @DomName('BaseAudioContext.createMediaStreamSource')
-  @DocsEditable()
-  @Experimental() // untriaged
   MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream)
       native;
 
-  @DomName('BaseAudioContext.createOscillator')
-  @DocsEditable()
-  @Experimental() // untriaged
   OscillatorNode createOscillator() native;
 
-  @DomName('BaseAudioContext.createPanner')
-  @DocsEditable()
-  @Experimental() // untriaged
   PannerNode createPanner() native;
 
-  @DomName('BaseAudioContext.createPeriodicWave')
-  @DocsEditable()
-  @Experimental() // untriaged
   PeriodicWave createPeriodicWave(List<num> real, List<num> imag,
       [Map options]) {
     if (options != null) {
@@ -980,57 +637,32 @@
   }
 
   @JSName('createPeriodicWave')
-  @DomName('BaseAudioContext.createPeriodicWave')
-  @DocsEditable()
-  @Experimental() // untriaged
   PeriodicWave _createPeriodicWave_1(List<num> real, List<num> imag, options)
       native;
   @JSName('createPeriodicWave')
-  @DomName('BaseAudioContext.createPeriodicWave')
-  @DocsEditable()
-  @Experimental() // untriaged
   PeriodicWave _createPeriodicWave_2(List<num> real, List<num> imag) native;
 
-  @DomName('BaseAudioContext.createScriptProcessor')
-  @DocsEditable()
-  @Experimental() // untriaged
   ScriptProcessorNode createScriptProcessor(
       [int bufferSize,
       int numberOfInputChannels,
       int numberOfOutputChannels]) native;
 
-  @DomName('BaseAudioContext.createStereoPanner')
-  @DocsEditable()
-  @Experimental() // untriaged
   StereoPannerNode createStereoPanner() native;
 
-  @DomName('BaseAudioContext.createWaveShaper')
-  @DocsEditable()
-  @Experimental() // untriaged
   WaveShaperNode createWaveShaper() native;
 
-  @DomName('BaseAudioContext.decodeAudioData')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<AudioBuffer> decodeAudioData(ByteBuffer audioData,
           [DecodeSuccessCallback successCallback,
           DecodeErrorCallback errorCallback]) =>
       promiseToFuture<AudioBuffer>(JS("", "#.decodeAudioData(#, #, #)", this,
           audioData, successCallback, errorCallback));
 
-  @DomName('BaseAudioContext.resume')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future resume() => promiseToFuture(JS("", "#.resume()", this));
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('BiquadFilterNode')
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#BiquadFilterNode-section
-@Experimental()
 @Native("BiquadFilterNode")
 class BiquadFilterNode extends AudioNode {
   // To suppress missing implicit constructor warnings.
@@ -1038,8 +670,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('BiquadFilterNode.BiquadFilterNode')
-  @DocsEditable()
   factory BiquadFilterNode(BaseAudioContext context, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -1052,28 +682,16 @@
   static BiquadFilterNode _create_2(context) =>
       JS('BiquadFilterNode', 'new BiquadFilterNode(#)', context);
 
-  @DomName('BiquadFilterNode.Q')
-  @DocsEditable()
   final AudioParam Q;
 
-  @DomName('BiquadFilterNode.detune')
-  @DocsEditable()
   final AudioParam detune;
 
-  @DomName('BiquadFilterNode.frequency')
-  @DocsEditable()
   final AudioParam frequency;
 
-  @DomName('BiquadFilterNode.gain')
-  @DocsEditable()
   final AudioParam gain;
 
-  @DomName('BiquadFilterNode.type')
-  @DocsEditable()
   String type;
 
-  @DomName('BiquadFilterNode.getFrequencyResponse')
-  @DocsEditable()
   void getFrequencyResponse(Float32List frequencyHz, Float32List magResponse,
       Float32List phaseResponse) native;
 }
@@ -1081,10 +699,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.
 
-@DocsEditable()
-@DomName('ChannelMergerNode')
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#ChannelMergerNode-section
-@Experimental()
 @Native("ChannelMergerNode,AudioChannelMerger")
 class ChannelMergerNode extends AudioNode {
   // To suppress missing implicit constructor warnings.
@@ -1092,8 +706,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ChannelMergerNode.ChannelMergerNode')
-  @DocsEditable()
   factory ChannelMergerNode(BaseAudioContext context, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -1110,10 +722,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.
 
-@DocsEditable()
-@DomName('ChannelSplitterNode')
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#ChannelSplitterNode-section
-@Experimental()
 @Native("ChannelSplitterNode,AudioChannelSplitter")
 class ChannelSplitterNode extends AudioNode {
   // To suppress missing implicit constructor warnings.
@@ -1121,8 +729,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ChannelSplitterNode.ChannelSplitterNode')
-  @DocsEditable()
   factory ChannelSplitterNode(BaseAudioContext context, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -1139,9 +745,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.
 
-@DocsEditable()
-@DomName('ConstantSourceNode')
-@Experimental() // untriaged
 @Native("ConstantSourceNode")
 class ConstantSourceNode extends AudioScheduledSourceNode {
   // To suppress missing implicit constructor warnings.
@@ -1149,8 +752,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ConstantSourceNode.ConstantSourceNode')
-  @DocsEditable()
   factory ConstantSourceNode(BaseAudioContext context, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -1163,19 +764,12 @@
   static ConstantSourceNode _create_2(context) =>
       JS('ConstantSourceNode', 'new ConstantSourceNode(#)', context);
 
-  @DomName('ConstantSourceNode.offset')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AudioParam offset;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('ConvolverNode')
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#ConvolverNode
-@Experimental()
 @Native("ConvolverNode")
 class ConvolverNode extends AudioNode {
   // To suppress missing implicit constructor warnings.
@@ -1183,8 +777,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ConvolverNode.ConvolverNode')
-  @DocsEditable()
   factory ConvolverNode(BaseAudioContext context, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -1197,22 +789,14 @@
   static ConvolverNode _create_2(context) =>
       JS('ConvolverNode', 'new ConvolverNode(#)', context);
 
-  @DomName('ConvolverNode.buffer')
-  @DocsEditable()
   AudioBuffer buffer;
 
-  @DomName('ConvolverNode.normalize')
-  @DocsEditable()
   bool normalize;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('DelayNode')
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#DelayNode
-@Experimental()
 @Native("DelayNode")
 class DelayNode extends AudioNode {
   // To suppress missing implicit constructor warnings.
@@ -1220,8 +804,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DelayNode.DelayNode')
-  @DocsEditable()
   factory DelayNode(BaseAudioContext context, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -1234,18 +816,12 @@
   static DelayNode _create_2(context) =>
       JS('DelayNode', 'new DelayNode(#)', context);
 
-  @DomName('DelayNode.delayTime')
-  @DocsEditable()
   final AudioParam delayTime;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('DynamicsCompressorNode')
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#DynamicsCompressorNode
-@Experimental()
 @Native("DynamicsCompressorNode")
 class DynamicsCompressorNode extends AudioNode {
   // To suppress missing implicit constructor warnings.
@@ -1253,8 +829,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('DynamicsCompressorNode.DynamicsCompressorNode')
-  @DocsEditable()
   factory DynamicsCompressorNode(BaseAudioContext context, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -1270,38 +844,22 @@
   static DynamicsCompressorNode _create_2(context) =>
       JS('DynamicsCompressorNode', 'new DynamicsCompressorNode(#)', context);
 
-  @DomName('DynamicsCompressorNode.attack')
-  @DocsEditable()
   final AudioParam attack;
 
-  @DomName('DynamicsCompressorNode.knee')
-  @DocsEditable()
   final AudioParam knee;
 
-  @DomName('DynamicsCompressorNode.ratio')
-  @DocsEditable()
   final AudioParam ratio;
 
-  @DomName('DynamicsCompressorNode.reduction')
-  @DocsEditable()
   final num reduction;
 
-  @DomName('DynamicsCompressorNode.release')
-  @DocsEditable()
   final AudioParam release;
 
-  @DomName('DynamicsCompressorNode.threshold')
-  @DocsEditable()
   final AudioParam threshold;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('GainNode')
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#GainNode
-@Experimental()
 @Native("GainNode,AudioGainNode")
 class GainNode extends AudioNode {
   // To suppress missing implicit constructor warnings.
@@ -1309,8 +867,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('GainNode.GainNode')
-  @DocsEditable()
   factory GainNode(BaseAudioContext context, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -1323,17 +879,12 @@
   static GainNode _create_2(context) =>
       JS('GainNode', 'new GainNode(#)', context);
 
-  @DomName('GainNode.gain')
-  @DocsEditable()
   final AudioParam gain;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('IIRFilterNode')
-@Experimental() // untriaged
 @Native("IIRFilterNode")
 class IirFilterNode extends AudioNode {
   // To suppress missing implicit constructor warnings.
@@ -1341,8 +892,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('IIRFilterNode.IIRFilterNode')
-  @DocsEditable()
   factory IirFilterNode(BaseAudioContext context, Map options) {
     var options_1 = convertDartToNative_Dictionary(options);
     return IirFilterNode._create_1(context, options_1);
@@ -1350,9 +899,6 @@
   static IirFilterNode _create_1(context, options) =>
       JS('IirFilterNode', 'new IIRFilterNode(#,#)', context, options);
 
-  @DomName('IIRFilterNode.getFrequencyResponse')
-  @DocsEditable()
-  @Experimental() // untriaged
   void getFrequencyResponse(Float32List frequencyHz, Float32List magResponse,
       Float32List phaseResponse) native;
 }
@@ -1360,10 +906,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.
 
-@DocsEditable()
-@DomName('MediaElementAudioSourceNode')
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#MediaElementAudioSourceNode
-@Experimental()
 @Native("MediaElementAudioSourceNode")
 class MediaElementAudioSourceNode extends AudioNode {
   // To suppress missing implicit constructor warnings.
@@ -1371,8 +913,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MediaElementAudioSourceNode.MediaElementAudioSourceNode')
-  @DocsEditable()
   factory MediaElementAudioSourceNode(BaseAudioContext context, Map options) {
     var options_1 = convertDartToNative_Dictionary(options);
     return MediaElementAudioSourceNode._create_1(context, options_1);
@@ -1383,19 +923,12 @@
       context,
       options);
 
-  @DomName('MediaElementAudioSourceNode.mediaElement')
-  @DocsEditable()
-  @Experimental() // non-standard
   final MediaElement mediaElement;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MediaStreamAudioDestinationNode')
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#MediaStreamAudioDestinationNode
-@Experimental()
 @Native("MediaStreamAudioDestinationNode")
 class MediaStreamAudioDestinationNode extends AudioNode {
   // To suppress missing implicit constructor warnings.
@@ -1403,8 +936,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MediaStreamAudioDestinationNode.MediaStreamAudioDestinationNode')
-  @DocsEditable()
   factory MediaStreamAudioDestinationNode(BaseAudioContext context,
       [Map options]) {
     if (options != null) {
@@ -1423,18 +954,12 @@
       'new MediaStreamAudioDestinationNode(#)',
       context);
 
-  @DomName('MediaStreamAudioDestinationNode.stream')
-  @DocsEditable()
   final MediaStream stream;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('MediaStreamAudioSourceNode')
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#MediaStreamAudioSourceNode
-@Experimental()
 @Native("MediaStreamAudioSourceNode")
 class MediaStreamAudioSourceNode extends AudioNode {
   // To suppress missing implicit constructor warnings.
@@ -1442,8 +967,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MediaStreamAudioSourceNode.MediaStreamAudioSourceNode')
-  @DocsEditable()
   factory MediaStreamAudioSourceNode(BaseAudioContext context, Map options) {
     var options_1 = convertDartToNative_Dictionary(options);
     return MediaStreamAudioSourceNode._create_1(context, options_1);
@@ -1454,18 +977,12 @@
       context,
       options);
 
-  @DomName('MediaStreamAudioSourceNode.mediaStream')
-  @DocsEditable()
   final MediaStream mediaStream;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('OfflineAudioCompletionEvent')
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#OfflineAudioCompletionEvent-section
-@Experimental()
 @Native("OfflineAudioCompletionEvent")
 class OfflineAudioCompletionEvent extends Event {
   // To suppress missing implicit constructor warnings.
@@ -1473,8 +990,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('OfflineAudioCompletionEvent.OfflineAudioCompletionEvent')
-  @DocsEditable()
   factory OfflineAudioCompletionEvent(String type, Map eventInitDict) {
     var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
     return OfflineAudioCompletionEvent._create_1(type, eventInitDict_1);
@@ -1485,18 +1000,12 @@
       type,
       eventInitDict);
 
-  @DomName('OfflineAudioCompletionEvent.renderedBuffer')
-  @DocsEditable()
   final AudioBuffer renderedBuffer;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('OfflineAudioContext')
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#OfflineAudioContext-section
-@Experimental()
 @Native("OfflineAudioContext")
 class OfflineAudioContext extends BaseAudioContext {
   // To suppress missing implicit constructor warnings.
@@ -1504,8 +1013,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('OfflineAudioContext.OfflineAudioContext')
-  @DocsEditable()
   factory OfflineAudioContext(numberOfChannels_OR_options,
       [int numberOfFrames, num sampleRate]) {
     if ((sampleRate is num) &&
@@ -1532,21 +1039,12 @@
       'new OfflineAudioContext(#)',
       numberOfChannels_OR_options);
 
-  @DomName('OfflineAudioContext.length')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int length;
 
-  @DomName('OfflineAudioContext.startRendering')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future<AudioBuffer> startRendering() =>
       promiseToFuture<AudioBuffer>(JS("", "#.startRendering()", this));
 
   @JSName('suspend')
-  @DomName('OfflineAudioContext.suspend')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future suspendFor(num suspendTime) =>
       promiseToFuture(JS("", "#.suspendFor(#)", this, suspendTime));
 }
@@ -1554,10 +1052,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.
 
-@DocsEditable()
-@DomName('OscillatorNode')
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#dfn-OscillatorNode
-@Experimental()
 @Native("OscillatorNode,Oscillator")
 class OscillatorNode extends AudioScheduledSourceNode {
   // To suppress missing implicit constructor warnings.
@@ -1565,8 +1059,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('OscillatorNode.OscillatorNode')
-  @DocsEditable()
   factory OscillatorNode(BaseAudioContext context, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -1579,31 +1071,18 @@
   static OscillatorNode _create_2(context) =>
       JS('OscillatorNode', 'new OscillatorNode(#)', context);
 
-  @DomName('OscillatorNode.detune')
-  @DocsEditable()
   final AudioParam detune;
 
-  @DomName('OscillatorNode.frequency')
-  @DocsEditable()
   final AudioParam frequency;
 
-  @DomName('OscillatorNode.type')
-  @DocsEditable()
   String type;
 
-  @DomName('OscillatorNode.setPeriodicWave')
-  @DocsEditable()
-  @Experimental() // untriaged
   void setPeriodicWave(PeriodicWave periodicWave) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PannerNode')
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#PannerNode
-@Experimental()
 @Native("PannerNode,AudioPannerNode,webkitAudioPannerNode")
 class PannerNode extends AudioNode {
   // To suppress missing implicit constructor warnings.
@@ -1611,8 +1090,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PannerNode.PannerNode')
-  @DocsEditable()
   factory PannerNode(BaseAudioContext context, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -1625,83 +1102,42 @@
   static PannerNode _create_2(context) =>
       JS('PannerNode', 'new PannerNode(#)', context);
 
-  @DomName('PannerNode.coneInnerAngle')
-  @DocsEditable()
   num coneInnerAngle;
 
-  @DomName('PannerNode.coneOuterAngle')
-  @DocsEditable()
   num coneOuterAngle;
 
-  @DomName('PannerNode.coneOuterGain')
-  @DocsEditable()
   num coneOuterGain;
 
-  @DomName('PannerNode.distanceModel')
-  @DocsEditable()
   String distanceModel;
 
-  @DomName('PannerNode.maxDistance')
-  @DocsEditable()
   num maxDistance;
 
-  @DomName('PannerNode.orientationX')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AudioParam orientationX;
 
-  @DomName('PannerNode.orientationY')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AudioParam orientationY;
 
-  @DomName('PannerNode.orientationZ')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AudioParam orientationZ;
 
-  @DomName('PannerNode.panningModel')
-  @DocsEditable()
   String panningModel;
 
-  @DomName('PannerNode.positionX')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AudioParam positionX;
 
-  @DomName('PannerNode.positionY')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AudioParam positionY;
 
-  @DomName('PannerNode.positionZ')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AudioParam positionZ;
 
-  @DomName('PannerNode.refDistance')
-  @DocsEditable()
   num refDistance;
 
-  @DomName('PannerNode.rolloffFactor')
-  @DocsEditable()
   num rolloffFactor;
 
-  @DomName('PannerNode.setOrientation')
-  @DocsEditable()
   void setOrientation(num x, num y, num z) native;
 
-  @DomName('PannerNode.setPosition')
-  @DocsEditable()
   void setPosition(num x, num y, num z) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('PeriodicWave')
-@Experimental() // untriaged
 @Native("PeriodicWave")
 class PeriodicWave extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1709,8 +1145,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PeriodicWave.PeriodicWave')
-  @DocsEditable()
   factory PeriodicWave(BaseAudioContext context, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -1727,10 +1161,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.
 
-@DocsEditable()
-@DomName('ScriptProcessorNode')
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#ScriptProcessorNode
-@Experimental()
 @Native("ScriptProcessorNode,JavaScriptAudioNode")
 class ScriptProcessorNode extends AudioNode {
   // To suppress missing implicit constructor warnings.
@@ -1744,19 +1174,11 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('ScriptProcessorNode.audioprocessEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const EventStreamProvider<AudioProcessingEvent> audioProcessEvent =
       const EventStreamProvider<AudioProcessingEvent>('audioprocess');
 
-  @DomName('ScriptProcessorNode.bufferSize')
-  @DocsEditable()
   final int bufferSize;
 
-  @DomName('ScriptProcessorNode.setEventListener')
-  @DocsEditable()
-  @Experimental() // untriaged
   void setEventListener(EventListener eventListener) native;
 
   /// Stream of `audioprocess` events handled by this [ScriptProcessorNode].
@@ -1767,9 +1189,6 @@
    * the soft-real-time properties which which these events are fired and can
    * be processed.
    */
-  @DomName('ScriptProcessorNode.onaudioprocess')
-  @DocsEditable()
-  @Experimental() // untriaged
   Stream<AudioProcessingEvent> get onAudioProcess =>
       audioProcessEvent.forTarget(this);
 }
@@ -1777,9 +1196,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.
 
-@DocsEditable()
-@DomName('StereoPannerNode')
-@Experimental() // untriaged
 @Native("StereoPannerNode")
 class StereoPannerNode extends AudioNode {
   // To suppress missing implicit constructor warnings.
@@ -1787,8 +1203,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('StereoPannerNode.StereoPannerNode')
-  @DocsEditable()
   factory StereoPannerNode(BaseAudioContext context, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -1801,19 +1215,12 @@
   static StereoPannerNode _create_2(context) =>
       JS('StereoPannerNode', 'new StereoPannerNode(#)', context);
 
-  @DomName('StereoPannerNode.pan')
-  @DocsEditable()
-  @Experimental() // untriaged
   final AudioParam pan;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('WaveShaperNode')
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#dfn-WaveShaperNode
-@Experimental()
 @Native("WaveShaperNode")
 class WaveShaperNode extends AudioNode {
   // To suppress missing implicit constructor warnings.
@@ -1821,8 +1228,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('WaveShaperNode.WaveShaperNode')
-  @DocsEditable()
   factory WaveShaperNode(BaseAudioContext context, [Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
@@ -1835,11 +1240,7 @@
   static WaveShaperNode _create_2(context) =>
       JS('WaveShaperNode', 'new WaveShaperNode(#)', context);
 
-  @DomName('WaveShaperNode.curve')
-  @DocsEditable()
   Float32List curve;
 
-  @DomName('WaveShaperNode.oversample')
-  @DocsEditable()
   String oversample;
 }
diff --git a/sdk/lib/web_gl/dart2js/web_gl_dart2js.dart b/sdk/lib/web_gl/dart2js/web_gl_dart2js.dart
index b3d8ba3..80e36b1 100644
--- a/sdk/lib/web_gl/dart2js/web_gl_dart2js.dart
+++ b/sdk/lib/web_gl/dart2js/web_gl_dart2js.dart
@@ -20,343 +20,10 @@
 // https://code.google.com/p/dart/wiki/ContributingHTMLDocumentation
 // Auto-generated dart:web_gl library.
 
-// Copyright (c) 2013, 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.
-
-const int ACTIVE_ATTRIBUTES = RenderingContext.ACTIVE_ATTRIBUTES;
-const int ACTIVE_TEXTURE = RenderingContext.ACTIVE_TEXTURE;
-const int ACTIVE_UNIFORMS = RenderingContext.ACTIVE_UNIFORMS;
-const int ALIASED_LINE_WIDTH_RANGE = RenderingContext.ALIASED_LINE_WIDTH_RANGE;
-const int ALIASED_POINT_SIZE_RANGE = RenderingContext.ALIASED_POINT_SIZE_RANGE;
-const int ALPHA = RenderingContext.ALPHA;
-const int ALPHA_BITS = RenderingContext.ALPHA_BITS;
-const int ALWAYS = RenderingContext.ALWAYS;
-const int ARRAY_BUFFER = RenderingContext.ARRAY_BUFFER;
-const int ARRAY_BUFFER_BINDING = RenderingContext.ARRAY_BUFFER_BINDING;
-const int ATTACHED_SHADERS = RenderingContext.ATTACHED_SHADERS;
-const int BACK = RenderingContext.BACK;
-const int BLEND = RenderingContext.BLEND;
-const int BLEND_COLOR = RenderingContext.BLEND_COLOR;
-const int BLEND_DST_ALPHA = RenderingContext.BLEND_DST_ALPHA;
-const int BLEND_DST_RGB = RenderingContext.BLEND_DST_RGB;
-const int BLEND_EQUATION = RenderingContext.BLEND_EQUATION;
-const int BLEND_EQUATION_ALPHA = RenderingContext.BLEND_EQUATION_ALPHA;
-const int BLEND_EQUATION_RGB = RenderingContext.BLEND_EQUATION_RGB;
-const int BLEND_SRC_ALPHA = RenderingContext.BLEND_SRC_ALPHA;
-const int BLEND_SRC_RGB = RenderingContext.BLEND_SRC_RGB;
-const int BLUE_BITS = RenderingContext.BLUE_BITS;
-const int BOOL = RenderingContext.BOOL;
-const int BOOL_VEC2 = RenderingContext.BOOL_VEC2;
-const int BOOL_VEC3 = RenderingContext.BOOL_VEC3;
-const int BOOL_VEC4 = RenderingContext.BOOL_VEC4;
-const int BROWSER_DEFAULT_WEBGL = RenderingContext.BROWSER_DEFAULT_WEBGL;
-const int BUFFER_SIZE = RenderingContext.BUFFER_SIZE;
-const int BUFFER_USAGE = RenderingContext.BUFFER_USAGE;
-const int BYTE = RenderingContext.BYTE;
-const int CCW = RenderingContext.CCW;
-const int CLAMP_TO_EDGE = RenderingContext.CLAMP_TO_EDGE;
-const int COLOR_ATTACHMENT0 = RenderingContext.COLOR_ATTACHMENT0;
-const int COLOR_BUFFER_BIT = RenderingContext.COLOR_BUFFER_BIT;
-const int COLOR_CLEAR_VALUE = RenderingContext.COLOR_CLEAR_VALUE;
-const int COLOR_WRITEMASK = RenderingContext.COLOR_WRITEMASK;
-const int COMPILE_STATUS = RenderingContext.COMPILE_STATUS;
-const int COMPRESSED_TEXTURE_FORMATS =
-    RenderingContext.COMPRESSED_TEXTURE_FORMATS;
-const int CONSTANT_ALPHA = RenderingContext.CONSTANT_ALPHA;
-const int CONSTANT_COLOR = RenderingContext.CONSTANT_COLOR;
-const int CONTEXT_LOST_WEBGL = RenderingContext.CONTEXT_LOST_WEBGL;
-const int CULL_FACE = RenderingContext.CULL_FACE;
-const int CULL_FACE_MODE = RenderingContext.CULL_FACE_MODE;
-const int CURRENT_PROGRAM = RenderingContext.CURRENT_PROGRAM;
-const int CURRENT_VERTEX_ATTRIB = RenderingContext.CURRENT_VERTEX_ATTRIB;
-const int CW = RenderingContext.CW;
-const int DECR = RenderingContext.DECR;
-const int DECR_WRAP = RenderingContext.DECR_WRAP;
-const int DELETE_STATUS = RenderingContext.DELETE_STATUS;
-const int DEPTH_ATTACHMENT = RenderingContext.DEPTH_ATTACHMENT;
-const int DEPTH_BITS = RenderingContext.DEPTH_BITS;
-const int DEPTH_BUFFER_BIT = RenderingContext.DEPTH_BUFFER_BIT;
-const int DEPTH_CLEAR_VALUE = RenderingContext.DEPTH_CLEAR_VALUE;
-const int DEPTH_COMPONENT = RenderingContext.DEPTH_COMPONENT;
-const int DEPTH_COMPONENT16 = RenderingContext.DEPTH_COMPONENT16;
-const int DEPTH_FUNC = RenderingContext.DEPTH_FUNC;
-const int DEPTH_RANGE = RenderingContext.DEPTH_RANGE;
-const int DEPTH_STENCIL = RenderingContext.DEPTH_STENCIL;
-const int DEPTH_STENCIL_ATTACHMENT = RenderingContext.DEPTH_STENCIL_ATTACHMENT;
-const int DEPTH_TEST = RenderingContext.DEPTH_TEST;
-const int DEPTH_WRITEMASK = RenderingContext.DEPTH_WRITEMASK;
-const int DITHER = RenderingContext.DITHER;
-const int DONT_CARE = RenderingContext.DONT_CARE;
-const int DST_ALPHA = RenderingContext.DST_ALPHA;
-const int DST_COLOR = RenderingContext.DST_COLOR;
-const int DYNAMIC_DRAW = RenderingContext.DYNAMIC_DRAW;
-const int ELEMENT_ARRAY_BUFFER = RenderingContext.ELEMENT_ARRAY_BUFFER;
-const int ELEMENT_ARRAY_BUFFER_BINDING =
-    RenderingContext.ELEMENT_ARRAY_BUFFER_BINDING;
-const int EQUAL = RenderingContext.EQUAL;
-const int FASTEST = RenderingContext.FASTEST;
-const int FLOAT = RenderingContext.FLOAT;
-const int FLOAT_MAT2 = RenderingContext.FLOAT_MAT2;
-const int FLOAT_MAT3 = RenderingContext.FLOAT_MAT3;
-const int FLOAT_MAT4 = RenderingContext.FLOAT_MAT4;
-const int FLOAT_VEC2 = RenderingContext.FLOAT_VEC2;
-const int FLOAT_VEC3 = RenderingContext.FLOAT_VEC3;
-const int FLOAT_VEC4 = RenderingContext.FLOAT_VEC4;
-const int FRAGMENT_SHADER = RenderingContext.FRAGMENT_SHADER;
-const int FRAMEBUFFER = RenderingContext.FRAMEBUFFER;
-const int FRAMEBUFFER_ATTACHMENT_OBJECT_NAME =
-    RenderingContext.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME;
-const int FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE =
-    RenderingContext.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE;
-const int FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE =
-    RenderingContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE;
-const int FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL =
-    RenderingContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL;
-const int FRAMEBUFFER_BINDING = RenderingContext.FRAMEBUFFER_BINDING;
-const int FRAMEBUFFER_COMPLETE = RenderingContext.FRAMEBUFFER_COMPLETE;
-const int FRAMEBUFFER_INCOMPLETE_ATTACHMENT =
-    RenderingContext.FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
-const int FRAMEBUFFER_INCOMPLETE_DIMENSIONS =
-    RenderingContext.FRAMEBUFFER_INCOMPLETE_DIMENSIONS;
-const int FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT =
-    RenderingContext.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT;
-const int FRAMEBUFFER_UNSUPPORTED = RenderingContext.FRAMEBUFFER_UNSUPPORTED;
-const int FRONT = RenderingContext.FRONT;
-const int FRONT_AND_BACK = RenderingContext.FRONT_AND_BACK;
-const int FRONT_FACE = RenderingContext.FRONT_FACE;
-const int FUNC_ADD = RenderingContext.FUNC_ADD;
-const int FUNC_REVERSE_SUBTRACT = RenderingContext.FUNC_REVERSE_SUBTRACT;
-const int FUNC_SUBTRACT = RenderingContext.FUNC_SUBTRACT;
-const int GENERATE_MIPMAP_HINT = RenderingContext.GENERATE_MIPMAP_HINT;
-const int GEQUAL = RenderingContext.GEQUAL;
-const int GREATER = RenderingContext.GREATER;
-const int GREEN_BITS = RenderingContext.GREEN_BITS;
-const int HALF_FLOAT_OES = OesTextureHalfFloat.HALF_FLOAT_OES;
-const int HIGH_FLOAT = RenderingContext.HIGH_FLOAT;
-const int HIGH_INT = RenderingContext.HIGH_INT;
-const int INCR = RenderingContext.INCR;
-const int INCR_WRAP = RenderingContext.INCR_WRAP;
-const int INT = RenderingContext.INT;
-const int INT_VEC2 = RenderingContext.INT_VEC2;
-const int INT_VEC3 = RenderingContext.INT_VEC3;
-const int INT_VEC4 = RenderingContext.INT_VEC4;
-const int INVALID_ENUM = RenderingContext.INVALID_ENUM;
-const int INVALID_FRAMEBUFFER_OPERATION =
-    RenderingContext.INVALID_FRAMEBUFFER_OPERATION;
-const int INVALID_OPERATION = RenderingContext.INVALID_OPERATION;
-const int INVALID_VALUE = RenderingContext.INVALID_VALUE;
-const int INVERT = RenderingContext.INVERT;
-const int KEEP = RenderingContext.KEEP;
-const int LEQUAL = RenderingContext.LEQUAL;
-const int LESS = RenderingContext.LESS;
-const int LINEAR = RenderingContext.LINEAR;
-const int LINEAR_MIPMAP_LINEAR = RenderingContext.LINEAR_MIPMAP_LINEAR;
-const int LINEAR_MIPMAP_NEAREST = RenderingContext.LINEAR_MIPMAP_NEAREST;
-const int LINES = RenderingContext.LINES;
-const int LINE_LOOP = RenderingContext.LINE_LOOP;
-const int LINE_STRIP = RenderingContext.LINE_STRIP;
-const int LINE_WIDTH = RenderingContext.LINE_WIDTH;
-const int LINK_STATUS = RenderingContext.LINK_STATUS;
-const int LOW_FLOAT = RenderingContext.LOW_FLOAT;
-const int LOW_INT = RenderingContext.LOW_INT;
-const int LUMINANCE = RenderingContext.LUMINANCE;
-const int LUMINANCE_ALPHA = RenderingContext.LUMINANCE_ALPHA;
-const int MAX_COMBINED_TEXTURE_IMAGE_UNITS =
-    RenderingContext.MAX_COMBINED_TEXTURE_IMAGE_UNITS;
-const int MAX_CUBE_MAP_TEXTURE_SIZE =
-    RenderingContext.MAX_CUBE_MAP_TEXTURE_SIZE;
-const int MAX_FRAGMENT_UNIFORM_VECTORS =
-    RenderingContext.MAX_FRAGMENT_UNIFORM_VECTORS;
-const int MAX_RENDERBUFFER_SIZE = RenderingContext.MAX_RENDERBUFFER_SIZE;
-const int MAX_TEXTURE_IMAGE_UNITS = RenderingContext.MAX_TEXTURE_IMAGE_UNITS;
-const int MAX_TEXTURE_SIZE = RenderingContext.MAX_TEXTURE_SIZE;
-const int MAX_VARYING_VECTORS = RenderingContext.MAX_VARYING_VECTORS;
-const int MAX_VERTEX_ATTRIBS = RenderingContext.MAX_VERTEX_ATTRIBS;
-const int MAX_VERTEX_TEXTURE_IMAGE_UNITS =
-    RenderingContext.MAX_VERTEX_TEXTURE_IMAGE_UNITS;
-const int MAX_VERTEX_UNIFORM_VECTORS =
-    RenderingContext.MAX_VERTEX_UNIFORM_VECTORS;
-const int MAX_VIEWPORT_DIMS = RenderingContext.MAX_VIEWPORT_DIMS;
-const int MEDIUM_FLOAT = RenderingContext.MEDIUM_FLOAT;
-const int MEDIUM_INT = RenderingContext.MEDIUM_INT;
-const int MIRRORED_REPEAT = RenderingContext.MIRRORED_REPEAT;
-const int NEAREST = RenderingContext.NEAREST;
-const int NEAREST_MIPMAP_LINEAR = RenderingContext.NEAREST_MIPMAP_LINEAR;
-const int NEAREST_MIPMAP_NEAREST = RenderingContext.NEAREST_MIPMAP_NEAREST;
-const int NEVER = RenderingContext.NEVER;
-const int NICEST = RenderingContext.NICEST;
-const int NONE = RenderingContext.NONE;
-const int NOTEQUAL = RenderingContext.NOTEQUAL;
-const int NO_ERROR = RenderingContext.NO_ERROR;
-const int ONE = RenderingContext.ONE;
-const int ONE_MINUS_CONSTANT_ALPHA = RenderingContext.ONE_MINUS_CONSTANT_ALPHA;
-const int ONE_MINUS_CONSTANT_COLOR = RenderingContext.ONE_MINUS_CONSTANT_COLOR;
-const int ONE_MINUS_DST_ALPHA = RenderingContext.ONE_MINUS_DST_ALPHA;
-const int ONE_MINUS_DST_COLOR = RenderingContext.ONE_MINUS_DST_COLOR;
-const int ONE_MINUS_SRC_ALPHA = RenderingContext.ONE_MINUS_SRC_ALPHA;
-const int ONE_MINUS_SRC_COLOR = RenderingContext.ONE_MINUS_SRC_COLOR;
-const int OUT_OF_MEMORY = RenderingContext.OUT_OF_MEMORY;
-const int PACK_ALIGNMENT = RenderingContext.PACK_ALIGNMENT;
-const int POINTS = RenderingContext.POINTS;
-const int POLYGON_OFFSET_FACTOR = RenderingContext.POLYGON_OFFSET_FACTOR;
-const int POLYGON_OFFSET_FILL = RenderingContext.POLYGON_OFFSET_FILL;
-const int POLYGON_OFFSET_UNITS = RenderingContext.POLYGON_OFFSET_UNITS;
-const int RED_BITS = RenderingContext.RED_BITS;
-const int RENDERBUFFER = RenderingContext.RENDERBUFFER;
-const int RENDERBUFFER_ALPHA_SIZE = RenderingContext.RENDERBUFFER_ALPHA_SIZE;
-const int RENDERBUFFER_BINDING = RenderingContext.RENDERBUFFER_BINDING;
-const int RENDERBUFFER_BLUE_SIZE = RenderingContext.RENDERBUFFER_BLUE_SIZE;
-const int RENDERBUFFER_DEPTH_SIZE = RenderingContext.RENDERBUFFER_DEPTH_SIZE;
-const int RENDERBUFFER_GREEN_SIZE = RenderingContext.RENDERBUFFER_GREEN_SIZE;
-const int RENDERBUFFER_HEIGHT = RenderingContext.RENDERBUFFER_HEIGHT;
-const int RENDERBUFFER_INTERNAL_FORMAT =
-    RenderingContext.RENDERBUFFER_INTERNAL_FORMAT;
-const int RENDERBUFFER_RED_SIZE = RenderingContext.RENDERBUFFER_RED_SIZE;
-const int RENDERBUFFER_STENCIL_SIZE =
-    RenderingContext.RENDERBUFFER_STENCIL_SIZE;
-const int RENDERBUFFER_WIDTH = RenderingContext.RENDERBUFFER_WIDTH;
-const int RENDERER = RenderingContext.RENDERER;
-const int REPEAT = RenderingContext.REPEAT;
-const int REPLACE = RenderingContext.REPLACE;
-const int RGB = RenderingContext.RGB;
-const int RGB565 = RenderingContext.RGB565;
-const int RGB5_A1 = RenderingContext.RGB5_A1;
-const int RGBA = RenderingContext.RGBA;
-const int RGBA4 = RenderingContext.RGBA4;
-const int SAMPLER_2D = RenderingContext.SAMPLER_2D;
-const int SAMPLER_CUBE = RenderingContext.SAMPLER_CUBE;
-const int SAMPLES = RenderingContext.SAMPLES;
-const int SAMPLE_ALPHA_TO_COVERAGE = RenderingContext.SAMPLE_ALPHA_TO_COVERAGE;
-const int SAMPLE_BUFFERS = RenderingContext.SAMPLE_BUFFERS;
-const int SAMPLE_COVERAGE = RenderingContext.SAMPLE_COVERAGE;
-const int SAMPLE_COVERAGE_INVERT = RenderingContext.SAMPLE_COVERAGE_INVERT;
-const int SAMPLE_COVERAGE_VALUE = RenderingContext.SAMPLE_COVERAGE_VALUE;
-const int SCISSOR_BOX = RenderingContext.SCISSOR_BOX;
-const int SCISSOR_TEST = RenderingContext.SCISSOR_TEST;
-const int SHADER_TYPE = RenderingContext.SHADER_TYPE;
-const int SHADING_LANGUAGE_VERSION = RenderingContext.SHADING_LANGUAGE_VERSION;
-const int SHORT = RenderingContext.SHORT;
-const int SRC_ALPHA = RenderingContext.SRC_ALPHA;
-const int SRC_ALPHA_SATURATE = RenderingContext.SRC_ALPHA_SATURATE;
-const int SRC_COLOR = RenderingContext.SRC_COLOR;
-const int STATIC_DRAW = RenderingContext.STATIC_DRAW;
-const int STENCIL_ATTACHMENT = RenderingContext.STENCIL_ATTACHMENT;
-const int STENCIL_BACK_FAIL = RenderingContext.STENCIL_BACK_FAIL;
-const int STENCIL_BACK_FUNC = RenderingContext.STENCIL_BACK_FUNC;
-const int STENCIL_BACK_PASS_DEPTH_FAIL =
-    RenderingContext.STENCIL_BACK_PASS_DEPTH_FAIL;
-const int STENCIL_BACK_PASS_DEPTH_PASS =
-    RenderingContext.STENCIL_BACK_PASS_DEPTH_PASS;
-const int STENCIL_BACK_REF = RenderingContext.STENCIL_BACK_REF;
-const int STENCIL_BACK_VALUE_MASK = RenderingContext.STENCIL_BACK_VALUE_MASK;
-const int STENCIL_BACK_WRITEMASK = RenderingContext.STENCIL_BACK_WRITEMASK;
-const int STENCIL_BITS = RenderingContext.STENCIL_BITS;
-const int STENCIL_BUFFER_BIT = RenderingContext.STENCIL_BUFFER_BIT;
-const int STENCIL_CLEAR_VALUE = RenderingContext.STENCIL_CLEAR_VALUE;
-const int STENCIL_FAIL = RenderingContext.STENCIL_FAIL;
-const int STENCIL_FUNC = RenderingContext.STENCIL_FUNC;
-const int STENCIL_INDEX8 = RenderingContext.STENCIL_INDEX8;
-const int STENCIL_PASS_DEPTH_FAIL = RenderingContext.STENCIL_PASS_DEPTH_FAIL;
-const int STENCIL_PASS_DEPTH_PASS = RenderingContext.STENCIL_PASS_DEPTH_PASS;
-const int STENCIL_REF = RenderingContext.STENCIL_REF;
-const int STENCIL_TEST = RenderingContext.STENCIL_TEST;
-const int STENCIL_VALUE_MASK = RenderingContext.STENCIL_VALUE_MASK;
-const int STENCIL_WRITEMASK = RenderingContext.STENCIL_WRITEMASK;
-const int STREAM_DRAW = RenderingContext.STREAM_DRAW;
-const int SUBPIXEL_BITS = RenderingContext.SUBPIXEL_BITS;
-const int TEXTURE = RenderingContext.TEXTURE;
-const int TEXTURE0 = RenderingContext.TEXTURE0;
-const int TEXTURE1 = RenderingContext.TEXTURE1;
-const int TEXTURE10 = RenderingContext.TEXTURE10;
-const int TEXTURE11 = RenderingContext.TEXTURE11;
-const int TEXTURE12 = RenderingContext.TEXTURE12;
-const int TEXTURE13 = RenderingContext.TEXTURE13;
-const int TEXTURE14 = RenderingContext.TEXTURE14;
-const int TEXTURE15 = RenderingContext.TEXTURE15;
-const int TEXTURE16 = RenderingContext.TEXTURE16;
-const int TEXTURE17 = RenderingContext.TEXTURE17;
-const int TEXTURE18 = RenderingContext.TEXTURE18;
-const int TEXTURE19 = RenderingContext.TEXTURE19;
-const int TEXTURE2 = RenderingContext.TEXTURE2;
-const int TEXTURE20 = RenderingContext.TEXTURE20;
-const int TEXTURE21 = RenderingContext.TEXTURE21;
-const int TEXTURE22 = RenderingContext.TEXTURE22;
-const int TEXTURE23 = RenderingContext.TEXTURE23;
-const int TEXTURE24 = RenderingContext.TEXTURE24;
-const int TEXTURE25 = RenderingContext.TEXTURE25;
-const int TEXTURE26 = RenderingContext.TEXTURE26;
-const int TEXTURE27 = RenderingContext.TEXTURE27;
-const int TEXTURE28 = RenderingContext.TEXTURE28;
-const int TEXTURE29 = RenderingContext.TEXTURE29;
-const int TEXTURE3 = RenderingContext.TEXTURE3;
-const int TEXTURE30 = RenderingContext.TEXTURE30;
-const int TEXTURE31 = RenderingContext.TEXTURE31;
-const int TEXTURE4 = RenderingContext.TEXTURE4;
-const int TEXTURE5 = RenderingContext.TEXTURE5;
-const int TEXTURE6 = RenderingContext.TEXTURE6;
-const int TEXTURE7 = RenderingContext.TEXTURE7;
-const int TEXTURE8 = RenderingContext.TEXTURE8;
-const int TEXTURE9 = RenderingContext.TEXTURE9;
-const int TEXTURE_2D = RenderingContext.TEXTURE_2D;
-const int TEXTURE_BINDING_2D = RenderingContext.TEXTURE_BINDING_2D;
-const int TEXTURE_BINDING_CUBE_MAP = RenderingContext.TEXTURE_BINDING_CUBE_MAP;
-const int TEXTURE_CUBE_MAP = RenderingContext.TEXTURE_CUBE_MAP;
-const int TEXTURE_CUBE_MAP_NEGATIVE_X =
-    RenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_X;
-const int TEXTURE_CUBE_MAP_NEGATIVE_Y =
-    RenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_Y;
-const int TEXTURE_CUBE_MAP_NEGATIVE_Z =
-    RenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_Z;
-const int TEXTURE_CUBE_MAP_POSITIVE_X =
-    RenderingContext.TEXTURE_CUBE_MAP_POSITIVE_X;
-const int TEXTURE_CUBE_MAP_POSITIVE_Y =
-    RenderingContext.TEXTURE_CUBE_MAP_POSITIVE_Y;
-const int TEXTURE_CUBE_MAP_POSITIVE_Z =
-    RenderingContext.TEXTURE_CUBE_MAP_POSITIVE_Z;
-const int TEXTURE_MAG_FILTER = RenderingContext.TEXTURE_MAG_FILTER;
-const int TEXTURE_MIN_FILTER = RenderingContext.TEXTURE_MIN_FILTER;
-const int TEXTURE_WRAP_S = RenderingContext.TEXTURE_WRAP_S;
-const int TEXTURE_WRAP_T = RenderingContext.TEXTURE_WRAP_T;
-const int TRIANGLES = RenderingContext.TRIANGLES;
-const int TRIANGLE_FAN = RenderingContext.TRIANGLE_FAN;
-const int TRIANGLE_STRIP = RenderingContext.TRIANGLE_STRIP;
-const int UNPACK_ALIGNMENT = RenderingContext.UNPACK_ALIGNMENT;
-const int UNPACK_COLORSPACE_CONVERSION_WEBGL =
-    RenderingContext.UNPACK_COLORSPACE_CONVERSION_WEBGL;
-const int UNPACK_FLIP_Y_WEBGL = RenderingContext.UNPACK_FLIP_Y_WEBGL;
-const int UNPACK_PREMULTIPLY_ALPHA_WEBGL =
-    RenderingContext.UNPACK_PREMULTIPLY_ALPHA_WEBGL;
-const int UNSIGNED_BYTE = RenderingContext.UNSIGNED_BYTE;
-const int UNSIGNED_INT = RenderingContext.UNSIGNED_INT;
-const int UNSIGNED_SHORT = RenderingContext.UNSIGNED_SHORT;
-const int UNSIGNED_SHORT_4_4_4_4 = RenderingContext.UNSIGNED_SHORT_4_4_4_4;
-const int UNSIGNED_SHORT_5_5_5_1 = RenderingContext.UNSIGNED_SHORT_5_5_5_1;
-const int UNSIGNED_SHORT_5_6_5 = RenderingContext.UNSIGNED_SHORT_5_6_5;
-const int VALIDATE_STATUS = RenderingContext.VALIDATE_STATUS;
-const int VENDOR = RenderingContext.VENDOR;
-const int VERSION = RenderingContext.VERSION;
-const int VERTEX_ATTRIB_ARRAY_BUFFER_BINDING =
-    RenderingContext.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING;
-const int VERTEX_ATTRIB_ARRAY_ENABLED =
-    RenderingContext.VERTEX_ATTRIB_ARRAY_ENABLED;
-const int VERTEX_ATTRIB_ARRAY_NORMALIZED =
-    RenderingContext.VERTEX_ATTRIB_ARRAY_NORMALIZED;
-const int VERTEX_ATTRIB_ARRAY_POINTER =
-    RenderingContext.VERTEX_ATTRIB_ARRAY_POINTER;
-const int VERTEX_ATTRIB_ARRAY_SIZE = RenderingContext.VERTEX_ATTRIB_ARRAY_SIZE;
-const int VERTEX_ATTRIB_ARRAY_STRIDE =
-    RenderingContext.VERTEX_ATTRIB_ARRAY_STRIDE;
-const int VERTEX_ATTRIB_ARRAY_TYPE = RenderingContext.VERTEX_ATTRIB_ARRAY_TYPE;
-const int VERTEX_SHADER = RenderingContext.VERTEX_SHADER;
-const int VIEWPORT = RenderingContext.VIEWPORT;
-const int ZERO = RenderingContext.ZERO;
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('WebGLActiveInfo')
 @Unstable()
 @Native("WebGLActiveInfo")
 class ActiveInfo extends Interceptor {
@@ -365,25 +32,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('WebGLActiveInfo.name')
-  @DocsEditable()
   final String name;
 
-  @DomName('WebGLActiveInfo.size')
-  @DocsEditable()
   final int size;
 
-  @DomName('WebGLActiveInfo.type')
-  @DocsEditable()
   final int type;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('ANGLEInstancedArrays')
-@Experimental() // untriaged
 @Native("ANGLEInstancedArrays,ANGLE_instanced_arrays")
 class AngleInstancedArrays extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -391,37 +49,23 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ANGLEInstancedArrays.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE = 0x88FE;
 
   @JSName('drawArraysInstancedANGLE')
-  @DomName('ANGLEInstancedArrays.drawArraysInstancedANGLE')
-  @DocsEditable()
-  @Experimental() // untriaged
   void drawArraysInstancedAngle(int mode, int first, int count, int primcount)
       native;
 
   @JSName('drawElementsInstancedANGLE')
-  @DomName('ANGLEInstancedArrays.drawElementsInstancedANGLE')
-  @DocsEditable()
-  @Experimental() // untriaged
   void drawElementsInstancedAngle(
       int mode, int count, int type, int offset, int primcount) native;
 
   @JSName('vertexAttribDivisorANGLE')
-  @DomName('ANGLEInstancedArrays.vertexAttribDivisorANGLE')
-  @DocsEditable()
-  @Experimental() // untriaged
   void vertexAttribDivisorAngle(int index, int divisor) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('WebGLBuffer')
 @Unstable()
 @Native("WebGLBuffer")
 class Buffer extends Interceptor {
@@ -434,9 +78,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.
 
-@DocsEditable()
-@DomName('WebGLCanvas')
-@Experimental() // untriaged
 @Native("WebGLCanvas")
 class Canvas extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -445,13 +86,9 @@
   }
 
   @JSName('canvas')
-  @DomName('WebGLCanvas.canvas')
-  @DocsEditable()
   final CanvasElement canvas;
 
   @JSName('canvas')
-  @DomName('WebGLCanvas.offscreenCanvas')
-  @DocsEditable()
   final OffscreenCanvas offscreenCanvas;
 }
 
@@ -459,9 +96,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.
 
-@DocsEditable()
-@DomName('WebGLColorBufferFloat')
-@Experimental() // untriaged
 @Native("WebGLColorBufferFloat")
 class ColorBufferFloat extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -473,9 +107,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.
 
-@DocsEditable()
-@DomName('WebGLCompressedTextureASTC')
-@Experimental() // untriaged
 @Native("WebGLCompressedTextureASTC")
 class CompressedTextureAstc extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -483,154 +114,66 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_RGBA_ASTC_10x10_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_RGBA_ASTC_10x10_KHR = 0x93BB;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_RGBA_ASTC_10x5_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_RGBA_ASTC_10x5_KHR = 0x93B8;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_RGBA_ASTC_10x6_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_RGBA_ASTC_10x6_KHR = 0x93B9;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_RGBA_ASTC_10x8_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_RGBA_ASTC_10x8_KHR = 0x93BA;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_RGBA_ASTC_12x10_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_RGBA_ASTC_12x10_KHR = 0x93BC;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_RGBA_ASTC_12x12_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_RGBA_ASTC_12x12_KHR = 0x93BD;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_RGBA_ASTC_4x4_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_RGBA_ASTC_4x4_KHR = 0x93B0;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_RGBA_ASTC_5x4_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_RGBA_ASTC_5x4_KHR = 0x93B1;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_RGBA_ASTC_5x5_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_RGBA_ASTC_5x5_KHR = 0x93B2;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_RGBA_ASTC_6x5_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_RGBA_ASTC_6x5_KHR = 0x93B3;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_RGBA_ASTC_6x6_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_RGBA_ASTC_6x6_KHR = 0x93B4;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_RGBA_ASTC_8x5_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_RGBA_ASTC_8x5_KHR = 0x93B5;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_RGBA_ASTC_8x6_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_RGBA_ASTC_8x6_KHR = 0x93B6;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_RGBA_ASTC_8x8_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_RGBA_ASTC_8x8_KHR = 0x93B7;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR = 0x93DB;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR = 0x93D8;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR = 0x93D9;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR = 0x93DA;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR = 0x93DC;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR = 0x93DD;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR = 0x93D0;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR = 0x93D1;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR = 0x93D2;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR = 0x93D3;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR = 0x93D4;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR = 0x93D5;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR = 0x93D6;
 
-  @DomName('WebGLCompressedTextureASTC.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR = 0x93D7;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('WebGLCompressedTextureATC')
-// http://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_atc/
-@Experimental()
 @Native("WebGLCompressedTextureATC,WEBGL_compressed_texture_atc")
 class CompressedTextureAtc extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -638,26 +181,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('WebGLCompressedTextureATC.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL')
-  @DocsEditable()
   static const int COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL = 0x8C93;
 
-  @DomName(
-      'WebGLCompressedTextureATC.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL')
-  @DocsEditable()
   static const int COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL = 0x87EE;
 
-  @DomName('WebGLCompressedTextureATC.COMPRESSED_RGB_ATC_WEBGL')
-  @DocsEditable()
   static const int COMPRESSED_RGB_ATC_WEBGL = 0x8C92;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('WebGLCompressedTextureETC1')
-@Experimental() // untriaged
 @Native("WebGLCompressedTextureETC1,WEBGL_compressed_texture_etc1")
 class CompressedTextureETC1 extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -665,18 +198,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('WebGLCompressedTextureETC1.COMPRESSED_RGB_ETC1_WEBGL')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_RGB_ETC1_WEBGL = 0x8D64;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('WebGLCompressedTextureETC')
-@Experimental() // untriaged
 @Native("WebGLCompressedTextureETC")
 class CompressedTextureEtc extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -684,65 +211,30 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('WebGLCompressedTextureETC.COMPRESSED_R11_EAC')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_R11_EAC = 0x9270;
 
-  @DomName('WebGLCompressedTextureETC.COMPRESSED_RG11_EAC')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_RG11_EAC = 0x9272;
 
-  @DomName('WebGLCompressedTextureETC.COMPRESSED_RGB8_ETC2')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_RGB8_ETC2 = 0x9274;
 
-  @DomName('WebGLCompressedTextureETC.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9276;
 
-  @DomName('WebGLCompressedTextureETC.COMPRESSED_RGBA8_ETC2_EAC')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_RGBA8_ETC2_EAC = 0x9278;
 
-  @DomName('WebGLCompressedTextureETC.COMPRESSED_SIGNED_R11_EAC')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_SIGNED_R11_EAC = 0x9271;
 
-  @DomName('WebGLCompressedTextureETC.COMPRESSED_SIGNED_RG11_EAC')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_SIGNED_RG11_EAC = 0x9273;
 
-  @DomName('WebGLCompressedTextureETC.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 0x9279;
 
-  @DomName('WebGLCompressedTextureETC.COMPRESSED_SRGB8_ETC2')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_SRGB8_ETC2 = 0x9275;
 
-  @DomName(
-      'WebGLCompressedTextureETC.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9277;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('WebGLCompressedTexturePVRTC')
-// http://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_pvrtc/
-@Experimental() // experimental
 @Native("WebGLCompressedTexturePVRTC,WEBGL_compressed_texture_pvrtc")
 class CompressedTexturePvrtc extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -750,30 +242,18 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('WebGLCompressedTexturePVRTC.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG')
-  @DocsEditable()
   static const int COMPRESSED_RGBA_PVRTC_2BPPV1_IMG = 0x8C03;
 
-  @DomName('WebGLCompressedTexturePVRTC.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG')
-  @DocsEditable()
   static const int COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 0x8C02;
 
-  @DomName('WebGLCompressedTexturePVRTC.COMPRESSED_RGB_PVRTC_2BPPV1_IMG')
-  @DocsEditable()
   static const int COMPRESSED_RGB_PVRTC_2BPPV1_IMG = 0x8C01;
 
-  @DomName('WebGLCompressedTexturePVRTC.COMPRESSED_RGB_PVRTC_4BPPV1_IMG')
-  @DocsEditable()
   static const int COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 0x8C00;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('WebGLCompressedTextureS3TC')
-// http://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/
-@Experimental() // experimental
 @Native("WebGLCompressedTextureS3TC,WEBGL_compressed_texture_s3tc")
 class CompressedTextureS3TC extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -781,29 +261,18 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('WebGLCompressedTextureS3TC.COMPRESSED_RGBA_S3TC_DXT1_EXT')
-  @DocsEditable()
   static const int COMPRESSED_RGBA_S3TC_DXT1_EXT = 0x83F1;
 
-  @DomName('WebGLCompressedTextureS3TC.COMPRESSED_RGBA_S3TC_DXT3_EXT')
-  @DocsEditable()
   static const int COMPRESSED_RGBA_S3TC_DXT3_EXT = 0x83F2;
 
-  @DomName('WebGLCompressedTextureS3TC.COMPRESSED_RGBA_S3TC_DXT5_EXT')
-  @DocsEditable()
   static const int COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83F3;
 
-  @DomName('WebGLCompressedTextureS3TC.COMPRESSED_RGB_S3TC_DXT1_EXT')
-  @DocsEditable()
   static const int COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83F0;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('WebGLCompressedTextureS3TCsRGB')
-@Experimental() // untriaged
 @Native("WebGLCompressedTextureS3TCsRGB")
 class CompressedTextureS3TCsRgb extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -811,32 +280,18 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('WebGLCompressedTextureS3TCsRGB.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT = 0x8C4D;
 
-  @DomName('WebGLCompressedTextureS3TCsRGB.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT = 0x8C4E;
 
-  @DomName('WebGLCompressedTextureS3TCsRGB.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT = 0x8C4F;
 
-  @DomName('WebGLCompressedTextureS3TCsRGB.COMPRESSED_SRGB_S3TC_DXT1_EXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int COMPRESSED_SRGB_S3TC_DXT1_EXT = 0x8C4C;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('WebGLContextEvent')
 @Unstable()
 @Native("WebGLContextEvent")
 class ContextEvent extends Event {
@@ -845,8 +300,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('WebGLContextEvent.WebGLContextEvent')
-  @DocsEditable()
   factory ContextEvent(String type, [Map eventInit]) {
     if (eventInit != null) {
       var eventInit_1 = convertDartToNative_Dictionary(eventInit);
@@ -859,18 +312,12 @@
   static ContextEvent _create_2(type) =>
       JS('ContextEvent', 'new WebGLContextEvent(#)', type);
 
-  @DomName('WebGLContextEvent.statusMessage')
-  @DocsEditable()
   final String statusMessage;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('WebGLDebugRendererInfo')
-// http://www.khronos.org/registry/webgl/extensions/WEBGL_debug_renderer_info/
-@Experimental() // experimental
 @Native("WebGLDebugRendererInfo,WEBGL_debug_renderer_info")
 class DebugRendererInfo extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -878,22 +325,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('WebGLDebugRendererInfo.UNMASKED_RENDERER_WEBGL')
-  @DocsEditable()
   static const int UNMASKED_RENDERER_WEBGL = 0x9246;
 
-  @DomName('WebGLDebugRendererInfo.UNMASKED_VENDOR_WEBGL')
-  @DocsEditable()
   static const int UNMASKED_VENDOR_WEBGL = 0x9245;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('WebGLDebugShaders')
-// http://www.khronos.org/registry/webgl/extensions/WEBGL_debug_shaders/
-@Experimental() // experimental
 @Native("WebGLDebugShaders,WEBGL_debug_shaders")
 class DebugShaders extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -901,18 +340,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('WebGLDebugShaders.getTranslatedShaderSource')
-  @DocsEditable()
   String getTranslatedShaderSource(Shader shader) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('WebGLDepthTexture')
-// http://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/
-@Experimental() // experimental
 @Native("WebGLDepthTexture,WEBGL_depth_texture")
 class DepthTexture extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -920,18 +353,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('WebGLDepthTexture.UNSIGNED_INT_24_8_WEBGL')
-  @DocsEditable()
   static const int UNSIGNED_INT_24_8_WEBGL = 0x84FA;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('WebGLDrawBuffers')
-// http://www.khronos.org/registry/webgl/specs/latest/
-@Experimental() // stable
 @Native("WebGLDrawBuffers,WEBGL_draw_buffers")
 class DrawBuffers extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -939,154 +366,13 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT0_WEBGL')
-  @DocsEditable()
-  static const int COLOR_ATTACHMENT0_WEBGL = 0x8CE0;
-
-  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT10_WEBGL')
-  @DocsEditable()
-  static const int COLOR_ATTACHMENT10_WEBGL = 0x8CEA;
-
-  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT11_WEBGL')
-  @DocsEditable()
-  static const int COLOR_ATTACHMENT11_WEBGL = 0x8CEB;
-
-  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT12_WEBGL')
-  @DocsEditable()
-  static const int COLOR_ATTACHMENT12_WEBGL = 0x8CEC;
-
-  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT13_WEBGL')
-  @DocsEditable()
-  static const int COLOR_ATTACHMENT13_WEBGL = 0x8CED;
-
-  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT14_WEBGL')
-  @DocsEditable()
-  static const int COLOR_ATTACHMENT14_WEBGL = 0x8CEE;
-
-  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT15_WEBGL')
-  @DocsEditable()
-  static const int COLOR_ATTACHMENT15_WEBGL = 0x8CEF;
-
-  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT1_WEBGL')
-  @DocsEditable()
-  static const int COLOR_ATTACHMENT1_WEBGL = 0x8CE1;
-
-  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT2_WEBGL')
-  @DocsEditable()
-  static const int COLOR_ATTACHMENT2_WEBGL = 0x8CE2;
-
-  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT3_WEBGL')
-  @DocsEditable()
-  static const int COLOR_ATTACHMENT3_WEBGL = 0x8CE3;
-
-  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT4_WEBGL')
-  @DocsEditable()
-  static const int COLOR_ATTACHMENT4_WEBGL = 0x8CE4;
-
-  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT5_WEBGL')
-  @DocsEditable()
-  static const int COLOR_ATTACHMENT5_WEBGL = 0x8CE5;
-
-  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT6_WEBGL')
-  @DocsEditable()
-  static const int COLOR_ATTACHMENT6_WEBGL = 0x8CE6;
-
-  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT7_WEBGL')
-  @DocsEditable()
-  static const int COLOR_ATTACHMENT7_WEBGL = 0x8CE7;
-
-  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT8_WEBGL')
-  @DocsEditable()
-  static const int COLOR_ATTACHMENT8_WEBGL = 0x8CE8;
-
-  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT9_WEBGL')
-  @DocsEditable()
-  static const int COLOR_ATTACHMENT9_WEBGL = 0x8CE9;
-
-  @DomName('WebGLDrawBuffers.DRAW_BUFFER0_WEBGL')
-  @DocsEditable()
-  static const int DRAW_BUFFER0_WEBGL = 0x8825;
-
-  @DomName('WebGLDrawBuffers.DRAW_BUFFER10_WEBGL')
-  @DocsEditable()
-  static const int DRAW_BUFFER10_WEBGL = 0x882F;
-
-  @DomName('WebGLDrawBuffers.DRAW_BUFFER11_WEBGL')
-  @DocsEditable()
-  static const int DRAW_BUFFER11_WEBGL = 0x8830;
-
-  @DomName('WebGLDrawBuffers.DRAW_BUFFER12_WEBGL')
-  @DocsEditable()
-  static const int DRAW_BUFFER12_WEBGL = 0x8831;
-
-  @DomName('WebGLDrawBuffers.DRAW_BUFFER13_WEBGL')
-  @DocsEditable()
-  static const int DRAW_BUFFER13_WEBGL = 0x8832;
-
-  @DomName('WebGLDrawBuffers.DRAW_BUFFER14_WEBGL')
-  @DocsEditable()
-  static const int DRAW_BUFFER14_WEBGL = 0x8833;
-
-  @DomName('WebGLDrawBuffers.DRAW_BUFFER15_WEBGL')
-  @DocsEditable()
-  static const int DRAW_BUFFER15_WEBGL = 0x8834;
-
-  @DomName('WebGLDrawBuffers.DRAW_BUFFER1_WEBGL')
-  @DocsEditable()
-  static const int DRAW_BUFFER1_WEBGL = 0x8826;
-
-  @DomName('WebGLDrawBuffers.DRAW_BUFFER2_WEBGL')
-  @DocsEditable()
-  static const int DRAW_BUFFER2_WEBGL = 0x8827;
-
-  @DomName('WebGLDrawBuffers.DRAW_BUFFER3_WEBGL')
-  @DocsEditable()
-  static const int DRAW_BUFFER3_WEBGL = 0x8828;
-
-  @DomName('WebGLDrawBuffers.DRAW_BUFFER4_WEBGL')
-  @DocsEditable()
-  static const int DRAW_BUFFER4_WEBGL = 0x8829;
-
-  @DomName('WebGLDrawBuffers.DRAW_BUFFER5_WEBGL')
-  @DocsEditable()
-  static const int DRAW_BUFFER5_WEBGL = 0x882A;
-
-  @DomName('WebGLDrawBuffers.DRAW_BUFFER6_WEBGL')
-  @DocsEditable()
-  static const int DRAW_BUFFER6_WEBGL = 0x882B;
-
-  @DomName('WebGLDrawBuffers.DRAW_BUFFER7_WEBGL')
-  @DocsEditable()
-  static const int DRAW_BUFFER7_WEBGL = 0x882C;
-
-  @DomName('WebGLDrawBuffers.DRAW_BUFFER8_WEBGL')
-  @DocsEditable()
-  static const int DRAW_BUFFER8_WEBGL = 0x882D;
-
-  @DomName('WebGLDrawBuffers.DRAW_BUFFER9_WEBGL')
-  @DocsEditable()
-  static const int DRAW_BUFFER9_WEBGL = 0x882E;
-
-  @DomName('WebGLDrawBuffers.MAX_COLOR_ATTACHMENTS_WEBGL')
-  @DocsEditable()
-  static const int MAX_COLOR_ATTACHMENTS_WEBGL = 0x8CDF;
-
-  @DomName('WebGLDrawBuffers.MAX_DRAW_BUFFERS_WEBGL')
-  @DocsEditable()
-  static const int MAX_DRAW_BUFFERS_WEBGL = 0x8824;
-
   @JSName('drawBuffersWEBGL')
-  @DomName('WebGLDrawBuffers.drawBuffersWEBGL')
-  @DocsEditable()
   void drawBuffersWebgl(List<int> buffers) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('EXTsRGB')
-@Experimental() // untriaged
 @Native("EXTsRGB,EXT_sRGB")
 class EXTsRgb extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1094,33 +380,18 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('EXTsRGB.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT = 0x8210;
 
-  @DomName('EXTsRGB.SRGB8_ALPHA8_EXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int SRGB8_ALPHA8_EXT = 0x8C43;
 
-  @DomName('EXTsRGB.SRGB_ALPHA_EXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int SRGB_ALPHA_EXT = 0x8C42;
 
-  @DomName('EXTsRGB.SRGB_EXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int SRGB_EXT = 0x8C40;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('EXTBlendMinMax')
-@Experimental() // untriaged
 @Native("EXTBlendMinMax,EXT_blend_minmax")
 class ExtBlendMinMax extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1128,23 +399,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('EXTBlendMinMax.MAX_EXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int MAX_EXT = 0x8008;
 
-  @DomName('EXTBlendMinMax.MIN_EXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int MIN_EXT = 0x8007;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('EXTColorBufferFloat')
-@Experimental() // untriaged
 @Native("EXTColorBufferFloat")
 class ExtColorBufferFloat extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1156,9 +418,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.
 
-@DocsEditable()
-@DomName('EXTColorBufferHalfFloat')
-@Experimental() // untriaged
 @Native("EXTColorBufferHalfFloat")
 class ExtColorBufferHalfFloat extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1170,9 +429,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.
 
-@DocsEditable()
-@DomName('EXTDisjointTimerQuery')
-@Experimental() // untriaged
 @Native("EXTDisjointTimerQuery")
 class ExtDisjointTimerQuery extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1180,96 +436,48 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('EXTDisjointTimerQuery.CURRENT_QUERY_EXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int CURRENT_QUERY_EXT = 0x8865;
 
-  @DomName('EXTDisjointTimerQuery.GPU_DISJOINT_EXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int GPU_DISJOINT_EXT = 0x8FBB;
 
-  @DomName('EXTDisjointTimerQuery.QUERY_COUNTER_BITS_EXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int QUERY_COUNTER_BITS_EXT = 0x8864;
 
-  @DomName('EXTDisjointTimerQuery.QUERY_RESULT_AVAILABLE_EXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int QUERY_RESULT_AVAILABLE_EXT = 0x8867;
 
-  @DomName('EXTDisjointTimerQuery.QUERY_RESULT_EXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int QUERY_RESULT_EXT = 0x8866;
 
-  @DomName('EXTDisjointTimerQuery.TIMESTAMP_EXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int TIMESTAMP_EXT = 0x8E28;
 
-  @DomName('EXTDisjointTimerQuery.TIME_ELAPSED_EXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int TIME_ELAPSED_EXT = 0x88BF;
 
   @JSName('beginQueryEXT')
-  @DomName('EXTDisjointTimerQuery.beginQueryEXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   void beginQueryExt(int target, TimerQueryExt query) native;
 
   @JSName('createQueryEXT')
-  @DomName('EXTDisjointTimerQuery.createQueryEXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   TimerQueryExt createQueryExt() native;
 
   @JSName('deleteQueryEXT')
-  @DomName('EXTDisjointTimerQuery.deleteQueryEXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   void deleteQueryExt(TimerQueryExt query) native;
 
   @JSName('endQueryEXT')
-  @DomName('EXTDisjointTimerQuery.endQueryEXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   void endQueryExt(int target) native;
 
   @JSName('getQueryEXT')
-  @DomName('EXTDisjointTimerQuery.getQueryEXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object getQueryExt(int target, int pname) native;
 
   @JSName('getQueryObjectEXT')
-  @DomName('EXTDisjointTimerQuery.getQueryObjectEXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object getQueryObjectExt(TimerQueryExt query, int pname) native;
 
   @JSName('isQueryEXT')
-  @DomName('EXTDisjointTimerQuery.isQueryEXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool isQueryExt(TimerQueryExt query) native;
 
   @JSName('queryCounterEXT')
-  @DomName('EXTDisjointTimerQuery.queryCounterEXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   void queryCounterExt(TimerQueryExt query, int target) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('EXTDisjointTimerQueryWebGL2')
-@Experimental() // untriaged
 @Native("EXTDisjointTimerQueryWebGL2")
 class ExtDisjointTimerQueryWebGL2 extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1277,40 +485,21 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('EXTDisjointTimerQueryWebGL2.GPU_DISJOINT_EXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int GPU_DISJOINT_EXT = 0x8FBB;
 
-  @DomName('EXTDisjointTimerQueryWebGL2.QUERY_COUNTER_BITS_EXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int QUERY_COUNTER_BITS_EXT = 0x8864;
 
-  @DomName('EXTDisjointTimerQueryWebGL2.TIMESTAMP_EXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int TIMESTAMP_EXT = 0x8E28;
 
-  @DomName('EXTDisjointTimerQueryWebGL2.TIME_ELAPSED_EXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   static const int TIME_ELAPSED_EXT = 0x88BF;
 
   @JSName('queryCounterEXT')
-  @DomName('EXTDisjointTimerQueryWebGL2.queryCounterEXT')
-  @DocsEditable()
-  @Experimental() // untriaged
   void queryCounterExt(Query query, int target) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('EXTFragDepth')
-// http://www.khronos.org/registry/webgl/extensions/EXT_frag_depth/
-@Experimental()
 @Native("EXTFragDepth,EXT_frag_depth")
 class ExtFragDepth extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1322,9 +511,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.
 
-@DocsEditable()
-@DomName('EXTShaderTextureLOD')
-@Experimental() // untriaged
 @Native("EXTShaderTextureLOD,EXT_shader_texture_lod")
 class ExtShaderTextureLod extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1336,10 +522,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.
 
-@DocsEditable()
-@DomName('EXTTextureFilterAnisotropic')
-// http://www.khronos.org/registry/webgl/extensions/EXT_texture_filter_anisotropic/
-@Experimental()
 @Native("EXTTextureFilterAnisotropic,EXT_texture_filter_anisotropic")
 class ExtTextureFilterAnisotropic extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1347,20 +529,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('EXTTextureFilterAnisotropic.MAX_TEXTURE_MAX_ANISOTROPY_EXT')
-  @DocsEditable()
   static const int MAX_TEXTURE_MAX_ANISOTROPY_EXT = 0x84FF;
 
-  @DomName('EXTTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT')
-  @DocsEditable()
   static const int TEXTURE_MAX_ANISOTROPY_EXT = 0x84FE;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('WebGLFramebuffer')
 @Unstable()
 @Native("WebGLFramebuffer")
 class Framebuffer extends Interceptor {
@@ -1373,9 +549,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.
 
-@DocsEditable()
-@DomName('WebGLGetBufferSubDataAsync')
-@Experimental() // untriaged
 @Native("WebGLGetBufferSubDataAsync")
 class GetBufferSubDataAsync extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1383,9 +556,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('WebGLGetBufferSubDataAsync.getBufferSubDataAsync')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future getBufferSubDataAsync(int target, int srcByteOffset, TypedData dstData,
           [int dstOffset, int length]) =>
       promiseToFuture(JS("", "#.getBufferSubDataAsync(#, #, #, #, #)", this,
@@ -1395,10 +565,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.
 
-@DocsEditable()
-@DomName('WebGLLoseContext')
-// http://www.khronos.org/registry/webgl/extensions/WEBGL_lose_context/
-@Experimental()
 @Native("WebGLLoseContext,WebGLExtensionLoseContext,WEBGL_lose_context")
 class LoseContext extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1406,22 +572,14 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('WebGLLoseContext.loseContext')
-  @DocsEditable()
   void loseContext() native;
 
-  @DomName('WebGLLoseContext.restoreContext')
-  @DocsEditable()
   void restoreContext() native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('OESElementIndexUint')
-// http://www.khronos.org/registry/webgl/extensions/OES_element_index_uint/
-@Experimental() // experimental
 @Native("OESElementIndexUint,OES_element_index_uint")
 class OesElementIndexUint extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1433,10 +591,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.
 
-@DocsEditable()
-@DomName('OESStandardDerivatives')
-// http://www.khronos.org/registry/webgl/extensions/OES_standard_derivatives/
-@Experimental() // experimental
 @Native("OESStandardDerivatives,OES_standard_derivatives")
 class OesStandardDerivatives extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1444,18 +598,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('OESStandardDerivatives.FRAGMENT_SHADER_DERIVATIVE_HINT_OES')
-  @DocsEditable()
   static const int FRAGMENT_SHADER_DERIVATIVE_HINT_OES = 0x8B8B;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('OESTextureFloat')
-// http://www.khronos.org/registry/webgl/extensions/OES_texture_float/
-@Experimental() // experimental
 @Native("OESTextureFloat,OES_texture_float")
 class OesTextureFloat extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1467,10 +615,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.
 
-@DocsEditable()
-@DomName('OESTextureFloatLinear')
-// http://www.khronos.org/registry/webgl/extensions/OES_texture_float_linear/
-@Experimental()
 @Native("OESTextureFloatLinear,OES_texture_float_linear")
 class OesTextureFloatLinear extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1482,10 +626,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.
 
-@DocsEditable()
-@DomName('OESTextureHalfFloat')
-// http://www.khronos.org/registry/webgl/extensions/OES_texture_half_float/
-@Experimental() // experimental
 @Native("OESTextureHalfFloat,OES_texture_half_float")
 class OesTextureHalfFloat extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1493,18 +633,12 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('OESTextureHalfFloat.HALF_FLOAT_OES')
-  @DocsEditable()
   static const int HALF_FLOAT_OES = 0x8D61;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('OESTextureHalfFloatLinear')
-// http://www.khronos.org/registry/webgl/extensions/OES_texture_half_float_linear/
-@Experimental()
 @Native("OESTextureHalfFloatLinear,OES_texture_half_float_linear")
 class OesTextureHalfFloatLinear extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1516,10 +650,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.
 
-@DocsEditable()
-@DomName('OESVertexArrayObject')
-// http://www.khronos.org/registry/webgl/extensions/OES_vertex_array_object/
-@Experimental() // experimental
 @Native("OESVertexArrayObject,OES_vertex_array_object")
 class OesVertexArrayObject extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1527,36 +657,24 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('OESVertexArrayObject.VERTEX_ARRAY_BINDING_OES')
-  @DocsEditable()
   static const int VERTEX_ARRAY_BINDING_OES = 0x85B5;
 
   @JSName('bindVertexArrayOES')
-  @DomName('OESVertexArrayObject.bindVertexArrayOES')
-  @DocsEditable()
   void bindVertexArray(VertexArrayObjectOes arrayObject) native;
 
   @JSName('createVertexArrayOES')
-  @DomName('OESVertexArrayObject.createVertexArrayOES')
-  @DocsEditable()
   VertexArrayObjectOes createVertexArray() native;
 
   @JSName('deleteVertexArrayOES')
-  @DomName('OESVertexArrayObject.deleteVertexArrayOES')
-  @DocsEditable()
   void deleteVertexArray(VertexArrayObjectOes arrayObject) native;
 
   @JSName('isVertexArrayOES')
-  @DomName('OESVertexArrayObject.isVertexArrayOES')
-  @DocsEditable()
   bool isVertexArray(VertexArrayObjectOes arrayObject) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('WebGLProgram')
 @Unstable()
 @Native("WebGLProgram")
 class Program extends Interceptor {
@@ -1569,9 +687,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.
 
-@DocsEditable()
-@DomName('WebGLQuery')
-@Experimental() // untriaged
 @Native("WebGLQuery")
 class Query extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -1583,8 +698,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.
 
-@DocsEditable()
-@DomName('WebGLRenderbuffer')
 @Unstable()
 @Native("WebGLRenderbuffer")
 class Renderbuffer extends Interceptor {
@@ -1597,10 +710,8 @@
 // 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.
 
-@DomName('WebGLRenderingContext')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
-@Experimental()
 @Unstable()
 @Native("WebGLRenderingContext")
 class RenderingContext extends Interceptor implements CanvasRenderingContext {
@@ -1612,1661 +723,259 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => JS('bool', '!!(window.WebGLRenderingContext)');
 
-  @DomName('WebGLRenderingContext.canvas')
-  @DocsEditable()
-  @Experimental() // untriaged
   final CanvasElement canvas;
 
-  @DomName('WebGLRenderingContext.ACTIVE_ATTRIBUTES')
-  @DocsEditable()
-  static const int ACTIVE_ATTRIBUTES = 0x8B89;
-
-  @DomName('WebGLRenderingContext.ACTIVE_TEXTURE')
-  @DocsEditable()
-  static const int ACTIVE_TEXTURE = 0x84E0;
-
-  @DomName('WebGLRenderingContext.ACTIVE_UNIFORMS')
-  @DocsEditable()
-  static const int ACTIVE_UNIFORMS = 0x8B86;
-
-  @DomName('WebGLRenderingContext.ALIASED_LINE_WIDTH_RANGE')
-  @DocsEditable()
-  static const int ALIASED_LINE_WIDTH_RANGE = 0x846E;
-
-  @DomName('WebGLRenderingContext.ALIASED_POINT_SIZE_RANGE')
-  @DocsEditable()
-  static const int ALIASED_POINT_SIZE_RANGE = 0x846D;
-
-  @DomName('WebGLRenderingContext.ALPHA')
-  @DocsEditable()
-  static const int ALPHA = 0x1906;
-
-  @DomName('WebGLRenderingContext.ALPHA_BITS')
-  @DocsEditable()
-  static const int ALPHA_BITS = 0x0D55;
-
-  @DomName('WebGLRenderingContext.ALWAYS')
-  @DocsEditable()
-  static const int ALWAYS = 0x0207;
-
-  @DomName('WebGLRenderingContext.ARRAY_BUFFER')
-  @DocsEditable()
-  static const int ARRAY_BUFFER = 0x8892;
-
-  @DomName('WebGLRenderingContext.ARRAY_BUFFER_BINDING')
-  @DocsEditable()
-  static const int ARRAY_BUFFER_BINDING = 0x8894;
-
-  @DomName('WebGLRenderingContext.ATTACHED_SHADERS')
-  @DocsEditable()
-  static const int ATTACHED_SHADERS = 0x8B85;
-
-  @DomName('WebGLRenderingContext.BACK')
-  @DocsEditable()
-  static const int BACK = 0x0405;
-
-  @DomName('WebGLRenderingContext.BLEND')
-  @DocsEditable()
-  static const int BLEND = 0x0BE2;
-
-  @DomName('WebGLRenderingContext.BLEND_COLOR')
-  @DocsEditable()
-  static const int BLEND_COLOR = 0x8005;
-
-  @DomName('WebGLRenderingContext.BLEND_DST_ALPHA')
-  @DocsEditable()
-  static const int BLEND_DST_ALPHA = 0x80CA;
-
-  @DomName('WebGLRenderingContext.BLEND_DST_RGB')
-  @DocsEditable()
-  static const int BLEND_DST_RGB = 0x80C8;
-
-  @DomName('WebGLRenderingContext.BLEND_EQUATION')
-  @DocsEditable()
-  static const int BLEND_EQUATION = 0x8009;
-
-  @DomName('WebGLRenderingContext.BLEND_EQUATION_ALPHA')
-  @DocsEditable()
-  static const int BLEND_EQUATION_ALPHA = 0x883D;
-
-  @DomName('WebGLRenderingContext.BLEND_EQUATION_RGB')
-  @DocsEditable()
-  static const int BLEND_EQUATION_RGB = 0x8009;
-
-  @DomName('WebGLRenderingContext.BLEND_SRC_ALPHA')
-  @DocsEditable()
-  static const int BLEND_SRC_ALPHA = 0x80CB;
-
-  @DomName('WebGLRenderingContext.BLEND_SRC_RGB')
-  @DocsEditable()
-  static const int BLEND_SRC_RGB = 0x80C9;
-
-  @DomName('WebGLRenderingContext.BLUE_BITS')
-  @DocsEditable()
-  static const int BLUE_BITS = 0x0D54;
-
-  @DomName('WebGLRenderingContext.BOOL')
-  @DocsEditable()
-  static const int BOOL = 0x8B56;
-
-  @DomName('WebGLRenderingContext.BOOL_VEC2')
-  @DocsEditable()
-  static const int BOOL_VEC2 = 0x8B57;
-
-  @DomName('WebGLRenderingContext.BOOL_VEC3')
-  @DocsEditable()
-  static const int BOOL_VEC3 = 0x8B58;
-
-  @DomName('WebGLRenderingContext.BOOL_VEC4')
-  @DocsEditable()
-  static const int BOOL_VEC4 = 0x8B59;
-
-  @DomName('WebGLRenderingContext.BROWSER_DEFAULT_WEBGL')
-  @DocsEditable()
-  static const int BROWSER_DEFAULT_WEBGL = 0x9244;
-
-  @DomName('WebGLRenderingContext.BUFFER_SIZE')
-  @DocsEditable()
-  static const int BUFFER_SIZE = 0x8764;
-
-  @DomName('WebGLRenderingContext.BUFFER_USAGE')
-  @DocsEditable()
-  static const int BUFFER_USAGE = 0x8765;
-
-  @DomName('WebGLRenderingContext.BYTE')
-  @DocsEditable()
-  static const int BYTE = 0x1400;
-
-  @DomName('WebGLRenderingContext.CCW')
-  @DocsEditable()
-  static const int CCW = 0x0901;
-
-  @DomName('WebGLRenderingContext.CLAMP_TO_EDGE')
-  @DocsEditable()
-  static const int CLAMP_TO_EDGE = 0x812F;
-
-  @DomName('WebGLRenderingContext.COLOR_ATTACHMENT0')
-  @DocsEditable()
-  static const int COLOR_ATTACHMENT0 = 0x8CE0;
-
-  @DomName('WebGLRenderingContext.COLOR_BUFFER_BIT')
-  @DocsEditable()
-  static const int COLOR_BUFFER_BIT = 0x00004000;
-
-  @DomName('WebGLRenderingContext.COLOR_CLEAR_VALUE')
-  @DocsEditable()
-  static const int COLOR_CLEAR_VALUE = 0x0C22;
-
-  @DomName('WebGLRenderingContext.COLOR_WRITEMASK')
-  @DocsEditable()
-  static const int COLOR_WRITEMASK = 0x0C23;
-
-  @DomName('WebGLRenderingContext.COMPILE_STATUS')
-  @DocsEditable()
-  static const int COMPILE_STATUS = 0x8B81;
-
-  @DomName('WebGLRenderingContext.COMPRESSED_TEXTURE_FORMATS')
-  @DocsEditable()
-  static const int COMPRESSED_TEXTURE_FORMATS = 0x86A3;
-
-  @DomName('WebGLRenderingContext.CONSTANT_ALPHA')
-  @DocsEditable()
-  static const int CONSTANT_ALPHA = 0x8003;
-
-  @DomName('WebGLRenderingContext.CONSTANT_COLOR')
-  @DocsEditable()
-  static const int CONSTANT_COLOR = 0x8001;
-
-  @DomName('WebGLRenderingContext.CONTEXT_LOST_WEBGL')
-  @DocsEditable()
-  static const int CONTEXT_LOST_WEBGL = 0x9242;
-
-  @DomName('WebGLRenderingContext.CULL_FACE')
-  @DocsEditable()
-  static const int CULL_FACE = 0x0B44;
-
-  @DomName('WebGLRenderingContext.CULL_FACE_MODE')
-  @DocsEditable()
-  static const int CULL_FACE_MODE = 0x0B45;
-
-  @DomName('WebGLRenderingContext.CURRENT_PROGRAM')
-  @DocsEditable()
-  static const int CURRENT_PROGRAM = 0x8B8D;
-
-  @DomName('WebGLRenderingContext.CURRENT_VERTEX_ATTRIB')
-  @DocsEditable()
-  static const int CURRENT_VERTEX_ATTRIB = 0x8626;
-
-  @DomName('WebGLRenderingContext.CW')
-  @DocsEditable()
-  static const int CW = 0x0900;
-
-  @DomName('WebGLRenderingContext.DECR')
-  @DocsEditable()
-  static const int DECR = 0x1E03;
-
-  @DomName('WebGLRenderingContext.DECR_WRAP')
-  @DocsEditable()
-  static const int DECR_WRAP = 0x8508;
-
-  @DomName('WebGLRenderingContext.DELETE_STATUS')
-  @DocsEditable()
-  static const int DELETE_STATUS = 0x8B80;
-
-  @DomName('WebGLRenderingContext.DEPTH_ATTACHMENT')
-  @DocsEditable()
-  static const int DEPTH_ATTACHMENT = 0x8D00;
-
-  @DomName('WebGLRenderingContext.DEPTH_BITS')
-  @DocsEditable()
-  static const int DEPTH_BITS = 0x0D56;
-
-  @DomName('WebGLRenderingContext.DEPTH_BUFFER_BIT')
-  @DocsEditable()
-  static const int DEPTH_BUFFER_BIT = 0x00000100;
-
-  @DomName('WebGLRenderingContext.DEPTH_CLEAR_VALUE')
-  @DocsEditable()
-  static const int DEPTH_CLEAR_VALUE = 0x0B73;
-
-  @DomName('WebGLRenderingContext.DEPTH_COMPONENT')
-  @DocsEditable()
-  static const int DEPTH_COMPONENT = 0x1902;
-
-  @DomName('WebGLRenderingContext.DEPTH_COMPONENT16')
-  @DocsEditable()
-  static const int DEPTH_COMPONENT16 = 0x81A5;
-
-  @DomName('WebGLRenderingContext.DEPTH_FUNC')
-  @DocsEditable()
-  static const int DEPTH_FUNC = 0x0B74;
-
-  @DomName('WebGLRenderingContext.DEPTH_RANGE')
-  @DocsEditable()
-  static const int DEPTH_RANGE = 0x0B70;
-
-  @DomName('WebGLRenderingContext.DEPTH_STENCIL')
-  @DocsEditable()
-  static const int DEPTH_STENCIL = 0x84F9;
-
-  @DomName('WebGLRenderingContext.DEPTH_STENCIL_ATTACHMENT')
-  @DocsEditable()
-  static const int DEPTH_STENCIL_ATTACHMENT = 0x821A;
-
-  @DomName('WebGLRenderingContext.DEPTH_TEST')
-  @DocsEditable()
-  static const int DEPTH_TEST = 0x0B71;
-
-  @DomName('WebGLRenderingContext.DEPTH_WRITEMASK')
-  @DocsEditable()
-  static const int DEPTH_WRITEMASK = 0x0B72;
-
-  @DomName('WebGLRenderingContext.DITHER')
-  @DocsEditable()
-  static const int DITHER = 0x0BD0;
-
-  @DomName('WebGLRenderingContext.DONT_CARE')
-  @DocsEditable()
-  static const int DONT_CARE = 0x1100;
-
-  @DomName('WebGLRenderingContext.DST_ALPHA')
-  @DocsEditable()
-  static const int DST_ALPHA = 0x0304;
-
-  @DomName('WebGLRenderingContext.DST_COLOR')
-  @DocsEditable()
-  static const int DST_COLOR = 0x0306;
-
-  @DomName('WebGLRenderingContext.DYNAMIC_DRAW')
-  @DocsEditable()
-  static const int DYNAMIC_DRAW = 0x88E8;
-
-  @DomName('WebGLRenderingContext.ELEMENT_ARRAY_BUFFER')
-  @DocsEditable()
-  static const int ELEMENT_ARRAY_BUFFER = 0x8893;
-
-  @DomName('WebGLRenderingContext.ELEMENT_ARRAY_BUFFER_BINDING')
-  @DocsEditable()
-  static const int ELEMENT_ARRAY_BUFFER_BINDING = 0x8895;
-
-  @DomName('WebGLRenderingContext.EQUAL')
-  @DocsEditable()
-  static const int EQUAL = 0x0202;
-
-  @DomName('WebGLRenderingContext.FASTEST')
-  @DocsEditable()
-  static const int FASTEST = 0x1101;
-
-  @DomName('WebGLRenderingContext.FLOAT')
-  @DocsEditable()
-  static const int FLOAT = 0x1406;
-
-  @DomName('WebGLRenderingContext.FLOAT_MAT2')
-  @DocsEditable()
-  static const int FLOAT_MAT2 = 0x8B5A;
-
-  @DomName('WebGLRenderingContext.FLOAT_MAT3')
-  @DocsEditable()
-  static const int FLOAT_MAT3 = 0x8B5B;
-
-  @DomName('WebGLRenderingContext.FLOAT_MAT4')
-  @DocsEditable()
-  static const int FLOAT_MAT4 = 0x8B5C;
-
-  @DomName('WebGLRenderingContext.FLOAT_VEC2')
-  @DocsEditable()
-  static const int FLOAT_VEC2 = 0x8B50;
-
-  @DomName('WebGLRenderingContext.FLOAT_VEC3')
-  @DocsEditable()
-  static const int FLOAT_VEC3 = 0x8B51;
-
-  @DomName('WebGLRenderingContext.FLOAT_VEC4')
-  @DocsEditable()
-  static const int FLOAT_VEC4 = 0x8B52;
-
-  @DomName('WebGLRenderingContext.FRAGMENT_SHADER')
-  @DocsEditable()
-  static const int FRAGMENT_SHADER = 0x8B30;
-
-  @DomName('WebGLRenderingContext.FRAMEBUFFER')
-  @DocsEditable()
-  static const int FRAMEBUFFER = 0x8D40;
-
-  @DomName('WebGLRenderingContext.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME')
-  @DocsEditable()
-  static const int FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1;
-
-  @DomName('WebGLRenderingContext.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE')
-  @DocsEditable()
-  static const int FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0;
-
-  @DomName('WebGLRenderingContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE')
-  @DocsEditable()
-  static const int FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3;
-
-  @DomName('WebGLRenderingContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL')
-  @DocsEditable()
-  static const int FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2;
-
-  @DomName('WebGLRenderingContext.FRAMEBUFFER_BINDING')
-  @DocsEditable()
-  static const int FRAMEBUFFER_BINDING = 0x8CA6;
-
-  @DomName('WebGLRenderingContext.FRAMEBUFFER_COMPLETE')
-  @DocsEditable()
-  static const int FRAMEBUFFER_COMPLETE = 0x8CD5;
-
-  @DomName('WebGLRenderingContext.FRAMEBUFFER_INCOMPLETE_ATTACHMENT')
-  @DocsEditable()
-  static const int FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6;
-
-  @DomName('WebGLRenderingContext.FRAMEBUFFER_INCOMPLETE_DIMENSIONS')
-  @DocsEditable()
-  static const int FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8CD9;
-
-  @DomName('WebGLRenderingContext.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT')
-  @DocsEditable()
-  static const int FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7;
-
-  @DomName('WebGLRenderingContext.FRAMEBUFFER_UNSUPPORTED')
-  @DocsEditable()
-  static const int FRAMEBUFFER_UNSUPPORTED = 0x8CDD;
-
-  @DomName('WebGLRenderingContext.FRONT')
-  @DocsEditable()
-  static const int FRONT = 0x0404;
-
-  @DomName('WebGLRenderingContext.FRONT_AND_BACK')
-  @DocsEditable()
-  static const int FRONT_AND_BACK = 0x0408;
-
-  @DomName('WebGLRenderingContext.FRONT_FACE')
-  @DocsEditable()
-  static const int FRONT_FACE = 0x0B46;
-
-  @DomName('WebGLRenderingContext.FUNC_ADD')
-  @DocsEditable()
-  static const int FUNC_ADD = 0x8006;
-
-  @DomName('WebGLRenderingContext.FUNC_REVERSE_SUBTRACT')
-  @DocsEditable()
-  static const int FUNC_REVERSE_SUBTRACT = 0x800B;
-
-  @DomName('WebGLRenderingContext.FUNC_SUBTRACT')
-  @DocsEditable()
-  static const int FUNC_SUBTRACT = 0x800A;
-
-  @DomName('WebGLRenderingContext.GENERATE_MIPMAP_HINT')
-  @DocsEditable()
-  static const int GENERATE_MIPMAP_HINT = 0x8192;
-
-  @DomName('WebGLRenderingContext.GEQUAL')
-  @DocsEditable()
-  static const int GEQUAL = 0x0206;
-
-  @DomName('WebGLRenderingContext.GREATER')
-  @DocsEditable()
-  static const int GREATER = 0x0204;
-
-  @DomName('WebGLRenderingContext.GREEN_BITS')
-  @DocsEditable()
-  static const int GREEN_BITS = 0x0D53;
-
-  @DomName('WebGLRenderingContext.HIGH_FLOAT')
-  @DocsEditable()
-  static const int HIGH_FLOAT = 0x8DF2;
-
-  @DomName('WebGLRenderingContext.HIGH_INT')
-  @DocsEditable()
-  static const int HIGH_INT = 0x8DF5;
-
-  @DomName('WebGLRenderingContext.IMPLEMENTATION_COLOR_READ_FORMAT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B;
-
-  @DomName('WebGLRenderingContext.IMPLEMENTATION_COLOR_READ_TYPE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A;
-
-  @DomName('WebGLRenderingContext.INCR')
-  @DocsEditable()
-  static const int INCR = 0x1E02;
-
-  @DomName('WebGLRenderingContext.INCR_WRAP')
-  @DocsEditable()
-  static const int INCR_WRAP = 0x8507;
-
-  @DomName('WebGLRenderingContext.INT')
-  @DocsEditable()
-  static const int INT = 0x1404;
-
-  @DomName('WebGLRenderingContext.INT_VEC2')
-  @DocsEditable()
-  static const int INT_VEC2 = 0x8B53;
-
-  @DomName('WebGLRenderingContext.INT_VEC3')
-  @DocsEditable()
-  static const int INT_VEC3 = 0x8B54;
-
-  @DomName('WebGLRenderingContext.INT_VEC4')
-  @DocsEditable()
-  static const int INT_VEC4 = 0x8B55;
-
-  @DomName('WebGLRenderingContext.INVALID_ENUM')
-  @DocsEditable()
-  static const int INVALID_ENUM = 0x0500;
-
-  @DomName('WebGLRenderingContext.INVALID_FRAMEBUFFER_OPERATION')
-  @DocsEditable()
-  static const int INVALID_FRAMEBUFFER_OPERATION = 0x0506;
-
-  @DomName('WebGLRenderingContext.INVALID_OPERATION')
-  @DocsEditable()
-  static const int INVALID_OPERATION = 0x0502;
-
-  @DomName('WebGLRenderingContext.INVALID_VALUE')
-  @DocsEditable()
-  static const int INVALID_VALUE = 0x0501;
-
-  @DomName('WebGLRenderingContext.INVERT')
-  @DocsEditable()
-  static const int INVERT = 0x150A;
-
-  @DomName('WebGLRenderingContext.KEEP')
-  @DocsEditable()
-  static const int KEEP = 0x1E00;
-
-  @DomName('WebGLRenderingContext.LEQUAL')
-  @DocsEditable()
-  static const int LEQUAL = 0x0203;
-
-  @DomName('WebGLRenderingContext.LESS')
-  @DocsEditable()
-  static const int LESS = 0x0201;
-
-  @DomName('WebGLRenderingContext.LINEAR')
-  @DocsEditable()
-  static const int LINEAR = 0x2601;
-
-  @DomName('WebGLRenderingContext.LINEAR_MIPMAP_LINEAR')
-  @DocsEditable()
-  static const int LINEAR_MIPMAP_LINEAR = 0x2703;
-
-  @DomName('WebGLRenderingContext.LINEAR_MIPMAP_NEAREST')
-  @DocsEditable()
-  static const int LINEAR_MIPMAP_NEAREST = 0x2701;
-
-  @DomName('WebGLRenderingContext.LINES')
-  @DocsEditable()
-  static const int LINES = 0x0001;
-
-  @DomName('WebGLRenderingContext.LINE_LOOP')
-  @DocsEditable()
-  static const int LINE_LOOP = 0x0002;
-
-  @DomName('WebGLRenderingContext.LINE_STRIP')
-  @DocsEditable()
-  static const int LINE_STRIP = 0x0003;
-
-  @DomName('WebGLRenderingContext.LINE_WIDTH')
-  @DocsEditable()
-  static const int LINE_WIDTH = 0x0B21;
-
-  @DomName('WebGLRenderingContext.LINK_STATUS')
-  @DocsEditable()
-  static const int LINK_STATUS = 0x8B82;
-
-  @DomName('WebGLRenderingContext.LOW_FLOAT')
-  @DocsEditable()
-  static const int LOW_FLOAT = 0x8DF0;
-
-  @DomName('WebGLRenderingContext.LOW_INT')
-  @DocsEditable()
-  static const int LOW_INT = 0x8DF3;
-
-  @DomName('WebGLRenderingContext.LUMINANCE')
-  @DocsEditable()
-  static const int LUMINANCE = 0x1909;
-
-  @DomName('WebGLRenderingContext.LUMINANCE_ALPHA')
-  @DocsEditable()
-  static const int LUMINANCE_ALPHA = 0x190A;
-
-  @DomName('WebGLRenderingContext.MAX_COMBINED_TEXTURE_IMAGE_UNITS')
-  @DocsEditable()
-  static const int MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D;
-
-  @DomName('WebGLRenderingContext.MAX_CUBE_MAP_TEXTURE_SIZE')
-  @DocsEditable()
-  static const int MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C;
-
-  @DomName('WebGLRenderingContext.MAX_FRAGMENT_UNIFORM_VECTORS')
-  @DocsEditable()
-  static const int MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD;
-
-  @DomName('WebGLRenderingContext.MAX_RENDERBUFFER_SIZE')
-  @DocsEditable()
-  static const int MAX_RENDERBUFFER_SIZE = 0x84E8;
-
-  @DomName('WebGLRenderingContext.MAX_TEXTURE_IMAGE_UNITS')
-  @DocsEditable()
-  static const int MAX_TEXTURE_IMAGE_UNITS = 0x8872;
-
-  @DomName('WebGLRenderingContext.MAX_TEXTURE_SIZE')
-  @DocsEditable()
-  static const int MAX_TEXTURE_SIZE = 0x0D33;
-
-  @DomName('WebGLRenderingContext.MAX_VARYING_VECTORS')
-  @DocsEditable()
-  static const int MAX_VARYING_VECTORS = 0x8DFC;
-
-  @DomName('WebGLRenderingContext.MAX_VERTEX_ATTRIBS')
-  @DocsEditable()
-  static const int MAX_VERTEX_ATTRIBS = 0x8869;
-
-  @DomName('WebGLRenderingContext.MAX_VERTEX_TEXTURE_IMAGE_UNITS')
-  @DocsEditable()
-  static const int MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C;
-
-  @DomName('WebGLRenderingContext.MAX_VERTEX_UNIFORM_VECTORS')
-  @DocsEditable()
-  static const int MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB;
-
-  @DomName('WebGLRenderingContext.MAX_VIEWPORT_DIMS')
-  @DocsEditable()
-  static const int MAX_VIEWPORT_DIMS = 0x0D3A;
-
-  @DomName('WebGLRenderingContext.MEDIUM_FLOAT')
-  @DocsEditable()
-  static const int MEDIUM_FLOAT = 0x8DF1;
-
-  @DomName('WebGLRenderingContext.MEDIUM_INT')
-  @DocsEditable()
-  static const int MEDIUM_INT = 0x8DF4;
-
-  @DomName('WebGLRenderingContext.MIRRORED_REPEAT')
-  @DocsEditable()
-  static const int MIRRORED_REPEAT = 0x8370;
-
-  @DomName('WebGLRenderingContext.NEAREST')
-  @DocsEditable()
-  static const int NEAREST = 0x2600;
-
-  @DomName('WebGLRenderingContext.NEAREST_MIPMAP_LINEAR')
-  @DocsEditable()
-  static const int NEAREST_MIPMAP_LINEAR = 0x2702;
-
-  @DomName('WebGLRenderingContext.NEAREST_MIPMAP_NEAREST')
-  @DocsEditable()
-  static const int NEAREST_MIPMAP_NEAREST = 0x2700;
-
-  @DomName('WebGLRenderingContext.NEVER')
-  @DocsEditable()
-  static const int NEVER = 0x0200;
-
-  @DomName('WebGLRenderingContext.NICEST')
-  @DocsEditable()
-  static const int NICEST = 0x1102;
-
-  @DomName('WebGLRenderingContext.NONE')
-  @DocsEditable()
-  static const int NONE = 0;
-
-  @DomName('WebGLRenderingContext.NOTEQUAL')
-  @DocsEditable()
-  static const int NOTEQUAL = 0x0205;
-
-  @DomName('WebGLRenderingContext.NO_ERROR')
-  @DocsEditable()
-  static const int NO_ERROR = 0;
-
-  @DomName('WebGLRenderingContext.ONE')
-  @DocsEditable()
-  static const int ONE = 1;
-
-  @DomName('WebGLRenderingContext.ONE_MINUS_CONSTANT_ALPHA')
-  @DocsEditable()
-  static const int ONE_MINUS_CONSTANT_ALPHA = 0x8004;
-
-  @DomName('WebGLRenderingContext.ONE_MINUS_CONSTANT_COLOR')
-  @DocsEditable()
-  static const int ONE_MINUS_CONSTANT_COLOR = 0x8002;
-
-  @DomName('WebGLRenderingContext.ONE_MINUS_DST_ALPHA')
-  @DocsEditable()
-  static const int ONE_MINUS_DST_ALPHA = 0x0305;
-
-  @DomName('WebGLRenderingContext.ONE_MINUS_DST_COLOR')
-  @DocsEditable()
-  static const int ONE_MINUS_DST_COLOR = 0x0307;
-
-  @DomName('WebGLRenderingContext.ONE_MINUS_SRC_ALPHA')
-  @DocsEditable()
-  static const int ONE_MINUS_SRC_ALPHA = 0x0303;
-
-  @DomName('WebGLRenderingContext.ONE_MINUS_SRC_COLOR')
-  @DocsEditable()
-  static const int ONE_MINUS_SRC_COLOR = 0x0301;
-
-  @DomName('WebGLRenderingContext.OUT_OF_MEMORY')
-  @DocsEditable()
-  static const int OUT_OF_MEMORY = 0x0505;
-
-  @DomName('WebGLRenderingContext.PACK_ALIGNMENT')
-  @DocsEditable()
-  static const int PACK_ALIGNMENT = 0x0D05;
-
-  @DomName('WebGLRenderingContext.POINTS')
-  @DocsEditable()
-  static const int POINTS = 0x0000;
-
-  @DomName('WebGLRenderingContext.POLYGON_OFFSET_FACTOR')
-  @DocsEditable()
-  static const int POLYGON_OFFSET_FACTOR = 0x8038;
-
-  @DomName('WebGLRenderingContext.POLYGON_OFFSET_FILL')
-  @DocsEditable()
-  static const int POLYGON_OFFSET_FILL = 0x8037;
-
-  @DomName('WebGLRenderingContext.POLYGON_OFFSET_UNITS')
-  @DocsEditable()
-  static const int POLYGON_OFFSET_UNITS = 0x2A00;
-
-  @DomName('WebGLRenderingContext.RED_BITS')
-  @DocsEditable()
-  static const int RED_BITS = 0x0D52;
-
-  @DomName('WebGLRenderingContext.RENDERBUFFER')
-  @DocsEditable()
-  static const int RENDERBUFFER = 0x8D41;
-
-  @DomName('WebGLRenderingContext.RENDERBUFFER_ALPHA_SIZE')
-  @DocsEditable()
-  static const int RENDERBUFFER_ALPHA_SIZE = 0x8D53;
-
-  @DomName('WebGLRenderingContext.RENDERBUFFER_BINDING')
-  @DocsEditable()
-  static const int RENDERBUFFER_BINDING = 0x8CA7;
-
-  @DomName('WebGLRenderingContext.RENDERBUFFER_BLUE_SIZE')
-  @DocsEditable()
-  static const int RENDERBUFFER_BLUE_SIZE = 0x8D52;
-
-  @DomName('WebGLRenderingContext.RENDERBUFFER_DEPTH_SIZE')
-  @DocsEditable()
-  static const int RENDERBUFFER_DEPTH_SIZE = 0x8D54;
-
-  @DomName('WebGLRenderingContext.RENDERBUFFER_GREEN_SIZE')
-  @DocsEditable()
-  static const int RENDERBUFFER_GREEN_SIZE = 0x8D51;
-
-  @DomName('WebGLRenderingContext.RENDERBUFFER_HEIGHT')
-  @DocsEditable()
-  static const int RENDERBUFFER_HEIGHT = 0x8D43;
-
-  @DomName('WebGLRenderingContext.RENDERBUFFER_INTERNAL_FORMAT')
-  @DocsEditable()
-  static const int RENDERBUFFER_INTERNAL_FORMAT = 0x8D44;
-
-  @DomName('WebGLRenderingContext.RENDERBUFFER_RED_SIZE')
-  @DocsEditable()
-  static const int RENDERBUFFER_RED_SIZE = 0x8D50;
-
-  @DomName('WebGLRenderingContext.RENDERBUFFER_STENCIL_SIZE')
-  @DocsEditable()
-  static const int RENDERBUFFER_STENCIL_SIZE = 0x8D55;
-
-  @DomName('WebGLRenderingContext.RENDERBUFFER_WIDTH')
-  @DocsEditable()
-  static const int RENDERBUFFER_WIDTH = 0x8D42;
-
-  @DomName('WebGLRenderingContext.RENDERER')
-  @DocsEditable()
-  static const int RENDERER = 0x1F01;
-
-  @DomName('WebGLRenderingContext.REPEAT')
-  @DocsEditable()
-  static const int REPEAT = 0x2901;
-
-  @DomName('WebGLRenderingContext.REPLACE')
-  @DocsEditable()
-  static const int REPLACE = 0x1E01;
-
-  @DomName('WebGLRenderingContext.RGB')
-  @DocsEditable()
-  static const int RGB = 0x1907;
-
-  @DomName('WebGLRenderingContext.RGB565')
-  @DocsEditable()
-  static const int RGB565 = 0x8D62;
-
-  @DomName('WebGLRenderingContext.RGB5_A1')
-  @DocsEditable()
-  static const int RGB5_A1 = 0x8057;
-
-  @DomName('WebGLRenderingContext.RGBA')
-  @DocsEditable()
-  static const int RGBA = 0x1908;
-
-  @DomName('WebGLRenderingContext.RGBA4')
-  @DocsEditable()
-  static const int RGBA4 = 0x8056;
-
-  @DomName('WebGLRenderingContext.SAMPLER_2D')
-  @DocsEditable()
-  static const int SAMPLER_2D = 0x8B5E;
-
-  @DomName('WebGLRenderingContext.SAMPLER_CUBE')
-  @DocsEditable()
-  static const int SAMPLER_CUBE = 0x8B60;
-
-  @DomName('WebGLRenderingContext.SAMPLES')
-  @DocsEditable()
-  static const int SAMPLES = 0x80A9;
-
-  @DomName('WebGLRenderingContext.SAMPLE_ALPHA_TO_COVERAGE')
-  @DocsEditable()
-  static const int SAMPLE_ALPHA_TO_COVERAGE = 0x809E;
-
-  @DomName('WebGLRenderingContext.SAMPLE_BUFFERS')
-  @DocsEditable()
-  static const int SAMPLE_BUFFERS = 0x80A8;
-
-  @DomName('WebGLRenderingContext.SAMPLE_COVERAGE')
-  @DocsEditable()
-  static const int SAMPLE_COVERAGE = 0x80A0;
-
-  @DomName('WebGLRenderingContext.SAMPLE_COVERAGE_INVERT')
-  @DocsEditable()
-  static const int SAMPLE_COVERAGE_INVERT = 0x80AB;
-
-  @DomName('WebGLRenderingContext.SAMPLE_COVERAGE_VALUE')
-  @DocsEditable()
-  static const int SAMPLE_COVERAGE_VALUE = 0x80AA;
-
-  @DomName('WebGLRenderingContext.SCISSOR_BOX')
-  @DocsEditable()
-  static const int SCISSOR_BOX = 0x0C10;
-
-  @DomName('WebGLRenderingContext.SCISSOR_TEST')
-  @DocsEditable()
-  static const int SCISSOR_TEST = 0x0C11;
-
-  @DomName('WebGLRenderingContext.SHADER_TYPE')
-  @DocsEditable()
-  static const int SHADER_TYPE = 0x8B4F;
-
-  @DomName('WebGLRenderingContext.SHADING_LANGUAGE_VERSION')
-  @DocsEditable()
-  static const int SHADING_LANGUAGE_VERSION = 0x8B8C;
-
-  @DomName('WebGLRenderingContext.SHORT')
-  @DocsEditable()
-  static const int SHORT = 0x1402;
-
-  @DomName('WebGLRenderingContext.SRC_ALPHA')
-  @DocsEditable()
-  static const int SRC_ALPHA = 0x0302;
-
-  @DomName('WebGLRenderingContext.SRC_ALPHA_SATURATE')
-  @DocsEditable()
-  static const int SRC_ALPHA_SATURATE = 0x0308;
-
-  @DomName('WebGLRenderingContext.SRC_COLOR')
-  @DocsEditable()
-  static const int SRC_COLOR = 0x0300;
-
-  @DomName('WebGLRenderingContext.STATIC_DRAW')
-  @DocsEditable()
-  static const int STATIC_DRAW = 0x88E4;
-
-  @DomName('WebGLRenderingContext.STENCIL_ATTACHMENT')
-  @DocsEditable()
-  static const int STENCIL_ATTACHMENT = 0x8D20;
-
-  @DomName('WebGLRenderingContext.STENCIL_BACK_FAIL')
-  @DocsEditable()
-  static const int STENCIL_BACK_FAIL = 0x8801;
-
-  @DomName('WebGLRenderingContext.STENCIL_BACK_FUNC')
-  @DocsEditable()
-  static const int STENCIL_BACK_FUNC = 0x8800;
-
-  @DomName('WebGLRenderingContext.STENCIL_BACK_PASS_DEPTH_FAIL')
-  @DocsEditable()
-  static const int STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802;
-
-  @DomName('WebGLRenderingContext.STENCIL_BACK_PASS_DEPTH_PASS')
-  @DocsEditable()
-  static const int STENCIL_BACK_PASS_DEPTH_PASS = 0x8803;
-
-  @DomName('WebGLRenderingContext.STENCIL_BACK_REF')
-  @DocsEditable()
-  static const int STENCIL_BACK_REF = 0x8CA3;
-
-  @DomName('WebGLRenderingContext.STENCIL_BACK_VALUE_MASK')
-  @DocsEditable()
-  static const int STENCIL_BACK_VALUE_MASK = 0x8CA4;
-
-  @DomName('WebGLRenderingContext.STENCIL_BACK_WRITEMASK')
-  @DocsEditable()
-  static const int STENCIL_BACK_WRITEMASK = 0x8CA5;
-
-  @DomName('WebGLRenderingContext.STENCIL_BITS')
-  @DocsEditable()
-  static const int STENCIL_BITS = 0x0D57;
-
-  @DomName('WebGLRenderingContext.STENCIL_BUFFER_BIT')
-  @DocsEditable()
-  static const int STENCIL_BUFFER_BIT = 0x00000400;
-
-  @DomName('WebGLRenderingContext.STENCIL_CLEAR_VALUE')
-  @DocsEditable()
-  static const int STENCIL_CLEAR_VALUE = 0x0B91;
-
-  @DomName('WebGLRenderingContext.STENCIL_FAIL')
-  @DocsEditable()
-  static const int STENCIL_FAIL = 0x0B94;
-
-  @DomName('WebGLRenderingContext.STENCIL_FUNC')
-  @DocsEditable()
-  static const int STENCIL_FUNC = 0x0B92;
-
-  @DomName('WebGLRenderingContext.STENCIL_INDEX8')
-  @DocsEditable()
-  static const int STENCIL_INDEX8 = 0x8D48;
-
-  @DomName('WebGLRenderingContext.STENCIL_PASS_DEPTH_FAIL')
-  @DocsEditable()
-  static const int STENCIL_PASS_DEPTH_FAIL = 0x0B95;
-
-  @DomName('WebGLRenderingContext.STENCIL_PASS_DEPTH_PASS')
-  @DocsEditable()
-  static const int STENCIL_PASS_DEPTH_PASS = 0x0B96;
-
-  @DomName('WebGLRenderingContext.STENCIL_REF')
-  @DocsEditable()
-  static const int STENCIL_REF = 0x0B97;
-
-  @DomName('WebGLRenderingContext.STENCIL_TEST')
-  @DocsEditable()
-  static const int STENCIL_TEST = 0x0B90;
-
-  @DomName('WebGLRenderingContext.STENCIL_VALUE_MASK')
-  @DocsEditable()
-  static const int STENCIL_VALUE_MASK = 0x0B93;
-
-  @DomName('WebGLRenderingContext.STENCIL_WRITEMASK')
-  @DocsEditable()
-  static const int STENCIL_WRITEMASK = 0x0B98;
-
-  @DomName('WebGLRenderingContext.STREAM_DRAW')
-  @DocsEditable()
-  static const int STREAM_DRAW = 0x88E0;
-
-  @DomName('WebGLRenderingContext.SUBPIXEL_BITS')
-  @DocsEditable()
-  static const int SUBPIXEL_BITS = 0x0D50;
-
-  @DomName('WebGLRenderingContext.TEXTURE')
-  @DocsEditable()
-  static const int TEXTURE = 0x1702;
-
-  @DomName('WebGLRenderingContext.TEXTURE0')
-  @DocsEditable()
-  static const int TEXTURE0 = 0x84C0;
-
-  @DomName('WebGLRenderingContext.TEXTURE1')
-  @DocsEditable()
-  static const int TEXTURE1 = 0x84C1;
-
-  @DomName('WebGLRenderingContext.TEXTURE10')
-  @DocsEditable()
-  static const int TEXTURE10 = 0x84CA;
-
-  @DomName('WebGLRenderingContext.TEXTURE11')
-  @DocsEditable()
-  static const int TEXTURE11 = 0x84CB;
-
-  @DomName('WebGLRenderingContext.TEXTURE12')
-  @DocsEditable()
-  static const int TEXTURE12 = 0x84CC;
-
-  @DomName('WebGLRenderingContext.TEXTURE13')
-  @DocsEditable()
-  static const int TEXTURE13 = 0x84CD;
-
-  @DomName('WebGLRenderingContext.TEXTURE14')
-  @DocsEditable()
-  static const int TEXTURE14 = 0x84CE;
-
-  @DomName('WebGLRenderingContext.TEXTURE15')
-  @DocsEditable()
-  static const int TEXTURE15 = 0x84CF;
-
-  @DomName('WebGLRenderingContext.TEXTURE16')
-  @DocsEditable()
-  static const int TEXTURE16 = 0x84D0;
-
-  @DomName('WebGLRenderingContext.TEXTURE17')
-  @DocsEditable()
-  static const int TEXTURE17 = 0x84D1;
-
-  @DomName('WebGLRenderingContext.TEXTURE18')
-  @DocsEditable()
-  static const int TEXTURE18 = 0x84D2;
-
-  @DomName('WebGLRenderingContext.TEXTURE19')
-  @DocsEditable()
-  static const int TEXTURE19 = 0x84D3;
-
-  @DomName('WebGLRenderingContext.TEXTURE2')
-  @DocsEditable()
-  static const int TEXTURE2 = 0x84C2;
-
-  @DomName('WebGLRenderingContext.TEXTURE20')
-  @DocsEditable()
-  static const int TEXTURE20 = 0x84D4;
-
-  @DomName('WebGLRenderingContext.TEXTURE21')
-  @DocsEditable()
-  static const int TEXTURE21 = 0x84D5;
-
-  @DomName('WebGLRenderingContext.TEXTURE22')
-  @DocsEditable()
-  static const int TEXTURE22 = 0x84D6;
-
-  @DomName('WebGLRenderingContext.TEXTURE23')
-  @DocsEditable()
-  static const int TEXTURE23 = 0x84D7;
-
-  @DomName('WebGLRenderingContext.TEXTURE24')
-  @DocsEditable()
-  static const int TEXTURE24 = 0x84D8;
-
-  @DomName('WebGLRenderingContext.TEXTURE25')
-  @DocsEditable()
-  static const int TEXTURE25 = 0x84D9;
-
-  @DomName('WebGLRenderingContext.TEXTURE26')
-  @DocsEditable()
-  static const int TEXTURE26 = 0x84DA;
-
-  @DomName('WebGLRenderingContext.TEXTURE27')
-  @DocsEditable()
-  static const int TEXTURE27 = 0x84DB;
-
-  @DomName('WebGLRenderingContext.TEXTURE28')
-  @DocsEditable()
-  static const int TEXTURE28 = 0x84DC;
-
-  @DomName('WebGLRenderingContext.TEXTURE29')
-  @DocsEditable()
-  static const int TEXTURE29 = 0x84DD;
-
-  @DomName('WebGLRenderingContext.TEXTURE3')
-  @DocsEditable()
-  static const int TEXTURE3 = 0x84C3;
-
-  @DomName('WebGLRenderingContext.TEXTURE30')
-  @DocsEditable()
-  static const int TEXTURE30 = 0x84DE;
-
-  @DomName('WebGLRenderingContext.TEXTURE31')
-  @DocsEditable()
-  static const int TEXTURE31 = 0x84DF;
-
-  @DomName('WebGLRenderingContext.TEXTURE4')
-  @DocsEditable()
-  static const int TEXTURE4 = 0x84C4;
-
-  @DomName('WebGLRenderingContext.TEXTURE5')
-  @DocsEditable()
-  static const int TEXTURE5 = 0x84C5;
-
-  @DomName('WebGLRenderingContext.TEXTURE6')
-  @DocsEditable()
-  static const int TEXTURE6 = 0x84C6;
-
-  @DomName('WebGLRenderingContext.TEXTURE7')
-  @DocsEditable()
-  static const int TEXTURE7 = 0x84C7;
-
-  @DomName('WebGLRenderingContext.TEXTURE8')
-  @DocsEditable()
-  static const int TEXTURE8 = 0x84C8;
-
-  @DomName('WebGLRenderingContext.TEXTURE9')
-  @DocsEditable()
-  static const int TEXTURE9 = 0x84C9;
-
-  @DomName('WebGLRenderingContext.TEXTURE_2D')
-  @DocsEditable()
-  static const int TEXTURE_2D = 0x0DE1;
-
-  @DomName('WebGLRenderingContext.TEXTURE_BINDING_2D')
-  @DocsEditable()
-  static const int TEXTURE_BINDING_2D = 0x8069;
-
-  @DomName('WebGLRenderingContext.TEXTURE_BINDING_CUBE_MAP')
-  @DocsEditable()
-  static const int TEXTURE_BINDING_CUBE_MAP = 0x8514;
-
-  @DomName('WebGLRenderingContext.TEXTURE_CUBE_MAP')
-  @DocsEditable()
-  static const int TEXTURE_CUBE_MAP = 0x8513;
-
-  @DomName('WebGLRenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_X')
-  @DocsEditable()
-  static const int TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516;
-
-  @DomName('WebGLRenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_Y')
-  @DocsEditable()
-  static const int TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518;
-
-  @DomName('WebGLRenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_Z')
-  @DocsEditable()
-  static const int TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A;
-
-  @DomName('WebGLRenderingContext.TEXTURE_CUBE_MAP_POSITIVE_X')
-  @DocsEditable()
-  static const int TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515;
-
-  @DomName('WebGLRenderingContext.TEXTURE_CUBE_MAP_POSITIVE_Y')
-  @DocsEditable()
-  static const int TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517;
-
-  @DomName('WebGLRenderingContext.TEXTURE_CUBE_MAP_POSITIVE_Z')
-  @DocsEditable()
-  static const int TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519;
-
-  @DomName('WebGLRenderingContext.TEXTURE_MAG_FILTER')
-  @DocsEditable()
-  static const int TEXTURE_MAG_FILTER = 0x2800;
-
-  @DomName('WebGLRenderingContext.TEXTURE_MIN_FILTER')
-  @DocsEditable()
-  static const int TEXTURE_MIN_FILTER = 0x2801;
-
-  @DomName('WebGLRenderingContext.TEXTURE_WRAP_S')
-  @DocsEditable()
-  static const int TEXTURE_WRAP_S = 0x2802;
-
-  @DomName('WebGLRenderingContext.TEXTURE_WRAP_T')
-  @DocsEditable()
-  static const int TEXTURE_WRAP_T = 0x2803;
-
-  @DomName('WebGLRenderingContext.TRIANGLES')
-  @DocsEditable()
-  static const int TRIANGLES = 0x0004;
-
-  @DomName('WebGLRenderingContext.TRIANGLE_FAN')
-  @DocsEditable()
-  static const int TRIANGLE_FAN = 0x0006;
-
-  @DomName('WebGLRenderingContext.TRIANGLE_STRIP')
-  @DocsEditable()
-  static const int TRIANGLE_STRIP = 0x0005;
-
-  @DomName('WebGLRenderingContext.UNPACK_ALIGNMENT')
-  @DocsEditable()
-  static const int UNPACK_ALIGNMENT = 0x0CF5;
-
-  @DomName('WebGLRenderingContext.UNPACK_COLORSPACE_CONVERSION_WEBGL')
-  @DocsEditable()
-  static const int UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243;
-
-  @DomName('WebGLRenderingContext.UNPACK_FLIP_Y_WEBGL')
-  @DocsEditable()
-  static const int UNPACK_FLIP_Y_WEBGL = 0x9240;
-
-  @DomName('WebGLRenderingContext.UNPACK_PREMULTIPLY_ALPHA_WEBGL')
-  @DocsEditable()
-  static const int UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241;
-
-  @DomName('WebGLRenderingContext.UNSIGNED_BYTE')
-  @DocsEditable()
-  static const int UNSIGNED_BYTE = 0x1401;
-
-  @DomName('WebGLRenderingContext.UNSIGNED_INT')
-  @DocsEditable()
-  static const int UNSIGNED_INT = 0x1405;
-
-  @DomName('WebGLRenderingContext.UNSIGNED_SHORT')
-  @DocsEditable()
-  static const int UNSIGNED_SHORT = 0x1403;
-
-  @DomName('WebGLRenderingContext.UNSIGNED_SHORT_4_4_4_4')
-  @DocsEditable()
-  static const int UNSIGNED_SHORT_4_4_4_4 = 0x8033;
-
-  @DomName('WebGLRenderingContext.UNSIGNED_SHORT_5_5_5_1')
-  @DocsEditable()
-  static const int UNSIGNED_SHORT_5_5_5_1 = 0x8034;
-
-  @DomName('WebGLRenderingContext.UNSIGNED_SHORT_5_6_5')
-  @DocsEditable()
-  static const int UNSIGNED_SHORT_5_6_5 = 0x8363;
-
-  @DomName('WebGLRenderingContext.VALIDATE_STATUS')
-  @DocsEditable()
-  static const int VALIDATE_STATUS = 0x8B83;
-
-  @DomName('WebGLRenderingContext.VENDOR')
-  @DocsEditable()
-  static const int VENDOR = 0x1F00;
-
-  @DomName('WebGLRenderingContext.VERSION')
-  @DocsEditable()
-  static const int VERSION = 0x1F02;
-
-  @DomName('WebGLRenderingContext.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING')
-  @DocsEditable()
-  static const int VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F;
-
-  @DomName('WebGLRenderingContext.VERTEX_ATTRIB_ARRAY_ENABLED')
-  @DocsEditable()
-  static const int VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622;
-
-  @DomName('WebGLRenderingContext.VERTEX_ATTRIB_ARRAY_NORMALIZED')
-  @DocsEditable()
-  static const int VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A;
-
-  @DomName('WebGLRenderingContext.VERTEX_ATTRIB_ARRAY_POINTER')
-  @DocsEditable()
-  static const int VERTEX_ATTRIB_ARRAY_POINTER = 0x8645;
-
-  @DomName('WebGLRenderingContext.VERTEX_ATTRIB_ARRAY_SIZE')
-  @DocsEditable()
-  static const int VERTEX_ATTRIB_ARRAY_SIZE = 0x8623;
-
-  @DomName('WebGLRenderingContext.VERTEX_ATTRIB_ARRAY_STRIDE')
-  @DocsEditable()
-  static const int VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624;
-
-  @DomName('WebGLRenderingContext.VERTEX_ATTRIB_ARRAY_TYPE')
-  @DocsEditable()
-  static const int VERTEX_ATTRIB_ARRAY_TYPE = 0x8625;
-
-  @DomName('WebGLRenderingContext.VERTEX_SHADER')
-  @DocsEditable()
-  static const int VERTEX_SHADER = 0x8B31;
-
-  @DomName('WebGLRenderingContext.VIEWPORT')
-  @DocsEditable()
-  static const int VIEWPORT = 0x0BA2;
-
-  @DomName('WebGLRenderingContext.ZERO')
-  @DocsEditable()
-  static const int ZERO = 0;
-
   // From WebGLRenderingContextBase
 
-  @DomName('WebGLRenderingContext.drawingBufferHeight')
-  @DocsEditable()
   final int drawingBufferHeight;
 
-  @DomName('WebGLRenderingContext.drawingBufferWidth')
-  @DocsEditable()
   final int drawingBufferWidth;
 
-  @DomName('WebGLRenderingContext.activeTexture')
-  @DocsEditable()
   void activeTexture(int texture) native;
 
-  @DomName('WebGLRenderingContext.attachShader')
-  @DocsEditable()
   void attachShader(Program program, Shader shader) native;
 
-  @DomName('WebGLRenderingContext.bindAttribLocation')
-  @DocsEditable()
   void bindAttribLocation(Program program, int index, String name) native;
 
-  @DomName('WebGLRenderingContext.bindBuffer')
-  @DocsEditable()
   void bindBuffer(int target, Buffer buffer) native;
 
-  @DomName('WebGLRenderingContext.bindFramebuffer')
-  @DocsEditable()
   void bindFramebuffer(int target, Framebuffer framebuffer) native;
 
-  @DomName('WebGLRenderingContext.bindRenderbuffer')
-  @DocsEditable()
   void bindRenderbuffer(int target, Renderbuffer renderbuffer) native;
 
-  @DomName('WebGLRenderingContext.bindTexture')
-  @DocsEditable()
   void bindTexture(int target, Texture texture) native;
 
-  @DomName('WebGLRenderingContext.blendColor')
-  @DocsEditable()
   void blendColor(num red, num green, num blue, num alpha) native;
 
-  @DomName('WebGLRenderingContext.blendEquation')
-  @DocsEditable()
   void blendEquation(int mode) native;
 
-  @DomName('WebGLRenderingContext.blendEquationSeparate')
-  @DocsEditable()
   void blendEquationSeparate(int modeRGB, int modeAlpha) native;
 
-  @DomName('WebGLRenderingContext.blendFunc')
-  @DocsEditable()
   void blendFunc(int sfactor, int dfactor) native;
 
-  @DomName('WebGLRenderingContext.blendFuncSeparate')
-  @DocsEditable()
   void blendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha)
       native;
 
-  @DomName('WebGLRenderingContext.bufferData')
-  @DocsEditable()
   void bufferData(int target, data_OR_size, int usage) native;
 
-  @DomName('WebGLRenderingContext.bufferSubData')
-  @DocsEditable()
   void bufferSubData(int target, int offset, data) native;
 
-  @DomName('WebGLRenderingContext.checkFramebufferStatus')
-  @DocsEditable()
   int checkFramebufferStatus(int target) native;
 
-  @DomName('WebGLRenderingContext.clear')
-  @DocsEditable()
   void clear(int mask) native;
 
-  @DomName('WebGLRenderingContext.clearColor')
-  @DocsEditable()
   void clearColor(num red, num green, num blue, num alpha) native;
 
-  @DomName('WebGLRenderingContext.clearDepth')
-  @DocsEditable()
   void clearDepth(num depth) native;
 
-  @DomName('WebGLRenderingContext.clearStencil')
-  @DocsEditable()
   void clearStencil(int s) native;
 
-  @DomName('WebGLRenderingContext.colorMask')
-  @DocsEditable()
   void colorMask(bool red, bool green, bool blue, bool alpha) native;
 
-  @DomName('WebGLRenderingContext.commit')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future commit() => promiseToFuture(JS("", "#.commit()", this));
 
-  @DomName('WebGLRenderingContext.compileShader')
-  @DocsEditable()
   void compileShader(Shader shader) native;
 
-  @DomName('WebGLRenderingContext.compressedTexImage2D')
-  @DocsEditable()
   void compressedTexImage2D(int target, int level, int internalformat,
       int width, int height, int border, TypedData data) native;
 
-  @DomName('WebGLRenderingContext.compressedTexSubImage2D')
-  @DocsEditable()
   void compressedTexSubImage2D(int target, int level, int xoffset, int yoffset,
       int width, int height, int format, TypedData data) native;
 
-  @DomName('WebGLRenderingContext.copyTexImage2D')
-  @DocsEditable()
   void copyTexImage2D(int target, int level, int internalformat, int x, int y,
       int width, int height, int border) native;
 
-  @DomName('WebGLRenderingContext.copyTexSubImage2D')
-  @DocsEditable()
   void copyTexSubImage2D(int target, int level, int xoffset, int yoffset, int x,
       int y, int width, int height) native;
 
-  @DomName('WebGLRenderingContext.createBuffer')
-  @DocsEditable()
   Buffer createBuffer() native;
 
-  @DomName('WebGLRenderingContext.createFramebuffer')
-  @DocsEditable()
   Framebuffer createFramebuffer() native;
 
-  @DomName('WebGLRenderingContext.createProgram')
-  @DocsEditable()
   Program createProgram() native;
 
-  @DomName('WebGLRenderingContext.createRenderbuffer')
-  @DocsEditable()
   Renderbuffer createRenderbuffer() native;
 
-  @DomName('WebGLRenderingContext.createShader')
-  @DocsEditable()
   Shader createShader(int type) native;
 
-  @DomName('WebGLRenderingContext.createTexture')
-  @DocsEditable()
   Texture createTexture() native;
 
-  @DomName('WebGLRenderingContext.cullFace')
-  @DocsEditable()
   void cullFace(int mode) native;
 
-  @DomName('WebGLRenderingContext.deleteBuffer')
-  @DocsEditable()
   void deleteBuffer(Buffer buffer) native;
 
-  @DomName('WebGLRenderingContext.deleteFramebuffer')
-  @DocsEditable()
   void deleteFramebuffer(Framebuffer framebuffer) native;
 
-  @DomName('WebGLRenderingContext.deleteProgram')
-  @DocsEditable()
   void deleteProgram(Program program) native;
 
-  @DomName('WebGLRenderingContext.deleteRenderbuffer')
-  @DocsEditable()
   void deleteRenderbuffer(Renderbuffer renderbuffer) native;
 
-  @DomName('WebGLRenderingContext.deleteShader')
-  @DocsEditable()
   void deleteShader(Shader shader) native;
 
-  @DomName('WebGLRenderingContext.deleteTexture')
-  @DocsEditable()
   void deleteTexture(Texture texture) native;
 
-  @DomName('WebGLRenderingContext.depthFunc')
-  @DocsEditable()
   void depthFunc(int func) native;
 
-  @DomName('WebGLRenderingContext.depthMask')
-  @DocsEditable()
   void depthMask(bool flag) native;
 
-  @DomName('WebGLRenderingContext.depthRange')
-  @DocsEditable()
   void depthRange(num zNear, num zFar) native;
 
-  @DomName('WebGLRenderingContext.detachShader')
-  @DocsEditable()
   void detachShader(Program program, Shader shader) native;
 
-  @DomName('WebGLRenderingContext.disable')
-  @DocsEditable()
   void disable(int cap) native;
 
-  @DomName('WebGLRenderingContext.disableVertexAttribArray')
-  @DocsEditable()
   void disableVertexAttribArray(int index) native;
 
-  @DomName('WebGLRenderingContext.drawArrays')
-  @DocsEditable()
   void drawArrays(int mode, int first, int count) native;
 
-  @DomName('WebGLRenderingContext.drawElements')
-  @DocsEditable()
   void drawElements(int mode, int count, int type, int offset) native;
 
-  @DomName('WebGLRenderingContext.enable')
-  @DocsEditable()
   void enable(int cap) native;
 
-  @DomName('WebGLRenderingContext.enableVertexAttribArray')
-  @DocsEditable()
   void enableVertexAttribArray(int index) native;
 
-  @DomName('WebGLRenderingContext.finish')
-  @DocsEditable()
   void finish() native;
 
-  @DomName('WebGLRenderingContext.flush')
-  @DocsEditable()
   void flush() native;
 
-  @DomName('WebGLRenderingContext.framebufferRenderbuffer')
-  @DocsEditable()
   void framebufferRenderbuffer(int target, int attachment,
       int renderbuffertarget, Renderbuffer renderbuffer) native;
 
-  @DomName('WebGLRenderingContext.framebufferTexture2D')
-  @DocsEditable()
   void framebufferTexture2D(int target, int attachment, int textarget,
       Texture texture, int level) native;
 
-  @DomName('WebGLRenderingContext.frontFace')
-  @DocsEditable()
   void frontFace(int mode) native;
 
-  @DomName('WebGLRenderingContext.generateMipmap')
-  @DocsEditable()
   void generateMipmap(int target) native;
 
-  @DomName('WebGLRenderingContext.getActiveAttrib')
-  @DocsEditable()
   ActiveInfo getActiveAttrib(Program program, int index) native;
 
-  @DomName('WebGLRenderingContext.getActiveUniform')
-  @DocsEditable()
   ActiveInfo getActiveUniform(Program program, int index) native;
 
-  @DomName('WebGLRenderingContext.getAttachedShaders')
-  @DocsEditable()
   List<Shader> getAttachedShaders(Program program) native;
 
-  @DomName('WebGLRenderingContext.getAttribLocation')
-  @DocsEditable()
   int getAttribLocation(Program program, String name) native;
 
-  @DomName('WebGLRenderingContext.getBufferParameter')
-  @DocsEditable()
   @Creates('int|Null')
   @Returns('int|Null')
   Object getBufferParameter(int target, int pname) native;
 
-  @DomName('WebGLRenderingContext.getContextAttributes')
-  @DocsEditable()
   @Creates('ContextAttributes|Null')
   Map getContextAttributes() {
     return convertNativeToDart_Dictionary(_getContextAttributes_1());
   }
 
   @JSName('getContextAttributes')
-  @DomName('WebGLRenderingContext.getContextAttributes')
-  @DocsEditable()
   @Creates('ContextAttributes|Null')
   _getContextAttributes_1() native;
 
-  @DomName('WebGLRenderingContext.getError')
-  @DocsEditable()
   int getError() native;
 
-  @DomName('WebGLRenderingContext.getExtension')
-  @DocsEditable()
   Object getExtension(String name) native;
 
-  @DomName('WebGLRenderingContext.getFramebufferAttachmentParameter')
-  @DocsEditable()
   @Creates('int|Renderbuffer|Texture|Null')
   @Returns('int|Renderbuffer|Texture|Null')
   Object getFramebufferAttachmentParameter(
       int target, int attachment, int pname) native;
 
-  @DomName('WebGLRenderingContext.getParameter')
-  @DocsEditable()
   @Creates(
       'Null|num|String|bool|JSExtendableArray|NativeFloat32List|NativeInt32List|NativeUint32List|Framebuffer|Renderbuffer|Texture')
   @Returns(
       'Null|num|String|bool|JSExtendableArray|NativeFloat32List|NativeInt32List|NativeUint32List|Framebuffer|Renderbuffer|Texture')
   Object getParameter(int pname) native;
 
-  @DomName('WebGLRenderingContext.getProgramInfoLog')
-  @DocsEditable()
   String getProgramInfoLog(Program program) native;
 
-  @DomName('WebGLRenderingContext.getProgramParameter')
-  @DocsEditable()
   @Creates('int|bool|Null')
   @Returns('int|bool|Null')
   Object getProgramParameter(Program program, int pname) native;
 
-  @DomName('WebGLRenderingContext.getRenderbufferParameter')
-  @DocsEditable()
   @Creates('int|Null')
   @Returns('int|Null')
   Object getRenderbufferParameter(int target, int pname) native;
 
-  @DomName('WebGLRenderingContext.getShaderInfoLog')
-  @DocsEditable()
   String getShaderInfoLog(Shader shader) native;
 
-  @DomName('WebGLRenderingContext.getShaderParameter')
-  @DocsEditable()
   @Creates('int|bool|Null')
   @Returns('int|bool|Null')
   Object getShaderParameter(Shader shader, int pname) native;
 
-  @DomName('WebGLRenderingContext.getShaderPrecisionFormat')
-  @DocsEditable()
   ShaderPrecisionFormat getShaderPrecisionFormat(
       int shadertype, int precisiontype) native;
 
-  @DomName('WebGLRenderingContext.getShaderSource')
-  @DocsEditable()
   String getShaderSource(Shader shader) native;
 
-  @DomName('WebGLRenderingContext.getSupportedExtensions')
-  @DocsEditable()
   List<String> getSupportedExtensions() native;
 
-  @DomName('WebGLRenderingContext.getTexParameter')
-  @DocsEditable()
   @Creates('int|Null')
   @Returns('int|Null')
   Object getTexParameter(int target, int pname) native;
 
-  @DomName('WebGLRenderingContext.getUniform')
-  @DocsEditable()
   @Creates(
       'Null|num|String|bool|JSExtendableArray|NativeFloat32List|NativeInt32List|NativeUint32List')
   @Returns(
       'Null|num|String|bool|JSExtendableArray|NativeFloat32List|NativeInt32List|NativeUint32List')
   Object getUniform(Program program, UniformLocation location) native;
 
-  @DomName('WebGLRenderingContext.getUniformLocation')
-  @DocsEditable()
   UniformLocation getUniformLocation(Program program, String name) native;
 
-  @DomName('WebGLRenderingContext.getVertexAttrib')
-  @DocsEditable()
   @Creates('Null|num|bool|NativeFloat32List|Buffer')
   @Returns('Null|num|bool|NativeFloat32List|Buffer')
   Object getVertexAttrib(int index, int pname) native;
 
-  @DomName('WebGLRenderingContext.getVertexAttribOffset')
-  @DocsEditable()
   int getVertexAttribOffset(int index, int pname) native;
 
-  @DomName('WebGLRenderingContext.hint')
-  @DocsEditable()
   void hint(int target, int mode) native;
 
-  @DomName('WebGLRenderingContext.isBuffer')
-  @DocsEditable()
   bool isBuffer(Buffer buffer) native;
 
-  @DomName('WebGLRenderingContext.isContextLost')
-  @DocsEditable()
   bool isContextLost() native;
 
-  @DomName('WebGLRenderingContext.isEnabled')
-  @DocsEditable()
   bool isEnabled(int cap) native;
 
-  @DomName('WebGLRenderingContext.isFramebuffer')
-  @DocsEditable()
   bool isFramebuffer(Framebuffer framebuffer) native;
 
-  @DomName('WebGLRenderingContext.isProgram')
-  @DocsEditable()
   bool isProgram(Program program) native;
 
-  @DomName('WebGLRenderingContext.isRenderbuffer')
-  @DocsEditable()
   bool isRenderbuffer(Renderbuffer renderbuffer) native;
 
-  @DomName('WebGLRenderingContext.isShader')
-  @DocsEditable()
   bool isShader(Shader shader) native;
 
-  @DomName('WebGLRenderingContext.isTexture')
-  @DocsEditable()
   bool isTexture(Texture texture) native;
 
-  @DomName('WebGLRenderingContext.lineWidth')
-  @DocsEditable()
   void lineWidth(num width) native;
 
-  @DomName('WebGLRenderingContext.linkProgram')
-  @DocsEditable()
   void linkProgram(Program program) native;
 
-  @DomName('WebGLRenderingContext.pixelStorei')
-  @DocsEditable()
   void pixelStorei(int pname, int param) native;
 
-  @DomName('WebGLRenderingContext.polygonOffset')
-  @DocsEditable()
   void polygonOffset(num factor, num units) native;
 
   @JSName('readPixels')
-  @DomName('WebGLRenderingContext.readPixels')
-  @DocsEditable()
   void _readPixels(int x, int y, int width, int height, int format, int type,
       TypedData pixels) native;
 
-  @DomName('WebGLRenderingContext.renderbufferStorage')
-  @DocsEditable()
   void renderbufferStorage(
       int target, int internalformat, int width, int height) native;
 
-  @DomName('WebGLRenderingContext.sampleCoverage')
-  @DocsEditable()
   void sampleCoverage(num value, bool invert) native;
 
-  @DomName('WebGLRenderingContext.scissor')
-  @DocsEditable()
   void scissor(int x, int y, int width, int height) native;
 
-  @DomName('WebGLRenderingContext.shaderSource')
-  @DocsEditable()
   void shaderSource(Shader shader, String string) native;
 
-  @DomName('WebGLRenderingContext.stencilFunc')
-  @DocsEditable()
   void stencilFunc(int func, int ref, int mask) native;
 
-  @DomName('WebGLRenderingContext.stencilFuncSeparate')
-  @DocsEditable()
   void stencilFuncSeparate(int face, int func, int ref, int mask) native;
 
-  @DomName('WebGLRenderingContext.stencilMask')
-  @DocsEditable()
   void stencilMask(int mask) native;
 
-  @DomName('WebGLRenderingContext.stencilMaskSeparate')
-  @DocsEditable()
   void stencilMaskSeparate(int face, int mask) native;
 
-  @DomName('WebGLRenderingContext.stencilOp')
-  @DocsEditable()
   void stencilOp(int fail, int zfail, int zpass) native;
 
-  @DomName('WebGLRenderingContext.stencilOpSeparate')
-  @DocsEditable()
   void stencilOpSeparate(int face, int fail, int zfail, int zpass) native;
 
-  @DomName('WebGLRenderingContext.texImage2D')
-  @DocsEditable()
   void texImage2D(
       int target,
       int level,
@@ -3362,46 +1071,28 @@
   }
 
   @JSName('texImage2D')
-  @DomName('WebGLRenderingContext.texImage2D')
-  @DocsEditable()
   void _texImage2D_1(target, level, internalformat, width, height, int border,
       format, type, TypedData pixels) native;
   @JSName('texImage2D')
-  @DomName('WebGLRenderingContext.texImage2D')
-  @DocsEditable()
   void _texImage2D_2(target, level, internalformat, format, type, pixels)
       native;
   @JSName('texImage2D')
-  @DomName('WebGLRenderingContext.texImage2D')
-  @DocsEditable()
   void _texImage2D_3(
       target, level, internalformat, format, type, ImageElement image) native;
   @JSName('texImage2D')
-  @DomName('WebGLRenderingContext.texImage2D')
-  @DocsEditable()
   void _texImage2D_4(
       target, level, internalformat, format, type, CanvasElement canvas) native;
   @JSName('texImage2D')
-  @DomName('WebGLRenderingContext.texImage2D')
-  @DocsEditable()
   void _texImage2D_5(
       target, level, internalformat, format, type, VideoElement video) native;
   @JSName('texImage2D')
-  @DomName('WebGLRenderingContext.texImage2D')
-  @DocsEditable()
   void _texImage2D_6(
       target, level, internalformat, format, type, ImageBitmap bitmap) native;
 
-  @DomName('WebGLRenderingContext.texParameterf')
-  @DocsEditable()
   void texParameterf(int target, int pname, num param) native;
 
-  @DomName('WebGLRenderingContext.texParameteri')
-  @DocsEditable()
   void texParameteri(int target, int pname, int param) native;
 
-  @DomName('WebGLRenderingContext.texSubImage2D')
-  @DocsEditable()
   void texSubImage2D(
       int target,
       int level,
@@ -3495,163 +1186,87 @@
   }
 
   @JSName('texSubImage2D')
-  @DomName('WebGLRenderingContext.texSubImage2D')
-  @DocsEditable()
   void _texSubImage2D_1(target, level, xoffset, yoffset, width, height,
       int format, type, TypedData pixels) native;
   @JSName('texSubImage2D')
-  @DomName('WebGLRenderingContext.texSubImage2D')
-  @DocsEditable()
   void _texSubImage2D_2(target, level, xoffset, yoffset, format, type, pixels)
       native;
   @JSName('texSubImage2D')
-  @DomName('WebGLRenderingContext.texSubImage2D')
-  @DocsEditable()
   void _texSubImage2D_3(
       target, level, xoffset, yoffset, format, type, ImageElement image) native;
   @JSName('texSubImage2D')
-  @DomName('WebGLRenderingContext.texSubImage2D')
-  @DocsEditable()
   void _texSubImage2D_4(target, level, xoffset, yoffset, format, type,
       CanvasElement canvas) native;
   @JSName('texSubImage2D')
-  @DomName('WebGLRenderingContext.texSubImage2D')
-  @DocsEditable()
   void _texSubImage2D_5(
       target, level, xoffset, yoffset, format, type, VideoElement video) native;
   @JSName('texSubImage2D')
-  @DomName('WebGLRenderingContext.texSubImage2D')
-  @DocsEditable()
   void _texSubImage2D_6(
       target, level, xoffset, yoffset, format, type, ImageBitmap bitmap) native;
 
-  @DomName('WebGLRenderingContext.uniform1f')
-  @DocsEditable()
   void uniform1f(UniformLocation location, num x) native;
 
-  @DomName('WebGLRenderingContext.uniform1fv')
-  @DocsEditable()
   void uniform1fv(UniformLocation location, v) native;
 
-  @DomName('WebGLRenderingContext.uniform1i')
-  @DocsEditable()
   void uniform1i(UniformLocation location, int x) native;
 
-  @DomName('WebGLRenderingContext.uniform1iv')
-  @DocsEditable()
   void uniform1iv(UniformLocation location, v) native;
 
-  @DomName('WebGLRenderingContext.uniform2f')
-  @DocsEditable()
   void uniform2f(UniformLocation location, num x, num y) native;
 
-  @DomName('WebGLRenderingContext.uniform2fv')
-  @DocsEditable()
   void uniform2fv(UniformLocation location, v) native;
 
-  @DomName('WebGLRenderingContext.uniform2i')
-  @DocsEditable()
   void uniform2i(UniformLocation location, int x, int y) native;
 
-  @DomName('WebGLRenderingContext.uniform2iv')
-  @DocsEditable()
   void uniform2iv(UniformLocation location, v) native;
 
-  @DomName('WebGLRenderingContext.uniform3f')
-  @DocsEditable()
   void uniform3f(UniformLocation location, num x, num y, num z) native;
 
-  @DomName('WebGLRenderingContext.uniform3fv')
-  @DocsEditable()
   void uniform3fv(UniformLocation location, v) native;
 
-  @DomName('WebGLRenderingContext.uniform3i')
-  @DocsEditable()
   void uniform3i(UniformLocation location, int x, int y, int z) native;
 
-  @DomName('WebGLRenderingContext.uniform3iv')
-  @DocsEditable()
   void uniform3iv(UniformLocation location, v) native;
 
-  @DomName('WebGLRenderingContext.uniform4f')
-  @DocsEditable()
   void uniform4f(UniformLocation location, num x, num y, num z, num w) native;
 
-  @DomName('WebGLRenderingContext.uniform4fv')
-  @DocsEditable()
   void uniform4fv(UniformLocation location, v) native;
 
-  @DomName('WebGLRenderingContext.uniform4i')
-  @DocsEditable()
   void uniform4i(UniformLocation location, int x, int y, int z, int w) native;
 
-  @DomName('WebGLRenderingContext.uniform4iv')
-  @DocsEditable()
   void uniform4iv(UniformLocation location, v) native;
 
-  @DomName('WebGLRenderingContext.uniformMatrix2fv')
-  @DocsEditable()
   void uniformMatrix2fv(UniformLocation location, bool transpose, array) native;
 
-  @DomName('WebGLRenderingContext.uniformMatrix3fv')
-  @DocsEditable()
   void uniformMatrix3fv(UniformLocation location, bool transpose, array) native;
 
-  @DomName('WebGLRenderingContext.uniformMatrix4fv')
-  @DocsEditable()
   void uniformMatrix4fv(UniformLocation location, bool transpose, array) native;
 
-  @DomName('WebGLRenderingContext.useProgram')
-  @DocsEditable()
   void useProgram(Program program) native;
 
-  @DomName('WebGLRenderingContext.validateProgram')
-  @DocsEditable()
   void validateProgram(Program program) native;
 
-  @DomName('WebGLRenderingContext.vertexAttrib1f')
-  @DocsEditable()
   void vertexAttrib1f(int indx, num x) native;
 
-  @DomName('WebGLRenderingContext.vertexAttrib1fv')
-  @DocsEditable()
   void vertexAttrib1fv(int indx, values) native;
 
-  @DomName('WebGLRenderingContext.vertexAttrib2f')
-  @DocsEditable()
   void vertexAttrib2f(int indx, num x, num y) native;
 
-  @DomName('WebGLRenderingContext.vertexAttrib2fv')
-  @DocsEditable()
   void vertexAttrib2fv(int indx, values) native;
 
-  @DomName('WebGLRenderingContext.vertexAttrib3f')
-  @DocsEditable()
   void vertexAttrib3f(int indx, num x, num y, num z) native;
 
-  @DomName('WebGLRenderingContext.vertexAttrib3fv')
-  @DocsEditable()
   void vertexAttrib3fv(int indx, values) native;
 
-  @DomName('WebGLRenderingContext.vertexAttrib4f')
-  @DocsEditable()
   void vertexAttrib4f(int indx, num x, num y, num z, num w) native;
 
-  @DomName('WebGLRenderingContext.vertexAttrib4fv')
-  @DocsEditable()
   void vertexAttrib4fv(int indx, values) native;
 
-  @DomName('WebGLRenderingContext.vertexAttribPointer')
-  @DocsEditable()
   void vertexAttribPointer(int indx, int size, int type, bool normalized,
       int stride, int offset) native;
 
-  @DomName('WebGLRenderingContext.viewport')
-  @DocsEditable()
   void viewport(int x, int y, int width, int height) native;
 
-  @DomName('WebGLRenderingContext.readPixels')
-  @DocsEditable()
   void readPixels(int x, int y, int width, int height, int format, int type,
       TypedData pixels) {
     _readPixels(x, y, width, height, format, type, pixels);
@@ -3737,9 +1352,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.
 
-@DocsEditable()
-@DomName('WebGL2RenderingContext')
-@Experimental() // untriaged
 @Native("WebGL2RenderingContext")
 class RenderingContext2 extends Interceptor
     implements _WebGL2RenderingContextBase, _WebGLRenderingContextBase {
@@ -3748,1603 +1360,62 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('WebGL2RenderingContext.canvas')
-  @DocsEditable()
-  @Experimental() // untriaged
   final Canvas canvas;
 
-  @DomName('WebGL2RenderingContext.ACTIVE_ATTRIBUTES')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int ACTIVE_ATTRIBUTES = 0x8B89;
-
-  @DomName('WebGL2RenderingContext.ACTIVE_TEXTURE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int ACTIVE_TEXTURE = 0x84E0;
-
-  @DomName('WebGL2RenderingContext.ACTIVE_UNIFORMS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int ACTIVE_UNIFORMS = 0x8B86;
-
-  @DomName('WebGL2RenderingContext.ALIASED_LINE_WIDTH_RANGE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int ALIASED_LINE_WIDTH_RANGE = 0x846E;
-
-  @DomName('WebGL2RenderingContext.ALIASED_POINT_SIZE_RANGE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int ALIASED_POINT_SIZE_RANGE = 0x846D;
-
-  @DomName('WebGL2RenderingContext.ALPHA')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int ALPHA = 0x1906;
-
-  @DomName('WebGL2RenderingContext.ALPHA_BITS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int ALPHA_BITS = 0x0D55;
-
-  @DomName('WebGL2RenderingContext.ALWAYS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int ALWAYS = 0x0207;
-
-  @DomName('WebGL2RenderingContext.ARRAY_BUFFER')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int ARRAY_BUFFER = 0x8892;
-
-  @DomName('WebGL2RenderingContext.ARRAY_BUFFER_BINDING')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int ARRAY_BUFFER_BINDING = 0x8894;
-
-  @DomName('WebGL2RenderingContext.ATTACHED_SHADERS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int ATTACHED_SHADERS = 0x8B85;
-
-  @DomName('WebGL2RenderingContext.BACK')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int BACK = 0x0405;
-
-  @DomName('WebGL2RenderingContext.BLEND')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int BLEND = 0x0BE2;
-
-  @DomName('WebGL2RenderingContext.BLEND_COLOR')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int BLEND_COLOR = 0x8005;
-
-  @DomName('WebGL2RenderingContext.BLEND_DST_ALPHA')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int BLEND_DST_ALPHA = 0x80CA;
-
-  @DomName('WebGL2RenderingContext.BLEND_DST_RGB')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int BLEND_DST_RGB = 0x80C8;
-
-  @DomName('WebGL2RenderingContext.BLEND_EQUATION')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int BLEND_EQUATION = 0x8009;
-
-  @DomName('WebGL2RenderingContext.BLEND_EQUATION_ALPHA')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int BLEND_EQUATION_ALPHA = 0x883D;
-
-  @DomName('WebGL2RenderingContext.BLEND_EQUATION_RGB')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int BLEND_EQUATION_RGB = 0x8009;
-
-  @DomName('WebGL2RenderingContext.BLEND_SRC_ALPHA')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int BLEND_SRC_ALPHA = 0x80CB;
-
-  @DomName('WebGL2RenderingContext.BLEND_SRC_RGB')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int BLEND_SRC_RGB = 0x80C9;
-
-  @DomName('WebGL2RenderingContext.BLUE_BITS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int BLUE_BITS = 0x0D54;
-
-  @DomName('WebGL2RenderingContext.BOOL')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int BOOL = 0x8B56;
-
-  @DomName('WebGL2RenderingContext.BOOL_VEC2')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int BOOL_VEC2 = 0x8B57;
-
-  @DomName('WebGL2RenderingContext.BOOL_VEC3')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int BOOL_VEC3 = 0x8B58;
-
-  @DomName('WebGL2RenderingContext.BOOL_VEC4')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int BOOL_VEC4 = 0x8B59;
-
-  @DomName('WebGL2RenderingContext.BROWSER_DEFAULT_WEBGL')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int BROWSER_DEFAULT_WEBGL = 0x9244;
-
-  @DomName('WebGL2RenderingContext.BUFFER_SIZE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int BUFFER_SIZE = 0x8764;
-
-  @DomName('WebGL2RenderingContext.BUFFER_USAGE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int BUFFER_USAGE = 0x8765;
-
-  @DomName('WebGL2RenderingContext.BYTE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int BYTE = 0x1400;
-
-  @DomName('WebGL2RenderingContext.CCW')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int CCW = 0x0901;
-
-  @DomName('WebGL2RenderingContext.CLAMP_TO_EDGE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int CLAMP_TO_EDGE = 0x812F;
-
-  @DomName('WebGL2RenderingContext.COLOR_ATTACHMENT0')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int COLOR_ATTACHMENT0 = 0x8CE0;
-
-  @DomName('WebGL2RenderingContext.COLOR_BUFFER_BIT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int COLOR_BUFFER_BIT = 0x00004000;
-
-  @DomName('WebGL2RenderingContext.COLOR_CLEAR_VALUE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int COLOR_CLEAR_VALUE = 0x0C22;
-
-  @DomName('WebGL2RenderingContext.COLOR_WRITEMASK')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int COLOR_WRITEMASK = 0x0C23;
-
-  @DomName('WebGL2RenderingContext.COMPILE_STATUS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int COMPILE_STATUS = 0x8B81;
-
-  @DomName('WebGL2RenderingContext.COMPRESSED_TEXTURE_FORMATS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int COMPRESSED_TEXTURE_FORMATS = 0x86A3;
-
-  @DomName('WebGL2RenderingContext.CONSTANT_ALPHA')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int CONSTANT_ALPHA = 0x8003;
-
-  @DomName('WebGL2RenderingContext.CONSTANT_COLOR')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int CONSTANT_COLOR = 0x8001;
-
-  @DomName('WebGL2RenderingContext.CONTEXT_LOST_WEBGL')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int CONTEXT_LOST_WEBGL = 0x9242;
-
-  @DomName('WebGL2RenderingContext.CULL_FACE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int CULL_FACE = 0x0B44;
-
-  @DomName('WebGL2RenderingContext.CULL_FACE_MODE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int CULL_FACE_MODE = 0x0B45;
-
-  @DomName('WebGL2RenderingContext.CURRENT_PROGRAM')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int CURRENT_PROGRAM = 0x8B8D;
-
-  @DomName('WebGL2RenderingContext.CURRENT_VERTEX_ATTRIB')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int CURRENT_VERTEX_ATTRIB = 0x8626;
-
-  @DomName('WebGL2RenderingContext.CW')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int CW = 0x0900;
-
-  @DomName('WebGL2RenderingContext.DECR')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int DECR = 0x1E03;
-
-  @DomName('WebGL2RenderingContext.DECR_WRAP')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int DECR_WRAP = 0x8508;
-
-  @DomName('WebGL2RenderingContext.DELETE_STATUS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int DELETE_STATUS = 0x8B80;
-
-  @DomName('WebGL2RenderingContext.DEPTH_ATTACHMENT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int DEPTH_ATTACHMENT = 0x8D00;
-
-  @DomName('WebGL2RenderingContext.DEPTH_BITS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int DEPTH_BITS = 0x0D56;
-
-  @DomName('WebGL2RenderingContext.DEPTH_BUFFER_BIT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int DEPTH_BUFFER_BIT = 0x00000100;
-
-  @DomName('WebGL2RenderingContext.DEPTH_CLEAR_VALUE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int DEPTH_CLEAR_VALUE = 0x0B73;
-
-  @DomName('WebGL2RenderingContext.DEPTH_COMPONENT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int DEPTH_COMPONENT = 0x1902;
-
-  @DomName('WebGL2RenderingContext.DEPTH_COMPONENT16')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int DEPTH_COMPONENT16 = 0x81A5;
-
-  @DomName('WebGL2RenderingContext.DEPTH_FUNC')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int DEPTH_FUNC = 0x0B74;
-
-  @DomName('WebGL2RenderingContext.DEPTH_RANGE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int DEPTH_RANGE = 0x0B70;
-
-  @DomName('WebGL2RenderingContext.DEPTH_STENCIL')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int DEPTH_STENCIL = 0x84F9;
-
-  @DomName('WebGL2RenderingContext.DEPTH_STENCIL_ATTACHMENT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int DEPTH_STENCIL_ATTACHMENT = 0x821A;
-
-  @DomName('WebGL2RenderingContext.DEPTH_TEST')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int DEPTH_TEST = 0x0B71;
-
-  @DomName('WebGL2RenderingContext.DEPTH_WRITEMASK')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int DEPTH_WRITEMASK = 0x0B72;
-
-  @DomName('WebGL2RenderingContext.DITHER')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int DITHER = 0x0BD0;
-
-  @DomName('WebGL2RenderingContext.DONT_CARE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int DONT_CARE = 0x1100;
-
-  @DomName('WebGL2RenderingContext.DST_ALPHA')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int DST_ALPHA = 0x0304;
-
-  @DomName('WebGL2RenderingContext.DST_COLOR')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int DST_COLOR = 0x0306;
-
-  @DomName('WebGL2RenderingContext.DYNAMIC_DRAW')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int DYNAMIC_DRAW = 0x88E8;
-
-  @DomName('WebGL2RenderingContext.ELEMENT_ARRAY_BUFFER')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int ELEMENT_ARRAY_BUFFER = 0x8893;
-
-  @DomName('WebGL2RenderingContext.ELEMENT_ARRAY_BUFFER_BINDING')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int ELEMENT_ARRAY_BUFFER_BINDING = 0x8895;
-
-  @DomName('WebGL2RenderingContext.EQUAL')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int EQUAL = 0x0202;
-
-  @DomName('WebGL2RenderingContext.FASTEST')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FASTEST = 0x1101;
-
-  @DomName('WebGL2RenderingContext.FLOAT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FLOAT = 0x1406;
-
-  @DomName('WebGL2RenderingContext.FLOAT_MAT2')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FLOAT_MAT2 = 0x8B5A;
-
-  @DomName('WebGL2RenderingContext.FLOAT_MAT3')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FLOAT_MAT3 = 0x8B5B;
-
-  @DomName('WebGL2RenderingContext.FLOAT_MAT4')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FLOAT_MAT4 = 0x8B5C;
-
-  @DomName('WebGL2RenderingContext.FLOAT_VEC2')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FLOAT_VEC2 = 0x8B50;
-
-  @DomName('WebGL2RenderingContext.FLOAT_VEC3')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FLOAT_VEC3 = 0x8B51;
-
-  @DomName('WebGL2RenderingContext.FLOAT_VEC4')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FLOAT_VEC4 = 0x8B52;
-
-  @DomName('WebGL2RenderingContext.FRAGMENT_SHADER')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FRAGMENT_SHADER = 0x8B30;
-
-  @DomName('WebGL2RenderingContext.FRAMEBUFFER')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FRAMEBUFFER = 0x8D40;
-
-  @DomName('WebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1;
-
-  @DomName('WebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0;
-
-  @DomName(
-      'WebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3;
-
-  @DomName('WebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2;
-
-  @DomName('WebGL2RenderingContext.FRAMEBUFFER_BINDING')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FRAMEBUFFER_BINDING = 0x8CA6;
-
-  @DomName('WebGL2RenderingContext.FRAMEBUFFER_COMPLETE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FRAMEBUFFER_COMPLETE = 0x8CD5;
-
-  @DomName('WebGL2RenderingContext.FRAMEBUFFER_INCOMPLETE_ATTACHMENT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6;
-
-  @DomName('WebGL2RenderingContext.FRAMEBUFFER_INCOMPLETE_DIMENSIONS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8CD9;
-
-  @DomName('WebGL2RenderingContext.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7;
-
-  @DomName('WebGL2RenderingContext.FRAMEBUFFER_UNSUPPORTED')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FRAMEBUFFER_UNSUPPORTED = 0x8CDD;
-
-  @DomName('WebGL2RenderingContext.FRONT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FRONT = 0x0404;
-
-  @DomName('WebGL2RenderingContext.FRONT_AND_BACK')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FRONT_AND_BACK = 0x0408;
-
-  @DomName('WebGL2RenderingContext.FRONT_FACE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FRONT_FACE = 0x0B46;
-
-  @DomName('WebGL2RenderingContext.FUNC_ADD')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FUNC_ADD = 0x8006;
-
-  @DomName('WebGL2RenderingContext.FUNC_REVERSE_SUBTRACT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FUNC_REVERSE_SUBTRACT = 0x800B;
-
-  @DomName('WebGL2RenderingContext.FUNC_SUBTRACT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int FUNC_SUBTRACT = 0x800A;
-
-  @DomName('WebGL2RenderingContext.GENERATE_MIPMAP_HINT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int GENERATE_MIPMAP_HINT = 0x8192;
-
-  @DomName('WebGL2RenderingContext.GEQUAL')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int GEQUAL = 0x0206;
-
-  @DomName('WebGL2RenderingContext.GREATER')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int GREATER = 0x0204;
-
-  @DomName('WebGL2RenderingContext.GREEN_BITS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int GREEN_BITS = 0x0D53;
-
-  @DomName('WebGL2RenderingContext.HIGH_FLOAT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int HIGH_FLOAT = 0x8DF2;
-
-  @DomName('WebGL2RenderingContext.HIGH_INT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int HIGH_INT = 0x8DF5;
-
-  @DomName('WebGL2RenderingContext.IMPLEMENTATION_COLOR_READ_FORMAT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B;
-
-  @DomName('WebGL2RenderingContext.IMPLEMENTATION_COLOR_READ_TYPE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A;
-
-  @DomName('WebGL2RenderingContext.INCR')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int INCR = 0x1E02;
-
-  @DomName('WebGL2RenderingContext.INCR_WRAP')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int INCR_WRAP = 0x8507;
-
-  @DomName('WebGL2RenderingContext.INT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int INT = 0x1404;
-
-  @DomName('WebGL2RenderingContext.INT_VEC2')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int INT_VEC2 = 0x8B53;
-
-  @DomName('WebGL2RenderingContext.INT_VEC3')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int INT_VEC3 = 0x8B54;
-
-  @DomName('WebGL2RenderingContext.INT_VEC4')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int INT_VEC4 = 0x8B55;
-
-  @DomName('WebGL2RenderingContext.INVALID_ENUM')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int INVALID_ENUM = 0x0500;
-
-  @DomName('WebGL2RenderingContext.INVALID_FRAMEBUFFER_OPERATION')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int INVALID_FRAMEBUFFER_OPERATION = 0x0506;
-
-  @DomName('WebGL2RenderingContext.INVALID_OPERATION')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int INVALID_OPERATION = 0x0502;
-
-  @DomName('WebGL2RenderingContext.INVALID_VALUE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int INVALID_VALUE = 0x0501;
-
-  @DomName('WebGL2RenderingContext.INVERT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int INVERT = 0x150A;
-
-  @DomName('WebGL2RenderingContext.KEEP')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int KEEP = 0x1E00;
-
-  @DomName('WebGL2RenderingContext.LEQUAL')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int LEQUAL = 0x0203;
-
-  @DomName('WebGL2RenderingContext.LESS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int LESS = 0x0201;
-
-  @DomName('WebGL2RenderingContext.LINEAR')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int LINEAR = 0x2601;
-
-  @DomName('WebGL2RenderingContext.LINEAR_MIPMAP_LINEAR')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int LINEAR_MIPMAP_LINEAR = 0x2703;
-
-  @DomName('WebGL2RenderingContext.LINEAR_MIPMAP_NEAREST')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int LINEAR_MIPMAP_NEAREST = 0x2701;
-
-  @DomName('WebGL2RenderingContext.LINES')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int LINES = 0x0001;
-
-  @DomName('WebGL2RenderingContext.LINE_LOOP')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int LINE_LOOP = 0x0002;
-
-  @DomName('WebGL2RenderingContext.LINE_STRIP')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int LINE_STRIP = 0x0003;
-
-  @DomName('WebGL2RenderingContext.LINE_WIDTH')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int LINE_WIDTH = 0x0B21;
-
-  @DomName('WebGL2RenderingContext.LINK_STATUS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int LINK_STATUS = 0x8B82;
-
-  @DomName('WebGL2RenderingContext.LOW_FLOAT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int LOW_FLOAT = 0x8DF0;
-
-  @DomName('WebGL2RenderingContext.LOW_INT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int LOW_INT = 0x8DF3;
-
-  @DomName('WebGL2RenderingContext.LUMINANCE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int LUMINANCE = 0x1909;
-
-  @DomName('WebGL2RenderingContext.LUMINANCE_ALPHA')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int LUMINANCE_ALPHA = 0x190A;
-
-  @DomName('WebGL2RenderingContext.MAX_COMBINED_TEXTURE_IMAGE_UNITS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D;
-
-  @DomName('WebGL2RenderingContext.MAX_CUBE_MAP_TEXTURE_SIZE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C;
-
-  @DomName('WebGL2RenderingContext.MAX_FRAGMENT_UNIFORM_VECTORS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD;
-
-  @DomName('WebGL2RenderingContext.MAX_RENDERBUFFER_SIZE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int MAX_RENDERBUFFER_SIZE = 0x84E8;
-
-  @DomName('WebGL2RenderingContext.MAX_TEXTURE_IMAGE_UNITS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int MAX_TEXTURE_IMAGE_UNITS = 0x8872;
-
-  @DomName('WebGL2RenderingContext.MAX_TEXTURE_SIZE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int MAX_TEXTURE_SIZE = 0x0D33;
-
-  @DomName('WebGL2RenderingContext.MAX_VARYING_VECTORS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int MAX_VARYING_VECTORS = 0x8DFC;
-
-  @DomName('WebGL2RenderingContext.MAX_VERTEX_ATTRIBS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int MAX_VERTEX_ATTRIBS = 0x8869;
-
-  @DomName('WebGL2RenderingContext.MAX_VERTEX_TEXTURE_IMAGE_UNITS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C;
-
-  @DomName('WebGL2RenderingContext.MAX_VERTEX_UNIFORM_VECTORS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB;
-
-  @DomName('WebGL2RenderingContext.MAX_VIEWPORT_DIMS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int MAX_VIEWPORT_DIMS = 0x0D3A;
-
-  @DomName('WebGL2RenderingContext.MEDIUM_FLOAT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int MEDIUM_FLOAT = 0x8DF1;
-
-  @DomName('WebGL2RenderingContext.MEDIUM_INT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int MEDIUM_INT = 0x8DF4;
-
-  @DomName('WebGL2RenderingContext.MIRRORED_REPEAT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int MIRRORED_REPEAT = 0x8370;
-
-  @DomName('WebGL2RenderingContext.NEAREST')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int NEAREST = 0x2600;
-
-  @DomName('WebGL2RenderingContext.NEAREST_MIPMAP_LINEAR')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int NEAREST_MIPMAP_LINEAR = 0x2702;
-
-  @DomName('WebGL2RenderingContext.NEAREST_MIPMAP_NEAREST')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int NEAREST_MIPMAP_NEAREST = 0x2700;
-
-  @DomName('WebGL2RenderingContext.NEVER')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int NEVER = 0x0200;
-
-  @DomName('WebGL2RenderingContext.NICEST')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int NICEST = 0x1102;
-
-  @DomName('WebGL2RenderingContext.NONE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int NONE = 0;
-
-  @DomName('WebGL2RenderingContext.NOTEQUAL')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int NOTEQUAL = 0x0205;
-
-  @DomName('WebGL2RenderingContext.NO_ERROR')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int NO_ERROR = 0;
-
-  @DomName('WebGL2RenderingContext.ONE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int ONE = 1;
-
-  @DomName('WebGL2RenderingContext.ONE_MINUS_CONSTANT_ALPHA')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int ONE_MINUS_CONSTANT_ALPHA = 0x8004;
-
-  @DomName('WebGL2RenderingContext.ONE_MINUS_CONSTANT_COLOR')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int ONE_MINUS_CONSTANT_COLOR = 0x8002;
-
-  @DomName('WebGL2RenderingContext.ONE_MINUS_DST_ALPHA')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int ONE_MINUS_DST_ALPHA = 0x0305;
-
-  @DomName('WebGL2RenderingContext.ONE_MINUS_DST_COLOR')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int ONE_MINUS_DST_COLOR = 0x0307;
-
-  @DomName('WebGL2RenderingContext.ONE_MINUS_SRC_ALPHA')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int ONE_MINUS_SRC_ALPHA = 0x0303;
-
-  @DomName('WebGL2RenderingContext.ONE_MINUS_SRC_COLOR')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int ONE_MINUS_SRC_COLOR = 0x0301;
-
-  @DomName('WebGL2RenderingContext.OUT_OF_MEMORY')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int OUT_OF_MEMORY = 0x0505;
-
-  @DomName('WebGL2RenderingContext.PACK_ALIGNMENT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int PACK_ALIGNMENT = 0x0D05;
-
-  @DomName('WebGL2RenderingContext.POINTS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int POINTS = 0x0000;
-
-  @DomName('WebGL2RenderingContext.POLYGON_OFFSET_FACTOR')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int POLYGON_OFFSET_FACTOR = 0x8038;
-
-  @DomName('WebGL2RenderingContext.POLYGON_OFFSET_FILL')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int POLYGON_OFFSET_FILL = 0x8037;
-
-  @DomName('WebGL2RenderingContext.POLYGON_OFFSET_UNITS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int POLYGON_OFFSET_UNITS = 0x2A00;
-
-  @DomName('WebGL2RenderingContext.RED_BITS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int RED_BITS = 0x0D52;
-
-  @DomName('WebGL2RenderingContext.RENDERBUFFER')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int RENDERBUFFER = 0x8D41;
-
-  @DomName('WebGL2RenderingContext.RENDERBUFFER_ALPHA_SIZE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int RENDERBUFFER_ALPHA_SIZE = 0x8D53;
-
-  @DomName('WebGL2RenderingContext.RENDERBUFFER_BINDING')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int RENDERBUFFER_BINDING = 0x8CA7;
-
-  @DomName('WebGL2RenderingContext.RENDERBUFFER_BLUE_SIZE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int RENDERBUFFER_BLUE_SIZE = 0x8D52;
-
-  @DomName('WebGL2RenderingContext.RENDERBUFFER_DEPTH_SIZE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int RENDERBUFFER_DEPTH_SIZE = 0x8D54;
-
-  @DomName('WebGL2RenderingContext.RENDERBUFFER_GREEN_SIZE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int RENDERBUFFER_GREEN_SIZE = 0x8D51;
-
-  @DomName('WebGL2RenderingContext.RENDERBUFFER_HEIGHT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int RENDERBUFFER_HEIGHT = 0x8D43;
-
-  @DomName('WebGL2RenderingContext.RENDERBUFFER_INTERNAL_FORMAT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int RENDERBUFFER_INTERNAL_FORMAT = 0x8D44;
-
-  @DomName('WebGL2RenderingContext.RENDERBUFFER_RED_SIZE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int RENDERBUFFER_RED_SIZE = 0x8D50;
-
-  @DomName('WebGL2RenderingContext.RENDERBUFFER_STENCIL_SIZE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int RENDERBUFFER_STENCIL_SIZE = 0x8D55;
-
-  @DomName('WebGL2RenderingContext.RENDERBUFFER_WIDTH')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int RENDERBUFFER_WIDTH = 0x8D42;
-
-  @DomName('WebGL2RenderingContext.RENDERER')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int RENDERER = 0x1F01;
-
-  @DomName('WebGL2RenderingContext.REPEAT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int REPEAT = 0x2901;
-
-  @DomName('WebGL2RenderingContext.REPLACE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int REPLACE = 0x1E01;
-
-  @DomName('WebGL2RenderingContext.RGB')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int RGB = 0x1907;
-
-  @DomName('WebGL2RenderingContext.RGB565')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int RGB565 = 0x8D62;
-
-  @DomName('WebGL2RenderingContext.RGB5_A1')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int RGB5_A1 = 0x8057;
-
-  @DomName('WebGL2RenderingContext.RGBA')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int RGBA = 0x1908;
-
-  @DomName('WebGL2RenderingContext.RGBA4')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int RGBA4 = 0x8056;
-
-  @DomName('WebGL2RenderingContext.SAMPLER_2D')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int SAMPLER_2D = 0x8B5E;
-
-  @DomName('WebGL2RenderingContext.SAMPLER_CUBE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int SAMPLER_CUBE = 0x8B60;
-
-  @DomName('WebGL2RenderingContext.SAMPLES')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int SAMPLES = 0x80A9;
-
-  @DomName('WebGL2RenderingContext.SAMPLE_ALPHA_TO_COVERAGE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int SAMPLE_ALPHA_TO_COVERAGE = 0x809E;
-
-  @DomName('WebGL2RenderingContext.SAMPLE_BUFFERS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int SAMPLE_BUFFERS = 0x80A8;
-
-  @DomName('WebGL2RenderingContext.SAMPLE_COVERAGE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int SAMPLE_COVERAGE = 0x80A0;
-
-  @DomName('WebGL2RenderingContext.SAMPLE_COVERAGE_INVERT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int SAMPLE_COVERAGE_INVERT = 0x80AB;
-
-  @DomName('WebGL2RenderingContext.SAMPLE_COVERAGE_VALUE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int SAMPLE_COVERAGE_VALUE = 0x80AA;
-
-  @DomName('WebGL2RenderingContext.SCISSOR_BOX')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int SCISSOR_BOX = 0x0C10;
-
-  @DomName('WebGL2RenderingContext.SCISSOR_TEST')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int SCISSOR_TEST = 0x0C11;
-
-  @DomName('WebGL2RenderingContext.SHADER_TYPE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int SHADER_TYPE = 0x8B4F;
-
-  @DomName('WebGL2RenderingContext.SHADING_LANGUAGE_VERSION')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int SHADING_LANGUAGE_VERSION = 0x8B8C;
-
-  @DomName('WebGL2RenderingContext.SHORT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int SHORT = 0x1402;
-
-  @DomName('WebGL2RenderingContext.SRC_ALPHA')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int SRC_ALPHA = 0x0302;
-
-  @DomName('WebGL2RenderingContext.SRC_ALPHA_SATURATE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int SRC_ALPHA_SATURATE = 0x0308;
-
-  @DomName('WebGL2RenderingContext.SRC_COLOR')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int SRC_COLOR = 0x0300;
-
-  @DomName('WebGL2RenderingContext.STATIC_DRAW')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int STATIC_DRAW = 0x88E4;
-
-  @DomName('WebGL2RenderingContext.STENCIL_ATTACHMENT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int STENCIL_ATTACHMENT = 0x8D20;
-
-  @DomName('WebGL2RenderingContext.STENCIL_BACK_FAIL')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int STENCIL_BACK_FAIL = 0x8801;
-
-  @DomName('WebGL2RenderingContext.STENCIL_BACK_FUNC')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int STENCIL_BACK_FUNC = 0x8800;
-
-  @DomName('WebGL2RenderingContext.STENCIL_BACK_PASS_DEPTH_FAIL')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802;
-
-  @DomName('WebGL2RenderingContext.STENCIL_BACK_PASS_DEPTH_PASS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int STENCIL_BACK_PASS_DEPTH_PASS = 0x8803;
-
-  @DomName('WebGL2RenderingContext.STENCIL_BACK_REF')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int STENCIL_BACK_REF = 0x8CA3;
-
-  @DomName('WebGL2RenderingContext.STENCIL_BACK_VALUE_MASK')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int STENCIL_BACK_VALUE_MASK = 0x8CA4;
-
-  @DomName('WebGL2RenderingContext.STENCIL_BACK_WRITEMASK')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int STENCIL_BACK_WRITEMASK = 0x8CA5;
-
-  @DomName('WebGL2RenderingContext.STENCIL_BITS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int STENCIL_BITS = 0x0D57;
-
-  @DomName('WebGL2RenderingContext.STENCIL_BUFFER_BIT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int STENCIL_BUFFER_BIT = 0x00000400;
-
-  @DomName('WebGL2RenderingContext.STENCIL_CLEAR_VALUE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int STENCIL_CLEAR_VALUE = 0x0B91;
-
-  @DomName('WebGL2RenderingContext.STENCIL_FAIL')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int STENCIL_FAIL = 0x0B94;
-
-  @DomName('WebGL2RenderingContext.STENCIL_FUNC')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int STENCIL_FUNC = 0x0B92;
-
-  @DomName('WebGL2RenderingContext.STENCIL_INDEX8')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int STENCIL_INDEX8 = 0x8D48;
-
-  @DomName('WebGL2RenderingContext.STENCIL_PASS_DEPTH_FAIL')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int STENCIL_PASS_DEPTH_FAIL = 0x0B95;
-
-  @DomName('WebGL2RenderingContext.STENCIL_PASS_DEPTH_PASS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int STENCIL_PASS_DEPTH_PASS = 0x0B96;
-
-  @DomName('WebGL2RenderingContext.STENCIL_REF')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int STENCIL_REF = 0x0B97;
-
-  @DomName('WebGL2RenderingContext.STENCIL_TEST')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int STENCIL_TEST = 0x0B90;
-
-  @DomName('WebGL2RenderingContext.STENCIL_VALUE_MASK')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int STENCIL_VALUE_MASK = 0x0B93;
-
-  @DomName('WebGL2RenderingContext.STENCIL_WRITEMASK')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int STENCIL_WRITEMASK = 0x0B98;
-
-  @DomName('WebGL2RenderingContext.STREAM_DRAW')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int STREAM_DRAW = 0x88E0;
-
-  @DomName('WebGL2RenderingContext.SUBPIXEL_BITS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int SUBPIXEL_BITS = 0x0D50;
-
-  @DomName('WebGL2RenderingContext.TEXTURE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE = 0x1702;
-
-  @DomName('WebGL2RenderingContext.TEXTURE0')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE0 = 0x84C0;
-
-  @DomName('WebGL2RenderingContext.TEXTURE1')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE1 = 0x84C1;
-
-  @DomName('WebGL2RenderingContext.TEXTURE10')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE10 = 0x84CA;
-
-  @DomName('WebGL2RenderingContext.TEXTURE11')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE11 = 0x84CB;
-
-  @DomName('WebGL2RenderingContext.TEXTURE12')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE12 = 0x84CC;
-
-  @DomName('WebGL2RenderingContext.TEXTURE13')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE13 = 0x84CD;
-
-  @DomName('WebGL2RenderingContext.TEXTURE14')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE14 = 0x84CE;
-
-  @DomName('WebGL2RenderingContext.TEXTURE15')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE15 = 0x84CF;
-
-  @DomName('WebGL2RenderingContext.TEXTURE16')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE16 = 0x84D0;
-
-  @DomName('WebGL2RenderingContext.TEXTURE17')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE17 = 0x84D1;
-
-  @DomName('WebGL2RenderingContext.TEXTURE18')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE18 = 0x84D2;
-
-  @DomName('WebGL2RenderingContext.TEXTURE19')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE19 = 0x84D3;
-
-  @DomName('WebGL2RenderingContext.TEXTURE2')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE2 = 0x84C2;
-
-  @DomName('WebGL2RenderingContext.TEXTURE20')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE20 = 0x84D4;
-
-  @DomName('WebGL2RenderingContext.TEXTURE21')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE21 = 0x84D5;
-
-  @DomName('WebGL2RenderingContext.TEXTURE22')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE22 = 0x84D6;
-
-  @DomName('WebGL2RenderingContext.TEXTURE23')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE23 = 0x84D7;
-
-  @DomName('WebGL2RenderingContext.TEXTURE24')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE24 = 0x84D8;
-
-  @DomName('WebGL2RenderingContext.TEXTURE25')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE25 = 0x84D9;
-
-  @DomName('WebGL2RenderingContext.TEXTURE26')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE26 = 0x84DA;
-
-  @DomName('WebGL2RenderingContext.TEXTURE27')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE27 = 0x84DB;
-
-  @DomName('WebGL2RenderingContext.TEXTURE28')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE28 = 0x84DC;
-
-  @DomName('WebGL2RenderingContext.TEXTURE29')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE29 = 0x84DD;
-
-  @DomName('WebGL2RenderingContext.TEXTURE3')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE3 = 0x84C3;
-
-  @DomName('WebGL2RenderingContext.TEXTURE30')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE30 = 0x84DE;
-
-  @DomName('WebGL2RenderingContext.TEXTURE31')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE31 = 0x84DF;
-
-  @DomName('WebGL2RenderingContext.TEXTURE4')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE4 = 0x84C4;
-
-  @DomName('WebGL2RenderingContext.TEXTURE5')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE5 = 0x84C5;
-
-  @DomName('WebGL2RenderingContext.TEXTURE6')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE6 = 0x84C6;
-
-  @DomName('WebGL2RenderingContext.TEXTURE7')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE7 = 0x84C7;
-
-  @DomName('WebGL2RenderingContext.TEXTURE8')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE8 = 0x84C8;
-
-  @DomName('WebGL2RenderingContext.TEXTURE9')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE9 = 0x84C9;
-
-  @DomName('WebGL2RenderingContext.TEXTURE_2D')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE_2D = 0x0DE1;
-
-  @DomName('WebGL2RenderingContext.TEXTURE_BINDING_2D')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE_BINDING_2D = 0x8069;
-
-  @DomName('WebGL2RenderingContext.TEXTURE_BINDING_CUBE_MAP')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE_BINDING_CUBE_MAP = 0x8514;
-
-  @DomName('WebGL2RenderingContext.TEXTURE_CUBE_MAP')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE_CUBE_MAP = 0x8513;
-
-  @DomName('WebGL2RenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_X')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516;
-
-  @DomName('WebGL2RenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_Y')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518;
-
-  @DomName('WebGL2RenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_Z')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A;
-
-  @DomName('WebGL2RenderingContext.TEXTURE_CUBE_MAP_POSITIVE_X')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515;
-
-  @DomName('WebGL2RenderingContext.TEXTURE_CUBE_MAP_POSITIVE_Y')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517;
-
-  @DomName('WebGL2RenderingContext.TEXTURE_CUBE_MAP_POSITIVE_Z')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519;
-
-  @DomName('WebGL2RenderingContext.TEXTURE_MAG_FILTER')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE_MAG_FILTER = 0x2800;
-
-  @DomName('WebGL2RenderingContext.TEXTURE_MIN_FILTER')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE_MIN_FILTER = 0x2801;
-
-  @DomName('WebGL2RenderingContext.TEXTURE_WRAP_S')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE_WRAP_S = 0x2802;
-
-  @DomName('WebGL2RenderingContext.TEXTURE_WRAP_T')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TEXTURE_WRAP_T = 0x2803;
-
-  @DomName('WebGL2RenderingContext.TRIANGLES')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TRIANGLES = 0x0004;
-
-  @DomName('WebGL2RenderingContext.TRIANGLE_FAN')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TRIANGLE_FAN = 0x0006;
-
-  @DomName('WebGL2RenderingContext.TRIANGLE_STRIP')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int TRIANGLE_STRIP = 0x0005;
-
-  @DomName('WebGL2RenderingContext.UNPACK_ALIGNMENT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int UNPACK_ALIGNMENT = 0x0CF5;
-
-  @DomName('WebGL2RenderingContext.UNPACK_COLORSPACE_CONVERSION_WEBGL')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243;
-
-  @DomName('WebGL2RenderingContext.UNPACK_FLIP_Y_WEBGL')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int UNPACK_FLIP_Y_WEBGL = 0x9240;
-
-  @DomName('WebGL2RenderingContext.UNPACK_PREMULTIPLY_ALPHA_WEBGL')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241;
-
-  @DomName('WebGL2RenderingContext.UNSIGNED_BYTE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int UNSIGNED_BYTE = 0x1401;
-
-  @DomName('WebGL2RenderingContext.UNSIGNED_INT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int UNSIGNED_INT = 0x1405;
-
-  @DomName('WebGL2RenderingContext.UNSIGNED_SHORT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int UNSIGNED_SHORT = 0x1403;
-
-  @DomName('WebGL2RenderingContext.UNSIGNED_SHORT_4_4_4_4')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int UNSIGNED_SHORT_4_4_4_4 = 0x8033;
-
-  @DomName('WebGL2RenderingContext.UNSIGNED_SHORT_5_5_5_1')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int UNSIGNED_SHORT_5_5_5_1 = 0x8034;
-
-  @DomName('WebGL2RenderingContext.UNSIGNED_SHORT_5_6_5')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int UNSIGNED_SHORT_5_6_5 = 0x8363;
-
-  @DomName('WebGL2RenderingContext.VALIDATE_STATUS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int VALIDATE_STATUS = 0x8B83;
-
-  @DomName('WebGL2RenderingContext.VENDOR')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int VENDOR = 0x1F00;
-
-  @DomName('WebGL2RenderingContext.VERSION')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int VERSION = 0x1F02;
-
-  @DomName('WebGL2RenderingContext.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F;
-
-  @DomName('WebGL2RenderingContext.VERTEX_ATTRIB_ARRAY_ENABLED')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622;
-
-  @DomName('WebGL2RenderingContext.VERTEX_ATTRIB_ARRAY_NORMALIZED')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A;
-
-  @DomName('WebGL2RenderingContext.VERTEX_ATTRIB_ARRAY_POINTER')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int VERTEX_ATTRIB_ARRAY_POINTER = 0x8645;
-
-  @DomName('WebGL2RenderingContext.VERTEX_ATTRIB_ARRAY_SIZE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int VERTEX_ATTRIB_ARRAY_SIZE = 0x8623;
-
-  @DomName('WebGL2RenderingContext.VERTEX_ATTRIB_ARRAY_STRIDE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624;
-
-  @DomName('WebGL2RenderingContext.VERTEX_ATTRIB_ARRAY_TYPE')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int VERTEX_ATTRIB_ARRAY_TYPE = 0x8625;
-
-  @DomName('WebGL2RenderingContext.VERTEX_SHADER')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int VERTEX_SHADER = 0x8B31;
-
-  @DomName('WebGL2RenderingContext.VIEWPORT')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int VIEWPORT = 0x0BA2;
-
-  @DomName('WebGL2RenderingContext.ZERO')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int ZERO = 0;
-
   // From WebGL2RenderingContextBase
 
-  @DomName('WebGL2RenderingContext.beginQuery')
-  @DocsEditable()
-  @Experimental() // untriaged
   void beginQuery(int target, Query query) native;
 
-  @DomName('WebGL2RenderingContext.beginTransformFeedback')
-  @DocsEditable()
-  @Experimental() // untriaged
   void beginTransformFeedback(int primitiveMode) native;
 
-  @DomName('WebGL2RenderingContext.bindBufferBase')
-  @DocsEditable()
-  @Experimental() // untriaged
   void bindBufferBase(int target, int index, Buffer buffer) native;
 
-  @DomName('WebGL2RenderingContext.bindBufferRange')
-  @DocsEditable()
-  @Experimental() // untriaged
   void bindBufferRange(
       int target, int index, Buffer buffer, int offset, int size) native;
 
-  @DomName('WebGL2RenderingContext.bindSampler')
-  @DocsEditable()
-  @Experimental() // untriaged
   void bindSampler(int unit, Sampler sampler) native;
 
-  @DomName('WebGL2RenderingContext.bindTransformFeedback')
-  @DocsEditable()
-  @Experimental() // untriaged
   void bindTransformFeedback(int target, TransformFeedback feedback) native;
 
-  @DomName('WebGL2RenderingContext.bindVertexArray')
-  @DocsEditable()
-  @Experimental() // untriaged
   void bindVertexArray(VertexArrayObject vertexArray) native;
 
-  @DomName('WebGL2RenderingContext.blitFramebuffer')
-  @DocsEditable()
-  @Experimental() // untriaged
   void blitFramebuffer(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0,
       int dstY0, int dstX1, int dstY1, int mask, int filter) native;
 
   @JSName('bufferData')
-  @DomName('WebGL2RenderingContext.bufferData')
-  @DocsEditable()
-  @Experimental() // untriaged
   void bufferData2(int target, TypedData srcData, int usage, int srcOffset,
       [int length]) native;
 
   @JSName('bufferSubData')
-  @DomName('WebGL2RenderingContext.bufferSubData')
-  @DocsEditable()
-  @Experimental() // untriaged
   void bufferSubData2(
       int target, int dstByteOffset, TypedData srcData, int srcOffset,
       [int length]) native;
 
-  @DomName('WebGL2RenderingContext.clearBufferfi')
-  @DocsEditable()
-  @Experimental() // untriaged
   void clearBufferfi(int buffer, int drawbuffer, num depth, int stencil) native;
 
-  @DomName('WebGL2RenderingContext.clearBufferfv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void clearBufferfv(int buffer, int drawbuffer, value, [int srcOffset]) native;
 
-  @DomName('WebGL2RenderingContext.clearBufferiv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void clearBufferiv(int buffer, int drawbuffer, value, [int srcOffset]) native;
 
-  @DomName('WebGL2RenderingContext.clearBufferuiv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void clearBufferuiv(int buffer, int drawbuffer, value, [int srcOffset])
       native;
 
-  @DomName('WebGL2RenderingContext.clientWaitSync')
-  @DocsEditable()
-  @Experimental() // untriaged
   int clientWaitSync(Sync sync, int flags, int timeout) native;
 
   @JSName('compressedTexImage2D')
-  @DomName('WebGL2RenderingContext.compressedTexImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void compressedTexImage2D2(int target, int level, int internalformat,
       int width, int height, int border, TypedData data, int srcOffset,
       [int srcLengthOverride]) native;
 
   @JSName('compressedTexImage2D')
-  @DomName('WebGL2RenderingContext.compressedTexImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void compressedTexImage2D3(int target, int level, int internalformat,
       int width, int height, int border, int imageSize, int offset) native;
 
-  @DomName('WebGL2RenderingContext.compressedTexImage3D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void compressedTexImage3D(int target, int level, int internalformat,
       int width, int height, int depth, int border, TypedData data,
       [int srcOffset, int srcLengthOverride]) native;
 
   @JSName('compressedTexImage3D')
-  @DomName('WebGL2RenderingContext.compressedTexImage3D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void compressedTexImage3D2(
       int target,
       int level,
@@ -5357,31 +1428,19 @@
       int offset) native;
 
   @JSName('compressedTexSubImage2D')
-  @DomName('WebGL2RenderingContext.compressedTexSubImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void compressedTexSubImage2D2(int target, int level, int xoffset, int yoffset,
       int width, int height, int format, TypedData data, int srcOffset,
       [int srcLengthOverride]) native;
 
   @JSName('compressedTexSubImage2D')
-  @DomName('WebGL2RenderingContext.compressedTexSubImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void compressedTexSubImage2D3(int target, int level, int xoffset, int yoffset,
       int width, int height, int format, int imageSize, int offset) native;
 
-  @DomName('WebGL2RenderingContext.compressedTexSubImage3D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void compressedTexSubImage3D(int target, int level, int xoffset, int yoffset,
       int zoffset, int width, int height, int depth, int format, TypedData data,
       [int srcOffset, int srcLengthOverride]) native;
 
   @JSName('compressedTexSubImage3D')
-  @DomName('WebGL2RenderingContext.compressedTexSubImage3D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void compressedTexSubImage3D2(
       int target,
       int level,
@@ -5395,269 +1454,122 @@
       int imageSize,
       int offset) native;
 
-  @DomName('WebGL2RenderingContext.copyBufferSubData')
-  @DocsEditable()
-  @Experimental() // untriaged
   void copyBufferSubData(int readTarget, int writeTarget, int readOffset,
       int writeOffset, int size) native;
 
-  @DomName('WebGL2RenderingContext.copyTexSubImage3D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void copyTexSubImage3D(int target, int level, int xoffset, int yoffset,
       int zoffset, int x, int y, int width, int height) native;
 
-  @DomName('WebGL2RenderingContext.createQuery')
-  @DocsEditable()
-  @Experimental() // untriaged
   Query createQuery() native;
 
-  @DomName('WebGL2RenderingContext.createSampler')
-  @DocsEditable()
-  @Experimental() // untriaged
   Sampler createSampler() native;
 
-  @DomName('WebGL2RenderingContext.createTransformFeedback')
-  @DocsEditable()
-  @Experimental() // untriaged
   TransformFeedback createTransformFeedback() native;
 
-  @DomName('WebGL2RenderingContext.createVertexArray')
-  @DocsEditable()
-  @Experimental() // untriaged
   VertexArrayObject createVertexArray() native;
 
-  @DomName('WebGL2RenderingContext.deleteQuery')
-  @DocsEditable()
-  @Experimental() // untriaged
   void deleteQuery(Query query) native;
 
-  @DomName('WebGL2RenderingContext.deleteSampler')
-  @DocsEditable()
-  @Experimental() // untriaged
   void deleteSampler(Sampler sampler) native;
 
-  @DomName('WebGL2RenderingContext.deleteSync')
-  @DocsEditable()
-  @Experimental() // untriaged
   void deleteSync(Sync sync) native;
 
-  @DomName('WebGL2RenderingContext.deleteTransformFeedback')
-  @DocsEditable()
-  @Experimental() // untriaged
   void deleteTransformFeedback(TransformFeedback feedback) native;
 
-  @DomName('WebGL2RenderingContext.deleteVertexArray')
-  @DocsEditable()
-  @Experimental() // untriaged
   void deleteVertexArray(VertexArrayObject vertexArray) native;
 
-  @DomName('WebGL2RenderingContext.drawArraysInstanced')
-  @DocsEditable()
-  @Experimental() // untriaged
   void drawArraysInstanced(int mode, int first, int count, int instanceCount)
       native;
 
-  @DomName('WebGL2RenderingContext.drawBuffers')
-  @DocsEditable()
-  @Experimental() // untriaged
   void drawBuffers(List<int> buffers) native;
 
-  @DomName('WebGL2RenderingContext.drawElementsInstanced')
-  @DocsEditable()
-  @Experimental() // untriaged
   void drawElementsInstanced(
       int mode, int count, int type, int offset, int instanceCount) native;
 
-  @DomName('WebGL2RenderingContext.drawRangeElements')
-  @DocsEditable()
-  @Experimental() // untriaged
   void drawRangeElements(
       int mode, int start, int end, int count, int type, int offset) native;
 
-  @DomName('WebGL2RenderingContext.endQuery')
-  @DocsEditable()
-  @Experimental() // untriaged
   void endQuery(int target) native;
 
-  @DomName('WebGL2RenderingContext.endTransformFeedback')
-  @DocsEditable()
-  @Experimental() // untriaged
   void endTransformFeedback() native;
 
-  @DomName('WebGL2RenderingContext.fenceSync')
-  @DocsEditable()
-  @Experimental() // untriaged
   Sync fenceSync(int condition, int flags) native;
 
-  @DomName('WebGL2RenderingContext.framebufferTextureLayer')
-  @DocsEditable()
-  @Experimental() // untriaged
   void framebufferTextureLayer(
       int target, int attachment, Texture texture, int level, int layer) native;
 
-  @DomName('WebGL2RenderingContext.getActiveUniformBlockName')
-  @DocsEditable()
-  @Experimental() // untriaged
   String getActiveUniformBlockName(Program program, int uniformBlockIndex)
       native;
 
-  @DomName('WebGL2RenderingContext.getActiveUniformBlockParameter')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object getActiveUniformBlockParameter(
       Program program, int uniformBlockIndex, int pname) native;
 
-  @DomName('WebGL2RenderingContext.getActiveUniforms')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object getActiveUniforms(Program program, List<int> uniformIndices, int pname)
       native;
 
-  @DomName('WebGL2RenderingContext.getBufferSubData')
-  @DocsEditable()
-  @Experimental() // untriaged
   void getBufferSubData(int target, int srcByteOffset, TypedData dstData,
       [int dstOffset, int length]) native;
 
-  @DomName('WebGL2RenderingContext.getFragDataLocation')
-  @DocsEditable()
-  @Experimental() // untriaged
   int getFragDataLocation(Program program, String name) native;
 
-  @DomName('WebGL2RenderingContext.getIndexedParameter')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object getIndexedParameter(int target, int index) native;
 
-  @DomName('WebGL2RenderingContext.getInternalformatParameter')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object getInternalformatParameter(int target, int internalformat, int pname)
       native;
 
-  @DomName('WebGL2RenderingContext.getQuery')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object getQuery(int target, int pname) native;
 
-  @DomName('WebGL2RenderingContext.getQueryParameter')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object getQueryParameter(Query query, int pname) native;
 
-  @DomName('WebGL2RenderingContext.getSamplerParameter')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object getSamplerParameter(Sampler sampler, int pname) native;
 
-  @DomName('WebGL2RenderingContext.getSyncParameter')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object getSyncParameter(Sync sync, int pname) native;
 
-  @DomName('WebGL2RenderingContext.getTransformFeedbackVarying')
-  @DocsEditable()
-  @Experimental() // untriaged
   ActiveInfo getTransformFeedbackVarying(Program program, int index) native;
 
-  @DomName('WebGL2RenderingContext.getUniformBlockIndex')
-  @DocsEditable()
-  @Experimental() // untriaged
   int getUniformBlockIndex(Program program, String uniformBlockName) native;
 
-  @DomName('WebGL2RenderingContext.getUniformIndices')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<int> getUniformIndices(Program program, List<String> uniformNames) {
     List uniformNames_1 = convertDartToNative_StringArray(uniformNames);
     return _getUniformIndices_1(program, uniformNames_1);
   }
 
   @JSName('getUniformIndices')
-  @DomName('WebGL2RenderingContext.getUniformIndices')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<int> _getUniformIndices_1(Program program, List uniformNames) native;
 
-  @DomName('WebGL2RenderingContext.invalidateFramebuffer')
-  @DocsEditable()
-  @Experimental() // untriaged
   void invalidateFramebuffer(int target, List<int> attachments) native;
 
-  @DomName('WebGL2RenderingContext.invalidateSubFramebuffer')
-  @DocsEditable()
-  @Experimental() // untriaged
   void invalidateSubFramebuffer(int target, List<int> attachments, int x, int y,
       int width, int height) native;
 
-  @DomName('WebGL2RenderingContext.isQuery')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool isQuery(Query query) native;
 
-  @DomName('WebGL2RenderingContext.isSampler')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool isSampler(Sampler sampler) native;
 
-  @DomName('WebGL2RenderingContext.isSync')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool isSync(Sync sync) native;
 
-  @DomName('WebGL2RenderingContext.isTransformFeedback')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool isTransformFeedback(TransformFeedback feedback) native;
 
-  @DomName('WebGL2RenderingContext.isVertexArray')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool isVertexArray(VertexArrayObject vertexArray) native;
 
-  @DomName('WebGL2RenderingContext.pauseTransformFeedback')
-  @DocsEditable()
-  @Experimental() // untriaged
   void pauseTransformFeedback() native;
 
-  @DomName('WebGL2RenderingContext.readBuffer')
-  @DocsEditable()
-  @Experimental() // untriaged
   void readBuffer(int mode) native;
 
   @JSName('readPixels')
-  @DomName('WebGL2RenderingContext.readPixels')
-  @DocsEditable()
-  @Experimental() // untriaged
   void readPixels2(int x, int y, int width, int height, int format, int type,
       dstData_OR_offset,
       [int offset]) native;
 
-  @DomName('WebGL2RenderingContext.renderbufferStorageMultisample')
-  @DocsEditable()
-  @Experimental() // untriaged
   void renderbufferStorageMultisample(int target, int samples,
       int internalformat, int width, int height) native;
 
-  @DomName('WebGL2RenderingContext.resumeTransformFeedback')
-  @DocsEditable()
-  @Experimental() // untriaged
   void resumeTransformFeedback() native;
 
-  @DomName('WebGL2RenderingContext.samplerParameterf')
-  @DocsEditable()
-  @Experimental() // untriaged
   void samplerParameterf(Sampler sampler, int pname, num param) native;
 
-  @DomName('WebGL2RenderingContext.samplerParameteri')
-  @DocsEditable()
-  @Experimental() // untriaged
   void samplerParameteri(Sampler sampler, int pname, int param) native;
 
-  @DomName('WebGL2RenderingContext.texImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void texImage2D2(
       int target,
       int level,
@@ -5773,51 +1685,27 @@
   }
 
   @JSName('texImage2D')
-  @DomName('WebGL2RenderingContext.texImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texImage2D2_1(target, level, internalformat, width, height, border,
       format, type, int offset) native;
   @JSName('texImage2D')
-  @DomName('WebGL2RenderingContext.texImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texImage2D2_2(target, level, internalformat, width, height, border,
       format, type, data) native;
   @JSName('texImage2D')
-  @DomName('WebGL2RenderingContext.texImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texImage2D2_3(target, level, internalformat, width, height, border,
       format, type, ImageElement image) native;
   @JSName('texImage2D')
-  @DomName('WebGL2RenderingContext.texImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texImage2D2_4(target, level, internalformat, width, height, border,
       format, type, CanvasElement canvas) native;
   @JSName('texImage2D')
-  @DomName('WebGL2RenderingContext.texImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texImage2D2_5(target, level, internalformat, width, height, border,
       format, type, VideoElement video) native;
   @JSName('texImage2D')
-  @DomName('WebGL2RenderingContext.texImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texImage2D2_6(target, level, internalformat, width, height, border,
       format, type, ImageBitmap bitmap) native;
   @JSName('texImage2D')
-  @DomName('WebGL2RenderingContext.texImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texImage2D2_7(target, level, internalformat, width, height, border,
       format, type, TypedData srcData, srcOffset) native;
 
-  @DomName('WebGL2RenderingContext.texImage3D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void texImage3D(
       int target,
       int level,
@@ -5958,69 +1846,36 @@
   }
 
   @JSName('texImage3D')
-  @DomName('WebGL2RenderingContext.texImage3D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texImage3D_1(target, level, internalformat, width, height, depth,
       border, format, type, int offset) native;
   @JSName('texImage3D')
-  @DomName('WebGL2RenderingContext.texImage3D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texImage3D_2(target, level, internalformat, width, height, depth,
       border, format, type, data) native;
   @JSName('texImage3D')
-  @DomName('WebGL2RenderingContext.texImage3D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texImage3D_3(target, level, internalformat, width, height, depth,
       border, format, type, ImageElement image) native;
   @JSName('texImage3D')
-  @DomName('WebGL2RenderingContext.texImage3D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texImage3D_4(target, level, internalformat, width, height, depth,
       border, format, type, CanvasElement canvas) native;
   @JSName('texImage3D')
-  @DomName('WebGL2RenderingContext.texImage3D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texImage3D_5(target, level, internalformat, width, height, depth,
       border, format, type, VideoElement video) native;
   @JSName('texImage3D')
-  @DomName('WebGL2RenderingContext.texImage3D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texImage3D_6(target, level, internalformat, width, height, depth,
       border, format, type, ImageBitmap bitmap) native;
   @JSName('texImage3D')
-  @DomName('WebGL2RenderingContext.texImage3D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texImage3D_7(target, level, internalformat, width, height, depth,
       border, format, type, TypedData pixels) native;
   @JSName('texImage3D')
-  @DomName('WebGL2RenderingContext.texImage3D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texImage3D_8(target, level, internalformat, width, height, depth,
       border, format, type, TypedData pixels, srcOffset) native;
 
-  @DomName('WebGL2RenderingContext.texStorage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void texStorage2D(
       int target, int levels, int internalformat, int width, int height) native;
 
-  @DomName('WebGL2RenderingContext.texStorage3D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void texStorage3D(int target, int levels, int internalformat, int width,
       int height, int depth) native;
 
-  @DomName('WebGL2RenderingContext.texSubImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void texSubImage2D2(
       int target,
       int level,
@@ -6136,51 +1991,27 @@
   }
 
   @JSName('texSubImage2D')
-  @DomName('WebGL2RenderingContext.texSubImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texSubImage2D2_1(target, level, xoffset, yoffset, width, height, format,
       type, int offset) native;
   @JSName('texSubImage2D')
-  @DomName('WebGL2RenderingContext.texSubImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texSubImage2D2_2(target, level, xoffset, yoffset, width, height, format,
       type, data) native;
   @JSName('texSubImage2D')
-  @DomName('WebGL2RenderingContext.texSubImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texSubImage2D2_3(target, level, xoffset, yoffset, width, height, format,
       type, ImageElement image) native;
   @JSName('texSubImage2D')
-  @DomName('WebGL2RenderingContext.texSubImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texSubImage2D2_4(target, level, xoffset, yoffset, width, height, format,
       type, CanvasElement canvas) native;
   @JSName('texSubImage2D')
-  @DomName('WebGL2RenderingContext.texSubImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texSubImage2D2_5(target, level, xoffset, yoffset, width, height, format,
       type, VideoElement video) native;
   @JSName('texSubImage2D')
-  @DomName('WebGL2RenderingContext.texSubImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texSubImage2D2_6(target, level, xoffset, yoffset, width, height, format,
       type, ImageBitmap bitmap) native;
   @JSName('texSubImage2D')
-  @DomName('WebGL2RenderingContext.texSubImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texSubImage2D2_7(target, level, xoffset, yoffset, width, height, format,
       type, TypedData srcData, srcOffset) native;
 
-  @DomName('WebGL2RenderingContext.texSubImage3D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void texSubImage3D(
       int target,
       int level,
@@ -6327,57 +2158,30 @@
   }
 
   @JSName('texSubImage3D')
-  @DomName('WebGL2RenderingContext.texSubImage3D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texSubImage3D_1(target, level, xoffset, yoffset, zoffset, width, height,
       depth, format, type, int offset) native;
   @JSName('texSubImage3D')
-  @DomName('WebGL2RenderingContext.texSubImage3D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texSubImage3D_2(target, level, xoffset, yoffset, zoffset, width, height,
       depth, format, type, data) native;
   @JSName('texSubImage3D')
-  @DomName('WebGL2RenderingContext.texSubImage3D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texSubImage3D_3(target, level, xoffset, yoffset, zoffset, width, height,
       depth, format, type, ImageElement image) native;
   @JSName('texSubImage3D')
-  @DomName('WebGL2RenderingContext.texSubImage3D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texSubImage3D_4(target, level, xoffset, yoffset, zoffset, width, height,
       depth, format, type, CanvasElement canvas) native;
   @JSName('texSubImage3D')
-  @DomName('WebGL2RenderingContext.texSubImage3D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texSubImage3D_5(target, level, xoffset, yoffset, zoffset, width, height,
       depth, format, type, VideoElement video) native;
   @JSName('texSubImage3D')
-  @DomName('WebGL2RenderingContext.texSubImage3D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texSubImage3D_6(target, level, xoffset, yoffset, zoffset, width, height,
       depth, format, type, ImageBitmap bitmap) native;
   @JSName('texSubImage3D')
-  @DomName('WebGL2RenderingContext.texSubImage3D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texSubImage3D_7(target, level, xoffset, yoffset, zoffset, width, height,
       depth, format, type, TypedData pixels) native;
   @JSName('texSubImage3D')
-  @DomName('WebGL2RenderingContext.texSubImage3D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texSubImage3D_8(target, level, xoffset, yoffset, zoffset, width, height,
       depth, format, type, TypedData pixels, srcOffset) native;
 
-  @DomName('WebGL2RenderingContext.transformFeedbackVaryings')
-  @DocsEditable()
-  @Experimental() // untriaged
   void transformFeedbackVaryings(
       Program program, List<String> varyings, int bufferMode) {
     List varyings_1 = convertDartToNative_StringArray(varyings);
@@ -6386,760 +2190,340 @@
   }
 
   @JSName('transformFeedbackVaryings')
-  @DomName('WebGL2RenderingContext.transformFeedbackVaryings')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _transformFeedbackVaryings_1(Program program, List varyings, bufferMode)
       native;
 
   @JSName('uniform1fv')
-  @DomName('WebGL2RenderingContext.uniform1fv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform1fv2(UniformLocation location, v, int srcOffset, [int srcLength])
       native;
 
   @JSName('uniform1iv')
-  @DomName('WebGL2RenderingContext.uniform1iv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform1iv2(UniformLocation location, v, int srcOffset, [int srcLength])
       native;
 
-  @DomName('WebGL2RenderingContext.uniform1ui')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform1ui(UniformLocation location, int v0) native;
 
-  @DomName('WebGL2RenderingContext.uniform1uiv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform1uiv(UniformLocation location, v, [int srcOffset, int srcLength])
       native;
 
   @JSName('uniform2fv')
-  @DomName('WebGL2RenderingContext.uniform2fv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform2fv2(UniformLocation location, v, int srcOffset, [int srcLength])
       native;
 
   @JSName('uniform2iv')
-  @DomName('WebGL2RenderingContext.uniform2iv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform2iv2(UniformLocation location, v, int srcOffset, [int srcLength])
       native;
 
-  @DomName('WebGL2RenderingContext.uniform2ui')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform2ui(UniformLocation location, int v0, int v1) native;
 
-  @DomName('WebGL2RenderingContext.uniform2uiv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform2uiv(UniformLocation location, v, [int srcOffset, int srcLength])
       native;
 
   @JSName('uniform3fv')
-  @DomName('WebGL2RenderingContext.uniform3fv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform3fv2(UniformLocation location, v, int srcOffset, [int srcLength])
       native;
 
   @JSName('uniform3iv')
-  @DomName('WebGL2RenderingContext.uniform3iv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform3iv2(UniformLocation location, v, int srcOffset, [int srcLength])
       native;
 
-  @DomName('WebGL2RenderingContext.uniform3ui')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform3ui(UniformLocation location, int v0, int v1, int v2) native;
 
-  @DomName('WebGL2RenderingContext.uniform3uiv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform3uiv(UniformLocation location, v, [int srcOffset, int srcLength])
       native;
 
   @JSName('uniform4fv')
-  @DomName('WebGL2RenderingContext.uniform4fv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform4fv2(UniformLocation location, v, int srcOffset, [int srcLength])
       native;
 
   @JSName('uniform4iv')
-  @DomName('WebGL2RenderingContext.uniform4iv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform4iv2(UniformLocation location, v, int srcOffset, [int srcLength])
       native;
 
-  @DomName('WebGL2RenderingContext.uniform4ui')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform4ui(UniformLocation location, int v0, int v1, int v2, int v3)
       native;
 
-  @DomName('WebGL2RenderingContext.uniform4uiv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform4uiv(UniformLocation location, v, [int srcOffset, int srcLength])
       native;
 
-  @DomName('WebGL2RenderingContext.uniformBlockBinding')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniformBlockBinding(
       Program program, int uniformBlockIndex, int uniformBlockBinding) native;
 
   @JSName('uniformMatrix2fv')
-  @DomName('WebGL2RenderingContext.uniformMatrix2fv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniformMatrix2fv2(
       UniformLocation location, bool transpose, array, int srcOffset,
       [int srcLength]) native;
 
-  @DomName('WebGL2RenderingContext.uniformMatrix2x3fv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniformMatrix2x3fv(UniformLocation location, bool transpose, value,
       [int srcOffset, int srcLength]) native;
 
-  @DomName('WebGL2RenderingContext.uniformMatrix2x4fv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniformMatrix2x4fv(UniformLocation location, bool transpose, value,
       [int srcOffset, int srcLength]) native;
 
   @JSName('uniformMatrix3fv')
-  @DomName('WebGL2RenderingContext.uniformMatrix3fv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniformMatrix3fv2(
       UniformLocation location, bool transpose, array, int srcOffset,
       [int srcLength]) native;
 
-  @DomName('WebGL2RenderingContext.uniformMatrix3x2fv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniformMatrix3x2fv(UniformLocation location, bool transpose, value,
       [int srcOffset, int srcLength]) native;
 
-  @DomName('WebGL2RenderingContext.uniformMatrix3x4fv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniformMatrix3x4fv(UniformLocation location, bool transpose, value,
       [int srcOffset, int srcLength]) native;
 
   @JSName('uniformMatrix4fv')
-  @DomName('WebGL2RenderingContext.uniformMatrix4fv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniformMatrix4fv2(
       UniformLocation location, bool transpose, array, int srcOffset,
       [int srcLength]) native;
 
-  @DomName('WebGL2RenderingContext.uniformMatrix4x2fv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniformMatrix4x2fv(UniformLocation location, bool transpose, value,
       [int srcOffset, int srcLength]) native;
 
-  @DomName('WebGL2RenderingContext.uniformMatrix4x3fv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniformMatrix4x3fv(UniformLocation location, bool transpose, value,
       [int srcOffset, int srcLength]) native;
 
-  @DomName('WebGL2RenderingContext.vertexAttribDivisor')
-  @DocsEditable()
-  @Experimental() // untriaged
   void vertexAttribDivisor(int index, int divisor) native;
 
-  @DomName('WebGL2RenderingContext.vertexAttribI4i')
-  @DocsEditable()
-  @Experimental() // untriaged
   void vertexAttribI4i(int index, int x, int y, int z, int w) native;
 
-  @DomName('WebGL2RenderingContext.vertexAttribI4iv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void vertexAttribI4iv(int index, v) native;
 
-  @DomName('WebGL2RenderingContext.vertexAttribI4ui')
-  @DocsEditable()
-  @Experimental() // untriaged
   void vertexAttribI4ui(int index, int x, int y, int z, int w) native;
 
-  @DomName('WebGL2RenderingContext.vertexAttribI4uiv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void vertexAttribI4uiv(int index, v) native;
 
-  @DomName('WebGL2RenderingContext.vertexAttribIPointer')
-  @DocsEditable()
-  @Experimental() // untriaged
   void vertexAttribIPointer(
       int index, int size, int type, int stride, int offset) native;
 
-  @DomName('WebGL2RenderingContext.waitSync')
-  @DocsEditable()
-  @Experimental() // untriaged
   void waitSync(Sync sync, int flags, int timeout) native;
 
   // From WebGLRenderingContextBase
 
-  @DomName('WebGL2RenderingContext.drawingBufferHeight')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int drawingBufferHeight;
 
-  @DomName('WebGL2RenderingContext.drawingBufferWidth')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int drawingBufferWidth;
 
-  @DomName('WebGL2RenderingContext.activeTexture')
-  @DocsEditable()
-  @Experimental() // untriaged
   void activeTexture(int texture) native;
 
-  @DomName('WebGL2RenderingContext.attachShader')
-  @DocsEditable()
-  @Experimental() // untriaged
   void attachShader(Program program, Shader shader) native;
 
-  @DomName('WebGL2RenderingContext.bindAttribLocation')
-  @DocsEditable()
-  @Experimental() // untriaged
   void bindAttribLocation(Program program, int index, String name) native;
 
-  @DomName('WebGL2RenderingContext.bindBuffer')
-  @DocsEditable()
-  @Experimental() // untriaged
   void bindBuffer(int target, Buffer buffer) native;
 
-  @DomName('WebGL2RenderingContext.bindFramebuffer')
-  @DocsEditable()
-  @Experimental() // untriaged
   void bindFramebuffer(int target, Framebuffer framebuffer) native;
 
-  @DomName('WebGL2RenderingContext.bindRenderbuffer')
-  @DocsEditable()
-  @Experimental() // untriaged
   void bindRenderbuffer(int target, Renderbuffer renderbuffer) native;
 
-  @DomName('WebGL2RenderingContext.bindTexture')
-  @DocsEditable()
-  @Experimental() // untriaged
   void bindTexture(int target, Texture texture) native;
 
-  @DomName('WebGL2RenderingContext.blendColor')
-  @DocsEditable()
-  @Experimental() // untriaged
   void blendColor(num red, num green, num blue, num alpha) native;
 
-  @DomName('WebGL2RenderingContext.blendEquation')
-  @DocsEditable()
-  @Experimental() // untriaged
   void blendEquation(int mode) native;
 
-  @DomName('WebGL2RenderingContext.blendEquationSeparate')
-  @DocsEditable()
-  @Experimental() // untriaged
   void blendEquationSeparate(int modeRGB, int modeAlpha) native;
 
-  @DomName('WebGL2RenderingContext.blendFunc')
-  @DocsEditable()
-  @Experimental() // untriaged
   void blendFunc(int sfactor, int dfactor) native;
 
-  @DomName('WebGL2RenderingContext.blendFuncSeparate')
-  @DocsEditable()
-  @Experimental() // untriaged
   void blendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha)
       native;
 
-  @DomName('WebGL2RenderingContext.bufferData')
-  @DocsEditable()
-  @Experimental() // untriaged
   void bufferData(int target, data_OR_size, int usage) native;
 
-  @DomName('WebGL2RenderingContext.bufferSubData')
-  @DocsEditable()
-  @Experimental() // untriaged
   void bufferSubData(int target, int offset, data) native;
 
-  @DomName('WebGL2RenderingContext.checkFramebufferStatus')
-  @DocsEditable()
-  @Experimental() // untriaged
   int checkFramebufferStatus(int target) native;
 
-  @DomName('WebGL2RenderingContext.clear')
-  @DocsEditable()
-  @Experimental() // untriaged
   void clear(int mask) native;
 
-  @DomName('WebGL2RenderingContext.clearColor')
-  @DocsEditable()
-  @Experimental() // untriaged
   void clearColor(num red, num green, num blue, num alpha) native;
 
-  @DomName('WebGL2RenderingContext.clearDepth')
-  @DocsEditable()
-  @Experimental() // untriaged
   void clearDepth(num depth) native;
 
-  @DomName('WebGL2RenderingContext.clearStencil')
-  @DocsEditable()
-  @Experimental() // untriaged
   void clearStencil(int s) native;
 
-  @DomName('WebGL2RenderingContext.colorMask')
-  @DocsEditable()
-  @Experimental() // untriaged
   void colorMask(bool red, bool green, bool blue, bool alpha) native;
 
-  @DomName('WebGL2RenderingContext.commit')
-  @DocsEditable()
-  @Experimental() // untriaged
   Future commit() => promiseToFuture(JS("", "#.commit()", this));
 
-  @DomName('WebGL2RenderingContext.compileShader')
-  @DocsEditable()
-  @Experimental() // untriaged
   void compileShader(Shader shader) native;
 
-  @DomName('WebGL2RenderingContext.compressedTexImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void compressedTexImage2D(int target, int level, int internalformat,
       int width, int height, int border, TypedData data) native;
 
-  @DomName('WebGL2RenderingContext.compressedTexSubImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void compressedTexSubImage2D(int target, int level, int xoffset, int yoffset,
       int width, int height, int format, TypedData data) native;
 
-  @DomName('WebGL2RenderingContext.copyTexImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void copyTexImage2D(int target, int level, int internalformat, int x, int y,
       int width, int height, int border) native;
 
-  @DomName('WebGL2RenderingContext.copyTexSubImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void copyTexSubImage2D(int target, int level, int xoffset, int yoffset, int x,
       int y, int width, int height) native;
 
-  @DomName('WebGL2RenderingContext.createBuffer')
-  @DocsEditable()
-  @Experimental() // untriaged
   Buffer createBuffer() native;
 
-  @DomName('WebGL2RenderingContext.createFramebuffer')
-  @DocsEditable()
-  @Experimental() // untriaged
   Framebuffer createFramebuffer() native;
 
-  @DomName('WebGL2RenderingContext.createProgram')
-  @DocsEditable()
-  @Experimental() // untriaged
   Program createProgram() native;
 
-  @DomName('WebGL2RenderingContext.createRenderbuffer')
-  @DocsEditable()
-  @Experimental() // untriaged
   Renderbuffer createRenderbuffer() native;
 
-  @DomName('WebGL2RenderingContext.createShader')
-  @DocsEditable()
-  @Experimental() // untriaged
   Shader createShader(int type) native;
 
-  @DomName('WebGL2RenderingContext.createTexture')
-  @DocsEditable()
-  @Experimental() // untriaged
   Texture createTexture() native;
 
-  @DomName('WebGL2RenderingContext.cullFace')
-  @DocsEditable()
-  @Experimental() // untriaged
   void cullFace(int mode) native;
 
-  @DomName('WebGL2RenderingContext.deleteBuffer')
-  @DocsEditable()
-  @Experimental() // untriaged
   void deleteBuffer(Buffer buffer) native;
 
-  @DomName('WebGL2RenderingContext.deleteFramebuffer')
-  @DocsEditable()
-  @Experimental() // untriaged
   void deleteFramebuffer(Framebuffer framebuffer) native;
 
-  @DomName('WebGL2RenderingContext.deleteProgram')
-  @DocsEditable()
-  @Experimental() // untriaged
   void deleteProgram(Program program) native;
 
-  @DomName('WebGL2RenderingContext.deleteRenderbuffer')
-  @DocsEditable()
-  @Experimental() // untriaged
   void deleteRenderbuffer(Renderbuffer renderbuffer) native;
 
-  @DomName('WebGL2RenderingContext.deleteShader')
-  @DocsEditable()
-  @Experimental() // untriaged
   void deleteShader(Shader shader) native;
 
-  @DomName('WebGL2RenderingContext.deleteTexture')
-  @DocsEditable()
-  @Experimental() // untriaged
   void deleteTexture(Texture texture) native;
 
-  @DomName('WebGL2RenderingContext.depthFunc')
-  @DocsEditable()
-  @Experimental() // untriaged
   void depthFunc(int func) native;
 
-  @DomName('WebGL2RenderingContext.depthMask')
-  @DocsEditable()
-  @Experimental() // untriaged
   void depthMask(bool flag) native;
 
-  @DomName('WebGL2RenderingContext.depthRange')
-  @DocsEditable()
-  @Experimental() // untriaged
   void depthRange(num zNear, num zFar) native;
 
-  @DomName('WebGL2RenderingContext.detachShader')
-  @DocsEditable()
-  @Experimental() // untriaged
   void detachShader(Program program, Shader shader) native;
 
-  @DomName('WebGL2RenderingContext.disable')
-  @DocsEditable()
-  @Experimental() // untriaged
   void disable(int cap) native;
 
-  @DomName('WebGL2RenderingContext.disableVertexAttribArray')
-  @DocsEditable()
-  @Experimental() // untriaged
   void disableVertexAttribArray(int index) native;
 
-  @DomName('WebGL2RenderingContext.drawArrays')
-  @DocsEditable()
-  @Experimental() // untriaged
   void drawArrays(int mode, int first, int count) native;
 
-  @DomName('WebGL2RenderingContext.drawElements')
-  @DocsEditable()
-  @Experimental() // untriaged
   void drawElements(int mode, int count, int type, int offset) native;
 
-  @DomName('WebGL2RenderingContext.enable')
-  @DocsEditable()
-  @Experimental() // untriaged
   void enable(int cap) native;
 
-  @DomName('WebGL2RenderingContext.enableVertexAttribArray')
-  @DocsEditable()
-  @Experimental() // untriaged
   void enableVertexAttribArray(int index) native;
 
-  @DomName('WebGL2RenderingContext.finish')
-  @DocsEditable()
-  @Experimental() // untriaged
   void finish() native;
 
-  @DomName('WebGL2RenderingContext.flush')
-  @DocsEditable()
-  @Experimental() // untriaged
   void flush() native;
 
-  @DomName('WebGL2RenderingContext.framebufferRenderbuffer')
-  @DocsEditable()
-  @Experimental() // untriaged
   void framebufferRenderbuffer(int target, int attachment,
       int renderbuffertarget, Renderbuffer renderbuffer) native;
 
-  @DomName('WebGL2RenderingContext.framebufferTexture2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void framebufferTexture2D(int target, int attachment, int textarget,
       Texture texture, int level) native;
 
-  @DomName('WebGL2RenderingContext.frontFace')
-  @DocsEditable()
-  @Experimental() // untriaged
   void frontFace(int mode) native;
 
-  @DomName('WebGL2RenderingContext.generateMipmap')
-  @DocsEditable()
-  @Experimental() // untriaged
   void generateMipmap(int target) native;
 
-  @DomName('WebGL2RenderingContext.getActiveAttrib')
-  @DocsEditable()
-  @Experimental() // untriaged
   ActiveInfo getActiveAttrib(Program program, int index) native;
 
-  @DomName('WebGL2RenderingContext.getActiveUniform')
-  @DocsEditable()
-  @Experimental() // untriaged
   ActiveInfo getActiveUniform(Program program, int index) native;
 
-  @DomName('WebGL2RenderingContext.getAttachedShaders')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<Shader> getAttachedShaders(Program program) native;
 
-  @DomName('WebGL2RenderingContext.getAttribLocation')
-  @DocsEditable()
-  @Experimental() // untriaged
   int getAttribLocation(Program program, String name) native;
 
-  @DomName('WebGL2RenderingContext.getBufferParameter')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object getBufferParameter(int target, int pname) native;
 
-  @DomName('WebGL2RenderingContext.getContextAttributes')
-  @DocsEditable()
-  @Experimental() // untriaged
   Map getContextAttributes() {
     return convertNativeToDart_Dictionary(_getContextAttributes_1());
   }
 
   @JSName('getContextAttributes')
-  @DomName('WebGL2RenderingContext.getContextAttributes')
-  @DocsEditable()
-  @Experimental() // untriaged
   _getContextAttributes_1() native;
 
-  @DomName('WebGL2RenderingContext.getError')
-  @DocsEditable()
-  @Experimental() // untriaged
   int getError() native;
 
-  @DomName('WebGL2RenderingContext.getExtension')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object getExtension(String name) native;
 
-  @DomName('WebGL2RenderingContext.getFramebufferAttachmentParameter')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object getFramebufferAttachmentParameter(
       int target, int attachment, int pname) native;
 
-  @DomName('WebGL2RenderingContext.getParameter')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object getParameter(int pname) native;
 
-  @DomName('WebGL2RenderingContext.getProgramInfoLog')
-  @DocsEditable()
-  @Experimental() // untriaged
   String getProgramInfoLog(Program program) native;
 
-  @DomName('WebGL2RenderingContext.getProgramParameter')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object getProgramParameter(Program program, int pname) native;
 
-  @DomName('WebGL2RenderingContext.getRenderbufferParameter')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object getRenderbufferParameter(int target, int pname) native;
 
-  @DomName('WebGL2RenderingContext.getShaderInfoLog')
-  @DocsEditable()
-  @Experimental() // untriaged
   String getShaderInfoLog(Shader shader) native;
 
-  @DomName('WebGL2RenderingContext.getShaderParameter')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object getShaderParameter(Shader shader, int pname) native;
 
-  @DomName('WebGL2RenderingContext.getShaderPrecisionFormat')
-  @DocsEditable()
-  @Experimental() // untriaged
   ShaderPrecisionFormat getShaderPrecisionFormat(
       int shadertype, int precisiontype) native;
 
-  @DomName('WebGL2RenderingContext.getShaderSource')
-  @DocsEditable()
-  @Experimental() // untriaged
   String getShaderSource(Shader shader) native;
 
-  @DomName('WebGL2RenderingContext.getSupportedExtensions')
-  @DocsEditable()
-  @Experimental() // untriaged
   List<String> getSupportedExtensions() native;
 
-  @DomName('WebGL2RenderingContext.getTexParameter')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object getTexParameter(int target, int pname) native;
 
-  @DomName('WebGL2RenderingContext.getUniform')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object getUniform(Program program, UniformLocation location) native;
 
-  @DomName('WebGL2RenderingContext.getUniformLocation')
-  @DocsEditable()
-  @Experimental() // untriaged
   UniformLocation getUniformLocation(Program program, String name) native;
 
-  @DomName('WebGL2RenderingContext.getVertexAttrib')
-  @DocsEditable()
-  @Experimental() // untriaged
   Object getVertexAttrib(int index, int pname) native;
 
-  @DomName('WebGL2RenderingContext.getVertexAttribOffset')
-  @DocsEditable()
-  @Experimental() // untriaged
   int getVertexAttribOffset(int index, int pname) native;
 
-  @DomName('WebGL2RenderingContext.hint')
-  @DocsEditable()
-  @Experimental() // untriaged
   void hint(int target, int mode) native;
 
-  @DomName('WebGL2RenderingContext.isBuffer')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool isBuffer(Buffer buffer) native;
 
-  @DomName('WebGL2RenderingContext.isContextLost')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool isContextLost() native;
 
-  @DomName('WebGL2RenderingContext.isEnabled')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool isEnabled(int cap) native;
 
-  @DomName('WebGL2RenderingContext.isFramebuffer')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool isFramebuffer(Framebuffer framebuffer) native;
 
-  @DomName('WebGL2RenderingContext.isProgram')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool isProgram(Program program) native;
 
-  @DomName('WebGL2RenderingContext.isRenderbuffer')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool isRenderbuffer(Renderbuffer renderbuffer) native;
 
-  @DomName('WebGL2RenderingContext.isShader')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool isShader(Shader shader) native;
 
-  @DomName('WebGL2RenderingContext.isTexture')
-  @DocsEditable()
-  @Experimental() // untriaged
   bool isTexture(Texture texture) native;
 
-  @DomName('WebGL2RenderingContext.lineWidth')
-  @DocsEditable()
-  @Experimental() // untriaged
   void lineWidth(num width) native;
 
-  @DomName('WebGL2RenderingContext.linkProgram')
-  @DocsEditable()
-  @Experimental() // untriaged
   void linkProgram(Program program) native;
 
-  @DomName('WebGL2RenderingContext.pixelStorei')
-  @DocsEditable()
-  @Experimental() // untriaged
   void pixelStorei(int pname, int param) native;
 
-  @DomName('WebGL2RenderingContext.polygonOffset')
-  @DocsEditable()
-  @Experimental() // untriaged
   void polygonOffset(num factor, num units) native;
 
   @JSName('readPixels')
-  @DomName('WebGL2RenderingContext.readPixels')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _readPixels(int x, int y, int width, int height, int format, int type,
       TypedData pixels) native;
 
-  @DomName('WebGL2RenderingContext.renderbufferStorage')
-  @DocsEditable()
-  @Experimental() // untriaged
   void renderbufferStorage(
       int target, int internalformat, int width, int height) native;
 
-  @DomName('WebGL2RenderingContext.sampleCoverage')
-  @DocsEditable()
-  @Experimental() // untriaged
   void sampleCoverage(num value, bool invert) native;
 
-  @DomName('WebGL2RenderingContext.scissor')
-  @DocsEditable()
-  @Experimental() // untriaged
   void scissor(int x, int y, int width, int height) native;
 
-  @DomName('WebGL2RenderingContext.shaderSource')
-  @DocsEditable()
-  @Experimental() // untriaged
   void shaderSource(Shader shader, String string) native;
 
-  @DomName('WebGL2RenderingContext.stencilFunc')
-  @DocsEditable()
-  @Experimental() // untriaged
   void stencilFunc(int func, int ref, int mask) native;
 
-  @DomName('WebGL2RenderingContext.stencilFuncSeparate')
-  @DocsEditable()
-  @Experimental() // untriaged
   void stencilFuncSeparate(int face, int func, int ref, int mask) native;
 
-  @DomName('WebGL2RenderingContext.stencilMask')
-  @DocsEditable()
-  @Experimental() // untriaged
   void stencilMask(int mask) native;
 
-  @DomName('WebGL2RenderingContext.stencilMaskSeparate')
-  @DocsEditable()
-  @Experimental() // untriaged
   void stencilMaskSeparate(int face, int mask) native;
 
-  @DomName('WebGL2RenderingContext.stencilOp')
-  @DocsEditable()
-  @Experimental() // untriaged
   void stencilOp(int fail, int zfail, int zpass) native;
 
-  @DomName('WebGL2RenderingContext.stencilOpSeparate')
-  @DocsEditable()
-  @Experimental() // untriaged
   void stencilOpSeparate(int face, int fail, int zfail, int zpass) native;
 
-  @DomName('WebGL2RenderingContext.texImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void texImage2D(
       int target,
       int level,
@@ -7235,55 +2619,28 @@
   }
 
   @JSName('texImage2D')
-  @DomName('WebGL2RenderingContext.texImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texImage2D_1(target, level, internalformat, width, height, int border,
       format, type, TypedData pixels) native;
   @JSName('texImage2D')
-  @DomName('WebGL2RenderingContext.texImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texImage2D_2(target, level, internalformat, format, type, pixels)
       native;
   @JSName('texImage2D')
-  @DomName('WebGL2RenderingContext.texImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texImage2D_3(
       target, level, internalformat, format, type, ImageElement image) native;
   @JSName('texImage2D')
-  @DomName('WebGL2RenderingContext.texImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texImage2D_4(
       target, level, internalformat, format, type, CanvasElement canvas) native;
   @JSName('texImage2D')
-  @DomName('WebGL2RenderingContext.texImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texImage2D_5(
       target, level, internalformat, format, type, VideoElement video) native;
   @JSName('texImage2D')
-  @DomName('WebGL2RenderingContext.texImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texImage2D_6(
       target, level, internalformat, format, type, ImageBitmap bitmap) native;
 
-  @DomName('WebGL2RenderingContext.texParameterf')
-  @DocsEditable()
-  @Experimental() // untriaged
   void texParameterf(int target, int pname, num param) native;
 
-  @DomName('WebGL2RenderingContext.texParameteri')
-  @DocsEditable()
-  @Experimental() // untriaged
   void texParameteri(int target, int pname, int param) native;
 
-  @DomName('WebGL2RenderingContext.texSubImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void texSubImage2D(
       int target,
       int level,
@@ -7377,200 +2734,87 @@
   }
 
   @JSName('texSubImage2D')
-  @DomName('WebGL2RenderingContext.texSubImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texSubImage2D_1(target, level, xoffset, yoffset, width, height,
       int format, type, TypedData pixels) native;
   @JSName('texSubImage2D')
-  @DomName('WebGL2RenderingContext.texSubImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texSubImage2D_2(target, level, xoffset, yoffset, format, type, pixels)
       native;
   @JSName('texSubImage2D')
-  @DomName('WebGL2RenderingContext.texSubImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texSubImage2D_3(
       target, level, xoffset, yoffset, format, type, ImageElement image) native;
   @JSName('texSubImage2D')
-  @DomName('WebGL2RenderingContext.texSubImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texSubImage2D_4(target, level, xoffset, yoffset, format, type,
       CanvasElement canvas) native;
   @JSName('texSubImage2D')
-  @DomName('WebGL2RenderingContext.texSubImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texSubImage2D_5(
       target, level, xoffset, yoffset, format, type, VideoElement video) native;
   @JSName('texSubImage2D')
-  @DomName('WebGL2RenderingContext.texSubImage2D')
-  @DocsEditable()
-  @Experimental() // untriaged
   void _texSubImage2D_6(
       target, level, xoffset, yoffset, format, type, ImageBitmap bitmap) native;
 
-  @DomName('WebGL2RenderingContext.uniform1f')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform1f(UniformLocation location, num x) native;
 
-  @DomName('WebGL2RenderingContext.uniform1fv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform1fv(UniformLocation location, v) native;
 
-  @DomName('WebGL2RenderingContext.uniform1i')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform1i(UniformLocation location, int x) native;
 
-  @DomName('WebGL2RenderingContext.uniform1iv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform1iv(UniformLocation location, v) native;
 
-  @DomName('WebGL2RenderingContext.uniform2f')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform2f(UniformLocation location, num x, num y) native;
 
-  @DomName('WebGL2RenderingContext.uniform2fv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform2fv(UniformLocation location, v) native;
 
-  @DomName('WebGL2RenderingContext.uniform2i')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform2i(UniformLocation location, int x, int y) native;
 
-  @DomName('WebGL2RenderingContext.uniform2iv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform2iv(UniformLocation location, v) native;
 
-  @DomName('WebGL2RenderingContext.uniform3f')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform3f(UniformLocation location, num x, num y, num z) native;
 
-  @DomName('WebGL2RenderingContext.uniform3fv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform3fv(UniformLocation location, v) native;
 
-  @DomName('WebGL2RenderingContext.uniform3i')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform3i(UniformLocation location, int x, int y, int z) native;
 
-  @DomName('WebGL2RenderingContext.uniform3iv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform3iv(UniformLocation location, v) native;
 
-  @DomName('WebGL2RenderingContext.uniform4f')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform4f(UniformLocation location, num x, num y, num z, num w) native;
 
-  @DomName('WebGL2RenderingContext.uniform4fv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform4fv(UniformLocation location, v) native;
 
-  @DomName('WebGL2RenderingContext.uniform4i')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform4i(UniformLocation location, int x, int y, int z, int w) native;
 
-  @DomName('WebGL2RenderingContext.uniform4iv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniform4iv(UniformLocation location, v) native;
 
-  @DomName('WebGL2RenderingContext.uniformMatrix2fv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniformMatrix2fv(UniformLocation location, bool transpose, array) native;
 
-  @DomName('WebGL2RenderingContext.uniformMatrix3fv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniformMatrix3fv(UniformLocation location, bool transpose, array) native;
 
-  @DomName('WebGL2RenderingContext.uniformMatrix4fv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void uniformMatrix4fv(UniformLocation location, bool transpose, array) native;
 
-  @DomName('WebGL2RenderingContext.useProgram')
-  @DocsEditable()
-  @Experimental() // untriaged
   void useProgram(Program program) native;
 
-  @DomName('WebGL2RenderingContext.validateProgram')
-  @DocsEditable()
-  @Experimental() // untriaged
   void validateProgram(Program program) native;
 
-  @DomName('WebGL2RenderingContext.vertexAttrib1f')
-  @DocsEditable()
-  @Experimental() // untriaged
   void vertexAttrib1f(int indx, num x) native;
 
-  @DomName('WebGL2RenderingContext.vertexAttrib1fv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void vertexAttrib1fv(int indx, values) native;
 
-  @DomName('WebGL2RenderingContext.vertexAttrib2f')
-  @DocsEditable()
-  @Experimental() // untriaged
   void vertexAttrib2f(int indx, num x, num y) native;
 
-  @DomName('WebGL2RenderingContext.vertexAttrib2fv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void vertexAttrib2fv(int indx, values) native;
 
-  @DomName('WebGL2RenderingContext.vertexAttrib3f')
-  @DocsEditable()
-  @Experimental() // untriaged
   void vertexAttrib3f(int indx, num x, num y, num z) native;
 
-  @DomName('WebGL2RenderingContext.vertexAttrib3fv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void vertexAttrib3fv(int indx, values) native;
 
-  @DomName('WebGL2RenderingContext.vertexAttrib4f')
-  @DocsEditable()
-  @Experimental() // untriaged
   void vertexAttrib4f(int indx, num x, num y, num z, num w) native;
 
-  @DomName('WebGL2RenderingContext.vertexAttrib4fv')
-  @DocsEditable()
-  @Experimental() // untriaged
   void vertexAttrib4fv(int indx, values) native;
 
-  @DomName('WebGL2RenderingContext.vertexAttribPointer')
-  @DocsEditable()
-  @Experimental() // untriaged
   void vertexAttribPointer(int indx, int size, int type, bool normalized,
       int stride, int offset) native;
 
-  @DomName('WebGL2RenderingContext.viewport')
-  @DocsEditable()
-  @Experimental() // untriaged
   void viewport(int x, int y, int width, int height) native;
 
-  @DomName('WebGLRenderingContext2.readPixels')
-  @DocsEditable()
   void readPixels(int x, int y, int width, int height, int format, int type,
       TypedData pixels) {
     _readPixels(x, y, width, height, format, type, pixels);
@@ -7581,9 +2825,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.
 
-@DocsEditable()
-@DomName('WebGLSampler')
-@Experimental() // untriaged
 @Native("WebGLSampler")
 class Sampler extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -7595,8 +2836,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.
 
-@DocsEditable()
-@DomName('WebGLShader')
 @Native("WebGLShader")
 class Shader extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -7608,8 +2847,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.
 
-@DocsEditable()
-@DomName('WebGLShaderPrecisionFormat')
 @Native("WebGLShaderPrecisionFormat")
 class ShaderPrecisionFormat extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -7617,25 +2854,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('WebGLShaderPrecisionFormat.precision')
-  @DocsEditable()
   final int precision;
 
-  @DomName('WebGLShaderPrecisionFormat.rangeMax')
-  @DocsEditable()
   final int rangeMax;
 
-  @DomName('WebGLShaderPrecisionFormat.rangeMin')
-  @DocsEditable()
   final int rangeMin;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('WebGLSync')
-@Experimental() // untriaged
 @Native("WebGLSync")
 class Sync extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -7647,8 +2875,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.
 
-@DocsEditable()
-@DomName('WebGLTexture')
 @Native("WebGLTexture")
 class Texture extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -7656,33 +2882,18 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('WebGLTexture.lastUploadedVideoFrameWasSkipped')
-  @DocsEditable()
-  @Experimental() // untriaged
   final bool lastUploadedVideoFrameWasSkipped;
 
-  @DomName('WebGLTexture.lastUploadedVideoHeight')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int lastUploadedVideoHeight;
 
-  @DomName('WebGLTexture.lastUploadedVideoTimestamp')
-  @DocsEditable()
-  @Experimental() // untriaged
   final num lastUploadedVideoTimestamp;
 
-  @DomName('WebGLTexture.lastUploadedVideoWidth')
-  @DocsEditable()
-  @Experimental() // untriaged
   final int lastUploadedVideoWidth;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('WebGLTimerQueryEXT')
-@Experimental() // untriaged
 @Native("WebGLTimerQueryEXT")
 class TimerQueryExt extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -7694,9 +2905,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.
 
-@DocsEditable()
-@DomName('WebGLTransformFeedback')
-@Experimental() // untriaged
 @Native("WebGLTransformFeedback")
 class TransformFeedback extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -7708,8 +2916,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.
 
-@DocsEditable()
-@DomName('WebGLUniformLocation')
 @Native("WebGLUniformLocation")
 class UniformLocation extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -7721,9 +2927,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.
 
-@DocsEditable()
-@DomName('WebGLVertexArrayObject')
-@Experimental() // untriaged
 @Native("WebGLVertexArrayObject")
 class VertexArrayObject extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -7735,10 +2938,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.
 
-@DocsEditable()
-@DomName('WebGLVertexArrayObjectOES')
-// http://www.khronos.org/registry/webgl/extensions/OES_vertex_array_object/
-@Experimental() // experimental
 @Native("WebGLVertexArrayObjectOES")
 class VertexArrayObjectOes extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -7746,13 +2945,1213 @@
     throw new UnsupportedError("Not supported");
   }
 }
+// Copyright (c) 2018, 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.
+
+/// Amalgamation of the WebGL constants from the IDL interfaces in
+/// WebGLRenderingContextBase, WebGL2RenderingContextBase, & WebGLDrawBuffers.
+/// Because the RenderingContextBase interfaces are hidden they would be
+/// replicated in more than one class (e.g., RenderingContext and
+/// RenderingContext2) to prevent that duplication these 600+ constants are
+/// defined in one abstract class (WebGL).
+@Native("WebGL")
+abstract class WebGL {
+  // To suppress missing implicit constructor warnings.
+  factory WebGL._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  static const int ACTIVE_ATTRIBUTES = 0x8B89;
+
+  static const int ACTIVE_TEXTURE = 0x84E0;
+
+  static const int ACTIVE_UNIFORMS = 0x8B86;
+
+  static const int ACTIVE_UNIFORM_BLOCKS = 0x8A36;
+
+  static const int ALIASED_LINE_WIDTH_RANGE = 0x846E;
+
+  static const int ALIASED_POINT_SIZE_RANGE = 0x846D;
+
+  static const int ALPHA = 0x1906;
+
+  static const int ALPHA_BITS = 0x0D55;
+
+  static const int ALREADY_SIGNALED = 0x911A;
+
+  static const int ALWAYS = 0x0207;
+
+  static const int ANY_SAMPLES_PASSED = 0x8C2F;
+
+  static const int ANY_SAMPLES_PASSED_CONSERVATIVE = 0x8D6A;
+
+  static const int ARRAY_BUFFER = 0x8892;
+
+  static const int ARRAY_BUFFER_BINDING = 0x8894;
+
+  static const int ATTACHED_SHADERS = 0x8B85;
+
+  static const int BACK = 0x0405;
+
+  static const int BLEND = 0x0BE2;
+
+  static const int BLEND_COLOR = 0x8005;
+
+  static const int BLEND_DST_ALPHA = 0x80CA;
+
+  static const int BLEND_DST_RGB = 0x80C8;
+
+  static const int BLEND_EQUATION = 0x8009;
+
+  static const int BLEND_EQUATION_ALPHA = 0x883D;
+
+  static const int BLEND_EQUATION_RGB = 0x8009;
+
+  static const int BLEND_SRC_ALPHA = 0x80CB;
+
+  static const int BLEND_SRC_RGB = 0x80C9;
+
+  static const int BLUE_BITS = 0x0D54;
+
+  static const int BOOL = 0x8B56;
+
+  static const int BOOL_VEC2 = 0x8B57;
+
+  static const int BOOL_VEC3 = 0x8B58;
+
+  static const int BOOL_VEC4 = 0x8B59;
+
+  static const int BROWSER_DEFAULT_WEBGL = 0x9244;
+
+  static const int BUFFER_SIZE = 0x8764;
+
+  static const int BUFFER_USAGE = 0x8765;
+
+  static const int BYTE = 0x1400;
+
+  static const int CCW = 0x0901;
+
+  static const int CLAMP_TO_EDGE = 0x812F;
+
+  static const int COLOR = 0x1800;
+
+  static const int COLOR_ATTACHMENT0 = 0x8CE0;
+
+  static const int COLOR_ATTACHMENT0_WEBGL = 0x8CE0;
+
+  static const int COLOR_ATTACHMENT1 = 0x8CE1;
+
+  static const int COLOR_ATTACHMENT10 = 0x8CEA;
+
+  static const int COLOR_ATTACHMENT10_WEBGL = 0x8CEA;
+
+  static const int COLOR_ATTACHMENT11 = 0x8CEB;
+
+  static const int COLOR_ATTACHMENT11_WEBGL = 0x8CEB;
+
+  static const int COLOR_ATTACHMENT12 = 0x8CEC;
+
+  static const int COLOR_ATTACHMENT12_WEBGL = 0x8CEC;
+
+  static const int COLOR_ATTACHMENT13 = 0x8CED;
+
+  static const int COLOR_ATTACHMENT13_WEBGL = 0x8CED;
+
+  static const int COLOR_ATTACHMENT14 = 0x8CEE;
+
+  static const int COLOR_ATTACHMENT14_WEBGL = 0x8CEE;
+
+  static const int COLOR_ATTACHMENT15 = 0x8CEF;
+
+  static const int COLOR_ATTACHMENT15_WEBGL = 0x8CEF;
+
+  static const int COLOR_ATTACHMENT1_WEBGL = 0x8CE1;
+
+  static const int COLOR_ATTACHMENT2 = 0x8CE2;
+
+  static const int COLOR_ATTACHMENT2_WEBGL = 0x8CE2;
+
+  static const int COLOR_ATTACHMENT3 = 0x8CE3;
+
+  static const int COLOR_ATTACHMENT3_WEBGL = 0x8CE3;
+
+  static const int COLOR_ATTACHMENT4 = 0x8CE4;
+
+  static const int COLOR_ATTACHMENT4_WEBGL = 0x8CE4;
+
+  static const int COLOR_ATTACHMENT5 = 0x8CE5;
+
+  static const int COLOR_ATTACHMENT5_WEBGL = 0x8CE5;
+
+  static const int COLOR_ATTACHMENT6 = 0x8CE6;
+
+  static const int COLOR_ATTACHMENT6_WEBGL = 0x8CE6;
+
+  static const int COLOR_ATTACHMENT7 = 0x8CE7;
+
+  static const int COLOR_ATTACHMENT7_WEBGL = 0x8CE7;
+
+  static const int COLOR_ATTACHMENT8 = 0x8CE8;
+
+  static const int COLOR_ATTACHMENT8_WEBGL = 0x8CE8;
+
+  static const int COLOR_ATTACHMENT9 = 0x8CE9;
+
+  static const int COLOR_ATTACHMENT9_WEBGL = 0x8CE9;
+
+  static const int COLOR_BUFFER_BIT = 0x00004000;
+
+  static const int COLOR_CLEAR_VALUE = 0x0C22;
+
+  static const int COLOR_WRITEMASK = 0x0C23;
+
+  static const int COMPARE_REF_TO_TEXTURE = 0x884E;
+
+  static const int COMPILE_STATUS = 0x8B81;
+
+  static const int COMPRESSED_TEXTURE_FORMATS = 0x86A3;
+
+  static const int CONDITION_SATISFIED = 0x911C;
+
+  static const int CONSTANT_ALPHA = 0x8003;
+
+  static const int CONSTANT_COLOR = 0x8001;
+
+  static const int CONTEXT_LOST_WEBGL = 0x9242;
+
+  static const int COPY_READ_BUFFER = 0x8F36;
+
+  static const int COPY_READ_BUFFER_BINDING = 0x8F36;
+
+  static const int COPY_WRITE_BUFFER = 0x8F37;
+
+  static const int COPY_WRITE_BUFFER_BINDING = 0x8F37;
+
+  static const int CULL_FACE = 0x0B44;
+
+  static const int CULL_FACE_MODE = 0x0B45;
+
+  static const int CURRENT_PROGRAM = 0x8B8D;
+
+  static const int CURRENT_QUERY = 0x8865;
+
+  static const int CURRENT_VERTEX_ATTRIB = 0x8626;
+
+  static const int CW = 0x0900;
+
+  static const int DECR = 0x1E03;
+
+  static const int DECR_WRAP = 0x8508;
+
+  static const int DELETE_STATUS = 0x8B80;
+
+  static const int DEPTH = 0x1801;
+
+  static const int DEPTH24_STENCIL8 = 0x88F0;
+
+  static const int DEPTH32F_STENCIL8 = 0x8CAD;
+
+  static const int DEPTH_ATTACHMENT = 0x8D00;
+
+  static const int DEPTH_BITS = 0x0D56;
+
+  static const int DEPTH_BUFFER_BIT = 0x00000100;
+
+  static const int DEPTH_CLEAR_VALUE = 0x0B73;
+
+  static const int DEPTH_COMPONENT = 0x1902;
+
+  static const int DEPTH_COMPONENT16 = 0x81A5;
+
+  static const int DEPTH_COMPONENT24 = 0x81A6;
+
+  static const int DEPTH_COMPONENT32F = 0x8CAC;
+
+  static const int DEPTH_FUNC = 0x0B74;
+
+  static const int DEPTH_RANGE = 0x0B70;
+
+  static const int DEPTH_STENCIL = 0x84F9;
+
+  static const int DEPTH_STENCIL_ATTACHMENT = 0x821A;
+
+  static const int DEPTH_TEST = 0x0B71;
+
+  static const int DEPTH_WRITEMASK = 0x0B72;
+
+  static const int DITHER = 0x0BD0;
+
+  static const int DONT_CARE = 0x1100;
+
+  static const int DRAW_BUFFER0 = 0x8825;
+
+  static const int DRAW_BUFFER0_WEBGL = 0x8825;
+
+  static const int DRAW_BUFFER1 = 0x8826;
+
+  static const int DRAW_BUFFER10 = 0x882F;
+
+  static const int DRAW_BUFFER10_WEBGL = 0x882F;
+
+  static const int DRAW_BUFFER11 = 0x8830;
+
+  static const int DRAW_BUFFER11_WEBGL = 0x8830;
+
+  static const int DRAW_BUFFER12 = 0x8831;
+
+  static const int DRAW_BUFFER12_WEBGL = 0x8831;
+
+  static const int DRAW_BUFFER13 = 0x8832;
+
+  static const int DRAW_BUFFER13_WEBGL = 0x8832;
+
+  static const int DRAW_BUFFER14 = 0x8833;
+
+  static const int DRAW_BUFFER14_WEBGL = 0x8833;
+
+  static const int DRAW_BUFFER15 = 0x8834;
+
+  static const int DRAW_BUFFER15_WEBGL = 0x8834;
+
+  static const int DRAW_BUFFER1_WEBGL = 0x8826;
+
+  static const int DRAW_BUFFER2 = 0x8827;
+
+  static const int DRAW_BUFFER2_WEBGL = 0x8827;
+
+  static const int DRAW_BUFFER3 = 0x8828;
+
+  static const int DRAW_BUFFER3_WEBGL = 0x8828;
+
+  static const int DRAW_BUFFER4 = 0x8829;
+
+  static const int DRAW_BUFFER4_WEBGL = 0x8829;
+
+  static const int DRAW_BUFFER5 = 0x882A;
+
+  static const int DRAW_BUFFER5_WEBGL = 0x882A;
+
+  static const int DRAW_BUFFER6 = 0x882B;
+
+  static const int DRAW_BUFFER6_WEBGL = 0x882B;
+
+  static const int DRAW_BUFFER7 = 0x882C;
+
+  static const int DRAW_BUFFER7_WEBGL = 0x882C;
+
+  static const int DRAW_BUFFER8 = 0x882D;
+
+  static const int DRAW_BUFFER8_WEBGL = 0x882D;
+
+  static const int DRAW_BUFFER9 = 0x882E;
+
+  static const int DRAW_BUFFER9_WEBGL = 0x882E;
+
+  static const int DRAW_FRAMEBUFFER = 0x8CA9;
+
+  static const int DRAW_FRAMEBUFFER_BINDING = 0x8CA6;
+
+  static const int DST_ALPHA = 0x0304;
+
+  static const int DST_COLOR = 0x0306;
+
+  static const int DYNAMIC_COPY = 0x88EA;
+
+  static const int DYNAMIC_DRAW = 0x88E8;
+
+  static const int DYNAMIC_READ = 0x88E9;
+
+  static const int ELEMENT_ARRAY_BUFFER = 0x8893;
+
+  static const int ELEMENT_ARRAY_BUFFER_BINDING = 0x8895;
+
+  static const int EQUAL = 0x0202;
+
+  static const int FASTEST = 0x1101;
+
+  static const int FLOAT = 0x1406;
+
+  static const int FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8DAD;
+
+  static const int FLOAT_MAT2 = 0x8B5A;
+
+  static const int FLOAT_MAT2x3 = 0x8B65;
+
+  static const int FLOAT_MAT2x4 = 0x8B66;
+
+  static const int FLOAT_MAT3 = 0x8B5B;
+
+  static const int FLOAT_MAT3x2 = 0x8B67;
+
+  static const int FLOAT_MAT3x4 = 0x8B68;
+
+  static const int FLOAT_MAT4 = 0x8B5C;
+
+  static const int FLOAT_MAT4x2 = 0x8B69;
+
+  static const int FLOAT_MAT4x3 = 0x8B6A;
+
+  static const int FLOAT_VEC2 = 0x8B50;
+
+  static const int FLOAT_VEC3 = 0x8B51;
+
+  static const int FLOAT_VEC4 = 0x8B52;
+
+  static const int FRAGMENT_SHADER = 0x8B30;
+
+  static const int FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B;
+
+  static const int FRAMEBUFFER = 0x8D40;
+
+  static const int FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215;
+
+  static const int FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214;
+
+  static const int FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210;
+
+  static const int FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211;
+
+  static const int FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216;
+
+  static const int FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213;
+
+  static const int FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1;
+
+  static const int FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0;
+
+  static const int FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212;
+
+  static const int FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217;
+
+  static const int FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3;
+
+  static const int FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8CD4;
+
+  static const int FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2;
+
+  static const int FRAMEBUFFER_BINDING = 0x8CA6;
+
+  static const int FRAMEBUFFER_COMPLETE = 0x8CD5;
+
+  static const int FRAMEBUFFER_DEFAULT = 0x8218;
+
+  static const int FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6;
+
+  static const int FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8CD9;
+
+  static const int FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7;
+
+  static const int FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8D56;
+
+  static const int FRAMEBUFFER_UNSUPPORTED = 0x8CDD;
+
+  static const int FRONT = 0x0404;
+
+  static const int FRONT_AND_BACK = 0x0408;
+
+  static const int FRONT_FACE = 0x0B46;
+
+  static const int FUNC_ADD = 0x8006;
+
+  static const int FUNC_REVERSE_SUBTRACT = 0x800B;
+
+  static const int FUNC_SUBTRACT = 0x800A;
+
+  static const int GENERATE_MIPMAP_HINT = 0x8192;
+
+  static const int GEQUAL = 0x0206;
+
+  static const int GREATER = 0x0204;
+
+  static const int GREEN_BITS = 0x0D53;
+
+  static const int HALF_FLOAT = 0x140B;
+
+  static const int HIGH_FLOAT = 0x8DF2;
+
+  static const int HIGH_INT = 0x8DF5;
+
+  static const int IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B;
+
+  static const int IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A;
+
+  static const int INCR = 0x1E02;
+
+  static const int INCR_WRAP = 0x8507;
+
+  static const int INT = 0x1404;
+
+  static const int INTERLEAVED_ATTRIBS = 0x8C8C;
+
+  static const int INT_2_10_10_10_REV = 0x8D9F;
+
+  static const int INT_SAMPLER_2D = 0x8DCA;
+
+  static const int INT_SAMPLER_2D_ARRAY = 0x8DCF;
+
+  static const int INT_SAMPLER_3D = 0x8DCB;
+
+  static const int INT_SAMPLER_CUBE = 0x8DCC;
+
+  static const int INT_VEC2 = 0x8B53;
+
+  static const int INT_VEC3 = 0x8B54;
+
+  static const int INT_VEC4 = 0x8B55;
+
+  static const int INVALID_ENUM = 0x0500;
+
+  static const int INVALID_FRAMEBUFFER_OPERATION = 0x0506;
+
+  static const int INVALID_INDEX = 0xFFFFFFFF;
+
+  static const int INVALID_OPERATION = 0x0502;
+
+  static const int INVALID_VALUE = 0x0501;
+
+  static const int INVERT = 0x150A;
+
+  static const int KEEP = 0x1E00;
+
+  static const int LEQUAL = 0x0203;
+
+  static const int LESS = 0x0201;
+
+  static const int LINEAR = 0x2601;
+
+  static const int LINEAR_MIPMAP_LINEAR = 0x2703;
+
+  static const int LINEAR_MIPMAP_NEAREST = 0x2701;
+
+  static const int LINES = 0x0001;
+
+  static const int LINE_LOOP = 0x0002;
+
+  static const int LINE_STRIP = 0x0003;
+
+  static const int LINE_WIDTH = 0x0B21;
+
+  static const int LINK_STATUS = 0x8B82;
+
+  static const int LOW_FLOAT = 0x8DF0;
+
+  static const int LOW_INT = 0x8DF3;
+
+  static const int LUMINANCE = 0x1909;
+
+  static const int LUMINANCE_ALPHA = 0x190A;
+
+  static const int MAX = 0x8008;
+
+  static const int MAX_3D_TEXTURE_SIZE = 0x8073;
+
+  static const int MAX_ARRAY_TEXTURE_LAYERS = 0x88FF;
+
+  static const int MAX_CLIENT_WAIT_TIMEOUT_WEBGL = 0x9247;
+
+  static const int MAX_COLOR_ATTACHMENTS = 0x8CDF;
+
+  static const int MAX_COLOR_ATTACHMENTS_WEBGL = 0x8CDF;
+
+  static const int MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8A33;
+
+  static const int MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D;
+
+  static const int MAX_COMBINED_UNIFORM_BLOCKS = 0x8A2E;
+
+  static const int MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8A31;
+
+  static const int MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C;
+
+  static const int MAX_DRAW_BUFFERS = 0x8824;
+
+  static const int MAX_DRAW_BUFFERS_WEBGL = 0x8824;
+
+  static const int MAX_ELEMENTS_INDICES = 0x80E9;
+
+  static const int MAX_ELEMENTS_VERTICES = 0x80E8;
+
+  static const int MAX_ELEMENT_INDEX = 0x8D6B;
+
+  static const int MAX_FRAGMENT_INPUT_COMPONENTS = 0x9125;
+
+  static const int MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8A2D;
+
+  static const int MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49;
+
+  static const int MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD;
+
+  static const int MAX_PROGRAM_TEXEL_OFFSET = 0x8905;
+
+  static const int MAX_RENDERBUFFER_SIZE = 0x84E8;
+
+  static const int MAX_SAMPLES = 0x8D57;
+
+  static const int MAX_SERVER_WAIT_TIMEOUT = 0x9111;
+
+  static const int MAX_TEXTURE_IMAGE_UNITS = 0x8872;
+
+  static const int MAX_TEXTURE_LOD_BIAS = 0x84FD;
+
+  static const int MAX_TEXTURE_SIZE = 0x0D33;
+
+  static const int MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A;
+
+  static const int MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8C8B;
+
+  static const int MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8C80;
+
+  static const int MAX_UNIFORM_BLOCK_SIZE = 0x8A30;
+
+  static const int MAX_UNIFORM_BUFFER_BINDINGS = 0x8A2F;
+
+  static const int MAX_VARYING_COMPONENTS = 0x8B4B;
+
+  static const int MAX_VARYING_VECTORS = 0x8DFC;
+
+  static const int MAX_VERTEX_ATTRIBS = 0x8869;
+
+  static const int MAX_VERTEX_OUTPUT_COMPONENTS = 0x9122;
+
+  static const int MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C;
+
+  static const int MAX_VERTEX_UNIFORM_BLOCKS = 0x8A2B;
+
+  static const int MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A;
+
+  static const int MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB;
+
+  static const int MAX_VIEWPORT_DIMS = 0x0D3A;
+
+  static const int MEDIUM_FLOAT = 0x8DF1;
+
+  static const int MEDIUM_INT = 0x8DF4;
+
+  static const int MIN = 0x8007;
+
+  static const int MIN_PROGRAM_TEXEL_OFFSET = 0x8904;
+
+  static const int MIRRORED_REPEAT = 0x8370;
+
+  static const int NEAREST = 0x2600;
+
+  static const int NEAREST_MIPMAP_LINEAR = 0x2702;
+
+  static const int NEAREST_MIPMAP_NEAREST = 0x2700;
+
+  static const int NEVER = 0x0200;
+
+  static const int NICEST = 0x1102;
+
+  static const int NONE = 0;
+
+  static const int NOTEQUAL = 0x0205;
+
+  static const int NO_ERROR = 0;
+
+  static const int OBJECT_TYPE = 0x9112;
+
+  static const int ONE = 1;
+
+  static const int ONE_MINUS_CONSTANT_ALPHA = 0x8004;
+
+  static const int ONE_MINUS_CONSTANT_COLOR = 0x8002;
+
+  static const int ONE_MINUS_DST_ALPHA = 0x0305;
+
+  static const int ONE_MINUS_DST_COLOR = 0x0307;
+
+  static const int ONE_MINUS_SRC_ALPHA = 0x0303;
+
+  static const int ONE_MINUS_SRC_COLOR = 0x0301;
+
+  static const int OUT_OF_MEMORY = 0x0505;
+
+  static const int PACK_ALIGNMENT = 0x0D05;
+
+  static const int PACK_ROW_LENGTH = 0x0D02;
+
+  static const int PACK_SKIP_PIXELS = 0x0D04;
+
+  static const int PACK_SKIP_ROWS = 0x0D03;
+
+  static const int PIXEL_PACK_BUFFER = 0x88EB;
+
+  static const int PIXEL_PACK_BUFFER_BINDING = 0x88ED;
+
+  static const int PIXEL_UNPACK_BUFFER = 0x88EC;
+
+  static const int PIXEL_UNPACK_BUFFER_BINDING = 0x88EF;
+
+  static const int POINTS = 0x0000;
+
+  static const int POLYGON_OFFSET_FACTOR = 0x8038;
+
+  static const int POLYGON_OFFSET_FILL = 0x8037;
+
+  static const int POLYGON_OFFSET_UNITS = 0x2A00;
+
+  static const int QUERY_RESULT = 0x8866;
+
+  static const int QUERY_RESULT_AVAILABLE = 0x8867;
+
+  static const int R11F_G11F_B10F = 0x8C3A;
+
+  static const int R16F = 0x822D;
+
+  static const int R16I = 0x8233;
+
+  static const int R16UI = 0x8234;
+
+  static const int R32F = 0x822E;
+
+  static const int R32I = 0x8235;
+
+  static const int R32UI = 0x8236;
+
+  static const int R8 = 0x8229;
+
+  static const int R8I = 0x8231;
+
+  static const int R8UI = 0x8232;
+
+  static const int R8_SNORM = 0x8F94;
+
+  static const int RASTERIZER_DISCARD = 0x8C89;
+
+  static const int READ_BUFFER = 0x0C02;
+
+  static const int READ_FRAMEBUFFER = 0x8CA8;
+
+  static const int READ_FRAMEBUFFER_BINDING = 0x8CAA;
+
+  static const int RED = 0x1903;
+
+  static const int RED_BITS = 0x0D52;
+
+  static const int RED_INTEGER = 0x8D94;
+
+  static const int RENDERBUFFER = 0x8D41;
+
+  static const int RENDERBUFFER_ALPHA_SIZE = 0x8D53;
+
+  static const int RENDERBUFFER_BINDING = 0x8CA7;
+
+  static const int RENDERBUFFER_BLUE_SIZE = 0x8D52;
+
+  static const int RENDERBUFFER_DEPTH_SIZE = 0x8D54;
+
+  static const int RENDERBUFFER_GREEN_SIZE = 0x8D51;
+
+  static const int RENDERBUFFER_HEIGHT = 0x8D43;
+
+  static const int RENDERBUFFER_INTERNAL_FORMAT = 0x8D44;
+
+  static const int RENDERBUFFER_RED_SIZE = 0x8D50;
+
+  static const int RENDERBUFFER_SAMPLES = 0x8CAB;
+
+  static const int RENDERBUFFER_STENCIL_SIZE = 0x8D55;
+
+  static const int RENDERBUFFER_WIDTH = 0x8D42;
+
+  static const int RENDERER = 0x1F01;
+
+  static const int REPEAT = 0x2901;
+
+  static const int REPLACE = 0x1E01;
+
+  static const int RG = 0x8227;
+
+  static const int RG16F = 0x822F;
+
+  static const int RG16I = 0x8239;
+
+  static const int RG16UI = 0x823A;
+
+  static const int RG32F = 0x8230;
+
+  static const int RG32I = 0x823B;
+
+  static const int RG32UI = 0x823C;
+
+  static const int RG8 = 0x822B;
+
+  static const int RG8I = 0x8237;
+
+  static const int RG8UI = 0x8238;
+
+  static const int RG8_SNORM = 0x8F95;
+
+  static const int RGB = 0x1907;
+
+  static const int RGB10_A2 = 0x8059;
+
+  static const int RGB10_A2UI = 0x906F;
+
+  static const int RGB16F = 0x881B;
+
+  static const int RGB16I = 0x8D89;
+
+  static const int RGB16UI = 0x8D77;
+
+  static const int RGB32F = 0x8815;
+
+  static const int RGB32I = 0x8D83;
+
+  static const int RGB32UI = 0x8D71;
+
+  static const int RGB565 = 0x8D62;
+
+  static const int RGB5_A1 = 0x8057;
+
+  static const int RGB8 = 0x8051;
+
+  static const int RGB8I = 0x8D8F;
+
+  static const int RGB8UI = 0x8D7D;
+
+  static const int RGB8_SNORM = 0x8F96;
+
+  static const int RGB9_E5 = 0x8C3D;
+
+  static const int RGBA = 0x1908;
+
+  static const int RGBA16F = 0x881A;
+
+  static const int RGBA16I = 0x8D88;
+
+  static const int RGBA16UI = 0x8D76;
+
+  static const int RGBA32F = 0x8814;
+
+  static const int RGBA32I = 0x8D82;
+
+  static const int RGBA32UI = 0x8D70;
+
+  static const int RGBA4 = 0x8056;
+
+  static const int RGBA8 = 0x8058;
+
+  static const int RGBA8I = 0x8D8E;
+
+  static const int RGBA8UI = 0x8D7C;
+
+  static const int RGBA8_SNORM = 0x8F97;
+
+  static const int RGBA_INTEGER = 0x8D99;
+
+  static const int RGB_INTEGER = 0x8D98;
+
+  static const int RG_INTEGER = 0x8228;
+
+  static const int SAMPLER_2D = 0x8B5E;
+
+  static const int SAMPLER_2D_ARRAY = 0x8DC1;
+
+  static const int SAMPLER_2D_ARRAY_SHADOW = 0x8DC4;
+
+  static const int SAMPLER_2D_SHADOW = 0x8B62;
+
+  static const int SAMPLER_3D = 0x8B5F;
+
+  static const int SAMPLER_BINDING = 0x8919;
+
+  static const int SAMPLER_CUBE = 0x8B60;
+
+  static const int SAMPLER_CUBE_SHADOW = 0x8DC5;
+
+  static const int SAMPLES = 0x80A9;
+
+  static const int SAMPLE_ALPHA_TO_COVERAGE = 0x809E;
+
+  static const int SAMPLE_BUFFERS = 0x80A8;
+
+  static const int SAMPLE_COVERAGE = 0x80A0;
+
+  static const int SAMPLE_COVERAGE_INVERT = 0x80AB;
+
+  static const int SAMPLE_COVERAGE_VALUE = 0x80AA;
+
+  static const int SCISSOR_BOX = 0x0C10;
+
+  static const int SCISSOR_TEST = 0x0C11;
+
+  static const int SEPARATE_ATTRIBS = 0x8C8D;
+
+  static const int SHADER_TYPE = 0x8B4F;
+
+  static const int SHADING_LANGUAGE_VERSION = 0x8B8C;
+
+  static const int SHORT = 0x1402;
+
+  static const int SIGNALED = 0x9119;
+
+  static const int SIGNED_NORMALIZED = 0x8F9C;
+
+  static const int SRC_ALPHA = 0x0302;
+
+  static const int SRC_ALPHA_SATURATE = 0x0308;
+
+  static const int SRC_COLOR = 0x0300;
+
+  static const int SRGB = 0x8C40;
+
+  static const int SRGB8 = 0x8C41;
+
+  static const int SRGB8_ALPHA8 = 0x8C43;
+
+  static const int STATIC_COPY = 0x88E6;
+
+  static const int STATIC_DRAW = 0x88E4;
+
+  static const int STATIC_READ = 0x88E5;
+
+  static const int STENCIL = 0x1802;
+
+  static const int STENCIL_ATTACHMENT = 0x8D20;
+
+  static const int STENCIL_BACK_FAIL = 0x8801;
+
+  static const int STENCIL_BACK_FUNC = 0x8800;
+
+  static const int STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802;
+
+  static const int STENCIL_BACK_PASS_DEPTH_PASS = 0x8803;
+
+  static const int STENCIL_BACK_REF = 0x8CA3;
+
+  static const int STENCIL_BACK_VALUE_MASK = 0x8CA4;
+
+  static const int STENCIL_BACK_WRITEMASK = 0x8CA5;
+
+  static const int STENCIL_BITS = 0x0D57;
+
+  static const int STENCIL_BUFFER_BIT = 0x00000400;
+
+  static const int STENCIL_CLEAR_VALUE = 0x0B91;
+
+  static const int STENCIL_FAIL = 0x0B94;
+
+  static const int STENCIL_FUNC = 0x0B92;
+
+  static const int STENCIL_INDEX8 = 0x8D48;
+
+  static const int STENCIL_PASS_DEPTH_FAIL = 0x0B95;
+
+  static const int STENCIL_PASS_DEPTH_PASS = 0x0B96;
+
+  static const int STENCIL_REF = 0x0B97;
+
+  static const int STENCIL_TEST = 0x0B90;
+
+  static const int STENCIL_VALUE_MASK = 0x0B93;
+
+  static const int STENCIL_WRITEMASK = 0x0B98;
+
+  static const int STREAM_COPY = 0x88E2;
+
+  static const int STREAM_DRAW = 0x88E0;
+
+  static const int STREAM_READ = 0x88E1;
+
+  static const int SUBPIXEL_BITS = 0x0D50;
+
+  static const int SYNC_CONDITION = 0x9113;
+
+  static const int SYNC_FENCE = 0x9116;
+
+  static const int SYNC_FLAGS = 0x9115;
+
+  static const int SYNC_FLUSH_COMMANDS_BIT = 0x00000001;
+
+  static const int SYNC_GPU_COMMANDS_COMPLETE = 0x9117;
+
+  static const int SYNC_STATUS = 0x9114;
+
+  static const int TEXTURE = 0x1702;
+
+  static const int TEXTURE0 = 0x84C0;
+
+  static const int TEXTURE1 = 0x84C1;
+
+  static const int TEXTURE10 = 0x84CA;
+
+  static const int TEXTURE11 = 0x84CB;
+
+  static const int TEXTURE12 = 0x84CC;
+
+  static const int TEXTURE13 = 0x84CD;
+
+  static const int TEXTURE14 = 0x84CE;
+
+  static const int TEXTURE15 = 0x84CF;
+
+  static const int TEXTURE16 = 0x84D0;
+
+  static const int TEXTURE17 = 0x84D1;
+
+  static const int TEXTURE18 = 0x84D2;
+
+  static const int TEXTURE19 = 0x84D3;
+
+  static const int TEXTURE2 = 0x84C2;
+
+  static const int TEXTURE20 = 0x84D4;
+
+  static const int TEXTURE21 = 0x84D5;
+
+  static const int TEXTURE22 = 0x84D6;
+
+  static const int TEXTURE23 = 0x84D7;
+
+  static const int TEXTURE24 = 0x84D8;
+
+  static const int TEXTURE25 = 0x84D9;
+
+  static const int TEXTURE26 = 0x84DA;
+
+  static const int TEXTURE27 = 0x84DB;
+
+  static const int TEXTURE28 = 0x84DC;
+
+  static const int TEXTURE29 = 0x84DD;
+
+  static const int TEXTURE3 = 0x84C3;
+
+  static const int TEXTURE30 = 0x84DE;
+
+  static const int TEXTURE31 = 0x84DF;
+
+  static const int TEXTURE4 = 0x84C4;
+
+  static const int TEXTURE5 = 0x84C5;
+
+  static const int TEXTURE6 = 0x84C6;
+
+  static const int TEXTURE7 = 0x84C7;
+
+  static const int TEXTURE8 = 0x84C8;
+
+  static const int TEXTURE9 = 0x84C9;
+
+  static const int TEXTURE_2D = 0x0DE1;
+
+  static const int TEXTURE_2D_ARRAY = 0x8C1A;
+
+  static const int TEXTURE_3D = 0x806F;
+
+  static const int TEXTURE_BASE_LEVEL = 0x813C;
+
+  static const int TEXTURE_BINDING_2D = 0x8069;
+
+  static const int TEXTURE_BINDING_2D_ARRAY = 0x8C1D;
+
+  static const int TEXTURE_BINDING_3D = 0x806A;
+
+  static const int TEXTURE_BINDING_CUBE_MAP = 0x8514;
+
+  static const int TEXTURE_COMPARE_FUNC = 0x884D;
+
+  static const int TEXTURE_COMPARE_MODE = 0x884C;
+
+  static const int TEXTURE_CUBE_MAP = 0x8513;
+
+  static const int TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516;
+
+  static const int TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518;
+
+  static const int TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A;
+
+  static const int TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515;
+
+  static const int TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517;
+
+  static const int TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519;
+
+  static const int TEXTURE_IMMUTABLE_FORMAT = 0x912F;
+
+  static const int TEXTURE_IMMUTABLE_LEVELS = 0x82DF;
+
+  static const int TEXTURE_MAG_FILTER = 0x2800;
+
+  static const int TEXTURE_MAX_LEVEL = 0x813D;
+
+  static const int TEXTURE_MAX_LOD = 0x813B;
+
+  static const int TEXTURE_MIN_FILTER = 0x2801;
+
+  static const int TEXTURE_MIN_LOD = 0x813A;
+
+  static const int TEXTURE_WRAP_R = 0x8072;
+
+  static const int TEXTURE_WRAP_S = 0x2802;
+
+  static const int TEXTURE_WRAP_T = 0x2803;
+
+  static const int TIMEOUT_EXPIRED = 0x911B;
+
+  static const int TIMEOUT_IGNORED = -1;
+
+  static const int TRANSFORM_FEEDBACK = 0x8E22;
+
+  static const int TRANSFORM_FEEDBACK_ACTIVE = 0x8E24;
+
+  static const int TRANSFORM_FEEDBACK_BINDING = 0x8E25;
+
+  static const int TRANSFORM_FEEDBACK_BUFFER = 0x8C8E;
+
+  static const int TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8C8F;
+
+  static const int TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F;
+
+  static const int TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8C85;
+
+  static const int TRANSFORM_FEEDBACK_BUFFER_START = 0x8C84;
+
+  static const int TRANSFORM_FEEDBACK_PAUSED = 0x8E23;
+
+  static const int TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88;
+
+  static const int TRANSFORM_FEEDBACK_VARYINGS = 0x8C83;
+
+  static const int TRIANGLES = 0x0004;
+
+  static const int TRIANGLE_FAN = 0x0006;
+
+  static const int TRIANGLE_STRIP = 0x0005;
+
+  static const int UNIFORM_ARRAY_STRIDE = 0x8A3C;
+
+  static const int UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8A42;
+
+  static const int UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8A43;
+
+  static const int UNIFORM_BLOCK_BINDING = 0x8A3F;
+
+  static const int UNIFORM_BLOCK_DATA_SIZE = 0x8A40;
+
+  static const int UNIFORM_BLOCK_INDEX = 0x8A3A;
+
+  static const int UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8A46;
+
+  static const int UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8A44;
+
+  static const int UNIFORM_BUFFER = 0x8A11;
+
+  static const int UNIFORM_BUFFER_BINDING = 0x8A28;
+
+  static const int UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8A34;
+
+  static const int UNIFORM_BUFFER_SIZE = 0x8A2A;
+
+  static const int UNIFORM_BUFFER_START = 0x8A29;
+
+  static const int UNIFORM_IS_ROW_MAJOR = 0x8A3E;
+
+  static const int UNIFORM_MATRIX_STRIDE = 0x8A3D;
+
+  static const int UNIFORM_OFFSET = 0x8A3B;
+
+  static const int UNIFORM_SIZE = 0x8A38;
+
+  static const int UNIFORM_TYPE = 0x8A37;
+
+  static const int UNPACK_ALIGNMENT = 0x0CF5;
+
+  static const int UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243;
+
+  static const int UNPACK_FLIP_Y_WEBGL = 0x9240;
+
+  static const int UNPACK_IMAGE_HEIGHT = 0x806E;
+
+  static const int UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241;
+
+  static const int UNPACK_ROW_LENGTH = 0x0CF2;
+
+  static const int UNPACK_SKIP_IMAGES = 0x806D;
+
+  static const int UNPACK_SKIP_PIXELS = 0x0CF4;
+
+  static const int UNPACK_SKIP_ROWS = 0x0CF3;
+
+  static const int UNSIGNALED = 0x9118;
+
+  static const int UNSIGNED_BYTE = 0x1401;
+
+  static const int UNSIGNED_INT = 0x1405;
+
+  static const int UNSIGNED_INT_10F_11F_11F_REV = 0x8C3B;
+
+  static const int UNSIGNED_INT_24_8 = 0x84FA;
+
+  static const int UNSIGNED_INT_2_10_10_10_REV = 0x8368;
+
+  static const int UNSIGNED_INT_5_9_9_9_REV = 0x8C3E;
+
+  static const int UNSIGNED_INT_SAMPLER_2D = 0x8DD2;
+
+  static const int UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7;
+
+  static const int UNSIGNED_INT_SAMPLER_3D = 0x8DD3;
+
+  static const int UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4;
+
+  static const int UNSIGNED_INT_VEC2 = 0x8DC6;
+
+  static const int UNSIGNED_INT_VEC3 = 0x8DC7;
+
+  static const int UNSIGNED_INT_VEC4 = 0x8DC8;
+
+  static const int UNSIGNED_NORMALIZED = 0x8C17;
+
+  static const int UNSIGNED_SHORT = 0x1403;
+
+  static const int UNSIGNED_SHORT_4_4_4_4 = 0x8033;
+
+  static const int UNSIGNED_SHORT_5_5_5_1 = 0x8034;
+
+  static const int UNSIGNED_SHORT_5_6_5 = 0x8363;
+
+  static const int VALIDATE_STATUS = 0x8B83;
+
+  static const int VENDOR = 0x1F00;
+
+  static const int VERSION = 0x1F02;
+
+  static const int VERTEX_ARRAY_BINDING = 0x85B5;
+
+  static const int VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F;
+
+  static const int VERTEX_ATTRIB_ARRAY_DIVISOR = 0x88FE;
+
+  static const int VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622;
+
+  static const int VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD;
+
+  static const int VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A;
+
+  static const int VERTEX_ATTRIB_ARRAY_POINTER = 0x8645;
+
+  static const int VERTEX_ATTRIB_ARRAY_SIZE = 0x8623;
+
+  static const int VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624;
+
+  static const int VERTEX_ATTRIB_ARRAY_TYPE = 0x8625;
+
+  static const int VERTEX_SHADER = 0x8B31;
+
+  static const int VIEWPORT = 0x0BA2;
+
+  static const int WAIT_FAILED = 0x911D;
+
+  static const int ZERO = 0;
+}
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('WebGL2RenderingContextBase')
-@Experimental() // untriaged
 @Native("WebGL2RenderingContextBase")
 abstract class _WebGL2RenderingContextBase extends Interceptor
     implements _WebGLRenderingContextBase {
@@ -7767,9 +4166,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.
 
-@DocsEditable()
-@DomName('WebGLRenderingContextBase')
-@Experimental() // untriaged
 abstract class _WebGLRenderingContextBase extends Interceptor {
   // To suppress missing implicit constructor warnings.
   factory _WebGLRenderingContextBase._() {
diff --git a/sdk/lib/web_sql/dart2js/web_sql_dart2js.dart b/sdk/lib/web_sql/dart2js/web_sql_dart2js.dart
index 633ebe5..cce7a93 100644
--- a/sdk/lib/web_sql/dart2js/web_sql_dart2js.dart
+++ b/sdk/lib/web_sql/dart2js/web_sql_dart2js.dart
@@ -38,9 +38,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('SQLStatementCallback')
-// http://www.w3.org/TR/webdatabase/#sqlstatementcallback
-@Experimental() // deprecated
 typedef void SqlStatementCallback(
     SqlTransaction transaction, SqlResultSet resultSet);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -49,9 +46,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('SQLStatementErrorCallback')
-// http://www.w3.org/TR/webdatabase/#sqlstatementerrorcallback
-@Experimental() // deprecated
 typedef void SqlStatementErrorCallback(
     SqlTransaction transaction, SqlError error);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -60,9 +54,6 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('SQLTransactionCallback')
-// http://www.w3.org/TR/webdatabase/#sqltransactioncallback
-@Experimental() // deprecated
 typedef void SqlTransactionCallback(SqlTransaction transaction);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -70,21 +61,13 @@
 
 // WARNING: Do not edit - generated code.
 
-@DomName('SQLTransactionErrorCallback')
-// http://www.w3.org/TR/webdatabase/#sqltransactionerrorcallback
-@Experimental() // deprecated
 typedef void SqlTransactionErrorCallback(SqlError error);
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('Database')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.SAFARI)
-@Experimental()
-// http://www.w3.org/TR/webdatabase/#asynchronous-database-api
-@Experimental() // deprecated
 @Native("Database")
 class SqlDatabase extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -95,8 +78,6 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => JS('bool', '!!(window.openDatabase)');
 
-  @DomName('Database.version')
-  @DocsEditable()
   final String version;
 
   /**
@@ -113,28 +94,20 @@
    *
    * * [Database.changeVersion](http://www.w3.org/TR/webdatabase/#dom-database-changeversion) from W3C.
    */
-  @DomName('Database.changeVersion')
-  @DocsEditable()
   void changeVersion(String oldVersion, String newVersion,
       [SqlTransactionCallback callback,
       SqlTransactionErrorCallback errorCallback,
       VoidCallback successCallback]) native;
 
-  @DomName('Database.readTransaction')
-  @DocsEditable()
   void readTransaction(SqlTransactionCallback callback,
       [SqlTransactionErrorCallback errorCallback,
       VoidCallback successCallback]) native;
 
-  @DomName('Database.transaction')
-  @DocsEditable()
   void transaction(SqlTransactionCallback callback,
       [SqlTransactionErrorCallback errorCallback,
       VoidCallback successCallback]) native;
 
   @JSName('transaction')
-  @DomName('Database.transaction')
-  @DocsEditable()
   Future<SqlTransaction> transaction_future() {
     var completer = new Completer<SqlTransaction>();
     transaction((value) {
@@ -150,10 +123,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.
 
-@DocsEditable()
-@DomName('SQLError')
-// http://www.w3.org/TR/webdatabase/#sqlerror
-@Experimental() // deprecated
 @Native("SQLError")
 class SqlError extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -161,54 +130,30 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SQLError.CONSTRAINT_ERR')
-  @DocsEditable()
   static const int CONSTRAINT_ERR = 6;
 
-  @DomName('SQLError.DATABASE_ERR')
-  @DocsEditable()
   static const int DATABASE_ERR = 1;
 
-  @DomName('SQLError.QUOTA_ERR')
-  @DocsEditable()
   static const int QUOTA_ERR = 4;
 
-  @DomName('SQLError.SYNTAX_ERR')
-  @DocsEditable()
   static const int SYNTAX_ERR = 5;
 
-  @DomName('SQLError.TIMEOUT_ERR')
-  @DocsEditable()
   static const int TIMEOUT_ERR = 7;
 
-  @DomName('SQLError.TOO_LARGE_ERR')
-  @DocsEditable()
   static const int TOO_LARGE_ERR = 3;
 
-  @DomName('SQLError.UNKNOWN_ERR')
-  @DocsEditable()
   static const int UNKNOWN_ERR = 0;
 
-  @DomName('SQLError.VERSION_ERR')
-  @DocsEditable()
   static const int VERSION_ERR = 2;
 
-  @DomName('SQLError.code')
-  @DocsEditable()
   final int code;
 
-  @DomName('SQLError.message')
-  @DocsEditable()
   final String message;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SQLResultSet')
-// http://www.w3.org/TR/webdatabase/#sqlresultset
-@Experimental() // deprecated
 @Native("SQLResultSet")
 class SqlResultSet extends Interceptor {
   // To suppress missing implicit constructor warnings.
@@ -216,26 +161,16 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SQLResultSet.insertId')
-  @DocsEditable()
   final int insertId;
 
-  @DomName('SQLResultSet.rows')
-  @DocsEditable()
   final SqlResultSetRowList rows;
 
-  @DomName('SQLResultSet.rowsAffected')
-  @DocsEditable()
   final int rowsAffected;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SQLResultSetRowList')
-// http://www.w3.org/TR/webdatabase/#sqlresultsetrowlist
-@Experimental() // deprecated
 @Native("SQLResultSetRowList")
 class SqlResultSetRowList extends Interceptor
     with ListMixin<Map>, ImmutableListMixin<Map>
@@ -245,8 +180,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('SQLResultSetRowList.length')
-  @DocsEditable()
   int get length => JS("int", "#.length", this);
 
   Map operator [](int index) {
@@ -292,26 +225,19 @@
   Map elementAt(int index) => this[index];
   // -- end List<Map> mixins.
 
-  @DomName('SQLResultSetRowList.item')
-  @DocsEditable()
   Map item(int index) {
     return convertNativeToDart_Dictionary(_item_1(index));
   }
 
   @JSName('item')
-  @DomName('SQLResultSetRowList.item')
-  @DocsEditable()
   _item_1(index) native;
 }
 // Copyright (c) 2012, 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.
 
-@DocsEditable()
-@DomName('SQLTransaction')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.SAFARI)
-@Experimental()
 // http://www.w3.org/TR/webdatabase/#sqltransaction
 @deprecated // deprecated
 @Native("SQLTransaction")
@@ -322,16 +248,12 @@
   }
 
   @JSName('executeSql')
-  @DomName('SQLTransaction.executeSql')
-  @DocsEditable()
   void _executeSql(String sqlStatement,
       [List arguments,
       SqlStatementCallback callback,
       SqlStatementErrorCallback errorCallback]) native;
 
   @JSName('executeSql')
-  @DomName('SQLTransaction.executeSql')
-  @DocsEditable()
   Future<SqlResultSet> executeSql(String sqlStatement, [List arguments]) {
     var completer = new Completer<SqlResultSet>();
     _executeSql(sqlStatement, arguments, (transaction, resultSet) {
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index e85002f..750ea6a 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -76,6 +76,7 @@
 LayoutTests/fast/canvas/fillText-shadow_t01: RuntimeError # See issue 143
 LayoutTests/fast/css/content/content-quotes-01_t01: Pass, RuntimeError
 LayoutTests/fast/css/font-face-cache-bug_t01: Pass, RuntimeError
+LayoutTests/fast/css/font-shorthand-mix-inherit_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/css/fontfaceset-loadingdone_t01: Pass, RuntimeError
 LayoutTests/fast/css/misplaced-charset_t01: RuntimeError # See issue 143
 LayoutTests/fast/css/pseudo-empty-dynamic-empty_t01: RuntimeError # See issue 143
@@ -118,6 +119,7 @@
 LayoutTests/fast/table/fixed-table-with-percent-width-inside-extra-large-div_t01: Pass, RuntimeError
 LayoutTests/fast/table/hittest-tablecell-right-edge_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
 LayoutTests/fast/table/hittest-tablecell-with-borders-right-edge_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LayoutTests/fast/table/resize-table-cell_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/table/table-all-rowspans-height-distribution-in-rows-except-overlapped_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
 LayoutTests/fast/table/table-colgroup-present-after-table-row_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
 LayoutTests/fast/table/table-rowspan-height-distribution-in-rows_t02: Skip # https://github.com/dart-lang/sdk/issues/28873
@@ -183,6 +185,7 @@
 LibTest/core/int/operator_truncating_division_A01_t01: RuntimeError # Large integer literal. Not valid dart 2.
 LibTest/core/int/toDouble_A01_t01: RuntimeError, OK # co19 issue 200
 LibTest/html/Element/addEventListener_A01_t04: Skip # https://github.com/dart-lang/sdk/issues/28873
+LibTest/html/Element/mouseEnterEvent_A01_t01: Pass, RuntimeError # Please triage this failure
 LibTest/html/Element/queryAll_A01_t01: RuntimeError # See issue 143
 LibTest/html/Element/query_A01_t01: RuntimeError # See issue 143
 LibTest/html/HttpRequest/responseType_A01_t03: CompileTimeError # co19-roll r706: Please triage this failure
@@ -1484,7 +1487,6 @@
 [ $compiler == dart2js && $runtime == d8 && $fasta ]
 LayoutTests/*: SkipByDesign
 LibTest/html/*: SkipByDesign
-LibTest/html/Element/mouseEnterEvent_A01_t01: RuntimeError
 WebPlatformTest/*: SkipByDesign
 
 [ $compiler == dart2js && $runtime != d8 && $runtime != drt && $checked ]
@@ -2491,7 +2493,6 @@
 LayoutTests/fast/css/focus-display-block-inline_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/css/font-face-insert-link_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/css/font-property-priority_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/font-shorthand-mix-inherit_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/fontface-properties_t01: RuntimeError # Uses FontFace class, not defined for this browser.
 LayoutTests/fast/css/getComputedStyle/computed-style-border-image_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/getComputedStyle/computed-style-cross-fade_t01: RuntimeError # Please triage this failure
@@ -3655,9 +3656,7 @@
 Language/Classes/Constructors/Factories/return_wrong_type_t02: Pass, Slow # Issue 25940
 LayoutTests/fast/canvas/webgl/draw-webgl-to-canvas-2d_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/drawingbuffer-test_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/device-aspect-ratio_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/font-face-multiple-ranges-for-unicode-range_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/media-rule-screenDepthPerComponent_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/forms/submit-form-attributes_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/media/color-does-not-include-alpha_t01: RuntimeError # Issue 31161
 LayoutTests/fast/media/media-query-list_t01: Pass, RuntimeError # Issue 32257
@@ -4913,7 +4912,6 @@
 LayoutTests/fast/table/nested-tables-with-div-offset_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/table/padding-height-and-override-height_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/table/resize-table-binding-cell_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/table/resize-table-cell_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/table/table-all-rowspans-height-distribution-in-rows-except-overlapped_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/table/table-all-rowspans-height-distribution-in-rows_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/table/table-cell-offset-width_t01: RuntimeError # Please triage this failure
@@ -6998,14 +6996,12 @@
 Language/Expressions/Assignment/no_such_method_t09: RuntimeError
 Language/Expressions/Constants/bitwise_operators_t05: MissingCompileTimeError
 Language/Expressions/Constants/depending_on_itself_t03: Crash
-Language/Expressions/Constants/exception_t01: MissingCompileTimeError # Larger than 64 bit int
 Language/Expressions/Constants/exception_t02: Pass
 Language/Expressions/Constants/literal_number_t01: CompileTimeError # Larger than 64 bit int
 Language/Expressions/Constants/logical_expression_t04: MissingCompileTimeError
 Language/Expressions/Constants/math_operators_t01: CompileTimeError # Larger than 64 bit int
 Language/Expressions/Constants/math_operators_t06: CompileTimeError # Larger than 64 bit int
 Language/Expressions/Function_Invocation/Unqualified_Invocation/instance_context_invocation_t04: Crash
-Language/Expressions/Instance_Creation/Const/exception_t01: MissingCompileTimeError
 Language/Expressions/Method_Invocation/Ordinary_Invocation/evaluation_t08: RuntimeError
 Language/Expressions/Method_Invocation/Super_Invocation/accessible_instance_member_t02: Crash
 Language/Expressions/Method_Invocation/Super_Invocation/evaluation_t05: RuntimeError
@@ -7050,7 +7046,6 @@
 LayoutTests/fast/canvas/rgba-parsing_t01: Pass, RuntimeError
 LibTest/core/Invocation/namedArguments_A01_t01: RuntimeError
 LibTest/core/double/isInfinite_A01_t03: CompileTimeError # Larger than 64 bit int
-LibTest/core/double/operator_GE_A01_t02: RuntimeError # WontFix: Not representable in JS.
 LibTest/core/int/abs_A01_t01: CompileTimeError # Larger than 64 bit int
 LibTest/core/int/ceilToDouble_A01_t01: CompileTimeError # Larger than 64 bit int
 LibTest/core/int/ceil_A01_t01: CompileTimeError # Larger than 64 bit int
@@ -7103,7 +7098,6 @@
 LibTest/html/Window/requestFileSystem_A01_t01: Crash
 LibTest/html/Window/requestFileSystem_A01_t02: Crash
 LibTest/html/Window/requestFileSystem_A02_t01: Crash
-LibTest/math/pow_A09_t01: RuntimeError # WontFix: Not representable in JS.
 LibTest/math/pow_A10_t01: CompileTimeError # Larger than 64 bit int
 WebPlatformTest/html/semantics/embedded-content/the-audio-element/audio_constructor_t01: RuntimeError
 
diff --git a/tests/co19/co19-runtime.status b/tests/co19/co19-runtime.status
index 3ff64e2..ac31e6c 100644
--- a/tests/co19/co19-runtime.status
+++ b/tests/co19/co19-runtime.status
@@ -188,9 +188,6 @@
 LibTest/collection/ListMixin/ListMixin_class_A01_t02: Skip # co19 issue 673, These tests take too much memory (300 MB) for our 1 GB test machine co19 issue 673. http://code.google.com/p/co19/issues/detail?id=673
 LibTest/core/List/List_class_A01_t02: Skip # co19 issue 673, These tests take too much memory (300 MB) for our 1 GB test machine co19 issue 673. http://code.google.com/p/co19/issues/detail?id=673
 
-[ $arch != arm64 && $arch != simarm64 && $arch != simdbc && $arch != simdbc64 && $arch != x64 && ($runtime == dart_precompiled || $runtime == vm) ]
-LibTest/core/int/operator_left_shift_A01_t02: Fail # co19 issue 129
-
 [ $arch == ia32 && $mode == release && $runtime == vm && $system == linux ]
 service/dev_fs_spawn_test: Pass, Fail # Issue 28411
 
@@ -244,9 +241,6 @@
 LibTest/collection/ListMixin/ListMixin_class_A01_t02: Skip # Timeout
 LibTest/core/Uri/Uri_A06_t03: Skip # Timeout
 
-[ $compiler == app_jit || $compiler == none || $compiler == precompiler ]
-Language/Expressions/Function_Invocation/async_invokation_t02: RuntimeError # sync-async is on by default.
-
 [ $compiler == app_jit || $compiler == precompiler ]
 Language/Mixins/Mixin_Application/error_t01: Pass
 Language/Mixins/Mixin_Application/error_t02: Pass
diff --git a/tests/compiler/dart2js/codegen/expect_annotations_test.dart b/tests/compiler/dart2js/codegen/expect_annotations_test.dart
index 2b0cbfb..40bbeb5 100644
--- a/tests/compiler/dart2js/codegen/expect_annotations_test.dart
+++ b/tests/compiler/dart2js/codegen/expect_annotations_test.dart
@@ -4,6 +4,7 @@
 
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/inferrer/typemasks/masks.dart';
@@ -56,8 +57,8 @@
 }
 
 runTest() async {
-  CompilationResult result =
-      await runCompiler(memorySourceFiles: MEMORY_SOURCE_FILES);
+  CompilationResult result = await runCompiler(
+      memorySourceFiles: MEMORY_SOURCE_FILES, options: [Flags.noPreviewDart2]);
   Compiler compiler = result.compiler;
   JClosedWorld closedWorld = compiler.backendClosedWorldForTesting;
   Expect.isFalse(compiler.compilationFailed, 'Unsuccessful compilation');
diff --git a/tests/compiler/dart2js/codegen/jsarray_indexof_test.dart b/tests/compiler/dart2js/codegen/jsarray_indexof_test.dart
index 2c2b74d..b7ecdeb 100644
--- a/tests/compiler/dart2js/codegen/jsarray_indexof_test.dart
+++ b/tests/compiler/dart2js/codegen/jsarray_indexof_test.dart
@@ -33,9 +33,9 @@
 main() {
   asyncTest(() async {
     print('--test from kernel------------------------------------------------');
-    await runTest([]);
+    await runTest([Flags.noPreviewDart2]);
     print('--test from kernel (trust-type-annotations)-----------------------');
-    await runTest([Flags.trustTypeAnnotations]);
+    await runTest([Flags.noPreviewDart2, Flags.trustTypeAnnotations]);
     print('--test from kernel (strong mode)----------------------------------');
     await runTest([Flags.strongMode]);
     print('--test from kernel (strong mode, omit-implicit.checks)------------');
diff --git a/tests/compiler/dart2js/codegen/trust_type_annotations_test.dart b/tests/compiler/dart2js/codegen/trust_type_annotations_test.dart
index 076929c..b8282c5 100644
--- a/tests/compiler/dart2js/codegen/trust_type_annotations_test.dart
+++ b/tests/compiler/dart2js/codegen/trust_type_annotations_test.dart
@@ -51,7 +51,7 @@
 
 void main() {
   runTest() async {
-    var options = [Flags.trustTypeAnnotations];
+    var options = [Flags.noPreviewDart2, Flags.trustTypeAnnotations];
     var result = await runCompiler(
         memorySourceFiles: {'main.dart': TEST}, options: options);
     var compiler = result.compiler;
diff --git a/tests/compiler/dart2js/compiler_helper.dart b/tests/compiler/dart2js/compiler_helper.dart
index d0fabb9..df85ea4 100644
--- a/tests/compiler/dart2js/compiler_helper.dart
+++ b/tests/compiler/dart2js/compiler_helper.dart
@@ -49,7 +49,11 @@
     void check(String generatedEntry),
     bool returnAll: false}) async {
   OutputCollector outputCollector = returnAll ? new OutputCollector() : null;
-  List<String> options = <String>[Flags.disableTypeInference];
+  // TODO(sigmund): use strong-mode.
+  List<String> options = <String>[
+    Flags.noPreviewDart2,
+    Flags.disableTypeInference
+  ];
   if (enableTypeAssertions) {
     options.add(Flags.enableCheckedMode);
   }
@@ -101,7 +105,7 @@
     int expectedWarnings}) async {
   OutputCollector outputCollector = new OutputCollector();
   DiagnosticCollector diagnosticCollector = new DiagnosticCollector();
-  List<String> options = <String>[];
+  List<String> options = <String>[Flags.noPreviewDart2];
   if (disableInlining) {
     options.add(Flags.disableInlining);
   }
diff --git a/tests/compiler/dart2js/dart2js.status b/tests/compiler/dart2js/dart2js.status
index 1360b6c..a79f3a6 100644
--- a/tests/compiler/dart2js/dart2js.status
+++ b/tests/compiler/dart2js/dart2js.status
@@ -38,7 +38,6 @@
 show_package_warnings_test: RuntimeError # missing errors from the FE
 sourcemaps/d2js_validity_test: RuntimeError # Issue 33072
 sourcemaps/deferred_d2js_validity_test: RuntimeError # Issue 33072
-sourcemaps/pub_build_validity_test: Pass, RuntimeError # Investigate: passes locally, but only fails in bots.
 sourcemaps/source_mapping_invokes_test: Pass, Slow
 sourcemaps/source_mapping_operators_test: Pass, Slow
 sourcemaps/source_mapping_test: Pass, Slow
@@ -51,7 +50,6 @@
 end_to_end/exit_code_test: Pass, Slow
 in_user_code_test: Pass, Slow
 show_package_warnings_test: Pass, Slow
-sourcemaps/source_map_pub_build_validity_test: Pass, Slow
 
 [ $system == linux ]
 dart2js_batch2_test: Pass, RuntimeError # Issue 29021
@@ -65,7 +63,6 @@
 jsinterop/world_test: Pass, Slow
 kernel/visitor_test: Pass, Slow
 output_type_test: Pass, Slow
-sourcemaps/source_map_pub_build_validity_test: Pass, Slow
 sourcemaps/stacktrace_test: Pass, Slow
 uri_retention_test: Pass, Slow
 
diff --git a/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart b/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
index 45cab1b..a077442 100644
--- a/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
+++ b/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
@@ -577,7 +577,7 @@
       print('--skipped for kernel--------------------------------------------');
     } else {
       print('--from kernel---------------------------------------------------');
-      List<String> options = []..addAll(testOptions);
+      List<String> options = [Flags.noPreviewDart2]..addAll(testOptions);
       if (trustTypeAnnotations) {
         options.add(Flags.trustTypeAnnotations);
       }
@@ -628,8 +628,11 @@
         print('--skipped for kernel (strong mode, omit-implicit-checks)------');
       } else {
         print('--from kernel (strong mode, omit-implicit-checks)-------------');
-        List<String> options = [Flags.strongMode, Flags.omitImplicitChecks]
-          ..addAll(testOptions);
+        List<String> options = [
+          Flags.strongMode,
+          Flags.omitImplicitChecks,
+          Flags.laxRuntimeTypeToString
+        ]..addAll(testOptions);
         MemberAnnotations<IdValue> annotations = expectedMaps[omitMarker];
         CompiledData compiledData2 = await computeData(
             entryPoint, memorySourceFiles, computeFromKernel,
diff --git a/tests/compiler/dart2js/equivalence/show_helper.dart b/tests/compiler/dart2js/equivalence/show_helper.dart
index 0cdad7d..b42f560 100644
--- a/tests/compiler/dart2js/equivalence/show_helper.dart
+++ b/tests/compiler/dart2js/equivalence/show_helper.dart
@@ -49,8 +49,8 @@
   }
 
   options = new List<String>.from(options);
-  if (strongMode) {
-    options.add(Flags.strongMode);
+  if (!strongMode) {
+    options.add(Flags.noPreviewDart2);
   }
   if (trustTypeAnnotations) {
     options.add(Flags.trustTypeAnnotations);
diff --git a/tests/compiler/dart2js/helpers/element_lookup.dart b/tests/compiler/dart2js/helpers/element_lookup.dart
index 6d24abe..4823c94 100644
--- a/tests/compiler/dart2js/helpers/element_lookup.dart
+++ b/tests/compiler/dart2js/helpers/element_lookup.dart
@@ -22,12 +22,14 @@
 }
 
 MemberEntity findClassMember(
-    JClosedWorld closedWorld, String className, String memberName) {
+    JClosedWorld closedWorld, String className, String memberName,
+    {bool required: true}) {
   ElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
   ClassEntity cls = findClass(closedWorld, className);
   assert(cls != null, "Class '$className' not found.");
   MemberEntity member = elementEnvironment.lookupClassMember(cls, memberName);
-  assert(member != null, "Member '$memberName' not found in $cls.");
+  assert(
+      !required || member != null, "Member '$memberName' not found in $cls.");
   return member;
 }
 
diff --git a/tests/compiler/dart2js/impact/data/runtime_type_strong.dart b/tests/compiler/dart2js/impact/data/runtime_type_strong.dart
new file mode 100644
index 0000000..621b451
--- /dev/null
+++ b/tests/compiler/dart2js/impact/data/runtime_type_strong.dart
@@ -0,0 +1,463 @@
+// Copyright (c) 2018, 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.
+
+/*element: Class1a.:static=[Object.(0)]*/
+class Class1a<T> {
+  /*element: Class1a.==:
+   dynamic=[==,runtimeType],
+   runtimeType=[equals:Class1a<Class1a.T>/dynamic]
+  */
+  bool operator ==(other) {
+    return runtimeType == other.runtimeType;
+  }
+}
+
+/*element: Class1b.:static=[Class1a.(0)]*/
+class Class1b<T> extends Class1a<T> {
+  /*element: Class1b.==:
+   dynamic=[==,runtimeType],
+   runtimeType=[equals:dynamic/Class1b<Class1b.T>]
+  */
+  bool operator ==(other) {
+    return other.runtimeType == runtimeType;
+  }
+}
+
+/*element: Class1c.:static=[Object.(0)]*/
+class Class1c<T> implements Class1a<T> {
+  /*element: Class1c.==:
+   dynamic=[==,runtimeType],
+   runtimeType=[equals:Class1c<Class1c.T>/dynamic],
+   type=[inst:JSNull]
+  */
+  bool operator ==(other) {
+    return runtimeType == other?.runtimeType;
+  }
+}
+
+/*element: Class1d.:static=[Object.(0)]*/
+class Class1d<T> implements Class1a<T> {
+  /*element: Class1d.==:
+   dynamic=[==,runtimeType],
+   runtimeType=[equals:dynamic/Class1d<Class1d.T>],
+   type=[inst:JSNull]
+  */
+  bool operator ==(other) {
+    return other?.runtimeType == runtimeType;
+  }
+}
+
+/*element: Class2.:static=[Object.(0)]*/
+class Class2<T> {}
+
+/*element: Class3.:static=[Object.(0)]*/
+class Class3 {
+  /*element: Class3.field:type=[inst:JSNull]*/
+  var field;
+}
+
+/*element: Class4.:static=[Object.(0)]*/
+class Class4 {}
+
+/*element: toString1:
+ dynamic=[runtimeType,toString(0)],
+ runtimeType=[string:Class2<int>],
+ static=[
+  S,
+  checkSubtype,
+  getRuntimeTypeArgument,
+  getRuntimeTypeArgumentIntercepted,
+  getRuntimeTypeInfo,
+  getTypeArgumentByIndex,
+  setRuntimeTypeInfo],
+ type=[
+  inst:JSArray<dynamic>,
+  inst:JSBool,
+  inst:JSExtendableArray<dynamic>,
+  inst:JSFixedArray<dynamic>,
+  inst:JSMutableArray<dynamic>,
+  inst:JSString,
+  inst:JSUnmodifiableArray<dynamic>,
+  param:Class2<int>]
+*/
+toString1(Class2<int> c) => '${c.runtimeType}';
+
+/*element: toString2:
+ dynamic=[==,runtimeType,toString(0)],
+ runtimeType=[string:Class2<int>],
+ static=[
+  S,
+  checkSubtype,
+  getRuntimeTypeArgument,
+  getRuntimeTypeArgumentIntercepted,
+  getRuntimeTypeInfo,
+  getTypeArgumentByIndex,
+  setRuntimeTypeInfo],
+ type=[
+  inst:JSArray<dynamic>,
+  inst:JSBool,
+  inst:JSExtendableArray<dynamic>,
+  inst:JSFixedArray<dynamic>,
+  inst:JSMutableArray<dynamic>,
+  inst:JSNull,
+  inst:JSString,
+  inst:JSUnmodifiableArray<dynamic>,
+  param:Class2<int>]
+*/
+toString2(Class2<int> c) => '${c?.runtimeType}';
+
+/*element: toString3:
+ dynamic=[runtimeType,toString(0)],
+ runtimeType=[string:Class2<int>],
+ static=[
+  checkSubtype,
+  getRuntimeTypeArgument,
+  getRuntimeTypeArgumentIntercepted,
+  getRuntimeTypeInfo,
+  getTypeArgumentByIndex,
+  setRuntimeTypeInfo],
+ type=[
+  inst:JSArray<dynamic>,
+  inst:JSBool,
+  inst:JSExtendableArray<dynamic>,
+  inst:JSFixedArray<dynamic>,
+  inst:JSMutableArray<dynamic>,
+  inst:JSUnmodifiableArray<dynamic>,
+  param:Class2<int>]
+*/
+toString3(Class2<int> c) => c.runtimeType.toString();
+
+/*element: toString4:
+ dynamic=[==,runtimeType,toString(0)],
+ runtimeType=[string:Class2<int>],
+ static=[
+  checkSubtype,
+  getRuntimeTypeArgument,
+  getRuntimeTypeArgumentIntercepted,
+  getRuntimeTypeInfo,
+  getTypeArgumentByIndex,
+  setRuntimeTypeInfo],
+ type=[
+  inst:JSArray<dynamic>,
+  inst:JSBool,
+  inst:JSExtendableArray<dynamic>,
+  inst:JSFixedArray<dynamic>,
+  inst:JSMutableArray<dynamic>,
+  inst:JSNull,
+  inst:JSUnmodifiableArray<dynamic>,
+  param:Class2<int>]
+*/
+toString4(Class2<int> c) => c.runtimeType?.toString();
+
+/*element: toString5:
+ dynamic=[==,runtimeType,toString(0)],
+ runtimeType=[string:Class2<int>],
+ static=[
+  checkSubtype,
+  getRuntimeTypeArgument,
+  getRuntimeTypeArgumentIntercepted,
+  getRuntimeTypeInfo,
+  getTypeArgumentByIndex,
+  setRuntimeTypeInfo],
+ type=[
+  inst:JSArray<dynamic>,
+  inst:JSBool,
+  inst:JSExtendableArray<dynamic>,
+  inst:JSFixedArray<dynamic>,
+  inst:JSMutableArray<dynamic>,
+  inst:JSNull,
+  inst:JSUnmodifiableArray<dynamic>,
+  param:Class2<int>]
+*/
+toString5(Class2<int> c) => c?.runtimeType?.toString();
+
+/*element: toString6:
+ dynamic=[==,runtimeType,toString(0)],
+ runtimeType=[string:Class2<int>],
+ static=[
+  checkSubtype,
+  getRuntimeTypeArgument,
+  getRuntimeTypeArgumentIntercepted,
+  getRuntimeTypeInfo,
+  getTypeArgumentByIndex,
+  setRuntimeTypeInfo],
+ type=[
+  inst:JSArray<dynamic>,
+  inst:JSBool,
+  inst:JSExtendableArray<dynamic>,
+  inst:JSFixedArray<dynamic>,
+  inst:JSMutableArray<dynamic>,
+  inst:JSNull,
+  inst:JSUnmodifiableArray<dynamic>,
+  param:Class2<int>]
+*/
+toString6(Class2<int> c) => c?.runtimeType.toString();
+
+/*element: unknown:
+ dynamic=[runtimeType],
+ runtimeType=[unknown:Class2<int>],
+ static=[
+  checkSubtype,
+  getRuntimeTypeArgument,
+  getRuntimeTypeArgumentIntercepted,
+  getRuntimeTypeInfo,
+  getTypeArgumentByIndex,
+  setRuntimeTypeInfo],
+ type=[
+  inst:JSArray<dynamic>,
+  inst:JSBool,
+  inst:JSExtendableArray<dynamic>,
+  inst:JSFixedArray<dynamic>,
+  inst:JSMutableArray<dynamic>,
+  inst:JSUnmodifiableArray<dynamic>,
+  param:Class2<int>]
+*/
+unknown(Class2<int> c) => c.runtimeType;
+
+/*element: equals1:
+ dynamic=[==,runtimeType],
+ runtimeType=[equals:Class1a<int>/Class1d<int>],
+ static=[
+  checkSubtype,
+  getRuntimeTypeArgument,
+  getRuntimeTypeArgumentIntercepted,
+  getRuntimeTypeInfo,
+  getTypeArgumentByIndex,
+  setRuntimeTypeInfo],
+ type=[
+  inst:JSArray<dynamic>,
+  inst:JSBool,
+  inst:JSExtendableArray<dynamic>,
+  inst:JSFixedArray<dynamic>,
+  inst:JSMutableArray<dynamic>,
+  inst:JSNull,
+  inst:JSUnmodifiableArray<dynamic>,
+  param:Class1a<int>,
+  param:Class1d<int>]
+*/
+equals1(Class1a<int> a, Class1d<int> b) => a?.runtimeType == b?.runtimeType;
+
+/*element: almostEquals1:
+ dynamic=[==,runtimeType],
+ runtimeType=[unknown:Class3],
+ type=[inst:JSBool,inst:JSNull,param:Class3]
+*/
+almostEquals1(Class3 a) => a.runtimeType == null;
+
+/*element: almostEquals2:
+ dynamic=[==,runtimeType],
+ runtimeType=[unknown:Class3],
+ type=[inst:JSBool,inst:JSNull,param:Class3]
+*/
+almostEquals2(Class3 a) => a?.runtimeType == null;
+
+/*element: almostEquals3:
+ dynamic=[==,runtimeType],
+ runtimeType=[unknown:Class3],
+ type=[inst:JSBool,inst:JSNull,param:Class3]
+*/
+almostEquals3(Class3 a) => null == a.runtimeType;
+
+/*element: almostEquals4:
+ dynamic=[==,runtimeType],
+ runtimeType=[unknown:Class3],
+ type=[inst:JSBool,inst:JSNull,param:Class3]
+*/
+almostEquals4(Class3 a) => null == a?.runtimeType;
+
+/*element: almostEquals5:
+ dynamic=[==,field,runtimeType],
+ runtimeType=[unknown:Class3],
+ type=[inst:JSBool,param:Class3]
+*/
+almostEquals5(Class3 a) => a.runtimeType == a.field;
+
+/*element: almostEquals6:
+ dynamic=[==,field,runtimeType],
+ runtimeType=[unknown:Class3],
+ type=[inst:JSBool,inst:JSNull,param:Class3]
+*/
+almostEquals6(Class3 a) => a?.runtimeType == a.field;
+
+/*element: almostEquals7:
+ dynamic=[==,field,runtimeType],
+ runtimeType=[unknown:Class3],
+ type=[inst:JSBool,inst:JSNull,param:Class3]
+*/
+almostEquals7(Class3 a) => a.runtimeType == a?.field;
+
+/*element: almostEquals8:
+ dynamic=[==,field,runtimeType],
+ runtimeType=[unknown:Class3],
+ type=[inst:JSBool,inst:JSNull,param:Class3]
+*/
+almostEquals8(Class3 a) => a?.runtimeType == a?.field;
+
+/*element: almostEquals9:
+ dynamic=[==,field,runtimeType],
+ runtimeType=[unknown:Class3],
+ type=[inst:JSBool,param:Class3]
+*/
+almostEquals9(Class3 a) => a.field == a.runtimeType;
+
+/*element: almostEquals10:
+ dynamic=[==,field,runtimeType],
+ runtimeType=[unknown:Class3],
+ type=[inst:JSBool,inst:JSNull,param:Class3]
+*/
+almostEquals10(Class3 a) => a?.field == a.runtimeType;
+
+/*element: almostEquals11:
+ dynamic=[==,field,runtimeType],
+ runtimeType=[unknown:Class3],
+ type=[inst:JSBool,inst:JSNull,param:Class3]
+*/
+almostEquals11(Class3 a) => a.field == a?.runtimeType;
+
+/*element: almostEquals12:
+ dynamic=[==,field,runtimeType],
+ runtimeType=[unknown:Class3],
+ type=[inst:JSBool,inst:JSNull,param:Class3]
+*/
+almostEquals12(Class3 a) => a?.field == a?.runtimeType;
+
+/*element: almostToString1:
+ dynamic=[runtimeType,toString],
+ runtimeType=[unknown:Class3],
+ type=[inst:JSBool,param:Class3]
+*/
+almostToString1(Class3 a) => a.runtimeType.toString;
+
+/*element: almostToString2:
+ dynamic=[==,runtimeType,toString],
+ runtimeType=[unknown:Class3],
+ type=[inst:JSBool,inst:JSNull,param:Class3]
+*/
+almostToString2(Class3 a) => a?.runtimeType?.toString;
+
+/*element: almostToString3:
+ dynamic=[noSuchMethod(1),runtimeType],
+ runtimeType=[unknown:Class3],
+ type=[inst:JSBool,inst:JSNull,param:Class3]
+*/
+almostToString3(Class3 a) => a.runtimeType.noSuchMethod(null);
+
+/*element: almostToString4:
+ dynamic=[==,noSuchMethod(1),runtimeType],
+ runtimeType=[unknown:Class3],
+ type=[inst:JSBool,inst:JSNull,param:Class3]
+*/
+almostToString4(Class3 a) => a?.runtimeType.noSuchMethod(null);
+
+/*element: notEquals1:
+ dynamic=[==,runtimeType],
+ runtimeType=[equals:Class3/Class4],
+ type=[inst:JSBool,param:Class3,param:Class4]
+*/
+notEquals1(Class3 a, Class4 b) => a.runtimeType != b.runtimeType;
+
+/*element: notEquals2:
+ dynamic=[==,runtimeType],
+ runtimeType=[equals:Class3/Class4],
+ type=[inst:JSBool,inst:JSNull,param:Class3,param:Class4]
+*/
+notEquals2(Class3 a, Class4 b) => a?.runtimeType != b.runtimeType;
+
+/*element: notEquals3:
+ dynamic=[==,runtimeType],
+ runtimeType=[equals:Class3/Class4],
+ type=[inst:JSBool,inst:JSNull,param:Class3,param:Class4]
+*/
+notEquals3(Class3 a, Class4 b) => a.runtimeType != b?.runtimeType;
+
+/*element: notEquals4:
+ dynamic=[==,runtimeType],
+ runtimeType=[equals:Class3/Class4],
+ type=[inst:JSBool,inst:JSNull,param:Class3,param:Class4]
+*/
+notEquals4(Class3 a, Class4 b) => a?.runtimeType != b?.runtimeType;
+
+/*element: main:
+ dynamic=[==],
+ static=[
+  Class1a.(0),
+  Class1b.(0),
+  Class1c.(0),
+  Class1d.(0),
+  Class2.(0),
+  Class3.(0),
+  Class4.(0),
+  almostEquals1(1),
+  almostEquals10(1),
+  almostEquals11(1),
+  almostEquals12(1),
+  almostEquals2(1),
+  almostEquals3(1),
+  almostEquals4(1),
+  almostEquals5(1),
+  almostEquals6(1),
+  almostEquals7(1),
+  almostEquals8(1),
+  almostEquals9(1),
+  almostToString1(1),
+  almostToString2(1),
+  almostToString3(1),
+  almostToString4(1),
+  assertIsSubtype,
+  equals1(2),
+  notEquals1(2),
+  notEquals2(2),
+  notEquals3(2),
+  notEquals4(2),
+  print(1),
+  throwTypeError,
+  toString1(1),
+  toString2(1),
+  toString3(1),
+  toString4(1),
+  toString5(1),
+  toString6(1),
+  unknown(1)]
+*/
+main() {
+  Class1a<int> c1a = new Class1a<int>();
+  Class1b<int> c1b = new Class1b<int>();
+  Class1c<int> c1c = new Class1c<int>();
+  Class1d<int> c1d = new Class1d<int>();
+  Class2<int> c2 = new Class2<int>();
+  Class3 c3 = new Class3();
+  Class4 c4 = new Class4();
+  print(c1a == c1b);
+  print(c1a == c1c);
+  print(c1a == c1d);
+  print(c1a == c2);
+  toString1(c2);
+  toString2(c2);
+  toString3(c2);
+  toString4(c2);
+  toString5(c2);
+  toString6(c2);
+  unknown(c2);
+  equals1(c1a, c1d);
+  almostEquals1(c3);
+  almostEquals2(c3);
+  almostEquals3(c3);
+  almostEquals4(c3);
+  almostEquals5(c3);
+  almostEquals6(c3);
+  almostEquals7(c3);
+  almostEquals8(c3);
+  almostEquals9(c3);
+  almostEquals10(c3);
+  almostEquals11(c3);
+  almostEquals12(c3);
+  almostToString1(c3);
+  almostToString2(c3);
+  almostToString3(c3);
+  almostToString4(c3);
+  notEquals1(c3, c4);
+  notEquals2(c3, c4);
+  notEquals3(c3, c4);
+  notEquals4(c3, c4);
+}
diff --git a/tests/compiler/dart2js/impact/impact_test.dart b/tests/compiler/dart2js/impact/impact_test.dart
index 7dd7401..dcf0e1d 100644
--- a/tests/compiler/dart2js/impact/impact_test.dart
+++ b/tests/compiler/dart2js/impact/impact_test.dart
@@ -4,13 +4,15 @@
 
 import 'dart:io';
 import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/common/resolution.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/frontend_strategy.dart';
 import 'package:compiler/src/kernel/element_map.dart';
 import 'package:compiler/src/kernel/kernel_strategy.dart';
-import 'package:compiler/src/universe/world_impact.dart';
+import 'package:compiler/src/universe/feature.dart';
 import 'package:compiler/src/universe/use.dart';
+import 'package:compiler/src/universe/world_impact.dart';
 import '../equivalence/id_equivalence.dart';
 import '../equivalence/id_equivalence_helper.dart';
 
@@ -28,6 +30,7 @@
   static const String staticUse = 'static';
   static const String dynamicUse = 'dynamic';
   static const String constantUse = 'constant';
+  static const String runtimeTypeUse = 'runtimeType';
 }
 
 /// Compute type inference data for [member] from kernel based inference.
@@ -61,6 +64,13 @@
   for (ConstantUse use in impact.constantUses) {
     features.addElement(Tags.constantUse, use.shortText);
   }
+  if (impact is TransformedWorldImpact &&
+      impact.worldImpact is ResolutionImpact) {
+    ResolutionImpact resolutionImpact = impact.worldImpact;
+    for (RuntimeTypeUse use in resolutionImpact.runtimeTypeUses) {
+      features.addElement(Tags.runtimeTypeUse, use.shortText);
+    }
+  }
   Id id = computeEntityId(definition.node);
   actualMap[id] = new ActualData(new IdValue(id, features.getText()),
       computeSourceSpanFromTreeNode(definition.node), member);
diff --git a/tests/compiler/dart2js/inference/data/no_such_method1.dart b/tests/compiler/dart2js/inference/data/no_such_method1.dart
index b4a1774..146ea37 100644
--- a/tests/compiler/dart2js/inference/data/no_such_method1.dart
+++ b/tests/compiler/dart2js/inference/data/no_such_method1.dart
@@ -10,7 +10,8 @@
 
 /*element: B.:[exact=B]*/
 class B extends A {
-  foo();
+  /*strong.element: B.foo:[exact=JSUInt31]*/
+  /*strong.invoke: [subclass=B]*/ foo();
 }
 
 /*element: C.:[exact=C]*/
diff --git a/tests/compiler/dart2js/inference/list_tracer_test.dart b/tests/compiler/dart2js/inference/list_tracer_test.dart
index 8ee4567..24dcb84 100644
--- a/tests/compiler/dart2js/inference/list_tracer_test.dart
+++ b/tests/compiler/dart2js/inference/list_tracer_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/inferrer/typemasks/masks.dart';
 import 'package:expect/expect.dart';
 
@@ -208,7 +209,9 @@
 
 doTest(String allocation, {bool nullify}) async {
   String source = generateTest(allocation);
-  var result = await runCompiler(memorySourceFiles: {'main.dart': source});
+  var result = await runCompiler(
+      memorySourceFiles: {'main.dart': source},
+      options: [Flags.noPreviewDart2]);
   Expect.isTrue(result.isSuccess);
   var compiler = result.compiler;
   var typesInferrer = compiler.globalInference.typesInferrerInternal;
diff --git a/tests/compiler/dart2js/inference/load_deferred_library_test.dart b/tests/compiler/dart2js/inference/load_deferred_library_test.dart
index 0db1d83..df01c26 100644
--- a/tests/compiler/dart2js/inference/load_deferred_library_test.dart
+++ b/tests/compiler/dart2js/inference/load_deferred_library_test.dart
@@ -30,9 +30,9 @@
 main() async {
   asyncTest(() async {
     print('--test Dart 1 ----------------------------------------------------');
-    await runTest([], trust: false);
+    await runTest([Flags.noPreviewDart2], trust: false);
     print('--test Dart 1 --trust-type-annotations ---------------------------');
-    await runTest([Flags.trustTypeAnnotations]);
+    await runTest([Flags.noPreviewDart2, Flags.trustTypeAnnotations]);
     print('--test Dart 2 ----------------------------------------------------');
     await runTest([Flags.strongMode], trust: false);
     print('--test Dart 2 --omit-implicit-checks -----------------------------');
diff --git a/tests/compiler/dart2js/inference/map_tracer_test.dart b/tests/compiler/dart2js/inference/map_tracer_test.dart
index e383eab..e30eaa8 100644
--- a/tests/compiler/dart2js/inference/map_tracer_test.dart
+++ b/tests/compiler/dart2js/inference/map_tracer_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/inferrer/type_graph_inferrer.dart';
@@ -227,7 +228,9 @@
 doTest(String allocation,
     {String keyElementName, String valueElementName}) async {
   String source = generateTest(allocation);
-  var result = await runCompiler(memorySourceFiles: {'main.dart': source});
+  var result = await runCompiler(
+      memorySourceFiles: {'main.dart': source},
+      options: [Flags.noPreviewDart2]);
   Expect.isTrue(result.isSuccess);
   Compiler compiler = result.compiler;
   TypeMask keyType, valueType;
diff --git a/tests/compiler/dart2js/inference/type_combination_test.dart b/tests/compiler/dart2js/inference/type_combination_test.dart
index 23702fd..4304c1a 100644
--- a/tests/compiler/dart2js/inference/type_combination_test.dart
+++ b/tests/compiler/dart2js/inference/type_combination_test.dart
@@ -4,6 +4,7 @@
 
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
+import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/common_elements.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
@@ -745,8 +746,9 @@
 }
 
 runTests() async {
-  CompilationResult result = await runCompiler(memorySourceFiles: {
-    'main.dart': r'''
+  CompilationResult result = await runCompiler(
+      memorySourceFiles: {
+        'main.dart': r'''
     import 'dart:collection';
     class AList<E> extends ListBase<E> {}
     main() {
@@ -755,7 +757,9 @@
       print('${const []}${const {}}${(){}}${new AList()}');
     }
     '''
-  }, beforeRun: (compiler) => compiler.stopAfterTypeInference = true);
+      },
+      beforeRun: (compiler) => compiler.stopAfterTypeInference = true,
+      options: [Flags.noPreviewDart2]);
   Expect.isTrue(result.isSuccess);
   Compiler compiler = result.compiler;
   JClosedWorld closedWorld = compiler.backendClosedWorldForTesting;
diff --git a/tests/compiler/dart2js/jsinterop/world_test.dart b/tests/compiler/dart2js/jsinterop/world_test.dart
index c47be24..cb9cf2c 100644
--- a/tests/compiler/dart2js/jsinterop/world_test.dart
+++ b/tests/compiler/dart2js/jsinterop/world_test.dart
@@ -6,6 +6,7 @@
 
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/common_elements.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart' show ClassEntity;
@@ -18,7 +19,7 @@
 void main() {
   asyncTest(() async {
     print('--test from kernel------------------------------------------------');
-    await testClasses([]);
+    await testClasses([Flags.noPreviewDart2]);
     print('--test from kernel (strong mode)----------------------------------');
     // TODO(johnniwinther): Update the test to be strong mode compliant.
     //await testClasses([Flags.strongMode]);
diff --git a/tests/compiler/dart2js/model/class_set_test.dart b/tests/compiler/dart2js/model/class_set_test.dart
index af328ef..f91acf6 100644
--- a/tests/compiler/dart2js/model/class_set_test.dart
+++ b/tests/compiler/dart2js/model/class_set_test.dart
@@ -601,7 +601,7 @@
         local() {}
       }
       """,
-      options: strongMode ? [Flags.strongMode] : [],
+      options: strongMode ? [Flags.strongMode] : [Flags.noPreviewDart2],
       testBackendWorld: true);
   JClosedWorld world = env.jClosedWorld;
 
diff --git a/tests/compiler/dart2js/model/constant_expression_evaluate_test.dart b/tests/compiler/dart2js/model/constant_expression_evaluate_test.dart
index e014671..885bb45 100644
--- a/tests/compiler/dart2js/model/constant_expression_evaluate_test.dart
+++ b/tests/compiler/dart2js/model/constant_expression_evaluate_test.dart
@@ -153,6 +153,10 @@
     const ConstantData('-(1)', 'IntConstant(-1)'),
     const ConstantData('1 == 2', 'BoolConstant(false)'),
     const ConstantData('1 != 2', 'BoolConstant(true)'),
+    const ConstantData('1 / 0', 'DoubleConstant(Infinity)'),
+    const ConstantData('0 / 0', 'DoubleConstant(NaN)'),
+    const ConstantData('1 << 0', 'IntConstant(1)'),
+    const ConstantData('1 >> 0', 'IntConstant(1)'),
     const ConstantData('"foo".length', 'IntConstant(3)'),
     const ConstantData('identical(0, 1)', 'BoolConstant(false)'),
     const ConstantData('"a" "b"', 'StringConstant("ab")'),
@@ -419,6 +423,18 @@
         expectedErrors: MessageKind.INVALID_CONSTANT_BINARY_INT_TYPE),
     const ConstantData('0 << string', 'NonConstant',
         expectedErrors: MessageKind.INVALID_CONSTANT_BINARY_INT_TYPE),
+    const ConstantData('1 ~/ 0', 'NonConstant',
+        expectedErrors: MessageKind.INVALID_CONSTANT_DIV),
+    const ConstantData('1 ~/ 0.0', 'NonConstant',
+        expectedErrors: MessageKind.INVALID_CONSTANT_DIV),
+    const ConstantData('1 % 0', 'NonConstant',
+        expectedErrors: MessageKind.INVALID_CONSTANT_DIV),
+    const ConstantData('1 % 0.0', 'NonConstant',
+        expectedErrors: MessageKind.INVALID_CONSTANT_DIV),
+    const ConstantData('1 << -1', 'NonConstant',
+        expectedErrors: MessageKind.INVALID_CONSTANT_SHIFT),
+    const ConstantData('1 >> -1', 'NonConstant',
+        expectedErrors: MessageKind.INVALID_CONSTANT_SHIFT),
     const ConstantData('null[0]', 'NonConstant',
         expectedErrors: MessageKind.INVALID_CONSTANT_INDEX),
     const ConstantData('const bool.fromEnvironment(0)', 'NonConstant',
@@ -655,7 +671,8 @@
   if (!skipKernelList.contains(data.name) && !data.strongModeOnly) {
     print(
         '--test kernel-------------------------------------------------------');
-    await runTest([], (Compiler compiler, FieldEntity field) {
+    await runTest([Flags.noPreviewDart2],
+        (Compiler compiler, FieldEntity field) {
       KernelFrontEndStrategy frontendStrategy = compiler.frontendStrategy;
       KernelToElementMap elementMap = frontendStrategy.elementMap;
       return new KernelEvaluationEnvironment(elementMap, null, field,
diff --git a/tests/compiler/dart2js/model/constant_expression_test.dart b/tests/compiler/dart2js/model/constant_expression_test.dart
index ae5ec8a..901f962 100644
--- a/tests/compiler/dart2js/model/constant_expression_test.dart
+++ b/tests/compiler/dart2js/model/constant_expression_test.dart
@@ -355,7 +355,7 @@
   String source = sb.toString();
   CompilationResult result = await runCompiler(
       memorySourceFiles: {'main.dart': source},
-      options: strongMode ? [Flags.strongMode] : []);
+      options: strongMode ? [Flags.strongMode] : [Flags.noPreviewDart2]);
   Compiler compiler = result.compiler;
   var elementEnvironment = compiler.frontendStrategy.elementEnvironment;
 
diff --git a/tests/compiler/dart2js/model/no_such_method_forwarders_test.dart b/tests/compiler/dart2js/model/no_such_method_forwarders_test.dart
new file mode 100644
index 0000000..7519cdd
--- /dev/null
+++ b/tests/compiler/dart2js/model/no_such_method_forwarders_test.dart
@@ -0,0 +1,180 @@
+// Copyright (c) 2018, 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:async_helper/async_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
+import 'package:compiler/src/compiler.dart';
+import 'package:compiler/src/elements/entities.dart';
+import 'package:compiler/src/elements/types.dart';
+import 'package:compiler/src/world.dart';
+import 'package:expect/expect.dart';
+import '../helpers/element_lookup.dart';
+import '../memory_compiler.dart';
+
+const String source = '''
+abstract class I<T> {
+  T method();
+}
+
+class A<T> implements I<T> {
+  noSuchMethod(_) => null;
+}
+
+class B<T> extends I<T> {
+  noSuchMethod(_) => null;
+}
+
+abstract class C1<T> implements I<T> {
+}
+
+class C2<T> extends C1<T> {
+  noSuchMethod(_) => null;
+}
+
+abstract class D1<T> implements I<T> {
+}
+
+abstract class D2<T> extends D1<T> {
+  noSuchMethod(_) => null;
+}
+
+class D3<T> extends D2<T> {
+}
+
+class E1<T> {
+  T method() => null;
+}
+
+abstract class E2<T> implements I<T> {
+  noSuchMethod(_) => null;
+}
+
+class E3<T> extends E1<T> with E2<T> {
+}
+
+class F1<T> {
+  T method() => null;
+}
+
+class F2<T> implements I<T> {
+  noSuchMethod(_) => null;
+}
+
+class F3<T> extends F1<T> with F2<T> {
+}
+
+abstract class G1<T> {
+  T method();
+}
+
+abstract class G2<T> implements I<T> {
+  noSuchMethod(_) => null;
+}
+
+class G3<T> extends G1<T> with G2<T> {
+}
+
+abstract class H1<T> {
+  T method();
+}
+
+abstract class H2<T> implements I<T> {
+  noSuchMethod(_) => null;
+}
+
+class H3<T> extends H1<T> with H2<T> {
+  method() => null;
+}
+
+main() {
+  new A();
+  new B();
+  new C2();
+  new D3();
+  new E1();
+  new E3();
+  new F1();
+  new F2();
+  new F3();
+  new G3();
+  new H3();
+}
+''';
+
+main() {
+  asyncTest(() async {
+    CompilationResult result = await runCompiler(
+        memorySourceFiles: {'main.dart': source}, options: [Flags.strongMode]);
+    Expect.isTrue(result.isSuccess);
+    Compiler compiler = result.compiler;
+    JClosedWorld closedWorld = compiler.backendClosedWorldForTesting;
+
+    void check(String className,
+        {bool hasMethod, bool isAbstract: false, String declaringClass}) {
+      MemberEntity member =
+          findClassMember(closedWorld, className, 'method', required: false);
+      if (hasMethod) {
+        Expect.isNotNull(
+            member, "Missing member 'method' in class '$className'.");
+        Expect.equals(isAbstract, member.isAbstract,
+            "Unexpected abstract-ness on method $member.");
+        ClassEntity cls = findClass(closedWorld, declaringClass);
+        if (cls != member.enclosingClass) {
+          print("Unexpected declaring class $member. "
+              "Found ${member.enclosingClass}, expected $cls.");
+        }
+        Expect.equals(
+            cls,
+            member.enclosingClass,
+            "Unexpected declaring class $member. "
+            "Found ${member.enclosingClass}, expected $cls.");
+        DartType type;
+        if (member.isFunction) {
+          type =
+              closedWorld.elementEnvironment.getFunctionType(member).returnType;
+        } else if (member.isGetter) {
+          type =
+              closedWorld.elementEnvironment.getFunctionType(member).returnType;
+        } else if (member.isSetter) {
+          type = closedWorld.elementEnvironment
+              .getFunctionType(member)
+              .parameterTypes
+              .first;
+        }
+        Expect.isTrue(type is TypeVariableType,
+            "Unexpected member type for $member: $type");
+        TypeVariableType typeVariable = type;
+        Expect.equals(
+            cls,
+            typeVariable.element.typeDeclaration,
+            "Unexpected type declaration for $typeVariable for $member. "
+            "Expected $cls, found ${typeVariable.element.typeDeclaration}.");
+      } else {
+        Expect.isNull(member,
+            "Unexpected member 'method' in class '$className': $member.");
+      }
+    }
+
+    check('I', hasMethod: true, isAbstract: true, declaringClass: 'I');
+    check('A', hasMethod: true, declaringClass: 'A');
+    check('B', hasMethod: true, declaringClass: 'B');
+    check('C1', hasMethod: false);
+    check('C2', hasMethod: true, declaringClass: 'C2');
+    check('D1', hasMethod: false);
+    check('D2', hasMethod: false);
+    check('D3', hasMethod: true, declaringClass: 'D3');
+    check('E1', hasMethod: true, declaringClass: 'E1');
+    check('E2', hasMethod: false);
+    check('E3', hasMethod: true, declaringClass: 'E1');
+    check('F1', hasMethod: true, declaringClass: 'F1');
+    check('F2', hasMethod: true, declaringClass: 'F2');
+    check('F3', hasMethod: true, declaringClass: 'F1');
+    check('G1', hasMethod: true, isAbstract: true, declaringClass: 'G1');
+    check('G2', hasMethod: false);
+    check('G3', hasMethod: true, declaringClass: 'G3');
+    check('H1', hasMethod: true, isAbstract: true, declaringClass: 'H1');
+    check('H2', hasMethod: false);
+    check('H3', hasMethod: true, declaringClass: 'H3');
+  });
+}
diff --git a/tests/compiler/dart2js/model/strong_mode_closed_world_test.dart b/tests/compiler/dart2js/model/strong_mode_closed_world_test.dart
index 59a8afd7..4a360c9 100644
--- a/tests/compiler/dart2js/model/strong_mode_closed_world_test.dart
+++ b/tests/compiler/dart2js/model/strong_mode_closed_world_test.dart
@@ -140,7 +140,7 @@
   r = new R(); // Create R after call.
 }
 '''
-  }, options: strongMode ? [Flags.strongMode] : []);
+  }, options: strongMode ? [Flags.strongMode] : [Flags.noPreviewDart2]);
   Expect.isTrue(result.isSuccess);
   Compiler compiler = result.compiler;
 
diff --git a/tests/compiler/dart2js/model/strong_mode_impact_test.dart b/tests/compiler/dart2js/model/strong_mode_impact_test.dart
index 10400b8..908e142 100644
--- a/tests/compiler/dart2js/model/strong_mode_impact_test.dart
+++ b/tests/compiler/dart2js/model/strong_mode_impact_test.dart
@@ -93,7 +93,7 @@
   ImpactCacheDeleter.retainCachesForTesting = true;
   CompilationResult result = await runCompiler(
       memorySourceFiles: {'main.dart': source},
-      options: strongMode ? [Flags.strongMode] : []);
+      options: strongMode ? [Flags.strongMode] : [Flags.noPreviewDart2]);
   Expect.isTrue(result.isSuccess);
   Compiler compiler = result.compiler;
 
diff --git a/tests/compiler/dart2js/model/subtype_test.dart b/tests/compiler/dart2js/model/subtype_test.dart
index 7a44b77..3f761876 100644
--- a/tests/compiler/dart2js/model/subtype_test.dart
+++ b/tests/compiler/dart2js/model/subtype_test.dart
@@ -59,7 +59,9 @@
       // TODO(johnniwinther): Inheritance with different type arguments is
       // currently not supported by the implementation.
       class C<T1, T2> extends B<T2, T1> /*implements A<A<T1>>*/ {}
-      """, options: strongMode ? [Flags.strongMode] : []).then((env) {
+      """,
+      options:
+          strongMode ? [Flags.strongMode] : [Flags.noPreviewDart2]).then((env) {
     void expect(bool expectSubtype, DartType T, DartType S,
         {bool expectMoreSpecific}) {
       testTypes(env, T, S, expectSubtype, expectMoreSpecific);
@@ -311,7 +313,9 @@
         int m4(V v, U u) => null;
         void m5(V v, int i) => null;
       }
-      """, options: strongMode ? [Flags.strongMode] : []).then((env) {
+      """,
+      options:
+          strongMode ? [Flags.strongMode] : [Flags.noPreviewDart2]).then((env) {
     void expect(bool expectSubtype, DartType T, DartType S,
         {bool expectMoreSpecific}) {
       testTypes(env, T, S, expectSubtype, expectMoreSpecific);
@@ -361,14 +365,14 @@
 Future testFunctionSubtyping({bool strongMode}) async {
   await TypeEnvironment
       .create(createMethods(functionTypesData),
-          options: strongMode ? [Flags.strongMode] : [])
+          options: strongMode ? [Flags.strongMode] : [Flags.noPreviewDart2])
       .then(functionSubtypingHelper);
 }
 
 Future testTypedefSubtyping({bool strongMode}) async {
   await TypeEnvironment
       .create(createTypedefs(functionTypesData),
-          options: strongMode ? [Flags.strongMode] : [])
+          options: strongMode ? [Flags.strongMode] : [Flags.noPreviewDart2])
       .then(functionSubtypingHelper);
 }
 
@@ -447,14 +451,14 @@
 Future testFunctionSubtypingOptional({bool strongMode}) async {
   await TypeEnvironment
       .create(createMethods(optionalFunctionTypesData),
-          options: strongMode ? [Flags.strongMode] : [])
+          options: strongMode ? [Flags.strongMode] : [Flags.noPreviewDart2])
       .then((env) => functionSubtypingOptionalHelper(env, strongMode));
 }
 
 Future testTypedefSubtypingOptional({bool strongMode}) async {
   await TypeEnvironment
       .create(createTypedefs(optionalFunctionTypesData),
-          options: strongMode ? [Flags.strongMode] : [])
+          options: strongMode ? [Flags.strongMode] : [Flags.noPreviewDart2])
       .then((env) => functionSubtypingOptionalHelper(env, strongMode));
 }
 
@@ -521,14 +525,14 @@
 Future testFunctionSubtypingNamed({bool strongMode}) async {
   await TypeEnvironment
       .create(createMethods(namedFunctionTypesData),
-          options: strongMode ? [Flags.strongMode] : [])
+          options: strongMode ? [Flags.strongMode] : [Flags.noPreviewDart2])
       .then((env) => functionSubtypingNamedHelper(env, strongMode));
 }
 
 Future testTypedefSubtypingNamed({bool strongMode}) async {
   await TypeEnvironment
       .create(createTypedefs(namedFunctionTypesData),
-          options: strongMode ? [Flags.strongMode] : [])
+          options: strongMode ? [Flags.strongMode] : [Flags.noPreviewDart2])
       .then((env) => functionSubtypingNamedHelper(env, strongMode));
 }
 
@@ -580,7 +584,9 @@
       class H<T extends S, S extends T> {}
       class I<T extends S, S extends U, U extends T> {}
       class J<T extends S, S extends U, U extends S> {}
-      """, options: strongMode ? [Flags.strongMode] : []).then((env) {
+      """,
+      options:
+          strongMode ? [Flags.strongMode] : [Flags.noPreviewDart2]).then((env) {
     void expect(bool expectSubtype, DartType T, DartType S,
         {bool expectMoreSpecific}) {
       testTypes(env, T, S, expectSubtype, expectMoreSpecific);
@@ -804,7 +810,9 @@
       takeInt(int o) => null;
       takeVoid(void o) => null;
       takeObject(Object o) => null;
-      """, options: strongMode ? [Flags.strongMode] : []).then((env) {
+      """,
+      options:
+          strongMode ? [Flags.strongMode] : [Flags.noPreviewDart2]).then((env) {
     void expect(bool expectSubtype, DartType T, DartType S) {
       Expect.equals(expectSubtype, env.isSubtype(T, S), '$T <: $S');
       if (expectSubtype) {
diff --git a/tests/compiler/dart2js/model/subtypeset_test.dart b/tests/compiler/dart2js/model/subtypeset_test.dart
index c48b5bb..fd5e963 100644
--- a/tests/compiler/dart2js/model/subtypeset_test.dart
+++ b/tests/compiler/dart2js/model/subtypeset_test.dart
@@ -51,7 +51,7 @@
         new F();
         new G();
       }
-      """, options: strongMode ? [Flags.strongMode] : []);
+      """, options: strongMode ? [Flags.strongMode] : [Flags.noPreviewDart2]);
   KClosedWorld world = env.kClosedWorld;
 
   ClassEntity A = env.getElement("A");
diff --git a/tests/compiler/dart2js/needs_no_such_method_test.dart b/tests/compiler/dart2js/needs_no_such_method_test.dart
index 68c216b..5cd35d2 100644
--- a/tests/compiler/dart2js/needs_no_such_method_test.dart
+++ b/tests/compiler/dart2js/needs_no_such_method_test.dart
@@ -5,6 +5,7 @@
 import 'dart:async';
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
+import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/elements/names.dart';
 import 'package:compiler/src/universe/call_structure.dart';
@@ -47,7 +48,9 @@
     testMode = '$instantiated';
 
     var env = await TypeEnvironment.create(CLASSES,
-        mainSource: main.toString(), testBackendWorld: true);
+        mainSource: main.toString(),
+        testBackendWorld: true,
+        options: [Flags.noPreviewDart2]);
     foo = new Selector.call(const PublicName('foo'), CallStructure.NO_ARGS);
     bar = new Selector.call(const PublicName('bar'), CallStructure.NO_ARGS);
     baz = new Selector.call(const PublicName('baz'), CallStructure.NO_ARGS);
diff --git a/tests/compiler/dart2js/no_such_method_enabled_test.dart b/tests/compiler/dart2js/no_such_method_enabled_test.dart
index f16b55b..f89588f 100644
--- a/tests/compiler/dart2js/no_such_method_enabled_test.dart
+++ b/tests/compiler/dart2js/no_such_method_enabled_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/common_elements.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
@@ -209,8 +210,9 @@
     for (NoSuchMethodTest test in TESTS) {
       print('---- testing -------------------------------------------------');
       print(test.code);
-      CompilationResult result =
-          await runCompiler(memorySourceFiles: {'main.dart': test.code});
+      CompilationResult result = await runCompiler(
+          memorySourceFiles: {'main.dart': test.code},
+          options: [Flags.noPreviewDart2]);
       Compiler compiler = result.compiler;
       checkTest(compiler, test);
     }
diff --git a/tests/compiler/dart2js/rti/data/generic_creation.dart b/tests/compiler/dart2js/rti/data/generic_creation.dart
index 56adaeb..d2bb3be 100644
--- a/tests/compiler/dart2js/rti/data/generic_creation.dart
+++ b/tests/compiler/dart2js/rti/data/generic_creation.dart
@@ -5,29 +5,42 @@
 import "package:expect/expect.dart";
 
 /*class: A:needsArgs*/
-/*element: A.:needsSignature*/
+/*kernel.element: A.:needsSignature*/
+/*!kernel.element: A.:*/
 class A<X, Y, Z> {
-  /*element: A.shift:needsSignature*/
+  /*kernel.element: A.shift:needsSignature*/
+  /*!kernel.element: A.shift:*/
   shift() => new A<Z, X, Y>();
-  /*element: A.swap:needsSignature*/
+
+  /*kernel.element: A.swap:needsSignature*/
+  /*!kernel.element: A.swap:*/
   swap() => new A<Z, Y, X>();
-  /*element: A.first:needsSignature*/
+
+  /*kernel.element: A.first:needsSignature*/
+  /*!kernel.element: A.first:*/
   first() => new A<X, X, X>();
-  /*element: A.last:needsSignature*/
+
+  /*kernel.element: A.last:needsSignature*/
+  /*!kernel.element: A.last:*/
   last() => new A<Z, Z, Z>();
-  /*element: A.wrap:needsSignature*/
+
+  /*kernel.element: A.wrap:needsSignature*/
+  /*!kernel.element: A.wrap:*/
   wrap() => new A<A<X, X, X>, A<Y, Y, Y>, A<Z, Z, Z>>();
 }
 
-/*element: B.:needsSignature*/
+/*kernel.element: B.:needsSignature*/
+/*!kernel.element: B.:*/
 class B extends A<U, V, W> {}
 
 /*class: C:needsArgs*/
-/*element: C.:needsSignature*/
+/*kernel.element: C.:needsSignature*/
+/*!kernel.element: C.:*/
 class C<T> extends A<U, T, W> {}
 
 /*class: D:needsArgs*/
-/*element: D.:needsSignature*/
+/*kernel.element: D.:needsSignature*/
+/*!kernel.element: D.:*/
 class D<X, Y, Z> extends A<Y, Z, X> {}
 
 class U {}
@@ -36,10 +49,12 @@
 
 class W {}
 
-/*element: sameType:needsSignature*/
+/*kernel.element: sameType:needsSignature*/
+/*!kernel.element: sameType:*/
 sameType(a, b) => Expect.equals(a.runtimeType, b.runtimeType);
 
-/*element: main:needsSignature*/
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
 main() {
   A a = new A<U, V, W>();
   sameType(new A<W, U, V>(), a.shift());
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals1.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals1.dart
new file mode 100644
index 0000000..a591ef6
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals1.dart
@@ -0,0 +1,30 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+/*kernel.class: Class:needsArgs*/
+/*!kernel.class: Class:*/
+class Class<T> {
+  /*kernel.element: Class.:needsSignature*/
+  /*!kernel.element: Class.:*/
+  Class();
+}
+
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
+main() {
+  /*needsSignature*/
+  local1a() {}
+
+  /*needsSignature*/
+  local1b() {}
+
+  /*needsSignature*/
+  local2(int i, String s) => i;
+
+  Expect.isTrue(local1a.runtimeType == local1b.runtimeType);
+  Expect.isFalse(local1a.runtimeType == local2.runtimeType);
+  new Class();
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals2.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals2.dart
new file mode 100644
index 0000000..5958d4a
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals2.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+/*kernel.class: Class:needsArgs*/
+/*!kernel.class: Class:*/
+class Class<T> {
+  /*kernel.element: Class.:needsSignature*/
+  /*!kernel.element: Class.:*/
+  Class();
+}
+
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
+main() {
+  /*kernel.needsSignature*/
+  /*!kernel.needsArgs,needsSignature*/
+  T local1a<T>() => null;
+
+  /*kernel.needsSignature*/
+  /*!kernel.needsArgs,needsSignature*/
+  T local1b<T>() => null;
+
+  /*kernel.needsSignature*/
+  /*strong.direct,explicit=[local2.T],needsArgs,needsSignature*/
+  /*omit.needsArgs,needsSignature*/
+  T local2<T>(T t, String s) => t;
+
+  Expect.isTrue(local1a.runtimeType == local1b.runtimeType);
+  Expect.isFalse(local1a.runtimeType == local2.runtimeType);
+  new Class();
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals3.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals3.dart
new file mode 100644
index 0000000..74d0adb
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals3.dart
@@ -0,0 +1,47 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+String method() => null;
+
+/*!strong.class: Class1:needsArgs*/
+/*strong.class: Class1:direct,explicit=[Class1.T],needsArgs*/
+class Class1<T> {
+  /*kernel.element: Class1.:needsSignature*/
+  /*!kernel.element: Class1.:*/
+  Class1();
+
+  /*kernel.element: Class1.method:needsSignature*/
+  /*!kernel.element: Class1.method:*/
+  method() {
+    /*needsSignature*/
+    T local1a() => null;
+
+    /*needsSignature*/
+    T local1b() => null;
+
+    /*needsSignature*/
+    T local2(T t, String s) => t;
+
+    Expect.isTrue(local1a.runtimeType == local1b.runtimeType);
+    Expect.isFalse(local1a.runtimeType == local2.runtimeType);
+    Expect.isFalse(local1a.runtimeType == method.runtimeType);
+  }
+}
+
+/*kernel.class: Class2:needsArgs*/
+/*!kernel.class: Class2:*/
+class Class2<T> {
+  /*kernel.element: Class2.:needsSignature*/
+  /*!kernel.element: Class2.:*/
+  Class2();
+}
+
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
+main() {
+  new Class1<int>().method();
+  new Class2<int>();
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals4.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals4.dart
new file mode 100644
index 0000000..456b5db
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals4.dart
@@ -0,0 +1,46 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+/*kernel.class: Class1:needsArgs*/
+/*!kernel.class: Class1:*/
+class Class1<T> {
+  /*kernel.element: Class1.:needsSignature*/
+  /*!kernel.element: Class1.:*/
+  Class1();
+
+  // TODO(johnniwinther): Currently only methods that use class type variables
+  // in their signature are marked as 'needs signature'. Change this to mark
+  // all methods that need to support access to their function type at runtime.
+  /*kernel.element: Class1.method1a:needsSignature*/
+  /*!kernel.element: Class1.method1a:*/
+  method1a() => null;
+
+  /*kernel.element: Class1.method1b:needsSignature*/
+  /*!kernel.element: Class1.method1b:*/
+  method1b() => null;
+
+  /*kernel.element: Class1.method2:needsSignature*/
+  /*!kernel.element: Class1.method2:*/
+  method2(t, s) => t;
+}
+
+/*kernel.class: Class2:needsArgs*/
+/*!kernel.class: Class2:*/
+class Class2<T> {
+  /*kernel.element: Class2.:needsSignature*/
+  /*!kernel.element: Class2.:*/
+  Class2();
+}
+
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
+main() {
+  var c = new Class1<int>();
+
+  Expect.isTrue(c.method1a.runtimeType == c.method1b.runtimeType);
+  Expect.isFalse(c.method1a.runtimeType == c.method2.runtimeType);
+  new Class2<int>();
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals5.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals5.dart
new file mode 100644
index 0000000..28c000f
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals5.dart
@@ -0,0 +1,43 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+/*!strong.class: Class1:needsArgs*/
+/*strong.class: Class1:direct,explicit=[Class1.T],needsArgs*/
+class Class1<T> {
+  /*kernel.element: Class1.:needsSignature*/
+  /*!kernel.element: Class1.:*/
+  Class1();
+
+  /*kernel.element: Class1.method1a:needsSignature*/
+  /*!kernel.element: Class1.method1a:needsSignature*/
+  T method1a() => null;
+
+  /*kernel.element: Class1.method1b:needsSignature*/
+  /*!kernel.element: Class1.method1b:needsSignature*/
+  T method1b() => null;
+
+  /*kernel.element: Class1.method2:needsSignature*/
+  /*!kernel.element: Class1.method2:needsSignature*/
+  T method2(T t, String s) => t;
+}
+
+/*kernel.class: Class2:needsArgs*/
+/*!kernel.class: Class2:*/
+class Class2<T> {
+  /*kernel.element: Class2.:needsSignature*/
+  /*!kernel.element: Class2.:*/
+  Class2();
+}
+
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
+main() {
+  var c = new Class1<int>();
+
+  Expect.isTrue(c.method1a.runtimeType == c.method1b.runtimeType);
+  Expect.isFalse(c.method1a.runtimeType == c.method2.runtimeType);
+  new Class2<int>();
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals6.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals6.dart
new file mode 100644
index 0000000..b8771d8
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals6.dart
@@ -0,0 +1,33 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+/*kernel.element: method1a:needsSignature*/
+/*!kernel.element: method1a:*/
+method1a() => null;
+
+/*kernel.element: method1b:needsSignature*/
+/*!kernel.element: method1b:*/
+method1b() => null;
+
+/*kernel.element: method2:needsSignature*/
+/*!kernel.element: method2:*/
+method2(t, s) => t;
+
+/*kernel.class: Class:needsArgs*/
+/*!kernel.class: Class:*/
+class Class<T> {
+  /*kernel.element: Class.:needsSignature*/
+  /*!kernel.element: Class.:*/
+  Class();
+}
+
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
+main() {
+  Expect.isTrue(method1a.runtimeType == method1b.runtimeType);
+  Expect.isFalse(method1a.runtimeType == method2.runtimeType);
+  new Class<int>();
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals7.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals7.dart
new file mode 100644
index 0000000..b3ff672
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals7.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+/*kernel.element: method1a:needsSignature*/
+/*!kernel.element: method1a:needsArgs*/
+T method1a<T>() => null;
+
+/*kernel.element: method1b:needsSignature*/
+/*!kernel.element: method1b:needsArgs*/
+T method1b<T>() => null;
+
+/*kernel.element: method2:needsSignature*/
+/*strong.element: method2:direct,explicit=[method2.T],needsArgs*/
+/*omit.element: method2:needsArgs*/
+T method2<T>(T t, String s) => t;
+
+/*kernel.class: Class:needsArgs*/
+/*!kernel.class: Class:*/
+class Class<T> {
+  /*kernel.element: Class.:needsSignature*/
+  /*!kernel.element: Class.:*/
+  Class();
+}
+
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
+main() {
+  Expect.isTrue(method1a.runtimeType == method1b.runtimeType);
+  Expect.isFalse(method1a.runtimeType == method2.runtimeType);
+  new Class<int>();
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals8.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals8.dart
new file mode 100644
index 0000000..9c4ebae
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals8.dart
@@ -0,0 +1,44 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+/*kernel.class: Class1:needsArgs*/
+/*!kernel.class: Class1:*/
+class Class1<S> {
+  /*kernel.element: Class1.:needsSignature*/
+  /*!kernel.element: Class1.:*/
+  Class1();
+
+  /*kernel.element: Class1.method1a:needsSignature*/
+  /*!kernel.element: Class1.method1a:needsArgs*/
+  T method1a<T>() => null;
+
+  /*kernel.element: Class1.method1b:needsSignature*/
+  /*!kernel.element: Class1.method1b:needsArgs*/
+  T method1b<T>() => null;
+
+  /*kernel.element: Class1.method2:needsSignature*/
+  /*strong.element: Class1.method2:direct,explicit=[method2.T],needsArgs*/
+  /*omit.element: Class1.method2:needsArgs*/
+  T method2<T>(T t, String s) => t;
+}
+
+/*kernel.class: Class2:needsArgs*/
+/*!kernel.class: Class2:*/
+class Class2<T> {
+  /*kernel.element: Class2.:needsSignature*/
+  /*!kernel.element: Class2.:*/
+  Class2();
+}
+
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
+main() {
+  var c = new Class1<int>();
+
+  Expect.isTrue(c.method1a.runtimeType == c.method1b.runtimeType);
+  Expect.isFalse(c.method1a.runtimeType == c.method2.runtimeType);
+  new Class2<int>();
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string1.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string1.dart
new file mode 100644
index 0000000..9d67301
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string1.dart
@@ -0,0 +1,27 @@
+// Copyright (c) 2018, 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.
+
+/*kernel.class: Class:needsArgs*/
+/*!kernel.class: Class:*/
+class Class<T> {
+  /*kernel.element: Class.:needsSignature*/
+  /*!kernel.element: Class.:*/
+  Class();
+}
+
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
+main() {
+  /*!omit.needsSignature*/
+  /*omit.*/
+  local1() {}
+
+  /*!omit.needsSignature*/
+  /*omit.*/
+  local2(int i, String s) => i;
+
+  print('${local1.runtimeType}');
+  local2(0, '');
+  new Class();
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string2.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string2.dart
new file mode 100644
index 0000000..034011c
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string2.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2018, 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.
+
+/*kernel.class: Class:needsArgs*/
+/*!kernel.class: Class:*/
+class Class<T> {
+  /*kernel.element: Class.:needsSignature*/
+  /*!kernel.element: Class.:*/
+  Class();
+}
+
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
+main() {
+  /*kernel.needsSignature*/
+  /*strong.needsArgs,needsSignature*/
+  /*omit.*/
+  local1<T>() {}
+
+  /*kernel.needsSignature*/
+  /*strong.needsArgs,needsSignature,selectors=[Selector(call, call, arity=2, types=1)]*/
+  /*omit.*/
+  local2<T>(t, s) => t;
+
+  print('${local1.runtimeType}');
+  local2(0, '');
+  new Class();
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string3.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string3.dart
new file mode 100644
index 0000000..69f305d
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string3.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2018, 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.
+
+/*!omit.class: Class1:needsArgs*/
+/*omit.class: Class1:*/
+class Class1<T> {
+  /*kernel.element: Class1.:needsSignature*/
+  /*!kernel.element: Class1.:*/
+  Class1();
+
+  /*!omit.element: Class1.method:needsSignature*/
+  /*omit.element: Class1.method:*/
+  T method() => null;
+}
+
+/*kernel.class: Class2:needsArgs*/
+/*!kernel.class: Class2:*/
+class Class2<T> {
+  /*kernel.element: Class2.:needsSignature*/
+  /*!kernel.element: Class2.:*/
+  Class2();
+}
+
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
+main() {
+  Class1<int> cls1 = new Class1<int>();
+  print(cls1.method.runtimeType.toString());
+  new Class2<int>();
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string4.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string4.dart
new file mode 100644
index 0000000..ca9f34b
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string4.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2018, 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.
+
+/*class: Class1:*/
+class Class1 {
+  /*kernel.element: Class1.:needsSignature*/
+  /*!kernel.element: Class1.:*/
+  Class1();
+
+  /*kernel.element: Class1.method:needsSignature*/
+  /*strong.element: Class1.method:needsArgs*/
+  /*omit.element: Class1.method:*/
+  T method<T>() => null;
+}
+
+/*kernel.class: Class2:needsArgs*/
+/*!kernel.class: Class2:*/
+class Class2<T> {
+  /*kernel.element: Class2.:needsSignature*/
+  /*!kernel.element: Class2.:*/
+  Class2();
+}
+
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
+main() {
+  Class1 cls1 = new Class1();
+  print(cls1.method.runtimeType.toString());
+  new Class2<int>();
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string5.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string5.dart
new file mode 100644
index 0000000..25274f4
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string5.dart
@@ -0,0 +1,27 @@
+// Copyright (c) 2018, 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.
+
+/*kernel.class: Class:needsArgs*/
+/*!kernel.class: Class:*/
+class Class<T> {
+  /*kernel.element: Class.:needsSignature*/
+  /*!kernel.element: Class.:*/
+  Class();
+}
+
+/*kernel.element: method1:needsSignature*/
+/*!kernel.element: method1:*/
+method1() {}
+
+/*kernel.element: method2:needsSignature*/
+/*!kernel.element: method2:*/
+method2(int i, String s) => i;
+
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
+main() {
+  print('${method1.runtimeType}');
+  method2(0, '');
+  new Class();
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string6.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string6.dart
new file mode 100644
index 0000000..6a1ae66
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string6.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2018, 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.
+
+/*kernel.class: Class:needsArgs*/
+/*!kernel.class: Class:*/
+class Class<T> {
+  /*kernel.element: Class.:needsSignature*/
+  /*!kernel.element: Class.:*/
+  Class();
+}
+
+/*kernel.element: method1:needsSignature*/
+/*strong.element: method1:needsArgs*/
+/*omit.element: method1:*/
+method1<T>() {}
+
+/*kernel.element: method2:needsSignature*/
+/*strong.element: method2:needsArgs*/
+/*omit.element: method2:*/
+method2<T>(t, s) => t;
+
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
+main() {
+  print('${method1.runtimeType}');
+  method2(0, '');
+  new Class();
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_equals1.dart b/tests/compiler/dart2js/rti/data/runtime_type_equals1.dart
new file mode 100644
index 0000000..06a762f
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_equals1.dart
@@ -0,0 +1,57 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+/*class: Class1a:needsArgs*/
+class Class1a<T> {
+  /*kernel.element: Class1a.:needsSignature*/
+  /*!kernel.element: Class1a.:*/
+  Class1a();
+
+  /*kernel.element: Class1a.==:needsSignature*/
+  /*!kernel.element: Class1a.==:*/
+  bool operator ==(other) {
+    if (identical(this, other)) return true;
+    return runtimeType == other.runtimeType;
+  }
+}
+
+/*class: Class1b:needsArgs*/
+class Class1b<T> extends Class1a<T> {
+  /*kernel.element: Class1b.:needsSignature*/
+  /*!kernel.element: Class1b.:*/
+  Class1b();
+}
+
+// TODO(johnniwinther): Specialize handling of `this.runtimeType` to exclude
+// this class.
+/*class: Class1c:needsArgs*/
+class Class1c<T> implements Class1a<T> {
+  /*kernel.element: Class1c.:needsSignature*/
+  /*!kernel.element: Class1c.:*/
+  Class1c();
+}
+
+/*kernel.class: Class2:needsArgs*/
+/*!kernel.class: Class2:*/
+class Class2<T> {
+  /*kernel.element: Class2.:needsSignature*/
+  /*!kernel.element: Class2.:*/
+  Class2();
+}
+
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
+main() {
+  Class1a<int> cls1a = new Class1a<int>();
+  Class1a<int> cls1b1 = new Class1b<int>();
+  Class1a<int> cls1b2 = new Class1b<int>();
+  Class1c<int> cls1c = new Class1c<int>();
+  Class2<int> cls2 = new Class2<int>();
+  Expect.isFalse(cls1a == cls1b1);
+  Expect.isTrue(cls1b1 == cls1b2);
+  Expect.isFalse(cls1a == cls1c);
+  Expect.isFalse(cls1a == cls2);
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_equals2.dart b/tests/compiler/dart2js/rti/data/runtime_type_equals2.dart
new file mode 100644
index 0000000..19554c5
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_equals2.dart
@@ -0,0 +1,57 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+/*class: Class1a:needsArgs*/
+class Class1a<T> {
+  /*kernel.element: Class1a.:needsSignature*/
+  /*!kernel.element: Class1a.:*/
+  Class1a();
+
+  /*kernel.element: Class1a.==:needsSignature*/
+  /*!kernel.element: Class1a.==:*/
+  bool operator ==(other) {
+    if (identical(this, other)) return true;
+    return other.runtimeType == runtimeType;
+  }
+}
+
+/*class: Class1b:needsArgs*/
+class Class1b<T> extends Class1a<T> {
+  /*kernel.element: Class1b.:needsSignature*/
+  /*!kernel.element: Class1b.:*/
+  Class1b();
+}
+
+// TODO(johnniwinther): Specialize handling of `this.runtimeType` to exclude
+// this class.
+/*class: Class1c:needsArgs*/
+class Class1c<T> implements Class1a<T> {
+  /*kernel.element: Class1c.:needsSignature*/
+  /*!kernel.element: Class1c.:*/
+  Class1c();
+}
+
+/*kernel.class: Class2:needsArgs*/
+/*!kernel.class: Class2:*/
+class Class2<T> {
+  /*kernel.element: Class2.:needsSignature*/
+  /*!kernel.element: Class2.:*/
+  Class2();
+}
+
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
+main() {
+  Class1a<int> cls1a = new Class1a<int>();
+  Class1a<int> cls1b1 = new Class1b<int>();
+  Class1a<int> cls1b2 = new Class1b<int>();
+  Class1c<int> cls1c = new Class1c<int>();
+  Class2<int> cls2 = new Class2<int>();
+  Expect.isFalse(cls1a == cls1b1);
+  Expect.isTrue(cls1b1 == cls1b2);
+  Expect.isFalse(cls1a == cls1c);
+  Expect.isFalse(cls1a == cls2);
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_equals3.dart b/tests/compiler/dart2js/rti/data/runtime_type_equals3.dart
new file mode 100644
index 0000000..913cc57
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_equals3.dart
@@ -0,0 +1,57 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+/*class: Class1a:needsArgs*/
+class Class1a<T> {
+  /*kernel.element: Class1a.:needsSignature*/
+  /*!kernel.element: Class1a.:*/
+  Class1a();
+
+  /*kernel.element: Class1a.==:needsSignature*/
+  /*!kernel.element: Class1a.==:*/
+  bool operator ==(other) {
+    if (identical(this, other)) return true;
+    return runtimeType == other?.runtimeType;
+  }
+}
+
+/*class: Class1b:needsArgs*/
+class Class1b<T> extends Class1a<T> {
+  /*kernel.element: Class1b.:needsSignature*/
+  /*!kernel.element: Class1b.:*/
+  Class1b();
+}
+
+// TODO(johnniwinther): Specialize handling of `this.runtimeType` to exclude
+// this class.
+/*class: Class1c:needsArgs*/
+class Class1c<T> implements Class1a<T> {
+  /*kernel.element: Class1c.:needsSignature*/
+  /*!kernel.element: Class1c.:*/
+  Class1c();
+}
+
+/*kernel.class: Class2:needsArgs*/
+/*!kernel.class: Class2:*/
+class Class2<T> {
+  /*kernel.element: Class2.:needsSignature*/
+  /*!kernel.element: Class2.:*/
+  Class2();
+}
+
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
+main() {
+  Class1a<int> cls1a = new Class1a<int>();
+  Class1a<int> cls1b1 = new Class1b<int>();
+  Class1a<int> cls1b2 = new Class1b<int>();
+  Class1c<int> cls1c = new Class1c<int>();
+  Class2<int> cls2 = new Class2<int>();
+  Expect.isFalse(cls1a == cls1b1);
+  Expect.isTrue(cls1b1 == cls1b2);
+  Expect.isFalse(cls1a == cls1c);
+  Expect.isFalse(cls1a == cls2);
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_equals4.dart b/tests/compiler/dart2js/rti/data/runtime_type_equals4.dart
new file mode 100644
index 0000000..7993bcd
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_equals4.dart
@@ -0,0 +1,57 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+/*class: Class1a:needsArgs*/
+class Class1a<T> {
+  /*kernel.element: Class1a.:needsSignature*/
+  /*!kernel.element: Class1a.:*/
+  Class1a();
+
+  /*kernel.element: Class1a.==:needsSignature*/
+  /*!kernel.element: Class1a.==:*/
+  bool operator ==(other) {
+    if (identical(this, other)) return true;
+    return other?.runtimeType == runtimeType;
+  }
+}
+
+/*class: Class1b:needsArgs*/
+class Class1b<T> extends Class1a<T> {
+  /*kernel.element: Class1b.:needsSignature*/
+  /*!kernel.element: Class1b.:*/
+  Class1b();
+}
+
+// TODO(johnniwinther): Specialize handling of `this.runtimeType` to exclude
+// this class.
+/*class: Class1c:needsArgs*/
+class Class1c<T> implements Class1a<T> {
+  /*kernel.element: Class1c.:needsSignature*/
+  /*!kernel.element: Class1c.:*/
+  Class1c();
+}
+
+/*kernel.class: Class2:needsArgs*/
+/*!kernel.class: Class2:*/
+class Class2<T> {
+  /*kernel.element: Class2.:needsSignature*/
+  /*!kernel.element: Class2.:*/
+  Class2();
+}
+
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
+main() {
+  Class1a<int> cls1a = new Class1a<int>();
+  Class1a<int> cls1b1 = new Class1b<int>();
+  Class1a<int> cls1b2 = new Class1b<int>();
+  Class1c<int> cls1c = new Class1c<int>();
+  Class2<int> cls2 = new Class2<int>();
+  Expect.isFalse(cls1a == cls1b1);
+  Expect.isTrue(cls1b1 == cls1b2);
+  Expect.isFalse(cls1a == cls1c);
+  Expect.isFalse(cls1a == cls2);
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_instantiate_to_string1_strong.dart b/tests/compiler/dart2js/rti/data/runtime_type_instantiate_to_string1_strong.dart
new file mode 100644
index 0000000..657513e
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_instantiate_to_string1_strong.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2018, 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.
+
+/*element: global#instantiate1:needsArgs*/
+
+main() {
+  /*strong.direct,explicit=[id.T],needsArgs,needsInst=[<int>],needsSignature*/
+  T id<T>(T t, String s) => t;
+  int Function(int, String s) x = id;
+  print("${x.runtimeType}");
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_instantiate_to_string2_strong.dart b/tests/compiler/dart2js/rti/data/runtime_type_instantiate_to_string2_strong.dart
new file mode 100644
index 0000000..2db3273
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_instantiate_to_string2_strong.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2018, 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.
+
+/*element: global#instantiate1:needsArgs*/
+
+/*strong.element: id:direct,explicit=[id.T],needsArgs,needsInst=[<int>]*/
+T id<T>(T t, String s) => t;
+
+main() {
+  int Function(int, String s) x = id;
+  print("${x.runtimeType}");
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_instantiate_to_string3_strong.dart b/tests/compiler/dart2js/rti/data/runtime_type_instantiate_to_string3_strong.dart
new file mode 100644
index 0000000..cb51e1b
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_instantiate_to_string3_strong.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2018, 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.
+
+/*element: global#instantiate1:needsArgs*/
+
+class Class {
+  /*strong.element: Class.id:direct,explicit=[id.T],needsArgs,needsInst=[<int>]*/
+  T id<T>(T t, String s) => t;
+}
+
+main() {
+  int Function(int, String s) x = new Class().id;
+  print("${x.runtimeType}");
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_to_string1.dart b/tests/compiler/dart2js/rti/data/runtime_type_to_string1.dart
new file mode 100644
index 0000000..edf0fb3
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_to_string1.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2018, 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.
+
+/*!omit.class: Class1:*/
+/*omit.class: Class1:*/
+class Class1 {
+  /*kernel.element: Class1.:needsSignature*/
+  /*!kernel.element: Class1.:*/
+  Class1();
+}
+
+/*kernel.class: Class2:needsArgs*/
+/*!kernel.class: Class2:*/
+class Class2<T> {
+  /*kernel.element: Class2.:needsSignature*/
+  /*!kernel.element: Class2.:*/
+  Class2();
+}
+
+/*!omit.class: Class3:needsArgs*/
+/*omit.class: Class3:*/
+class Class3<T> implements Class1 {
+  /*kernel.element: Class3.:needsSignature*/
+  /*!kernel.element: Class3.:*/
+  Class3();
+}
+
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
+main() {
+  Class1 cls1 = new Class1();
+  print(cls1.runtimeType.toString());
+  new Class2<int>();
+  Class1 cls3 = new Class3<int>();
+  print(cls3.runtimeType.toString());
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_to_string2.dart b/tests/compiler/dart2js/rti/data/runtime_type_to_string2.dart
new file mode 100644
index 0000000..7c3ca11
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_to_string2.dart
@@ -0,0 +1,27 @@
+// Copyright (c) 2018, 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.
+
+/*!omit.class: Class1:needsArgs*/
+/*omit.class: Class1:*/
+class Class1<T> {
+  /*kernel.element: Class1.:needsSignature*/
+  /*!kernel.element: Class1.:*/
+  Class1();
+}
+
+/*kernel.class: Class2:needsArgs*/
+/*!kernel.class: Class2:*/
+class Class2<T> {
+  /*kernel.element: Class2.:needsSignature*/
+  /*!kernel.element: Class2.:*/
+  Class2();
+}
+
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
+main() {
+  Class1<int> cls1 = new Class1<int>();
+  print('${cls1.runtimeType}');
+  new Class2<int>();
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_to_string3.dart b/tests/compiler/dart2js/rti/data/runtime_type_to_string3.dart
new file mode 100644
index 0000000..02503de
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_to_string3.dart
@@ -0,0 +1,27 @@
+// Copyright (c) 2018, 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.
+
+/*!omit.class: Class1:needsArgs*/
+/*omit.class: Class1:*/
+class Class1<T> {
+  /*kernel.element: Class1.:needsSignature*/
+  /*!kernel.element: Class1.:*/
+  Class1();
+}
+
+/*kernel.class: Class2:needsArgs*/
+/*!kernel.class: Class2:*/
+class Class2<T> {
+  /*kernel.element: Class2.:needsSignature*/
+  /*!kernel.element: Class2.:*/
+  Class2();
+}
+
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
+main() {
+  Class1<int> cls1 = new Class1<int>();
+  print(cls1.runtimeType?.toString());
+  new Class2<int>();
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_to_string4.dart b/tests/compiler/dart2js/rti/data/runtime_type_to_string4.dart
new file mode 100644
index 0000000..221554c
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_to_string4.dart
@@ -0,0 +1,27 @@
+// Copyright (c) 2018, 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.
+
+/*!omit.class: Class1:needsArgs*/
+/*omit.class: Class1:*/
+class Class1<T> {
+  /*kernel.element: Class1.:needsSignature*/
+  /*!kernel.element: Class1.:*/
+  Class1();
+}
+
+/*kernel.class: Class2:needsArgs*/
+/*!kernel.class: Class2:*/
+class Class2<T> {
+  /*kernel.element: Class2.:needsSignature*/
+  /*!kernel.element: Class2.:*/
+  Class2();
+}
+
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
+main() {
+  Class1<int> cls1 = new Class1<int>();
+  print(cls1?.runtimeType?.toString());
+  new Class2<int>();
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_to_string5.dart b/tests/compiler/dart2js/rti/data/runtime_type_to_string5.dart
new file mode 100644
index 0000000..f68c923
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_to_string5.dart
@@ -0,0 +1,27 @@
+// Copyright (c) 2018, 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.
+
+/*!omit.class: Class1:needsArgs*/
+/*omit.class: Class1:*/
+class Class1<T> {
+  /*kernel.element: Class1.:needsSignature*/
+  /*!kernel.element: Class1.:*/
+  Class1();
+}
+
+/*kernel.class: Class2:needsArgs*/
+/*!kernel.class: Class2:*/
+class Class2<T> {
+  /*kernel.element: Class2.:needsSignature*/
+  /*!kernel.element: Class2.:*/
+  Class2();
+}
+
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
+main() {
+  Class1<int> cls1 = new Class1<int>();
+  print('${cls1?.runtimeType}');
+  new Class2<int>();
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_to_string6.dart b/tests/compiler/dart2js/rti/data/runtime_type_to_string6.dart
new file mode 100644
index 0000000..6ca7b43
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_to_string6.dart
@@ -0,0 +1,27 @@
+// Copyright (c) 2018, 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.
+
+/*!omit.class: Class1:needsArgs*/
+/*omit.class: Class1:*/
+class Class1<T> {
+  /*kernel.element: Class1.:needsSignature*/
+  /*!kernel.element: Class1.:*/
+  Class1();
+}
+
+/*!omit.class: Class2:needsArgs*/
+/*omit.class: Class2:*/
+class Class2<T> {
+  /*kernel.element: Class2.:needsSignature*/
+  /*!kernel.element: Class2.:*/
+  Class2();
+}
+
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
+main() {
+  dynamic cls1 = new Class1<int>();
+  print('${cls1.runtimeType}');
+  new Class2<int>();
+}
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_to_string7.dart b/tests/compiler/dart2js/rti/data/runtime_type_to_string7.dart
new file mode 100644
index 0000000..edf0fb3
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/runtime_type_to_string7.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2018, 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.
+
+/*!omit.class: Class1:*/
+/*omit.class: Class1:*/
+class Class1 {
+  /*kernel.element: Class1.:needsSignature*/
+  /*!kernel.element: Class1.:*/
+  Class1();
+}
+
+/*kernel.class: Class2:needsArgs*/
+/*!kernel.class: Class2:*/
+class Class2<T> {
+  /*kernel.element: Class2.:needsSignature*/
+  /*!kernel.element: Class2.:*/
+  Class2();
+}
+
+/*!omit.class: Class3:needsArgs*/
+/*omit.class: Class3:*/
+class Class3<T> implements Class1 {
+  /*kernel.element: Class3.:needsSignature*/
+  /*!kernel.element: Class3.:*/
+  Class3();
+}
+
+/*kernel.element: main:needsSignature*/
+/*!kernel.element: main:*/
+main() {
+  Class1 cls1 = new Class1();
+  print(cls1.runtimeType.toString());
+  new Class2<int>();
+  Class1 cls3 = new Class3<int>();
+  print(cls3.runtimeType.toString());
+}
diff --git a/tests/compiler/dart2js/rti/disable_rti_test.dart b/tests/compiler/dart2js/rti/disable_rti_test.dart
index a199849..cd7fab0 100644
--- a/tests/compiler/dart2js/rti/disable_rti_test.dart
+++ b/tests/compiler/dart2js/rti/disable_rti_test.dart
@@ -57,9 +57,13 @@
 
 main() {
   runTest() async {
-    CompilationResult result = await runCompiler(
-        memorySourceFiles: {'main.dart': code},
-        options: [Flags.disableRtiOptimization, Flags.disableInlining]);
+    CompilationResult result = await runCompiler(memorySourceFiles: {
+      'main.dart': code
+    }, options: [
+      Flags.noPreviewDart2,
+      Flags.disableRtiOptimization,
+      Flags.disableInlining
+    ]);
     Expect.isTrue(result.isSuccess);
     Compiler compiler = result.compiler;
     JClosedWorld closedWorld = compiler.backendClosedWorldForTesting;
diff --git a/tests/compiler/dart2js/rti/emission/function_type_argument_strong.dart b/tests/compiler/dart2js/rti/emission/function_type_argument_strong.dart
index 7b56dde..faa845a 100644
--- a/tests/compiler/dart2js/rti/emission/function_type_argument_strong.dart
+++ b/tests/compiler/dart2js/rti/emission/function_type_argument_strong.dart
@@ -5,12 +5,12 @@
 import 'package:expect/expect.dart';
 import 'package:meta/dart2js.dart';
 
-/*class: C:checks=[],instance,typeArgument*/
+/*class: C:checkedInstance,checks=[],instance,typeArgument*/
 class C {
   call(int i) {}
 }
 
-/*class: D:checks=[],instance,typeArgument*/
+/*class: D:checkedInstance,checks=[],instance,typeArgument*/
 class D {
   call(double i) {}
 }
diff --git a/tests/compiler/dart2js/rti/emission/list.dart b/tests/compiler/dart2js/rti/emission/list.dart
index 5be9f09..997bd49 100644
--- a/tests/compiler/dart2js/rti/emission/list.dart
+++ b/tests/compiler/dart2js/rti/emission/list.dart
@@ -9,10 +9,12 @@
 
 /*class: global#Iterable:checkedInstance*/
 
-/*class: A:checkedTypeArgument,checks=[],typeArgument*/
+/*kernel.class: A:checkedTypeArgument,checks=[],typeArgument*/
+/*strong.class: A:checkedInstance,checkedTypeArgument,checks=[],typeArgument*/
 class A {}
 
-/*class: B:checks=[],typeArgument*/
+/*kernel.class: B:checks=[],typeArgument*/
+/*strong.class: B:checkedInstance,checks=[],typeArgument*/
 class B {}
 
 @noInline
diff --git a/tests/compiler/dart2js/rti/emission/runtime_type_instantiate_to_string1_strong.dart b/tests/compiler/dart2js/rti/emission/runtime_type_instantiate_to_string1_strong.dart
new file mode 100644
index 0000000..da4456d
--- /dev/null
+++ b/tests/compiler/dart2js/rti/emission/runtime_type_instantiate_to_string1_strong.dart
@@ -0,0 +1,10 @@
+// Copyright (c) 2018, 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.
+
+main() {
+  /*checks=[],functionType,instance*/
+  T id<T>(T t) => t;
+  int Function(int) x = id;
+  print("${x.runtimeType}");
+}
diff --git a/tests/compiler/dart2js/rti/emission/runtime_type_instantiate_to_string2_strong.dart b/tests/compiler/dart2js/rti/emission/runtime_type_instantiate_to_string2_strong.dart
new file mode 100644
index 0000000..2847c31
--- /dev/null
+++ b/tests/compiler/dart2js/rti/emission/runtime_type_instantiate_to_string2_strong.dart
@@ -0,0 +1,10 @@
+// Copyright (c) 2018, 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.
+
+T id<T>(T t) => t;
+
+main() {
+  int Function(int) x = id;
+  print("${x.runtimeType}");
+}
diff --git a/tests/compiler/dart2js/rti/emission/runtime_type_instantiate_to_string3_strong.dart b/tests/compiler/dart2js/rti/emission/runtime_type_instantiate_to_string3_strong.dart
new file mode 100644
index 0000000..df259f2
--- /dev/null
+++ b/tests/compiler/dart2js/rti/emission/runtime_type_instantiate_to_string3_strong.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2018, 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.
+
+/*class: Class:checks=[],instance*/
+class Class {
+  T id<T>(T t) => t;
+}
+
+main() {
+  int Function(int) x = new Class().id;
+  print("${x.runtimeType}");
+}
diff --git a/tests/compiler/dart2js/rti/rti_need_test_helper.dart b/tests/compiler/dart2js/rti/rti_need_test_helper.dart
index 3e809b1..1145266 100644
--- a/tests/compiler/dart2js/rti/rti_need_test_helper.dart
+++ b/tests/compiler/dart2js/rti/rti_need_test_helper.dart
@@ -34,6 +34,9 @@
     await checkTests(dataDir, computeKernelRtiMemberNeed,
         computeClassDataFromKernel: computeKernelRtiClassNeed,
         options: [],
+        skipForKernel: [
+          'runtime_type_closure_equals2.dart',
+        ],
         skipForStrong: [
           'map_literal_checked.dart',
           // TODO(johnniwinther): Optimize local function type signature need.
diff --git a/tests/compiler/dart2js/rti/type_representation_test.dart b/tests/compiler/dart2js/rti/type_representation_test.dart
index ffb6fbd..a4a6f9e 100644
--- a/tests/compiler/dart2js/rti/type_representation_test.dart
+++ b/tests/compiler/dart2js/rti/type_representation_test.dart
@@ -67,7 +67,7 @@
 ''';
   CompilationResult result = await runCompiler(
       memorySourceFiles: {'main.dart': source},
-      options: strongMode ? [Flags.strongMode] : []);
+      options: strongMode ? [Flags.strongMode] : [Flags.noPreviewDart2]);
   Expect.isTrue(result.isSuccess);
   Compiler compiler = result.compiler;
   JavaScriptBackend backend = compiler.backend;
diff --git a/tests/compiler/dart2js/sourcemaps/pub_build_validity_test.dart b/tests/compiler/dart2js/sourcemaps/pub_build_validity_test.dart
deleted file mode 100644
index 6783b33..0000000
--- a/tests/compiler/dart2js/sourcemaps/pub_build_validity_test.dart
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:io';
-
-import 'package:path/path.dart' as path;
-import 'package:async_helper/async_helper.dart';
-import 'package:expect/expect.dart';
-import 'helpers/source_map_validator_helper.dart';
-
-void main() {
-  asyncTest(() async {
-    Directory tmpDir = await createTempDir();
-    try {
-      Directory sunflowerDir = new Directory.fromUri(
-          Platform.script.resolve('../../../../third_party/sunflower'));
-
-      print("Copying '${sunflowerDir.path}' to '${tmpDir.path}'.");
-      copyDirectory(sunflowerDir, tmpDir);
-      String ext = Platform.isWindows ? '.bat' : '';
-      String command = path.fromUri(Uri
-          .parse(Platform.resolvedExecutable)
-          .resolve('dart-sdk/bin/pub${ext}'));
-      String file = path.join(tmpDir.path, 'build/web/sunflower.dart.js');
-
-      // sunflower/pubspec.yaml only depends on package:browser for Dartium, we
-      // override the file to remove this dependency and make pub-get --offline
-      // trivially succeed.
-      print("Overriding '${tmpDir.path}/pubspec.yaml'.");
-      new File(path.join(tmpDir.path, "pubspec.yaml"))
-          .writeAsStringSync(_newPubspec);
-
-      print("Running '$command get --offline' from '${tmpDir}'.");
-      ProcessResult getResult = await Process.run(command, ['get', '--offline'],
-          workingDirectory: tmpDir.path);
-      print(getResult.stdout);
-      print(getResult.stderr);
-      Expect.equals(0, getResult.exitCode, 'Unexpected exitCode from pub get');
-
-      print("Running '$command build --mode=debug' from '${tmpDir}'.");
-      ProcessResult buildResult = await Process.run(
-          command, ['build', '--mode=debug'],
-          workingDirectory: tmpDir.path);
-      print(buildResult.stdout);
-      print(buildResult.stderr);
-      Expect.equals(0, buildResult.exitCode, 'Unexpected exitCode from pub');
-      validateSourceMap(new Uri.file(file, windows: Platform.isWindows));
-      print("Deleting '${tmpDir.path}'.");
-    } finally {
-      tmpDir.deleteSync(recursive: true);
-    }
-  });
-}
-
-String _newPubspec = '''
-# Generated by test
-name: sunflower
-version: 0.0.0
-''';
diff --git a/tests/compiler/dart2js/sourcemaps/tools/source_mapping_tester.dart b/tests/compiler/dart2js/sourcemaps/tools/source_mapping_tester.dart
index 4eaf294..6d62f1f3 100644
--- a/tests/compiler/dart2js/sourcemaps/tools/source_mapping_tester.dart
+++ b/tests/compiler/dart2js/sourcemaps/tools/source_mapping_tester.dart
@@ -131,7 +131,7 @@
 }
 
 const Map<String, List<String>> TEST_CONFIGURATIONS = const {
-  'kernel': const [],
+  'kernel': const [Flags.noPreviewDart2],
 };
 
 final Map<String, Uri> TEST_FILES = _computeTestFiles();
diff --git a/tests/compiler/dart2js_extra/dart2js_extra.status b/tests/compiler/dart2js_extra/dart2js_extra.status
index bf6a661..0328d9e 100644
--- a/tests/compiler/dart2js_extra/dart2js_extra.status
+++ b/tests/compiler/dart2js_extra/dart2js_extra.status
@@ -70,9 +70,6 @@
 mirrors_used_warning_test/minif: Crash
 mirrors_used_warning_test/none: Crash
 
-[ $compiler == dart2js && !$checked ]
-closure_signature_unneeded_test: RuntimeError # Too eager signature generation.
-
 [ $compiler == dart2js && $csp ]
 deferred_custom_loader_test: SkipByDesign # Issue 25683
 deferred_fail_and_retry_test: SkipByDesign # Uses eval to simulate failed loading.
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals1_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals1_test.dart
new file mode 100644
index 0000000..8f9836f
--- /dev/null
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals1_test.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
+
+import 'package:expect/expect.dart';
+
+class Class<T> {
+  Class();
+}
+
+main() {
+  local1a() {}
+
+  local1b() {}
+
+  local2(int i, String s) => i;
+
+  Expect.isTrue(local1a.runtimeType == local1b.runtimeType);
+  Expect.isFalse(local1a.runtimeType == local2.runtimeType);
+  new Class();
+}
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals2_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals2_test.dart
new file mode 100644
index 0000000..56afe25
--- /dev/null
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals2_test.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
+
+import 'package:expect/expect.dart';
+
+class Class<T> {
+  Class();
+}
+
+main() {
+  T local1a<T>() => null;
+
+  T local1b<T>() => null;
+
+  T local2<T>(T t, String s) => t;
+
+  Expect.isTrue(local1a.runtimeType == local1b.runtimeType);
+  Expect.isFalse(local1a.runtimeType == local2.runtimeType);
+  new Class();
+}
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals3_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals3_test.dart
new file mode 100644
index 0000000..673211e
--- /dev/null
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals3_test.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
+
+import 'package:expect/expect.dart';
+
+String method() => null;
+
+class Class1<T> {
+  Class1();
+
+  method() {
+    T local1a() => null;
+
+    T local1b() => null;
+
+    T local2(T t, String s) => t;
+
+    Expect.isTrue(local1a.runtimeType == local1b.runtimeType);
+    Expect.isFalse(local1a.runtimeType == local2.runtimeType);
+    Expect.isFalse(local1a.runtimeType == method.runtimeType);
+  }
+}
+
+class Class2<T> {
+  Class2();
+}
+
+main() {
+  new Class1<int>().method();
+  new Class2<int>();
+}
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals4_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals4_test.dart
new file mode 100644
index 0000000..73b72b3
--- /dev/null
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals4_test.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
+
+import 'package:expect/expect.dart';
+
+class Class1<T> {
+  Class1();
+
+  method1a() => null;
+
+  method1b() => null;
+
+  method2(t, s) => t;
+}
+
+class Class2<T> {
+  Class2();
+}
+
+main() {
+  var c = new Class1<int>();
+
+  Expect.isTrue(c.method1a.runtimeType == c.method1b.runtimeType);
+  Expect.isFalse(c.method1a.runtimeType == c.method2.runtimeType);
+  new Class2<int>();
+}
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals5_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals5_test.dart
new file mode 100644
index 0000000..ecad991
--- /dev/null
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals5_test.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
+
+import 'package:expect/expect.dart';
+
+class Class1<T> {
+  Class1();
+
+  T method1a() => null;
+
+  T method1b() => null;
+
+  T method2(T t, String s) => t;
+}
+
+class Class2<T> {
+  Class2();
+}
+
+main() {
+  var c = new Class1<int>();
+
+  Expect.isTrue(c.method1a.runtimeType == c.method1b.runtimeType);
+  Expect.isFalse(c.method1a.runtimeType == c.method2.runtimeType);
+  new Class2<int>();
+}
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals6_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals6_test.dart
new file mode 100644
index 0000000..23641eb
--- /dev/null
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals6_test.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
+
+import 'package:expect/expect.dart';
+
+method1a() => null;
+
+method1b() => null;
+
+method2(t, s) => t;
+
+class Class<T> {
+  Class();
+}
+
+main() {
+  Expect.isTrue(method1a.runtimeType == method1b.runtimeType);
+  Expect.isFalse(method1a.runtimeType == method2.runtimeType);
+  new Class<int>();
+}
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals7_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals7_test.dart
new file mode 100644
index 0000000..129dcca
--- /dev/null
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals7_test.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
+
+import 'package:expect/expect.dart';
+
+T method1a<T>() => null;
+
+T method1b<T>() => null;
+
+T method2<T>(T t, String s) => t;
+
+class Class<T> {
+  Class();
+}
+
+main() {
+  Expect.isTrue(method1a.runtimeType == method1b.runtimeType);
+  Expect.isFalse(method1a.runtimeType == method2.runtimeType);
+  new Class<int>();
+}
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals8_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals8_test.dart
new file mode 100644
index 0000000..7a1142d
--- /dev/null
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals8_test.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
+
+import 'package:expect/expect.dart';
+
+class Class1<S> {
+  Class1();
+
+  T method1a<T>() => null;
+
+  T method1b<T>() => null;
+
+  T method2<T>(T t, String s) => t;
+}
+
+class Class2<T> {
+  Class2();
+}
+
+main() {
+  var c = new Class1<int>();
+
+  Expect.isTrue(c.method1a.runtimeType == c.method1b.runtimeType);
+  Expect.isFalse(c.method1a.runtimeType == c.method2.runtimeType);
+  new Class2<int>();
+}
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string1_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string1_test.dart
new file mode 100644
index 0000000..2e5a44f
--- /dev/null
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string1_test.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
+
+import 'package:expect/expect.dart';
+
+class Class<T> {
+  Class();
+}
+
+main() {
+  local1() {}
+  local2(int i) => i;
+
+  var toString = '${local1.runtimeType}';
+  if ('$Object' == 'Object') {
+    // `true` if non-minified.
+    Expect.equals("main_local1", toString);
+  }
+  print(toString);
+  local2(0);
+  new Class();
+}
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string2_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string2_test.dart
new file mode 100644
index 0000000..dddd5e2
--- /dev/null
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string2_test.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
+
+import 'package:expect/expect.dart';
+
+class Class<T> {
+  Class();
+}
+
+main() {
+  local1<T>() {}
+  local2<T>(t) => t;
+
+  var toString = '${local1.runtimeType}';
+  if ('$Object' == 'Object') {
+    // `true` if non-minified.
+    Expect.equals("main_local1", toString);
+  }
+  print(toString);
+  local2(0);
+  new Class();
+}
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string3_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string3_test.dart
new file mode 100644
index 0000000..1cf0e0e
--- /dev/null
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string3_test.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
+
+import 'package:expect/expect.dart';
+
+class Class1<T> {
+  Class1();
+
+  T method() => null;
+}
+
+class Class2<T> {
+  Class2();
+}
+
+main() {
+  Class1<int> cls1 = new Class1<int>();
+  Expect.equals("() => dynamic", cls1.method.runtimeType.toString());
+  new Class2<int>();
+}
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string4_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string4_test.dart
new file mode 100644
index 0000000..c95cf29
--- /dev/null
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string4_test.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
+
+import 'package:expect/expect.dart';
+
+class Class1 {
+  Class1();
+
+  T method<T>() => null;
+}
+
+class Class2<T> {
+  Class2();
+}
+
+main() {
+  Class1 cls1 = new Class1();
+  Expect.equals("<T1>() => T1", cls1.method.runtimeType.toString());
+  new Class2<int>();
+}
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string5_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string5_test.dart
new file mode 100644
index 0000000..cd87fa4
--- /dev/null
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string5_test.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
+
+import 'package:expect/expect.dart';
+
+class Class<T> {
+  Class();
+}
+
+method1() {}
+
+method2(int i) => i;
+
+main() {
+  Expect.equals("() => dynamic", '${method1.runtimeType}');
+  method2(0);
+  new Class();
+}
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string6_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string6_test.dart
new file mode 100644
index 0000000..899a217
--- /dev/null
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string6_test.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
+
+import 'package:expect/expect.dart';
+
+class Class<T> {
+  Class();
+}
+
+method1<T>() {}
+
+method2<T>(t) => t;
+
+main() {
+  Expect.equals("<T1>() => dynamic", '${method1.runtimeType}');
+  method2(0);
+  new Class();
+}
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_equals1_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_equals1_test.dart
new file mode 100644
index 0000000..6ef574d
--- /dev/null
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_equals1_test.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
+
+import 'package:expect/expect.dart';
+
+class Class1a<T> {
+  Class1a();
+
+  bool operator ==(other) {
+    if (identical(this, other)) return true;
+    return runtimeType == other.runtimeType;
+  }
+}
+
+class Class1b<T> extends Class1a<T> {
+  Class1b();
+}
+
+class Class1c<T> implements Class1a<T> {
+  Class1c();
+}
+
+class Class2<T> {
+  Class2();
+}
+
+main() {
+  Class1a<int> cls1a = new Class1a<int>();
+  Class1a<int> cls1b1 = new Class1b<int>();
+  Class1a<int> cls1b2 = new Class1b<int>();
+  Class1c<int> cls1c = new Class1c<int>();
+  Class2<int> cls2 = new Class2<int>();
+  Expect.isFalse(cls1a == cls1b1);
+  Expect.isTrue(cls1b1 == cls1b2);
+  Expect.isFalse(cls1a == cls1c);
+  Expect.isFalse(cls1a == cls2);
+}
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_equals2_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_equals2_test.dart
new file mode 100644
index 0000000..0883581
--- /dev/null
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_equals2_test.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
+
+import 'package:expect/expect.dart';
+
+class Class1a<T> {
+  Class1a();
+
+  bool operator ==(other) {
+    if (identical(this, other)) return true;
+    return other.runtimeType == runtimeType;
+  }
+}
+
+class Class1b<T> extends Class1a<T> {
+  Class1b();
+}
+
+class Class1c<T> implements Class1a<T> {
+  Class1c();
+}
+
+class Class2<T> {
+  Class2();
+}
+
+main() {
+  Class1a<int> cls1a = new Class1a<int>();
+  Class1a<int> cls1b1 = new Class1b<int>();
+  Class1a<int> cls1b2 = new Class1b<int>();
+  Class1c<int> cls1c = new Class1c<int>();
+  Class2<int> cls2 = new Class2<int>();
+  Expect.isFalse(cls1a == cls1b1);
+  Expect.isTrue(cls1b1 == cls1b2);
+  Expect.isFalse(cls1a == cls1c);
+  Expect.isFalse(cls1a == cls2);
+}
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_equals3_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_equals3_test.dart
new file mode 100644
index 0000000..c9911a5
--- /dev/null
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_equals3_test.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
+
+import 'package:expect/expect.dart';
+
+class Class1a<T> {
+  Class1a();
+
+  bool operator ==(other) {
+    if (identical(this, other)) return true;
+    return runtimeType == other?.runtimeType;
+  }
+}
+
+class Class1b<T> extends Class1a<T> {
+  Class1b();
+}
+
+class Class1c<T> implements Class1a<T> {
+  Class1c();
+}
+
+class Class2<T> {
+  Class2();
+}
+
+main() {
+  Class1a<int> cls1a = new Class1a<int>();
+  Class1a<int> cls1b1 = new Class1b<int>();
+  Class1a<int> cls1b2 = new Class1b<int>();
+  Class1c<int> cls1c = new Class1c<int>();
+  Class2<int> cls2 = new Class2<int>();
+  Expect.isFalse(cls1a == cls1b1);
+  Expect.isTrue(cls1b1 == cls1b2);
+  Expect.isFalse(cls1a == cls1c);
+  Expect.isFalse(cls1a == cls2);
+}
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_equals4_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_equals4_test.dart
new file mode 100644
index 0000000..bf77141
--- /dev/null
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_equals4_test.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
+
+import 'package:expect/expect.dart';
+
+class Class1a<T> {
+  Class1a();
+
+  bool operator ==(other) {
+    if (identical(this, other)) return true;
+    return other?.runtimeType == runtimeType;
+  }
+}
+
+class Class1b<T> extends Class1a<T> {
+  Class1b();
+}
+
+class Class1c<T> implements Class1a<T> {
+  Class1c();
+}
+
+class Class2<T> {
+  Class2();
+}
+
+main() {
+  Class1a<int> cls1a = new Class1a<int>();
+  Class1a<int> cls1b1 = new Class1b<int>();
+  Class1a<int> cls1b2 = new Class1b<int>();
+  Class1c<int> cls1c = new Class1c<int>();
+  Class2<int> cls2 = new Class2<int>();
+  Expect.isFalse(cls1a == cls1b1);
+  Expect.isTrue(cls1b1 == cls1b2);
+  Expect.isFalse(cls1a == cls1c);
+  Expect.isFalse(cls1a == cls2);
+}
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_instantiate_to_string_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_instantiate_to_string_test.dart
new file mode 100644
index 0000000..d8b456c
--- /dev/null
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_instantiate_to_string_test.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
+
+import 'package:expect/expect.dart';
+
+main() {
+  T id<T>(T t) => t;
+  int Function(int) x = id;
+  var toString = "${x.runtimeType}";
+  if ('$Object' == 'Object') {
+    // `true` if non-minified.
+    // The signature of `id` is not otherwise needed so the instantiation
+    // wrapper doesn't have a function type.
+    Expect.equals("Instantiation1", toString);
+  }
+  print(toString);
+}
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong10_test.dart b/tests/compiler/dart2js_extra/no_such_method_strong10_test.dart
new file mode 100644
index 0000000..c09441f
--- /dev/null
+++ b/tests/compiler/dart2js_extra/no_such_method_strong10_test.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong
+
+import 'package:expect/expect.dart';
+
+abstract class A {
+  m(x);
+}
+
+class B implements A {
+  noSuchMethod(Invocation i) {
+    print("nsm call: ${i.memberName}");
+    if (i.isGetter) {
+      throw (" - tearoff");
+    }
+    if (i.isMethod) {
+      print(" - method invocation");
+      return 42;
+    }
+    return 123;
+  }
+}
+
+void main() {
+  A x = new B();
+  var tearoff = x.m;
+  Expect.equals(42, tearoff(3));
+}
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong1_test.dart b/tests/compiler/dart2js_extra/no_such_method_strong1_test.dart
new file mode 100644
index 0000000..62b6c60
--- /dev/null
+++ b/tests/compiler/dart2js_extra/no_such_method_strong1_test.dart
@@ -0,0 +1,30 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong
+
+import 'package:expect/expect.dart';
+
+abstract class A {
+  m(x);
+}
+
+class B implements A {
+  noSuchMethod(Invocation i) {
+    print("nsm call: ${i.memberName}");
+    if (i.isGetter) {
+      throw (" - tearoff");
+    }
+    if (i.isMethod) {
+      print(" - method invocation");
+      return 42;
+    }
+    return 123;
+  }
+}
+
+void main() {
+  A x = new B();
+  Expect.equals(42, x.m(3));
+}
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong2_test.dart b/tests/compiler/dart2js_extra/no_such_method_strong2_test.dart
new file mode 100644
index 0000000..e42f388
--- /dev/null
+++ b/tests/compiler/dart2js_extra/no_such_method_strong2_test.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong
+
+import 'package:expect/expect.dart';
+
+abstract class A {
+  m(x);
+}
+
+class B implements A {
+  noSuchMethod(Invocation i) {
+    return i.memberName;
+  }
+}
+
+void main() {
+  A x = new B();
+  Expect.equals(#m, x.m(3));
+}
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong3_test.dart b/tests/compiler/dart2js_extra/no_such_method_strong3_test.dart
new file mode 100644
index 0000000..5353d7b
--- /dev/null
+++ b/tests/compiler/dart2js_extra/no_such_method_strong3_test.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong
+
+import 'package:expect/expect.dart';
+
+abstract class A {
+  m(x, y);
+}
+
+class B implements A {
+  noSuchMethod(Invocation i) {
+    return '${i.positionalArguments[0]},${i.positionalArguments[1]}';
+  }
+}
+
+void main() {
+  A x = new B();
+  Expect.equals('3,4', x.m(3, 4));
+}
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong4_test.dart b/tests/compiler/dart2js_extra/no_such_method_strong4_test.dart
new file mode 100644
index 0000000..1ec9499
--- /dev/null
+++ b/tests/compiler/dart2js_extra/no_such_method_strong4_test.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong
+
+import 'package:expect/expect.dart';
+
+abstract class A {
+  m({a, b});
+}
+
+class B implements A {
+  noSuchMethod(Invocation i) {
+    return '${i.namedArguments[#a]},${i.namedArguments[#b]}';
+  }
+}
+
+void main() {
+  A x = new B();
+  Expect.equals('3,4', x.m(a: 3, b: 4));
+  Expect.equals('3,4', x.m(b: 4, a: 3));
+}
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong5_test.dart b/tests/compiler/dart2js_extra/no_such_method_strong5_test.dart
new file mode 100644
index 0000000..94f1531
--- /dev/null
+++ b/tests/compiler/dart2js_extra/no_such_method_strong5_test.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong
+
+import 'package:expect/expect.dart';
+
+abstract class A {
+  m<X, Y>();
+}
+
+class B implements A {
+  noSuchMethod(Invocation i) {
+    return [i.typeArguments[0], i.typeArguments[1]];
+  }
+}
+
+void main() {
+  A x = new B();
+  Expect.listEquals([int, String], x.m<int, String>());
+}
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong6_test.dart b/tests/compiler/dart2js_extra/no_such_method_strong6_test.dart
new file mode 100644
index 0000000..0018b85
--- /dev/null
+++ b/tests/compiler/dart2js_extra/no_such_method_strong6_test.dart
@@ -0,0 +1,28 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong
+
+import 'package:expect/expect.dart';
+
+abstract class A {
+  m();
+}
+
+class B implements A {
+  noSuchMethod(Invocation i) {
+    return 42;
+  }
+}
+
+class C extends B {
+  noSuchMethod(Invocation i) => 87;
+
+  method() => super.m();
+}
+
+void main() {
+  C x = new C();
+  Expect.equals(87, x.method());
+}
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong7_test.dart b/tests/compiler/dart2js_extra/no_such_method_strong7_test.dart
new file mode 100644
index 0000000..7f3925f
--- /dev/null
+++ b/tests/compiler/dart2js_extra/no_such_method_strong7_test.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong
+
+import 'package:expect/expect.dart';
+
+abstract class A {
+  get m;
+}
+
+class B implements A {
+  noSuchMethod(Invocation i) {
+    return i.isGetter ? 42 : 87;
+  }
+}
+
+void main() {
+  A x = new B();
+  Expect.equals(42, x.m);
+}
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong8_test.dart b/tests/compiler/dart2js_extra/no_such_method_strong8_test.dart
new file mode 100644
index 0000000..a98447b
--- /dev/null
+++ b/tests/compiler/dart2js_extra/no_such_method_strong8_test.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong
+
+import 'package:expect/expect.dart';
+
+abstract class A {
+  set m(_);
+}
+
+class B implements A {
+  noSuchMethod(Invocation i) {
+    return i.isSetter ? i.positionalArguments[0] : 87;
+  }
+}
+
+void main() {
+  A x = new B();
+  Expect.equals(42, x.m = 42);
+}
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong9_test.dart b/tests/compiler/dart2js_extra/no_such_method_strong9_test.dart
new file mode 100644
index 0000000..25ccc7e
--- /dev/null
+++ b/tests/compiler/dart2js_extra/no_such_method_strong9_test.dart
@@ -0,0 +1,30 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong
+
+import 'package:expect/expect.dart';
+
+abstract class A {
+  m();
+}
+
+abstract class B implements A {
+  noSuchMethod(Invocation i) {
+    return 42;
+  }
+}
+
+class C extends B {}
+
+class D extends C {
+  noSuchMethod(Invocation i) => 87;
+
+  method() => super.m();
+}
+
+void main() {
+  D x = new D();
+  Expect.equals(87, x.method());
+}
diff --git a/tests/compiler/dart2js_extra/runtime_type_closure_equals1_test.dart b/tests/compiler/dart2js_extra/runtime_type_closure_equals1_test.dart
new file mode 100644
index 0000000..5defc5e
--- /dev/null
+++ b/tests/compiler/dart2js_extra/runtime_type_closure_equals1_test.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong
+
+import 'package:expect/expect.dart';
+
+class Class<T> {
+  Class();
+}
+
+main() {
+  local1a() {}
+
+  local1b() {}
+
+  local2(int i, String s) => i;
+
+  Expect.isTrue(local1a.runtimeType == local1b.runtimeType);
+  Expect.isFalse(local1a.runtimeType == local2.runtimeType);
+  new Class();
+}
diff --git a/tests/compiler/dart2js_extra/runtime_type_closure_equals2_test.dart b/tests/compiler/dart2js_extra/runtime_type_closure_equals2_test.dart
new file mode 100644
index 0000000..86fe4b2
--- /dev/null
+++ b/tests/compiler/dart2js_extra/runtime_type_closure_equals2_test.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong
+
+import 'package:expect/expect.dart';
+
+class Class<T> {
+  Class();
+}
+
+main() {
+  T local1a<T>() => null;
+
+  T local1b<T>() => null;
+
+  T local2<T>(T t, String s) => t;
+
+  Expect.isTrue(local1a.runtimeType == local1b.runtimeType);
+  Expect.isFalse(local1a.runtimeType == local2.runtimeType);
+  new Class();
+}
diff --git a/tests/compiler/dart2js_extra/runtime_type_closure_equals3_test.dart b/tests/compiler/dart2js_extra/runtime_type_closure_equals3_test.dart
new file mode 100644
index 0000000..ffcd03f
--- /dev/null
+++ b/tests/compiler/dart2js_extra/runtime_type_closure_equals3_test.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong
+
+import 'package:expect/expect.dart';
+
+String method() => null;
+
+class Class1<T> {
+  Class1();
+
+  method() {
+    T local1a() => null;
+
+    T local1b() => null;
+
+    T local2(T t, String s) => t;
+
+    Expect.isTrue(local1a.runtimeType == local1b.runtimeType);
+    Expect.isFalse(local1a.runtimeType == local2.runtimeType);
+    Expect.isFalse(local1a.runtimeType == method.runtimeType);
+  }
+}
+
+class Class2<T> {
+  Class2();
+}
+
+main() {
+  new Class1<int>().method();
+  new Class2<int>();
+}
diff --git a/tests/compiler/dart2js_extra/runtime_type_closure_equals4_test.dart b/tests/compiler/dart2js_extra/runtime_type_closure_equals4_test.dart
new file mode 100644
index 0000000..967b5f6
--- /dev/null
+++ b/tests/compiler/dart2js_extra/runtime_type_closure_equals4_test.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong
+
+import 'package:expect/expect.dart';
+
+class Class1<T> {
+  Class1();
+
+  method1a() => null;
+
+  method1b() => null;
+
+  method2(t, s) => t;
+}
+
+class Class2<T> {
+  Class2();
+}
+
+main() {
+  var c = new Class1<int>();
+
+  Expect.isTrue(c.method1a.runtimeType == c.method1b.runtimeType);
+  Expect.isFalse(c.method1a.runtimeType == c.method2.runtimeType);
+  new Class2<int>();
+}
diff --git a/tests/compiler/dart2js_extra/runtime_type_closure_equals5_test.dart b/tests/compiler/dart2js_extra/runtime_type_closure_equals5_test.dart
new file mode 100644
index 0000000..1b19f8d
--- /dev/null
+++ b/tests/compiler/dart2js_extra/runtime_type_closure_equals5_test.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong
+
+import 'package:expect/expect.dart';
+
+class Class1<T> {
+  Class1();
+
+  T method1a() => null;
+
+  T method1b() => null;
+
+  T method2(T t, String s) => t;
+}
+
+class Class2<T> {
+  Class2();
+}
+
+main() {
+  var c = new Class1<int>();
+
+  Expect.isTrue(c.method1a.runtimeType == c.method1b.runtimeType);
+  Expect.isFalse(c.method1a.runtimeType == c.method2.runtimeType);
+  new Class2<int>();
+}
diff --git a/tests/compiler/dart2js_extra/runtime_type_closure_equals6_test.dart b/tests/compiler/dart2js_extra/runtime_type_closure_equals6_test.dart
new file mode 100644
index 0000000..5090f04
--- /dev/null
+++ b/tests/compiler/dart2js_extra/runtime_type_closure_equals6_test.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong
+
+import 'package:expect/expect.dart';
+
+method1a() => null;
+
+method1b() => null;
+
+method2(t, s) => t;
+
+class Class<T> {
+  Class();
+}
+
+main() {
+  Expect.isTrue(method1a.runtimeType == method1b.runtimeType);
+  Expect.isFalse(method1a.runtimeType == method2.runtimeType);
+  new Class<int>();
+}
diff --git a/tests/compiler/dart2js_extra/runtime_type_closure_equals7_test.dart b/tests/compiler/dart2js_extra/runtime_type_closure_equals7_test.dart
new file mode 100644
index 0000000..73348c9
--- /dev/null
+++ b/tests/compiler/dart2js_extra/runtime_type_closure_equals7_test.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong
+
+import 'package:expect/expect.dart';
+
+T method1a<T>() => null;
+
+T method1b<T>() => null;
+
+T method2<T>(T t, String s) => t;
+
+class Class<T> {
+  Class();
+}
+
+main() {
+  Expect.isTrue(method1a.runtimeType == method1b.runtimeType);
+  Expect.isFalse(method1a.runtimeType == method2.runtimeType);
+  new Class<int>();
+}
diff --git a/tests/compiler/dart2js_extra/runtime_type_closure_equals8_test.dart b/tests/compiler/dart2js_extra/runtime_type_closure_equals8_test.dart
new file mode 100644
index 0000000..5f03539
--- /dev/null
+++ b/tests/compiler/dart2js_extra/runtime_type_closure_equals8_test.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong
+
+import 'package:expect/expect.dart';
+
+class Class1<S> {
+  Class1();
+
+  T method1a<T>() => null;
+
+  T method1b<T>() => null;
+
+  T method2<T>(T t, String s) => t;
+}
+
+class Class2<T> {
+  Class2();
+}
+
+main() {
+  var c = new Class1<int>();
+
+  Expect.isTrue(c.method1a.runtimeType == c.method1b.runtimeType);
+  Expect.isFalse(c.method1a.runtimeType == c.method2.runtimeType);
+  new Class2<int>();
+}
diff --git a/tests/compiler/dart2js_extra/runtime_type_equals1_test.dart b/tests/compiler/dart2js_extra/runtime_type_equals1_test.dart
new file mode 100644
index 0000000..f625055
--- /dev/null
+++ b/tests/compiler/dart2js_extra/runtime_type_equals1_test.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong
+
+import 'package:expect/expect.dart';
+
+class Class1a<T> {
+  Class1a();
+
+  bool operator ==(other) {
+    if (identical(this, other)) return true;
+    return runtimeType == other.runtimeType;
+  }
+}
+
+class Class1b<T> extends Class1a<T> {
+  Class1b();
+}
+
+class Class1c<T> implements Class1a<T> {
+  Class1c();
+}
+
+class Class2<T> {
+  Class2();
+}
+
+main() {
+  Class1a<int> cls1a = new Class1a<int>();
+  Class1a<int> cls1b1 = new Class1b<int>();
+  Class1a<int> cls1b2 = new Class1b<int>();
+  Class1c<int> cls1c = new Class1c<int>();
+  Class2<int> cls2 = new Class2<int>();
+  Expect.isFalse(cls1a == cls1b1);
+  Expect.isTrue(cls1b1 == cls1b2);
+  Expect.isFalse(cls1a == cls1c);
+  Expect.isFalse(cls1a == cls2);
+}
diff --git a/tests/compiler/dart2js_extra/runtime_type_equals2_test.dart b/tests/compiler/dart2js_extra/runtime_type_equals2_test.dart
new file mode 100644
index 0000000..ce93178
--- /dev/null
+++ b/tests/compiler/dart2js_extra/runtime_type_equals2_test.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong
+
+import 'package:expect/expect.dart';
+
+class Class1a<T> {
+  Class1a();
+
+  bool operator ==(other) {
+    if (identical(this, other)) return true;
+    return other.runtimeType == runtimeType;
+  }
+}
+
+class Class1b<T> extends Class1a<T> {
+  Class1b();
+}
+
+class Class1c<T> implements Class1a<T> {
+  Class1c();
+}
+
+class Class2<T> {
+  Class2();
+}
+
+main() {
+  Class1a<int> cls1a = new Class1a<int>();
+  Class1a<int> cls1b1 = new Class1b<int>();
+  Class1a<int> cls1b2 = new Class1b<int>();
+  Class1c<int> cls1c = new Class1c<int>();
+  Class2<int> cls2 = new Class2<int>();
+  Expect.isFalse(cls1a == cls1b1);
+  Expect.isTrue(cls1b1 == cls1b2);
+  Expect.isFalse(cls1a == cls1c);
+  Expect.isFalse(cls1a == cls2);
+}
diff --git a/tests/compiler/dart2js_extra/runtime_type_equals3_test.dart b/tests/compiler/dart2js_extra/runtime_type_equals3_test.dart
new file mode 100644
index 0000000..f412f86
--- /dev/null
+++ b/tests/compiler/dart2js_extra/runtime_type_equals3_test.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong
+
+import 'package:expect/expect.dart';
+
+class Class1a<T> {
+  Class1a();
+
+  bool operator ==(other) {
+    if (identical(this, other)) return true;
+    return runtimeType == other?.runtimeType;
+  }
+}
+
+class Class1b<T> extends Class1a<T> {
+  Class1b();
+}
+
+class Class1c<T> implements Class1a<T> {
+  Class1c();
+}
+
+class Class2<T> {
+  Class2();
+}
+
+main() {
+  Class1a<int> cls1a = new Class1a<int>();
+  Class1a<int> cls1b1 = new Class1b<int>();
+  Class1a<int> cls1b2 = new Class1b<int>();
+  Class1c<int> cls1c = new Class1c<int>();
+  Class2<int> cls2 = new Class2<int>();
+  Expect.isFalse(cls1a == cls1b1);
+  Expect.isTrue(cls1b1 == cls1b2);
+  Expect.isFalse(cls1a == cls1c);
+  Expect.isFalse(cls1a == cls2);
+}
diff --git a/tests/compiler/dart2js_extra/runtime_type_equals4_test.dart b/tests/compiler/dart2js_extra/runtime_type_equals4_test.dart
new file mode 100644
index 0000000..4a1c8d9
--- /dev/null
+++ b/tests/compiler/dart2js_extra/runtime_type_equals4_test.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong
+
+import 'package:expect/expect.dart';
+
+class Class1a<T> {
+  Class1a();
+
+  bool operator ==(other) {
+    if (identical(this, other)) return true;
+    return other?.runtimeType == runtimeType;
+  }
+}
+
+class Class1b<T> extends Class1a<T> {
+  Class1b();
+}
+
+class Class1c<T> implements Class1a<T> {
+  Class1c();
+}
+
+class Class2<T> {
+  Class2();
+}
+
+main() {
+  Class1a<int> cls1a = new Class1a<int>();
+  Class1a<int> cls1b1 = new Class1b<int>();
+  Class1a<int> cls1b2 = new Class1b<int>();
+  Class1c<int> cls1c = new Class1c<int>();
+  Class2<int> cls2 = new Class2<int>();
+  Expect.isFalse(cls1a == cls1b1);
+  Expect.isTrue(cls1b1 == cls1b2);
+  Expect.isFalse(cls1a == cls1c);
+  Expect.isFalse(cls1a == cls2);
+}
diff --git a/tests/compiler/dart2js_extra/runtime_type_equals5_test.dart b/tests/compiler/dart2js_extra/runtime_type_equals5_test.dart
new file mode 100644
index 0000000..cd6926e
--- /dev/null
+++ b/tests/compiler/dart2js_extra/runtime_type_equals5_test.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+class Class1 {
+  Class1();
+}
+
+class Class2<T> implements Class1 {
+  Class2();
+}
+
+main() {
+  Class1 cls1 = new Class1();
+  Class1 cls2a = new Class2<int>();
+  Class1 cls2b = new Class2<int>();
+  Class1 cls2c = new Class2<String>();
+  var r1 = cls1.runtimeType;
+  var r2a = cls2a.runtimeType;
+  var r2b = cls2b.runtimeType;
+  var r2c = cls2c.runtimeType;
+  Expect.equals(r1, r1);
+  Expect.notEquals(r1, r2a);
+  Expect.notEquals(r1, r2b);
+  Expect.notEquals(r1, r2c);
+  Expect.equals(r2a, r2a);
+  Expect.equals(r2a, r2b);
+  Expect.notEquals(r2a, r2c);
+  Expect.equals(r2b, r2b);
+  Expect.notEquals(r2b, r2c);
+  Expect.equals(r2c, r2c);
+}
diff --git a/tests/compiler/dart2js_extra/runtime_type_to_string1_test.dart b/tests/compiler/dart2js_extra/runtime_type_to_string1_test.dart
new file mode 100644
index 0000000..8c6cbb4
--- /dev/null
+++ b/tests/compiler/dart2js_extra/runtime_type_to_string1_test.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
+
+import 'package:expect/expect.dart';
+
+class Class<T> {
+  Class();
+}
+
+main() {
+  Expect.equals((Class).toString(), new Class().runtimeType.toString());
+  Expect.equals((Class).toString(), new Class<int>().runtimeType.toString());
+}
diff --git a/tests/corelib_2/corelib_2.status b/tests/corelib_2/corelib_2.status
index 8200941..d09fc30 100644
--- a/tests/corelib_2/corelib_2.status
+++ b/tests/corelib_2/corelib_2.status
@@ -16,6 +16,7 @@
 bigint_from_test: CompileTimeError # Issue 32585
 compare_to2_test: CompileTimeError # invalid test
 int_parse_radix_bad_handler_test: MissingCompileTimeError
+int_try_parse_test: CompileTimeError # Issue 32585
 iterable_element_at_test/static: Pass
 num_sign_test: Crash, Pass # Issue 31768
 
@@ -93,6 +94,7 @@
 
 [ !$strong ]
 cast_test: SkipByDesign # Uses generic method parameters.
+regress_33166_test: SkipByDesign # Not a Dart 1 test
 
 [ $arch == simarmv5te && ($runtime == dart_precompiled || $runtime == vm) ]
 int_parse_radix_test/*: Pass, Slow
@@ -213,7 +215,6 @@
 cast_test: RuntimeError
 error_stack_trace1_test: RuntimeError
 growable_list_test: RuntimeError
-int_parse_radix_test/02: RuntimeError
 integer_to_radix_string_test/01: RuntimeError
 integer_to_radix_string_test/02: RuntimeError
 integer_to_radix_string_test/none: RuntimeError
@@ -222,25 +223,17 @@
 list_concurrent_modify_test: RuntimeError
 main_test: RuntimeError
 nan_infinity_test/01: RuntimeError
-string_split_test/checkedstore: RuntimeError
 symbol_reserved_word_test/03: RuntimeError # Issue 19972, new Symbol('void') should be allowed.
 uri_base_test: Crash # RangeError (index): Invalid value: Valid value range is empty: 0
 
 [ $compiler == dart2js && $fasta ]
-int_from_environment_int64_test: RuntimeError # WontFix: Int not precisely representable in JS
-int_parse_radix_int64_test/01: RuntimeError # WontFix: Int not precisely representable in JS
 int_parse_radix_int64_test/02: RuntimeError # WontFix: Int not precisely representable in JS
-int_parse_radix_int64_test/none: RuntimeError # WontFix: Int not precisely representable in JS
 int_parse_radix_test/01: RuntimeError
-int_parse_radix_test/badTypes: RuntimeError # Issue 33351
-int_parse_radix_test/none: RuntimeError # Issue 33351
-int_try_parse_int64_test: RuntimeError # WontFix: Int not precisely representable in JS
 
 [ $compiler == dart2js && $fasta && $host_checked && $strong ]
 cast_test: RuntimeError
 error_stack_trace1_test: RuntimeError # Issue 12399
 growable_list_test: RuntimeError # Concurrent modifications test always runs
-int_parse_radix_test/02: RuntimeError
 integer_to_radix_string_test/01: RuntimeError
 integer_to_radix_string_test/02: RuntimeError
 integer_to_radix_string_test/none: RuntimeError
@@ -251,7 +244,6 @@
 main_test: RuntimeError
 nan_infinity_test/01: RuntimeError
 regexp/pcre_test: RuntimeError
-string_split_test/checkedstore: RuntimeError # Issue 30548: does not check stores into List<String>
 symbol_reserved_word_test/03: RuntimeError # Issue 19972, new Symbol('void') should be allowed.
 uri_base_test: RuntimeError
 
@@ -261,7 +253,6 @@
 error_stack_trace1_test: RuntimeError # Issue 12399
 growable_list_test: RuntimeError # Concurrent modifications test always runs
 hash_set_test/01: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in (local(_CustomHashSet.#x), local(_CustomHashSet.#)) for j:closure_call(_CustomHashSet__CustomHashSet_closure.call).
-int_parse_radix_test/02: RuntimeError
 integer_to_radix_string_test/01: RuntimeError
 integer_to_radix_string_test/02: RuntimeError
 integer_to_radix_string_test/none: RuntimeError
@@ -273,7 +264,6 @@
 nan_infinity_test/01: RuntimeError
 nsm_invocation_test: RuntimeError # Symbols don't match due to minifiaction.
 regexp/pcre_test: RuntimeError
-string_split_test/checkedstore: RuntimeError # Issue 30548: does not check stores into List<String>
 symbol_operator_test/03: RuntimeError
 symbol_operator_test/none: RuntimeError
 symbol_reserved_word_test/03: RuntimeError # Issue 19972, new Symbol('void') should be allowed.
@@ -292,6 +282,7 @@
 [ $compiler == dartdevc && $runtime != none ]
 bigint_from_test: CompileTimeError # Issue 32585
 compare_to2_test: CompileTimeError # invalid test
+int_try_parse_test: CompileTimeError # Issue 32585
 symbol_operator_test: RuntimeError # Issue 29921
 
 [ $compiler != dartdevc && $compiler != dartdevk && $checked && !$strong ]
diff --git a/tests/corelib_2/int_try_parse_test.dart b/tests/corelib_2/int_try_parse_test.dart
index 3d9d294..282cee52 100644
--- a/tests/corelib_2/int_try_parse_test.dart
+++ b/tests/corelib_2/int_try_parse_test.dart
@@ -99,8 +99,8 @@
   Expect.equals(1, int.tryParse("\n1\n", radix: 2));
   Expect.equals(1, int.tryParse("+1", radix: 2));
 
-  void testFails(String source, int radix) {
-    Expect.isNull(int.tryParse(source, radix: radix));
+  void testFails(String source, int radix, [String message]) {
+    Expect.isNull(int.tryParse(source, radix: radix), message);
   }
 
   for (int i = 2; i < 36; i++) {
@@ -117,6 +117,7 @@
     // At radix 34 and above, "x" is a valid digit.
     testFails("0x10", i);
   }
+
   int digitX = 33;
   Expect.equals(((digitX * 34) + 1) * 34, int.tryParse("0x10", radix: 34));
   Expect.equals(((digitX * 35) + 1) * 35, int.tryParse("0x10", radix: 35));
@@ -126,4 +127,22 @@
   Expect.throwsArgumentError(() => int.tryParse("0", radix: 0));
   Expect.throwsArgumentError(() => int.tryParse("0", radix: -1));
   Expect.throwsArgumentError(() => int.tryParse("0", radix: 37));
+
+  // Regression test for http://dartbug.com/32858
+  Expect.equals(
+      -0x8000000000000000, int.tryParse("-0x8000000000000000"), "-minint");
+
+  // Tests run only with 64-bit integers.
+  if (0x8000000000000000 < 0) {
+    // `int` is 64-bit signed integers.
+    Expect.equals(
+        -0x8000000000000000, int.tryParse("0x8000000000000000"), "0xUnsigned");
+    Expect.equals(-1, int.tryParse("0xFFFFFFFFFFFFFFFF"), "0xUnsigned2");
+
+    Expect.equals(
+        0x8000000000000000 - 1, int.tryParse("0x7FFFFFFFFFFFFFFF"), "maxint");
+    testFails("8000000000000000", 16, "2^63 radix: 16");
+    testFails("FFFFFFFFFFFFFFFF", 16, "maxuint64 radix: 16");
+    testFails("-0xC000000000000000", null, "signed uint64");
+  }
 }
diff --git a/tests/corelib_2/regress_33166_test.dart b/tests/corelib_2/regress_33166_test.dart
index 03f0faf..b97bfd6 100644
--- a/tests/corelib_2/regress_33166_test.dart
+++ b/tests/corelib_2/regress_33166_test.dart
@@ -7,6 +7,26 @@
 
 // Regression test for https://github.com/dart-lang/sdk/issues/33166
 void main() async {
-  var stream = new Stream.fromIterable([1, 2, 3]);
-  Expect.equals(await stream.cast<int>().drain().then((_) => 'Done'), 'Done');
+  // Check that a `null` data handler (like the one passe by `drain`)
+  // doesn't crash.
+  {
+    var stream = new Stream<Object>.fromIterable([1, 2, 3]);
+    Expect.equals(await stream.cast<int>().drain().then((_) => 'Done'), 'Done');
+  }
+
+  // Check that type errors go into stream error channel.
+  {
+    var stream = new Stream<Object>.fromIterable([1, 2, 3]);
+    var errors = [];
+    var done = new Completer();
+    var subscription = stream.cast<String>().listen((value) {
+      Expect.fail("Unexpected value: $value");
+    }, onError: (e, s) {
+      errors.add(e);
+    }, onDone: () {
+      done.complete(null);
+    });
+    await done.future;
+    Expect.equals(3, errors.length);
+  }
 }
diff --git a/tests/html/html.status b/tests/html/html.status
index 647ae2e..0003482 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -17,7 +17,6 @@
 js_typed_interop_default_arg_test/default_value: MissingCompileTimeError # Issue #25759
 localstorage_test: StaticWarning
 mutationobserver_test: StaticWarning
-queryall_test: Fail
 track_element_constructor_test: StaticWarning
 transferables_test: StaticWarning
 typed_arrays_range_checks_test: StaticWarning
diff --git a/tests/language/language.status b/tests/language/language.status
index 6032632..ac2747f 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -475,10 +475,6 @@
 
 [ $runtime == dart_precompiled || $runtime == vm ]
 arithmetic_test: CompileTimeError # Large integer literal
-async_await_test: RuntimeError # sync-async is on by default
-asyncstar_throw_in_catch_test: RuntimeError # sync-async is on by default
-await_nonfuture_test: RuntimeError # sync-async is on by default
-await_not_started_immediately_test: RuntimeError # sync-async is on by default
 bit_operations_test: CompileTimeError # Large integer literal
 deopt_inlined_function_lazy_test: CompileTimeError # Large integer literal
 guess_cid_test: CompileTimeError # Large integer literal
diff --git a/tests/language_2/assert_message_test.dart b/tests/language_2/assert_message_test.dart
index 5b7debb..e35f793 100644
--- a/tests/language_2/assert_message_test.dart
+++ b/tests/language_2/assert_message_test.dart
@@ -78,7 +78,7 @@
   assert(await true, await 2);
 
   // Successful asserts won't await/evaluate message.
-  void unreachable() => throw "unreachable";
+  Future unreachable() => throw "unreachable";
   assert(await true, await unreachable());
 
   try {
diff --git a/tests/language_2/async_and_or_test.dart b/tests/language_2/async_and_or_test.dart
index 6d1e858..6241a70 100644
--- a/tests/language_2/async_and_or_test.dart
+++ b/tests/language_2/async_and_or_test.dart
@@ -1,6 +1,7 @@
 // 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:async";
 import "package:expect/expect.dart";
 import "package:async_helper/async_helper.dart";
 
@@ -34,7 +35,7 @@
   return x;
 }
 
-testEvaluation(void fn()) async {
+testEvaluation(Future<void> fn()) async {
   trace = "";
   await fn();
 }
diff --git a/tests/language_2/language_2.status b/tests/language_2/language_2.status
index ba20d61..227ceb6 100644
--- a/tests/language_2/language_2.status
+++ b/tests/language_2/language_2.status
@@ -45,6 +45,26 @@
 initializer_super_last_test/cc30: MissingCompileTimeError
 initializer_super_last_test/cc31: MissingCompileTimeError
 initializer_super_last_test/cc32: MissingCompileTimeError
+void/return_future_future_or_void_async_error0_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_future_future_or_void_sync_error0_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_future_or_future_or_void_sync_error0_test: MissingCompileTimeError
+void/return_future_or_future_or_void_sync_error1_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_future_or_void_async_error0_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_future_or_void_sync_error0_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_future_or_void_sync_error1_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_future_or_void_sync_error2_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_future_or_void_sync_error3_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_future_void_async_error0_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_future_void_async_error1_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_future_void_async_error2_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_void_async_error0_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_void_async_error1_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_void_async_error2_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_void_async_error3_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_void_async_error4_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_void_sync_error0_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_void_sync_error1_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_void_sync_error2_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
 
 [ $compiler != app_jitk && $compiler != dartk && $compiler != dartkp && $mode == debug && $runtime == vm ]
 built_in_identifier_type_annotation_test/set: Crash # Not supported by legacy VM front-end.
@@ -235,6 +255,7 @@
 vm/type_vm_test/25: MissingCompileTimeError
 vm/type_vm_test/26: MissingCompileTimeError
 vm/type_vm_test/27: MissingCompileTimeError
+void/return_future_future_or_void_sync_error1_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
 void_block_return_test/00: MissingCompileTimeError # Requires strong mode
 void_type_callbacks_test: Skip # Requires strong mode
 void_type_function_types_test: Skip # Requires strong mode
@@ -270,6 +291,25 @@
 implicit_creation/implicit_new_prefix_constructor_generic_named_test: Fail # No support for implicit creation.
 implicit_creation/implicit_new_prefix_constructor_named_test: Fail # No support for implicit creation.
 setter_override2_test/02: MissingCompileTimeError # Issue 14736
+void/return_future_future_or_void_async_error0_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_future_future_or_void_async_error1_test/none: MissingStaticWarning # https://github.com/dart-lang/sdk/issues/33218
+void/return_future_future_or_void_sync_error0_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_future_or_future_or_void_sync_error1_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_future_or_future_or_void_sync_error2_test/none: MissingStaticWarning # https://github.com/dart-lang/sdk/issues/33218
+void/return_future_or_void_async_error0_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_future_or_void_sync_error3_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_future_or_void_sync_error4_test/none: MissingStaticWarning # https://github.com/dart-lang/sdk/issues/33218
+void/return_future_void_async_error2_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_future_void_async_test: StaticWarning # https://github.com/dart-lang/sdk/issues/33218
+void/return_void_async_error0_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_void_async_error1_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_void_async_error2_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_void_async_error3_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_void_async_error4_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_void_async_test: StaticWarning # https://github.com/dart-lang/sdk/issues/33218
+void/return_void_sync_error0_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_void_sync_error1_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+void/return_void_sync_error2_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
 
 [ $compiler == app_jit || $compiler == none ]
 library_env_test/has_no_mirror_support: RuntimeError, OK
diff --git a/tests/language_2/language_2_analyzer.status b/tests/language_2/language_2_analyzer.status
index b22bdfb..a8deafd 100644
--- a/tests/language_2/language_2_analyzer.status
+++ b/tests/language_2/language_2_analyzer.status
@@ -142,6 +142,9 @@
 vm/lazy_deopt_with_exception_test: Pass
 vm/reflect_core_vm_test: CompileTimeError
 vm/regress_27201_test: SkipByDesign # Loads bad library, so will always crash.
+vm/regress_33469_test/01: Crash # http://dartbug.com/33481
+vm/regress_33469_test/02: Crash # http://dartbug.com/33481
+vm/regress_33469_test/03: MissingCompileTimeError # http://dartbug.com/33481
 void_type_override_test/00: MissingCompileTimeError
 void_type_override_test/00b: MissingCompileTimeError
 void_type_override_test/01: MissingCompileTimeError
@@ -579,7 +582,6 @@
 static_getter_no_setter3_test/01: MissingCompileTimeError
 static_initializer_type_error_test: MissingCompileTimeError
 static_setter_get_test/01: MissingCompileTimeError
-string_interpolate_test: StaticWarning
 string_test/01: MissingCompileTimeError
 string_unicode1_negative_test: CompileTimeError
 string_unicode2_negative_test: CompileTimeError
@@ -1023,7 +1025,6 @@
 static_getter_no_setter3_test/01: MissingCompileTimeError
 static_initializer_type_error_test: MissingCompileTimeError
 static_setter_get_test/01: MissingCompileTimeError
-string_interpolate_test: StaticWarning
 string_test/01: MissingCompileTimeError
 string_unicode1_negative_test: CompileTimeError
 string_unicode2_negative_test: CompileTimeError
@@ -1162,7 +1163,6 @@
 regress_30339_test: CompileTimeError
 reify_typevar_static_test/00: MissingCompileTimeError # Issue 28823
 setter_override2_test/02: MissingCompileTimeError # Issue 14736
-string_interpolate_test: CompileTimeError
 string_split_test: CompileTimeError
 string_supertype_checked_test: CompileTimeError
 string_unicode1_negative_test: CompileTimeError
diff --git a/tests/language_2/language_2_dart2js.status b/tests/language_2/language_2_dart2js.status
index fae79c4..ef32963 100644
--- a/tests/language_2/language_2_dart2js.status
+++ b/tests/language_2/language_2_dart2js.status
@@ -760,8 +760,6 @@
 no_main_test/01: CompileTimeError
 no_such_method_mock_test: RuntimeError
 nosuchmethod_forwarding/nosuchmethod_forwarding_arguments_test: RuntimeError
-nosuchmethod_forwarding/nosuchmethod_forwarding_test/05: RuntimeError
-nosuchmethod_forwarding/nosuchmethod_forwarding_test/06: RuntimeError
 null_no_such_method_test: CompileTimeError
 number_identity2_test: RuntimeError
 numbers_test: RuntimeError, OK # non JS number semantics
@@ -796,17 +794,11 @@
 stacktrace_rethrow_error_test/withtraceparameter: RuntimeError # Issue 12698
 stacktrace_rethrow_nonerror_test: RuntimeError # Issue 12698
 stacktrace_test: RuntimeError # Issue 12698
-string_interpolate_test: CompileTimeError
 string_interpolation_and_buffer_test: RuntimeError
 string_split_test: CompileTimeError
 string_supertype_checked_test: CompileTimeError
 super_bound_closure_test/none: CompileTimeError
-super_no_such_method1_test: CompileTimeError
-super_no_such_method2_test: CompileTimeError
-super_no_such_method3_test: CompileTimeError
-super_no_such_method4_test: CompileTimeError
-super_no_such_method5_test: CompileTimeError
-super_operator_index5_test: CompileTimeError
+super_call4_test/01: MissingCompileTimeError
 super_operator_index6_test: CompileTimeError
 super_operator_index7_test: CompileTimeError
 super_operator_index8_test: CompileTimeError
@@ -840,7 +832,6 @@
 type_variable_promotion_test: RuntimeError
 
 [ $compiler == dart2js && $fasta ]
-arithmetic_int64_test: RuntimeError # WontFix: Int not precisely representable in JS
 call_method_as_cast_test/06: RuntimeError
 call_method_implicit_tear_off_implements_function_test/05: RuntimeError
 call_method_implicit_tear_off_implements_function_test/06: RuntimeError
@@ -856,7 +847,6 @@
 function_propagation_test: RuntimeError
 generic_test/01: MissingCompileTimeError # front end does not validate `extends`
 instantiate_tearoff_of_call_test: RuntimeError
-mint_compares_test: RuntimeError # WontFix: Int not precisely representable in JS
 mixin_type_parameter_inference_error_test/none: CompileTimeError
 mixin_type_parameter_inference_previous_mixin_test/01: CompileTimeError
 mixin_type_parameter_inference_previous_mixin_test/02: CompileTimeError
@@ -1209,8 +1199,6 @@
 no_main_test/01: CompileTimeError
 no_such_method_mock_test: RuntimeError
 nosuchmethod_forwarding/nosuchmethod_forwarding_arguments_test: RuntimeError
-nosuchmethod_forwarding/nosuchmethod_forwarding_test/05: RuntimeError
-nosuchmethod_forwarding/nosuchmethod_forwarding_test/06: RuntimeError
 null_no_such_method_test: CompileTimeError
 number_identity2_test: RuntimeError
 numbers_test: RuntimeError, OK # non JS number semantics
@@ -1263,17 +1251,11 @@
 stacktrace_rethrow_error_test/withtraceparameter: RuntimeError # Issue 12698
 stacktrace_rethrow_nonerror_test: RuntimeError # Issue 12698
 stacktrace_test: RuntimeError # Issue 12698
-string_interpolate_test: CompileTimeError
 string_interpolation_and_buffer_test: RuntimeError
 string_split_test: CompileTimeError
 string_supertype_checked_test: CompileTimeError
 super_bound_closure_test/none: CompileTimeError
-super_no_such_method1_test: CompileTimeError
-super_no_such_method2_test: CompileTimeError
-super_no_such_method3_test: CompileTimeError
-super_no_such_method4_test: CompileTimeError
-super_no_such_method5_test: CompileTimeError
-super_operator_index5_test: CompileTimeError
+super_call4_test/01: MissingCompileTimeError
 super_operator_index6_test: CompileTimeError
 super_operator_index7_test: CompileTimeError
 super_operator_index8_test: CompileTimeError
@@ -1725,8 +1707,6 @@
 no_such_method_native_test: RuntimeError
 no_such_method_test: RuntimeError
 nosuchmethod_forwarding/nosuchmethod_forwarding_arguments_test: RuntimeError
-nosuchmethod_forwarding/nosuchmethod_forwarding_test/05: RuntimeError
-nosuchmethod_forwarding/nosuchmethod_forwarding_test/06: RuntimeError
 null_no_such_method_test: CompileTimeError
 number_identity2_test: RuntimeError
 numbers_test: RuntimeError, OK # non JS number semantics
@@ -1779,17 +1759,11 @@
 stacktrace_rethrow_error_test/withtraceparameter: RuntimeError # Issue 12698
 stacktrace_rethrow_nonerror_test: RuntimeError # Issue 12698
 stacktrace_test: RuntimeError # Issue 12698
-string_interpolate_test: CompileTimeError
 string_interpolation_and_buffer_test: RuntimeError
 string_split_test: CompileTimeError
 string_supertype_checked_test: CompileTimeError
 super_bound_closure_test/none: CompileTimeError
-super_no_such_method1_test: CompileTimeError
-super_no_such_method2_test: CompileTimeError
-super_no_such_method3_test: CompileTimeError
-super_no_such_method4_test: CompileTimeError
-super_no_such_method5_test: CompileTimeError
-super_operator_index5_test: CompileTimeError
+super_call4_test/01: MissingCompileTimeError
 super_operator_index6_test: CompileTimeError
 super_operator_index7_test: CompileTimeError
 super_operator_index8_test: CompileTimeError
@@ -1876,7 +1850,6 @@
 const_constructor3_test/04: MissingCompileTimeError # OK - Subtype check uses JS number semantics.
 covariant_subtyping_test: Crash
 ct_const_test: RuntimeError
-nosuchmethod_forwarding/nosuchmethod_forwarding_partial_instantiation_test: RuntimeError
 
 [ $compiler == dart2js && $fasta && !$strong ]
 *: SkipByDesign
diff --git a/tests/language_2/language_2_dartdevc.status b/tests/language_2/language_2_dartdevc.status
index 79b883b..dccaa3a 100644
--- a/tests/language_2/language_2_dartdevc.status
+++ b/tests/language_2/language_2_dartdevc.status
@@ -158,18 +158,13 @@
 reify_typevar_static_test/00: MissingCompileTimeError # Issue 29920
 setter_override2_test/02: MissingCompileTimeError # Issue 14736
 stacktrace_test: RuntimeError # Issue 29920
-string_interpolate_test: CompileTimeError
 string_split_test: CompileTimeError
 string_supertype_checked_test: CompileTimeError
 super_bound_closure_test/none: CompileTimeError
 super_call4_test/01: MissingCompileTimeError
-super_no_such_method1_test: RuntimeError
-super_no_such_method2_test: RuntimeError
-super_no_such_method3_test: RuntimeError
-super_no_such_method4_test: RuntimeError
-super_operator_index5_test: RuntimeError
-super_operator_index7_test: RuntimeError
-super_operator_index8_test: RuntimeError
+super_operator_index5_test: RuntimeError # 33470
+super_operator_index7_test: RuntimeError # 33470
+super_operator_index8_test: RuntimeError # 33470
 switch_case_test/none: CompileTimeError
 syntax_test/60: MissingCompileTimeError
 syntax_test/61: MissingCompileTimeError
@@ -554,19 +549,13 @@
 setter_override_test/01: MissingCompileTimeError
 setter_override_test/02: MissingCompileTimeError
 setter_override_test/03: MissingCompileTimeError
-string_interpolate_test: CompileTimeError # Issue 31533
 string_split_test: CompileTimeError # Issue 31616
 string_supertype_checked_test: CompileTimeError # Issue 31616
 super_bound_closure_test/none: CompileTimeError # Issue 31533
-super_no_such_method1_test: CompileTimeError
-super_no_such_method2_test: CompileTimeError
-super_no_such_method3_test: CompileTimeError
-super_no_such_method4_test: CompileTimeError
-super_no_such_method5_test: CompileTimeError
-super_operator_index5_test: CompileTimeError
-super_operator_index6_test: CompileTimeError
-super_operator_index7_test: CompileTimeError
-super_operator_index8_test: CompileTimeError
+super_call4_test/01: MissingCompileTimeError
+super_operator_index6_test: CompileTimeError # Issue 33498
+super_operator_index7_test: CompileTimeError # Issue 33498
+super_operator_index8_test: CompileTimeError # Issue 33498
 switch_bad_case_test/01: MissingCompileTimeError
 switch_bad_case_test/02: MissingCompileTimeError
 switch_case_test/00: MissingCompileTimeError
diff --git a/tests/language_2/language_2_kernel.status b/tests/language_2/language_2_kernel.status
index a24b3c2..cca8c17 100644
--- a/tests/language_2/language_2_kernel.status
+++ b/tests/language_2/language_2_kernel.status
@@ -146,20 +146,10 @@
 regress_29025_test: CompileTimeError
 regress_29405_test: CompileTimeError
 regress_30339_test: CompileTimeError
-string_interpolate_test: CompileTimeError
 string_interpolation_and_buffer_test: RuntimeError
 string_split_test: CompileTimeError
 string_supertype_checked_test: CompileTimeError
 super_bound_closure_test/none: CompileTimeError
-super_no_such_method1_test: CompileTimeError
-super_no_such_method2_test: CompileTimeError
-super_no_such_method3_test: CompileTimeError
-super_no_such_method4_test: CompileTimeError
-super_no_such_method5_test: CompileTimeError
-super_operator_index5_test: CompileTimeError
-super_operator_index6_test: CompileTimeError
-super_operator_index7_test: CompileTimeError
-super_operator_index8_test: CompileTimeError
 super_test: RuntimeError
 type_alias_equality_test/02: RuntimeError
 type_alias_equality_test/03: RuntimeError
@@ -176,7 +166,6 @@
 type_promotion_functions_test/14: CompileTimeError
 type_promotion_functions_test/none: CompileTimeError
 type_promotion_more_specific_test/04: CompileTimeError
-vm/optimized_guarded_field_isolates_test: RuntimeError
 vm/type_cast_vm_test: RuntimeError
 
 [ $compiler == dartkp ]
@@ -221,6 +210,10 @@
 implicit_creation/implicit_const_not_default_values_test/e5: MissingCompileTimeError
 implicit_creation/implicit_const_not_default_values_test/e7: MissingCompileTimeError
 implicit_creation/implicit_const_not_default_values_test/e8: MissingCompileTimeError
+vm/regress_33469_test/01: MissingCompileTimeError
+vm/regress_33469_test/02: MissingCompileTimeError
+vm/regress_33469_test/03: MissingCompileTimeError
+vm/regress_33469_test/04: MissingCompileTimeError
 
 [ $fasta ]
 abstract_override_adds_optional_args_concrete_subclass_test: MissingCompileTimeError # Issue 32014.
@@ -630,6 +623,9 @@
 mixin_supertype_subclass_test/02: MissingCompileTimeError
 mixin_supertype_subclass_test/05: MissingCompileTimeError
 
+[ $compiler != dart2js && $fasta && $strong ]
+super_call4_test/01: MissingCompileTimeError
+
 [ $compiler == dartk && $mode == debug && $hot_reload ]
 async_star_test/01: Crash
 async_star_test/05: Crash
@@ -657,11 +653,6 @@
 vm/type_vm_test/35: MissingRuntimeError
 vm/type_vm_test/36: MissingRuntimeError
 
-[ $compiler == dartk && $runtime == vm ]
-type_alias_equality_test/02: RuntimeError # Issue 31359
-type_alias_equality_test/03: RuntimeError # Issue 31359
-type_alias_equality_test/04: RuntimeError # Issue 31359
-
 [ $compiler == dartk && $runtime == vm && $checked && $strong ]
 assert_initializer_test/31: MissingCompileTimeError # KernelVM bug: Constant evaluation.
 assert_initializer_test/32: MissingCompileTimeError # KernelVM bug: Constant evaluation.
@@ -832,20 +823,11 @@
 regress_29025_test: CompileTimeError # Issue 31402 (Variable declaration)
 regress_29405_test: CompileTimeError # Issue 31402 (Invocation arguments)
 regress_30339_test: CompileTimeError # Issue 31402 (Variable declaration)
-string_interpolate_test: CompileTimeError # Issue 31533
 string_interpolation_and_buffer_test: RuntimeError # Issue 31402 (Return and yield statements)
 string_split_test: CompileTimeError # Issue 31616
 string_supertype_checked_test: CompileTimeError # Issue 31616
 super_bound_closure_test/none: CompileTimeError # Issue 31533
-super_no_such_method1_test: CompileTimeError
-super_no_such_method2_test: CompileTimeError
-super_no_such_method3_test: CompileTimeError
-super_no_such_method4_test: CompileTimeError
-super_no_such_method5_test: CompileTimeError
-super_operator_index5_test: CompileTimeError
-super_operator_index6_test: CompileTimeError
-super_operator_index7_test: CompileTimeError
-super_operator_index8_test: CompileTimeError
+super_call4_test/01: MissingCompileTimeError
 super_test: Fail, OK
 type_literal_test: RuntimeError
 type_promotion_functions_test/02: CompileTimeError # Issue 31537
@@ -860,7 +842,6 @@
 type_promotion_logical_and_test/01: MissingCompileTimeError
 type_promotion_more_specific_test/04: CompileTimeError # Issue 31533
 vm/closure_memory_retention_test: Skip # KernelVM bug: Hits OOM
-vm/optimized_guarded_field_isolates_test: RuntimeError # Issue 31402 (Variable declaration)
 vm/regress_29145_test: Skip # Issue 29145
 vm/type_cast_vm_test: RuntimeError
 void_block_return_test/00: MissingCompileTimeError
@@ -873,10 +854,6 @@
 [ $compiler == dartk && $system == windows && $strong ]
 ct_const2_test: Fail
 
-[ $compiler == dartk && $hot_reload ]
-vm/causal_async_exception_stack2_test: Crash
-vm/causal_async_exception_stack_test: Crash
-
 [ $compiler == dartk && $strong ]
 assertion_initializer_const_error2_test/cc01: MissingCompileTimeError # Not reporting failed assert() at compile time.
 assertion_initializer_const_error2_test/cc02: MissingCompileTimeError # Not reporting failed assert() at compile time.
@@ -928,6 +905,7 @@
 vm/type_vm_test/36: MissingRuntimeError
 
 [ $compiler == dartkp && $runtime == dart_precompiled ]
+super_no_such_method5_test: RuntimeError # Issue 33517
 type_alias_equality_test/02: RuntimeError # Issue 31359
 type_alias_equality_test/03: RuntimeError # Issue 31359
 type_alias_equality_test/04: RuntimeError # Issue 31359
@@ -1201,20 +1179,10 @@
 setter_override_test/00: MissingCompileTimeError # Issue 32613: override check is missing in CFE.
 setter_override_test/03: MissingCompileTimeError # Issue 32613: override check is missing in CFE.
 stacktrace_demangle_ctors_test: RuntimeError
-string_interpolate_test: CompileTimeError # Issue 31533
 string_interpolation_and_buffer_test: RuntimeError # Issue 31402 (Return and yield statements)
 string_split_test: CompileTimeError # Issue 31616
 string_supertype_checked_test: CompileTimeError # Issue 31616
 super_bound_closure_test/none: CompileTimeError # Issue 31533
-super_no_such_method1_test: CompileTimeError
-super_no_such_method2_test: CompileTimeError
-super_no_such_method3_test: CompileTimeError
-super_no_such_method4_test: CompileTimeError
-super_no_such_method5_test: CompileTimeError
-super_operator_index5_test: CompileTimeError
-super_operator_index6_test: CompileTimeError
-super_operator_index7_test: CompileTimeError
-super_operator_index8_test: CompileTimeError
 super_test: Fail, OK
 syntax_test/00: MissingCompileTimeError
 type_literal_test: RuntimeError
@@ -1232,7 +1200,6 @@
 vm/causal_async_exception_stack2_test: SkipByDesign
 vm/causal_async_exception_stack_test: SkipByDesign
 vm/closure_memory_retention_test: Skip # KernelVM bug: Hits OOM
-vm/optimized_guarded_field_isolates_test: RuntimeError
 vm/optimized_stacktrace_test: Crash
 vm/optimized_stacktrace_test: Skip # Issue 30198
 vm/reflect_core_vm_test: SkipByDesign
@@ -1406,19 +1373,12 @@
 setter_no_getter_test/01: CompileTimeError
 setter_override_test/00: MissingCompileTimeError
 setter_override_test/03: MissingCompileTimeError
-string_interpolate_test: CompileTimeError
 string_split_test: CompileTimeError
 string_supertype_checked_test: CompileTimeError
 super_bound_closure_test/none: CompileTimeError
-super_no_such_method1_test: CompileTimeError
-super_no_such_method2_test: CompileTimeError
-super_no_such_method3_test: CompileTimeError
-super_no_such_method4_test: CompileTimeError
-super_no_such_method5_test: CompileTimeError
-super_operator_index5_test: CompileTimeError
-super_operator_index6_test: CompileTimeError
-super_operator_index7_test: CompileTimeError
-super_operator_index8_test: CompileTimeError
+super_operator_index6_test: CompileTimeError # Issue 33498
+super_operator_index7_test: CompileTimeError # Issue 33498
+super_operator_index8_test: CompileTimeError # Issue 33498
 try_catch_test/01: MissingCompileTimeError
 type_promotion_functions_test/02: CompileTimeError
 type_promotion_functions_test/03: CompileTimeError
@@ -2280,9 +2240,18 @@
 unresolved_top_level_method_test: MissingCompileTimeError
 unresolved_top_level_var_test: MissingCompileTimeError
 
-[ !$strong && ($compiler == dartk || $compiler == dartkp) ]
+[ !$strong && ($compiler == dartk || $compiler == dartkp || $runtime == dart_precompiled || $runtime == vm) ]
 *: SkipByDesign # language_2 is only supported in strong mode.
 
+[ ($compiler == app_jitk || $compiler == dartk || $compiler == dartkp) && ($runtime == dart_precompiled || $runtime == vm) ]
+super_no_such_method4_test: RuntimeError # Issue 33517
+super_operator_index6_test: CompileTimeError # Issue 33498
+super_operator_index7_test: CompileTimeError # Issue 33498
+super_operator_index8_test: CompileTimeError # Issue 33498
+type_alias_equality_test/02: RuntimeError # Issue 31359
+type_alias_equality_test/03: RuntimeError # Issue 31359
+type_alias_equality_test/04: RuntimeError # Issue 31359
+
 [ $compiler == dartk || $compiler == dartkp ]
 generic_function_bounds_test: RuntimeError # Issue 32076
 generic_test/01: MissingCompileTimeError
diff --git a/tests/language_2/string_interpolate_test.dart b/tests/language_2/string_interpolate_test.dart
index 563a434..769ee94 100644
--- a/tests/language_2/string_interpolate_test.dart
+++ b/tests/language_2/string_interpolate_test.dart
@@ -6,13 +6,12 @@
 import "package:expect/expect.dart";
 
 class WhatchamaCallIt {
-
-  String get name => "";
-
   WhatchamaCallIt() {}
 
   String foo() {
     // Test $this and Field name is defined in subclass.
+    dynamic self = this;
+    dynamic name = self.name;
     return "$this and $name";
   }
 }
@@ -20,7 +19,7 @@
 class ThingamaBob extends WhatchamaCallIt {
   ThingamaBob(String s)
       : name = s,
-        super() {}
+        super();
   String name;
   toString() => "Hansel";
 }
@@ -56,7 +55,7 @@
   print(s);
   Expect.equals(r"eins und 1 macht zwei.", s);
 
-  var t = new ThingamaBob("Gretel");
+  dynamic t = new ThingamaBob("Gretel");
   print(t.foo());
   Expect.equals(t.foo(), "Hansel and Gretel");
 
@@ -73,8 +72,8 @@
 void testStringVariants() {
   String latin = "ab\x00\xff";
   String nonLatin = "\u2000\u{10000}\ufeff";
-  Object oLatin = new Stringable(latin);
-  Object oNonLatin = new Stringable(nonLatin);
+  dynamic oLatin = new Stringable(latin);
+  dynamic oNonLatin = new Stringable(nonLatin);
 
   // ASCII.
   Expect.equals(latin * 3, "$latin$latin$latin");
diff --git a/tests/language_2/super_no_such_method1_test.dart b/tests/language_2/super_no_such_method1_test.dart
index 8f9d928..1b990b8 100644
--- a/tests/language_2/super_no_such_method1_test.dart
+++ b/tests/language_2/super_no_such_method1_test.dart
@@ -16,5 +16,5 @@
 }
 
 main() {
-  Expect.equals(42, new B().foo());
+  Expect.equals(87, new B().foo());
 }
diff --git a/tests/language_2/super_no_such_method2_test.dart b/tests/language_2/super_no_such_method2_test.dart
index 836a996..a85c675 100644
--- a/tests/language_2/super_no_such_method2_test.dart
+++ b/tests/language_2/super_no_such_method2_test.dart
@@ -16,5 +16,5 @@
 }
 
 main() {
-  Expect.equals(42, new B().foo);
+  Expect.equals(87, new B().foo);
 }
diff --git a/tests/language_2/super_no_such_method3_test.dart b/tests/language_2/super_no_such_method3_test.dart
index 386749d..16433d8 100644
--- a/tests/language_2/super_no_such_method3_test.dart
+++ b/tests/language_2/super_no_such_method3_test.dart
@@ -8,7 +8,7 @@
 
 class A {
   set foo(int a);
-  
+
   noSuchMethod(im) {
     result = 42;
   }
@@ -24,5 +24,5 @@
 
 main() {
   new B().foo = 0;
-  Expect.equals(42, result);
+  Expect.equals(87, result);
 }
diff --git a/tests/language_2/super_no_such_method4_test.dart b/tests/language_2/super_no_such_method4_test.dart
index 7d3c606..88dd2d7 100644
--- a/tests/language_2/super_no_such_method4_test.dart
+++ b/tests/language_2/super_no_such_method4_test.dart
@@ -17,5 +17,5 @@
 }
 
 main() {
-  Expect.equals(42, new B().foo());
+  Expect.equals(87, new B().foo());
 }
diff --git a/tests/language_2/vm/optimized_guarded_field_isolates_test.dart b/tests/language_2/vm/optimized_guarded_field_isolates_test.dart
index 763dd12..8e68120 100644
--- a/tests/language_2/vm/optimized_guarded_field_isolates_test.dart
+++ b/tests/language_2/vm/optimized_guarded_field_isolates_test.dart
@@ -37,9 +37,9 @@
     test_b(b);
   }
   Expect.equals(3, test_b(b));
-  Future<B> item = receive_port.first;
-  item.then((B value) {
-    Expect.equals("foobar", test_b(value));
+  Future item = receive_port.first;
+  item.then((value) {
+    Expect.equals("foobar", test_b(value as B));
     receive_port.close();
     asyncEnd();
   });
@@ -65,9 +65,9 @@
     test_c(c);
   }
   Expect.equals(null, test_c(c));
-  Future<C> item = receive_port.first;
-  item.then((C value) {
-    Expect.throwsRangeError(() => test_c(value));
+  Future item = receive_port.first;
+  item.then((value) {
+    Expect.throwsRangeError(() => test_c(value as C));
     receive_port.close();
     asyncEnd();
   });
diff --git a/tests/language_2/vm/regress_33469_test.dart b/tests/language_2/vm/regress_33469_test.dart
new file mode 100644
index 0000000..a18a6ad
--- /dev/null
+++ b/tests/language_2/vm/regress_33469_test.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2018, 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.
+
+class X {
+  final x;
+  const X(this.x);
+}
+
+void main() {
+  print(const X(1 << -1).x);  /// 01: compile-time error
+  print(const X(1 >> -1).x);  /// 02: compile-time error
+  print(const X(1 % 0).x);    /// 03: compile-time error
+  print(const X(1 ~/ 0).x);   /// 04: compile-time error
+}
diff --git a/tests/language_2/void/return_future_future_or_void_async_error0_test.dart b/tests/language_2/void/return_future_future_or_void_async_error0_test.dart
new file mode 100644
index 0000000..ea6093a
--- /dev/null
+++ b/tests/language_2/void/return_future_future_or_void_async_error0_test.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2018, 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';
+
+void voidValue = null;
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied async function may not return void
+Future<FutureOr<void>> test() async {
+  return /*@compile-error=unspecified*/ voidValue;
+}
diff --git a/tests/language_2/void/return_future_future_or_void_async_error1_test.dart b/tests/language_2/void/return_future_future_or_void_async_error1_test.dart
new file mode 100644
index 0000000..ed75e7b
--- /dev/null
+++ b/tests/language_2/void/return_future_future_or_void_async_error1_test.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2018, 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';
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied async function may not have an empty return
+Future<FutureOr<void>> test() async {
+  return; //# none: static type warning
+}
diff --git a/tests/language_2/void/return_future_future_or_void_async_test.dart b/tests/language_2/void/return_future_future_or_void_async_test.dart
new file mode 100644
index 0000000..81fb4da
--- /dev/null
+++ b/tests/language_2/void/return_future_future_or_void_async_test.dart
@@ -0,0 +1,58 @@
+// Copyright (c) 2018, 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';
+
+void voidValue = null;
+
+void main() {
+  test1();
+  test2();
+  test3();
+  test4();
+  test5();
+  test6();
+  test7();
+  test8();
+}
+
+// Testing that a block bodied async function may have no return
+Future<FutureOr<void>> test1() async {}
+
+// Testing that a block bodied async function may return Future<void>
+Future<FutureOr<void>> test2([bool b]) async {
+  return null as Future<void>;
+}
+
+// Testing that a block bodied async function may return FutureOr<void>
+Future<FutureOr<void>> test3([bool b]) async {
+  return null as FutureOr<void>;
+}
+
+// Testing that a block bodied async function may return Future<FutureOr<void>>
+Future<FutureOr<void>> test4([bool b]) async {
+  return null as Future<FutureOr<void>>;
+}
+
+// Testing that a block bodied async function may return Future<Future<void>>
+Future<FutureOr<void>> test5([bool b]) async {
+  return null as Future<Future<void>>;
+}
+
+// Testing that a block bodied async function may return FutureOr<Future<void>>
+Future<FutureOr<void>> test6([bool b]) async {
+  return null as FutureOr<Future<void>>;
+}
+
+// Testing that a block bodied async function may return non-void
+// values
+Future<FutureOr<void>> test7() async {
+  return 42;
+}
+
+// Testing that a block bodied async function may return non-void
+// Future values
+Future<FutureOr<void>> test8() async {
+  return new Future.value(42);
+}
diff --git a/tests/language_2/void/return_future_future_or_void_sync_error0_test.dart b/tests/language_2/void/return_future_future_or_void_sync_error0_test.dart
new file mode 100644
index 0000000..70f8c2e
--- /dev/null
+++ b/tests/language_2/void/return_future_future_or_void_sync_error0_test.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2018, 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';
+
+void voidValue = null;
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied function may not return void
+Future<FutureOr<void>> test() {
+  return /*@compile-error=unspecified*/ voidValue;
+}
diff --git a/tests/language_2/void/return_future_future_or_void_sync_error1_test.dart b/tests/language_2/void/return_future_future_or_void_sync_error1_test.dart
new file mode 100644
index 0000000..dd12358
--- /dev/null
+++ b/tests/language_2/void/return_future_future_or_void_sync_error1_test.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2018, 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';
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied function may not have an empty return
+Future<FutureOr<void>> test0() {
+  return; /*@compile-error=unspecified*/
+}
diff --git a/tests/language_2/void/return_future_future_or_void_sync_test.dart b/tests/language_2/void/return_future_future_or_void_sync_test.dart
new file mode 100644
index 0000000..fae59d5
--- /dev/null
+++ b/tests/language_2/void/return_future_future_or_void_sync_test.dart
@@ -0,0 +1,32 @@
+// Copyright (c) 2018, 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';
+
+void voidValue = null;
+
+void main() {
+  test1();
+  test2();
+  test3();
+  test4();
+}
+
+// Testing that a block bodied function may have no return
+Future<FutureOr<void>> test1() {}
+
+// Testing that a block bodied function may return Future<void>
+Future<FutureOr<void>> test2() {
+  return null as Future<void>;
+}
+
+// Testing that a block bodied function may return FutureOr<void>
+Future<FutureOr<void>> test3() {
+  return null as Future<FutureOr<void>>;
+}
+
+// Testing that a block bodied function may return non-void Future values
+Future<FutureOr<void>> test4() {
+  return new Future.value(42);
+}
diff --git a/tests/language_2/void/return_future_or_future_or_void_sync_error1_test.dart b/tests/language_2/void/return_future_or_future_or_void_sync_error1_test.dart
new file mode 100644
index 0000000..25b0df7
--- /dev/null
+++ b/tests/language_2/void/return_future_or_future_or_void_sync_error1_test.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2018, 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';
+
+void voidValue = null;
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied function may not return void
+FutureOr<FutureOr<void>> test() {
+  return /*@compile-error=unspecified*/ voidValue;
+}
diff --git a/tests/language_2/void/return_future_or_future_or_void_sync_error2_test.dart b/tests/language_2/void/return_future_or_future_or_void_sync_error2_test.dart
new file mode 100644
index 0000000..36421f5
--- /dev/null
+++ b/tests/language_2/void/return_future_or_future_or_void_sync_error2_test.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2018, 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';
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied function may have an empty return
+FutureOr<FutureOr<void>> test() {
+  return; //# none: static type warning
+}
diff --git a/tests/language_2/void/return_future_or_future_or_void_sync_test.dart b/tests/language_2/void/return_future_or_future_or_void_sync_test.dart
new file mode 100644
index 0000000..ab95eff
--- /dev/null
+++ b/tests/language_2/void/return_future_or_future_or_void_sync_test.dart
@@ -0,0 +1,50 @@
+// Copyright (c) 2018, 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';
+
+void voidValue = null;
+
+void main() {
+  test1();
+  test2();
+  test3();
+  test4();
+  test5();
+  test6();
+}
+
+// Testing that a block bodied function may have no return
+FutureOr<FutureOr<void>> test1() {}
+
+// Testing that a block bodied function may return Future<void>
+FutureOr<FutureOr<void>> test2() {
+  return null as Future<void>;
+}
+
+// Testing that a block bodied function may return FutureOr<void>
+FutureOr<FutureOr<void>> test3() {
+  return null as FutureOr<void>;
+}
+
+// Testing that a block bodied function may return Future<void>
+FutureOr<FutureOr<void>> test4() {
+  return null as Future<Future<void>>;
+}
+
+// Testing that a block bodied function may return non-void values
+FutureOr<FutureOr<void>> test5() {
+  return 42;
+}
+
+// Testing that a block bodied function may return non-void Future values
+FutureOr<FutureOr<void>> test6() {
+  return new Future.value(42);
+}
+
+// Testing that a block bodied function may return overly nested Future
+// values
+FutureOr<FutureOr<void>> test() {
+  return null as Future<Future<Future<void>>>;
+}
diff --git a/tests/language_2/void/return_future_or_void_async_error0_test.dart b/tests/language_2/void/return_future_or_void_async_error0_test.dart
new file mode 100644
index 0000000..c5115a7
--- /dev/null
+++ b/tests/language_2/void/return_future_or_void_async_error0_test.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2018, 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';
+
+void voidValue = null;
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied function may not return void
+FutureOr<void> test() async {
+  return /*@compile-error=unspecified*/ voidValue;
+}
diff --git a/tests/language_2/void/return_future_or_void_async_test.dart b/tests/language_2/void/return_future_or_void_async_test.dart
new file mode 100644
index 0000000..dfdf1e7
--- /dev/null
+++ b/tests/language_2/void/return_future_or_void_async_test.dart
@@ -0,0 +1,46 @@
+// Copyright (c) 2018, 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';
+
+void voidValue = null;
+
+void main() {
+  test0();
+  test1();
+  test2();
+  test3();
+  test4();
+  test5();
+}
+
+// Testing that a block bodied function may have an empty return
+FutureOr<void> test0() async {
+  return;
+}
+
+// Testing that a block bodied function may have no return
+FutureOr<void> test1() async {}
+
+// Testing that a block bodied function may return Future<void>
+FutureOr<void> test2() async {
+  return null as Future<void>;
+}
+
+// Testing that a block bodied function may return FutureOr<void>
+FutureOr<void> test3() async {
+  return null as FutureOr<void>;
+}
+
+// Testing that a block bodied async function may return non-void
+// values
+FutureOr<void> test4() async {
+  return 42;
+}
+
+// Testing that a block bodied async function may return non-void
+// Future values
+FutureOr<void> test5() async {
+  return new Future.value(42);
+}
diff --git a/tests/language_2/void/return_future_or_void_sync_error3_test.dart b/tests/language_2/void/return_future_or_void_sync_error3_test.dart
new file mode 100644
index 0000000..c921114
--- /dev/null
+++ b/tests/language_2/void/return_future_or_void_sync_error3_test.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2018, 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';
+
+void voidValue = null;
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied function may not return void
+FutureOr<void> test() {
+  return /*@compile-error=unspecified*/ voidValue;
+}
diff --git a/tests/language_2/void/return_future_or_void_sync_error4_test.dart b/tests/language_2/void/return_future_or_void_sync_error4_test.dart
new file mode 100644
index 0000000..53d3b0c
--- /dev/null
+++ b/tests/language_2/void/return_future_or_void_sync_error4_test.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2018, 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';
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied function may not have an empty return
+FutureOr<void> test() {
+  return; //# none: static type warning
+}
diff --git a/tests/language_2/void/return_future_or_void_sync_test.dart b/tests/language_2/void/return_future_or_void_sync_test.dart
new file mode 100644
index 0000000..986bd28
--- /dev/null
+++ b/tests/language_2/void/return_future_or_void_sync_test.dart
@@ -0,0 +1,44 @@
+// Copyright (c) 2018, 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';
+
+void voidValue = null;
+
+void main() {
+  test1();
+  test2();
+  test3();
+  test4();
+  test5();
+  test6();
+}
+
+// Testing that a block bodied function may have no return
+FutureOr<void> test1() {}
+
+// Testing that a block bodied function may return Future<void>
+FutureOr<void> test2() {
+  return null as Future<void>;
+}
+
+// Testing that a block bodied function may return FutureOr<void>
+FutureOr<void> test3() {
+  return null as FutureOr<void>;
+}
+
+// Testing that a block bodied function may return Future<void>
+FutureOr<void> test4() {
+  return null as Future<Future<void>>;
+}
+
+// Testing that a block bodied function may return non-void values
+FutureOr<void> test5() {
+  return 42;
+}
+
+// Testing that a block bodied function may return non-void Future values
+FutureOr<void> test6() {
+  return new Future.value(42);
+}
diff --git a/tests/language_2/void/return_future_void_async_error2_test.dart b/tests/language_2/void/return_future_void_async_error2_test.dart
new file mode 100644
index 0000000..d31263e
--- /dev/null
+++ b/tests/language_2/void/return_future_void_async_error2_test.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2018, 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';
+
+void voidValue = null;
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied async function may return void
+Future<void> test() async {
+  return /*@compile-error=unspecified*/ voidValue;
+}
diff --git a/tests/language_2/void/return_future_void_async_test.dart b/tests/language_2/void/return_future_void_async_test.dart
new file mode 100644
index 0000000..ba3f1f1
--- /dev/null
+++ b/tests/language_2/void/return_future_void_async_test.dart
@@ -0,0 +1,53 @@
+// Copyright (c) 2018, 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';
+
+void voidValue = null;
+
+void main() {
+  test0();
+  test1();
+  test2();
+  test3();
+  test4();
+  test5();
+  test6();
+}
+
+// Testing that a block bodied async function may have an empty return
+Future<void> test0() async {
+  return;
+}
+
+// Testing that a block bodied async function may have no return
+Future<void> test1() async {}
+
+// Testing that a block bodied async function may return Future<void>
+Future<void> test2([bool b]) async {
+  return null as Future<void>;
+}
+
+// Testing that a block bodied async function may return FutureOr<void>
+Future<void> test3([bool b]) async {
+  return null as FutureOr<void>;
+}
+
+// Testing that a block bodied async function may return non-void
+// values
+Future<void> test4() async {
+  return 42;
+}
+
+// Testing that a block bodied async function may return non-void
+// Future values
+Future<void> test5() async {
+  return new Future.value(42);
+}
+
+// Testing that a block bodied async function return nested void
+// Future values
+Future<void> test6() async {
+  return null as Future<Future<void>>;
+}
diff --git a/tests/language_2/void/return_void_async_error0_test.dart b/tests/language_2/void/return_void_async_error0_test.dart
new file mode 100644
index 0000000..cb02f38
--- /dev/null
+++ b/tests/language_2/void/return_void_async_error0_test.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2018, 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.
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied async function may not return non-void non-top
+// values
+void test() async {
+  return /*@compile-error=unspecified*/ 3;
+}
diff --git a/tests/language_2/void/return_void_async_error1_test.dart b/tests/language_2/void/return_void_async_error1_test.dart
new file mode 100644
index 0000000..c685097
--- /dev/null
+++ b/tests/language_2/void/return_void_async_error1_test.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2018, 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.
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied async function may not return non-void Object
+// values
+void test() async {
+  Object a = 3;
+  return /*@compile-error=unspecified*/ a;
+}
diff --git a/tests/language_2/void/return_void_async_error2_test.dart b/tests/language_2/void/return_void_async_error2_test.dart
new file mode 100644
index 0000000..afc2825
--- /dev/null
+++ b/tests/language_2/void/return_void_async_error2_test.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2018, 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';
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied async function may not return non-void Future
+// values
+void test() async {
+  return /*@compile-error=unspecified*/ null as Future<int>;
+}
diff --git a/tests/language_2/void/return_void_async_error3_test.dart b/tests/language_2/void/return_void_async_error3_test.dart
new file mode 100644
index 0000000..27e691b
--- /dev/null
+++ b/tests/language_2/void/return_void_async_error3_test.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2018, 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';
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied async function may not return Future<void>
+void test() async {
+  return /*@compile-error=unspecified*/ null as Future<void>;
+}
diff --git a/tests/language_2/void/return_void_async_error4_test.dart b/tests/language_2/void/return_void_async_error4_test.dart
new file mode 100644
index 0000000..cc1d1db
--- /dev/null
+++ b/tests/language_2/void/return_void_async_error4_test.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2018, 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';
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied async function may not return FutureOr<void>
+void test() async {
+  return /*@compile-error=unspecified*/ null as FutureOr<void>;
+}
diff --git a/tests/language_2/void/return_void_async_test.dart b/tests/language_2/void/return_void_async_test.dart
new file mode 100644
index 0000000..bf10b9c
--- /dev/null
+++ b/tests/language_2/void/return_void_async_test.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2018, 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';
+
+void voidValue = null;
+
+void main() {
+  test0();
+  test1();
+  test2();
+  test3();
+}
+
+// Testing that a block bodied async function may have an empty return
+void test0() async {
+  return;
+}
+
+// Testing that a block bodied async function may have no return
+void test1() async {}
+
+// Testing that a block bodied async function may return void
+void test2() async {
+  return voidValue;
+}
+
+// Testing that a block bodied async function may have both empty returns
+//  and void returning paths
+void test3([bool b]) async {
+  if (b == null) {
+    return;
+  } else {
+    return voidValue;
+  }
+}
diff --git a/tests/language_2/void/return_void_sync_error0_test.dart b/tests/language_2/void/return_void_sync_error0_test.dart
new file mode 100644
index 0000000..5d27b5d
--- /dev/null
+++ b/tests/language_2/void/return_void_sync_error0_test.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2018, 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.
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied function may not return non-void non-top values
+void test() {
+  return /*@compile-error=unspecified*/ 3;
+}
diff --git a/tests/language_2/void/return_void_sync_error1_test.dart b/tests/language_2/void/return_void_sync_error1_test.dart
new file mode 100644
index 0000000..4d212c9
--- /dev/null
+++ b/tests/language_2/void/return_void_sync_error1_test.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2018, 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.
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied function may not return non-void Object values
+void test() {
+  Object a = 3;
+  return /*@compile-error=unspecified*/ a;
+}
diff --git a/tests/language_2/void/return_void_sync_error2_test.dart b/tests/language_2/void/return_void_sync_error2_test.dart
new file mode 100644
index 0000000..389aa15
--- /dev/null
+++ b/tests/language_2/void/return_void_sync_error2_test.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2018, 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';
+
+void main() {
+  test();
+}
+
+// Testing that a block bodied function may not return FutureOr<void>
+void test() {
+  return /*@compile-error=unspecified*/ null as FutureOr<void>;
+}
diff --git a/tests/language_2/void/return_void_sync_test.dart b/tests/language_2/void/return_void_sync_test.dart
new file mode 100644
index 0000000..8c558ba
--- /dev/null
+++ b/tests/language_2/void/return_void_sync_test.dart
@@ -0,0 +1,35 @@
+// Copyright (c) 2018, 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.
+
+void voidValue = null;
+
+void main() {
+  test0();
+  test1();
+  test2();
+  test3();
+}
+
+// Testing that a block bodied function may have an empty return
+void test0() {
+  return;
+}
+
+// Testing that a block bodied function may have no return
+void test1() {}
+
+// Testing that a block bodied function may return void
+void test2() {
+  return voidValue;
+}
+
+// Testing that a block bodied function may have both empty returns
+// and void returning paths
+void test3([bool b]) {
+  if (b == null) {
+    return;
+  } else if (b) {
+    return voidValue;
+  }
+}
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index fc51aee..116c44e 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -367,7 +367,6 @@
 convert/utf85_test: Skip # Pass, Slow Issue 12644.
 
 [ $compiler == app_jit || $compiler == none || $compiler == precompiler ]
-async/async_await_sync_completer_test: RuntimeError # sync-async is on by default.
 async/timer_not_available_test: SkipByDesign # only meant to test when there is no way to implement timer (currently only in d8)
 async/timer_regress22626_test: Pass, RuntimeError # Issue 28254
 mirrors/mirrors_used*: SkipByDesign # Invalid tests. MirrorsUsed does not have a specification, and dart:mirrors is not required to hide declarations that are not covered by any MirrorsUsed annotation.
diff --git a/tests/lib_2/html/element_classes_svg_test.dart b/tests/lib_2/html/element_classes_svg_test.dart
index 67a40e8..e7214a5 100644
--- a/tests/lib_2/html/element_classes_svg_test.dart
+++ b/tests/lib_2/html/element_classes_svg_test.dart
@@ -6,6 +6,7 @@
 import 'dart:html';
 import 'dart:svg' as svg;
 
+import "package:expect/expect.dart";
 import 'package:expect/minitest.dart';
 
 // Test for `querySelectorAll(xxx).classes.op()` where the query returns mixed
@@ -27,11 +28,50 @@
 
 Element elementsContainer;
 
+/// Test top-level querySelectorAll with generics.
+topLevelQuerySelector() {
+  var noElementsTop = querySelectorAll<svg.PathElement>('.no');
+  expect(noElementsTop.length, 0);
+  expect(noElementsTop is List, true);
+
+  var varWeird = querySelectorAll<svg.CircleElement>('path');
+  expect(varWeird.length, 1);
+  expect(varWeird is List, true);
+  expect(varWeird is List<svg.CircleElement>, true);
+  // Runtime error expected 'PathElement' is not a subtype of expected type 'CircleElement'.'
+  Expect.throwsTypeError(() => varWeird[0] is svg.CircleElement);
+
+  var simpleElems = querySelectorAll('circle');
+  expect(simpleElems.length, 1);
+  expect(simpleElems is List, true);
+  expect(simpleElems is List<dynamic>, true);
+  expect(simpleElems is List<svg.CircleElement>, false);
+  expect(simpleElems[0] is svg.CircleElement, true);
+
+  var varElementsFromTop = querySelectorAll<svg.CircleElement>('circle');
+  expect(varElementsFromTop.length, 1);
+  expect(varElementsFromTop is List, true);
+  expect(varElementsFromTop is List<svg.CircleElement>, true);
+  expect(varElementsFromTop[0] is svg.CircleElement, true);
+  expect(varElementsFromTop is List<svg.PathElement>, false);
+  expect(varElementsFromTop[0] is svg.PathElement, false);
+
+  List<svg.CircleElement> elementsFromTop =
+      querySelectorAll<svg.CircleElement>('circle');
+  expect(elementsFromTop is List, true);
+  expect(elementsFromTop is List<svg.CircleElement>, true);
+  expect(elementsFromTop[0] is svg.CircleElement, true);
+  expect(elementsFromTop.length, 1);
+}
+
 ElementList<Element> elementsSetup() {
   elementsContainer = makeElementsContainer();
   document.documentElement.children.add(elementsContainer);
   var elements = document.querySelectorAll('.yes');
   expect(elements.length, 4);
+
+  topLevelQuerySelector();
+
   return elements;
 }
 
diff --git a/tests/lib_2/html/webgl_1_test.dart b/tests/lib_2/html/webgl_1_test.dart
index 58f299b..f156e2f 100644
--- a/tests/lib_2/html/webgl_1_test.dart
+++ b/tests/lib_2/html/webgl_1_test.dart
@@ -38,10 +38,11 @@
         var canvas = new CanvasElement();
         var context =
             canvas.getContext('experimental-webgl') as gl.RenderingContext;
-        var shader = context.createShader(gl.VERTEX_SHADER);
+        var shader = context.createShader(gl.WebGL.VERTEX_SHADER);
         context.shaderSource(shader, 'void main() { }');
         context.compileShader(shader);
-        var success = context.getShaderParameter(shader, gl.COMPILE_STATUS);
+        var success =
+            context.getShaderParameter(shader, gl.WebGL.COMPILE_STATUS);
         expect(success, isTrue);
       });
 
diff --git a/tests/lib_2/lib_2_dart2js.status b/tests/lib_2/lib_2_dart2js.status
index ca9b2be..fed5352 100644
--- a/tests/lib_2/lib_2_dart2js.status
+++ b/tests/lib_2/lib_2_dart2js.status
@@ -535,7 +535,6 @@
 html/domparser_test: Crash # NoSuchMethodError: Class 'JMethod' has no instance getter 'implementation'.
 html/element_add_test: Crash # NoSuchMethodError: Class 'JMethod' has no instance getter 'implementation'.
 html/element_animate_test: Crash # NoSuchMethodError: Class 'JMethod' has no instance getter 'implementation'.
-html/element_classes_svg_test: Crash # NoSuchMethodError: Class 'JMethod' has no instance getter 'implementation'.
 html/element_constructor_1_test: Crash # NoSuchMethodError: Class 'JMethod' has no instance getter 'implementation'.
 html/element_dimensions_test: Crash # NoSuchMethodError: Class 'JMethod' has no instance getter 'implementation'.
 html/element_offset_test: Crash # NoSuchMethodError: Class 'JMethod' has no instance getter 'implementation'.
@@ -779,6 +778,9 @@
 [ $compiler == dart2js && $minified ]
 html/canvas_pixel_array_type_alias_test/types2_runtimeTypeName: Fail, OK # Issue 12605
 
+[ $compiler == dart2js && !$strong ]
+html/element_classes_svg_test: RuntimeError # Expected runtime type check only in strong mode.
+
 [ $compiler == dart2js && ($runtime == chrome || $runtime == ff) ]
 async/slow_consumer2_test: SkipSlow # Times out. Issue 22050
 convert/streamed_conversion_json_utf8_decode_test: SkipSlow # Times out. Issue 22050
diff --git a/tests/lib_2/lib_2_dartdevc.status b/tests/lib_2/lib_2_dartdevc.status
index db43afe..2fdab77 100644
--- a/tests/lib_2/lib_2_dartdevc.status
+++ b/tests/lib_2/lib_2_dartdevc.status
@@ -38,7 +38,6 @@
 html/xhr_test: Skip # Times out. Issue 21527
 
 [ $compiler == dartdevc || $compiler == dartdevk ]
-async/async_await_zones_test: RuntimeError # Issue 29922
 async/future_or_bad_type_test/implements: RuntimeError # Issue 29922
 async/future_or_bad_type_test/none: RuntimeError # Issue 29922
 async/future_test: RuntimeError # Issue 29922
diff --git a/tests/lib_2/lib_2_kernel.status b/tests/lib_2/lib_2_kernel.status
index bef13c5..e8a160c 100644
--- a/tests/lib_2/lib_2_kernel.status
+++ b/tests/lib_2/lib_2_kernel.status
@@ -46,6 +46,9 @@
 mirrors/reflected_type_test/03: MissingCompileTimeError
 mirrors/variable_is_const_test/01: MissingCompileTimeError
 
+[ $arch == simarm64 && $compiler == dartk && $strong ]
+isolate/mint_maker_test: Timeout # Please triage.
+
 [ $arch == simdbc64 && $compiler == dartk && $mode == debug && $runtime == vm && $strong ]
 isolate/isolate_complex_messages_test: Crash # http://dartbug.com/33128
 
@@ -198,15 +201,11 @@
 isolate/ping_pause_test: Skip # Issues 32137 and 32138
 
 [ $compiler == dartk && $hot_reload ]
-async/stream_state_nonzero_timer_test: Crash
-async/stream_subscription_as_future_test: Crash
-async/stream_subscription_cancel_test: Crash
 isolate/message4_test: Pass, Timeout
-isolate/spawn_uri_multi_test/01: Crash
-isolate/spawn_uri_multi_test/none: Crash
 
 [ $compiler == dartk && $hot_reload_rollback ]
 isolate/illegal_msg_function_test: Skip # Timeout
+isolate/message4_test: Pass, Timeout
 isolate/pause_test: Skip # Timeout
 
 [ $compiler == dartk && $strong ]
diff --git a/tests/standalone/app_snapshot_share_test.dart b/tests/standalone/app_snapshot_share_test.dart
index 3e80c75..65b95f5 100644
--- a/tests/standalone/app_snapshot_share_test.dart
+++ b/tests/standalone/app_snapshot_share_test.dart
@@ -30,6 +30,7 @@
 
   var exec = "$buildDir/dart_bootstrap";
   args = new List<String>();
+  args.add("--no-preview-dart-2");
   args.add("--deterministic");
   args.add("--use-blobs");
   args.add("--snapshot-kind=app-aot");
@@ -48,6 +49,7 @@
 
   exec = "$buildDir/dart_bootstrap";
   args = new List<String>();
+  args.add("--no-preview-dart-2");
   args.add("--deterministic");
   args.add("--use-blobs");
   args.add("--snapshot-kind=app-aot");
@@ -75,6 +77,7 @@
 
   exec = "$buildDir/dart_precompiled_runtime";
   args = new List<String>();
+  args.add("--no-preview-dart-2");
   args.add("--shared-blobs=$snapshot1Path");
   args.add(snapshot2Path);
   args.add("--child");
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index 5444e3d..2ee8956 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -23,6 +23,9 @@
 [ $runtime == dart_precompiled ]
 verbose_gc_to_bmu_test: Skip # These tests attempt to spawn another script using the precompiled runtime.
 
+[ $runtime == vm ]
+verbose_gc_to_bmu_test: Skip # spawns a process which runs in Dart2 mode.
+
 [ $system == windows ]
 io/sleep_test: Pass, Fail # Issue 25757
 verbose_gc_to_bmu_test: Skip
diff --git a/tests/standalone_2/app_snapshot_share_test.dart b/tests/standalone_2/app_snapshot_share_test.dart
index f623875..6603417 100644
--- a/tests/standalone_2/app_snapshot_share_test.dart
+++ b/tests/standalone_2/app_snapshot_share_test.dart
@@ -27,68 +27,82 @@
       .uri
       .resolve("../../tests/standalone_2/app_snapshot_share_test.dart")
       .toFilePath();
+  final scriptPathDill = tempDir.uri.resolve('app.dill').toFilePath();
 
-  var exec = "$buildDir/dart_bootstrap";
-  args = new List<String>();
-  args.add("--deterministic");
-  args.add("--use-blobs");
-  args.add("--snapshot-kind=app-aot");
-  args.add("--snapshot=$snapshot1Path");
-  args.add(scriptPath);
-  print("+ $exec $args");
-  var result = Process.runSync(exec, args);
+  try {
+    args = <String>[
+      '--aot',
+      '--strong-mode',
+      '--sync-async',
+      '--platform=$buildDir/vm_platform_strong.dill',
+      '-o',
+      scriptPathDill,
+      '--entry-points',
+      '$buildDir/gen/runtime/bin/precompiler_entry_points.json',
+      '--entry-points',
+      'pkg/vm/lib/transformations/type_flow/entry_points_extra.json',
+      '--entry-points',
+      'pkg/vm/lib/transformations/type_flow/entry_points_extra_standalone.json',
+      scriptPath,
+    ];
+    runSync("pkg/vm/tool/gen_kernel${Platform.isWindows ? '.bat' : ''}", args);
+
+    args = <String>[
+      "--strong",
+      "--deterministic",
+      "--use-blobs",
+      "--snapshot-kind=app-aot",
+      "--snapshot=$snapshot1Path",
+      scriptPathDill,
+    ];
+    runSync("$buildDir/dart_bootstrap", args);
+
+    args = <String>[
+      "--strong",
+      "--deterministic",
+      "--use-blobs",
+      "--snapshot-kind=app-aot",
+      "--snapshot=$snapshot2Path",
+      "--shared-blobs=$snapshot1Path",
+      scriptPathDill,
+    ];
+    runSync("$buildDir/dart_bootstrap", args);
+
+    var sizeWithoutSharing = new File(snapshot1Path).statSync().size;
+    var deltaWhenSharing = new File(snapshot2Path).statSync().size;
+    print("sizeWithoutSharing: ${sizeWithoutSharing.toString().padLeft(8)}");
+    print("deltaWhenSharing:   ${deltaWhenSharing.toString().padLeft(8)}");
+    if (deltaWhenSharing >= sizeWithoutSharing) {
+      throw "Sharing did not shrink size";
+    }
+
+    args = <String>[
+      "--strong",
+      "--shared-blobs=$snapshot1Path",
+      snapshot2Path,
+      "--child",
+    ];
+    final result = runSync("$buildDir/dart_precompiled_runtime", args);
+    if (!result.stdout.contains("Hello, sharing world!")) {
+      throw "Missing output";
+    }
+  } finally {
+    tempDir.deleteSync(recursive: true);
+  }
+}
+
+ProcessResult runSync(String executable, List<String> args) {
+  print("+ $executable ${args.join(' ')}");
+
+  final result = Process.runSync(executable, args);
   print("Exit code: ${result.exitCode}");
   print("stdout:");
   print(result.stdout);
   print("stderr:");
   print(result.stderr);
+
   if (result.exitCode != 0) {
     throw "Bad exit code";
   }
-
-  exec = "$buildDir/dart_bootstrap";
-  args = new List<String>();
-  args.add("--deterministic");
-  args.add("--use-blobs");
-  args.add("--snapshot-kind=app-aot");
-  args.add("--snapshot=$snapshot2Path");
-  args.add("--shared-blobs=$snapshot1Path");
-  args.add(scriptPath);
-  print("+ $exec $args");
-  result = Process.runSync(exec, args);
-  print("Exit code: ${result.exitCode}");
-  print("stdout:");
-  print(result.stdout);
-  print("stderr:");
-  print(result.stderr);
-  if (result.exitCode != 0) {
-    throw "Bad exit code";
-  }
-
-  var sizeWithoutSharing = new File(snapshot1Path).statSync().size;
-  var deltaWhenSharing = new File(snapshot2Path).statSync().size;
-  print("sizeWithoutSharing: $sizeWithoutSharing");
-  print("deltaWhenSharing: $deltaWhenSharing");
-  if (deltaWhenSharing >= sizeWithoutSharing) {
-    throw "Sharing did not shrink size";
-  }
-
-  exec = "$buildDir/dart_precompiled_runtime";
-  args = new List<String>();
-  args.add("--shared-blobs=$snapshot1Path");
-  args.add(snapshot2Path);
-  args.add("--child");
-  print("+ $exec $args");
-  result = Process.runSync(exec, args);
-  print("Exit code: ${result.exitCode}");
-  print("stdout:");
-  print(result.stdout);
-  print("stderr:");
-  print(result.stderr);
-  if (result.exitCode != 0) {
-    throw "Bad exit code";
-  }
-  if (!result.stdout.contains("Hello, sharing world!")) {
-    throw "Missing output";
-  }
+  return result;
 }
diff --git a/tests/standalone_2/io/file_write_only_test.dart b/tests/standalone_2/io/file_write_only_test.dart
index a4e571e..b2ed67d 100644
--- a/tests/standalone_2/io/file_write_only_test.dart
+++ b/tests/standalone_2/io/file_write_only_test.dart
@@ -10,7 +10,7 @@
 import "package:async_helper/async_helper.dart";
 import "package:expect/expect.dart";
 
-Future withTempDir(String prefix, void test(Directory dir)) async {
+Future withTempDir(String prefix, Future<void> test(Directory dir)) async {
   var tempDir = Directory.systemTemp.createTempSync(prefix);
   try {
     await test(tempDir);
diff --git a/tests/standalone_2/io/process_detached_script.dart b/tests/standalone_2/io/process_detached_script.dart
index 6e907598..7811726 100644
--- a/tests/standalone_2/io/process_detached_script.dart
+++ b/tests/standalone_2/io/process_detached_script.dart
@@ -12,7 +12,7 @@
 
   // If an argument 'echo' is passed echo stdin to stdout and stderr.
   if (args.length == 1 && args[0] == 'echo') {
-    stdin.fold([], (p, e) => p..addAll(e)).then((message) {
+    stdin.fold(<int>[], (p, e) => p..addAll(e)).then((message) {
       stdout.add(message);
       stderr.add(message);
       stdout.close();
diff --git a/tests/standalone_2/io/secure_unauthorized_test.dart b/tests/standalone_2/io/secure_unauthorized_test.dart
index 7f4285c..2ea739b 100644
--- a/tests/standalone_2/io/secure_unauthorized_test.dart
+++ b/tests/standalone_2/io/secure_unauthorized_test.dart
@@ -40,9 +40,10 @@
   var clientScript = localFile('secure_unauthorized_client.dart');
 
   Future clientProcess(int port) {
-    return Process
-        .run(Platform.executable, [clientScript, port.toString()]).then(
-            (ProcessResult result) {
+    List<String> args = new List<String>.from(Platform.executableArguments);
+    args.add(clientScript);
+    args.add(port.toString());
+    return Process.run(Platform.executable, args).then((ProcessResult result) {
       if (result.exitCode != 0 || !result.stdout.contains('SUCCESS')) {
         print("Client failed");
         print("  stdout:");
diff --git a/tests/standalone_2/io/test_extension_fail_test.dart b/tests/standalone_2/io/test_extension_fail_test.dart
index ebe3a46..262d1db 100644
--- a/tests/standalone_2/io/test_extension_fail_test.dart
+++ b/tests/standalone_2/io/test_extension_fail_test.dart
@@ -88,7 +88,7 @@
       }
     }
   } finally {
-    await tempDirectory.deleteSync(recursive: true);
+    tempDirectory.deleteSync(recursive: true);
   }
 }
 
diff --git a/tests/standalone_2/standalone_2.status b/tests/standalone_2/standalone_2.status
index 1475337..77fcc36 100644
--- a/tests/standalone_2/standalone_2.status
+++ b/tests/standalone_2/standalone_2.status
@@ -15,6 +15,7 @@
 package/scenarios/empty_packages_file/empty_packages_file_option_test: Fail, OK # CompileTimeErrors intentionally
 package/scenarios/invalid/invalid_package_name_test: RuntimeError, CompileTimeError # Errors intentionally
 package/scenarios/invalid/same_package_twice_test.dart: RuntimeError, CompileTimeError # Errors intentionally
+package/scenarios/packages_dir_only/packages_dir_only_test: Fail # Confirm this no longer works for now. TODO(mfairhurst): delete this test.
 package/scenarios/packages_file_strange_formatting/empty_package_dir_test: Fail, OK # CompileTimeErrors intentionally
 packages_file_test: Skip # Issue 26715
 packages_file_test/none: Skip # contains no tests.
@@ -74,11 +75,6 @@
 [ $compiler != app_jitk && $compiler != dart2analyzer && $compiler != dartdevc && $compiler != dartk && $compiler != dartkp && $runtime != none && $strong ]
 float_array_static_test: MissingCompileTimeError
 
-# We want to confirm that this behavior no longer works. Works in kernel though.
-# TODO(mfairhurst) delete this test.
-[ $compiler != dartk && !$fasta ]
-package/scenarios/packages_dir_only/packages_dir_only_test: Fail
-
 [ $compiler == none && $runtime == vm && $system == fuchsia ]
 *: Skip # Not yet triaged.
 
@@ -95,6 +91,12 @@
 [ $runtime == none && !$strong ]
 io/process_exit_negative_test: Fail, OK # Must be run to exit with non-zero exit code.
 
+# These tests spawn a process that imports using a http URL, since
+# spawned processes now run in Dart2 mode the tests fail as http URL imports
+# is not supported by the front end.
+[ $runtime == vm && ($compiler == app_jit || $compiler == none) ]
+http_launch_test: RuntimeError # Issue 33388
+
 [ $system == linux && ($runtime == flutter || $runtime == vm) ]
 io/http_basic_test: Pass, Slow, Timeout # Issue 28046, These tests might be slow on an opt counter threshold bot. They also time out on the bot occasionally => flaky test issue 28046
 io/http_launch_test: Pass, Slow, Timeout # Issue 28046, These tests might be slow on an opt counter threshold bot. They also time out on the bot occasionally => flaky test issue 28046
@@ -174,6 +176,10 @@
 deferred_transitive_import_error_test: Crash
 fragmentation_test: Pass, Crash # Issue 31421
 io/addlatexhash_test: Pass, Crash # Issue 31252
+io/non_utf8_directory_test: Skip # Issue 33519
+io/non_utf8_file_test: Skip # Issue 33519
+io/non_utf8_link_test: Skip # Issue 33519
+io/non_utf8_output_test: Skip # Issue 33519
 io/raw_datagram_read_all_test: Pass, Fail # Timing dependent.
 io/skipping_dart2js_compilations_test: Pass, Slow # Slow.
 io/test_runner_test: Pass, Slow # Slow.
diff --git a/tests/standalone_2/standalone_2_kernel.status b/tests/standalone_2/standalone_2_kernel.status
index 347c7ad..2dbeff7 100644
--- a/tests/standalone_2/standalone_2_kernel.status
+++ b/tests/standalone_2/standalone_2_kernel.status
@@ -11,6 +11,7 @@
 # to add them.
 
 [ $compiler == app_jitk ]
+http_launch_test: RuntimeError # Issue 33388
 io/directory_test: RuntimeError
 io/file_error_test: RuntimeError
 io/file_test: RuntimeError
@@ -23,20 +24,12 @@
 io/http_redirect_test: RuntimeError
 io/http_reuse_server_port_test: RuntimeError
 io/http_server_response_test: RuntimeError
-io/namespace_test: RuntimeError
-io/platform_resolved_executable_test/00: RuntimeError
-io/platform_resolved_executable_test/01: RuntimeError
-io/platform_resolved_executable_test/02: RuntimeError
-io/platform_resolved_executable_test/03: RuntimeError
-io/platform_resolved_executable_test/04: RuntimeError
-io/platform_resolved_executable_test/05: RuntimeError
 io/platform_test: RuntimeError
 io/regress_10026_test: RuntimeError
 io/secure_socket_argument_test: CompileTimeError
 io/socket_upgrade_to_secure_test: RuntimeError
 io/test_extension_fail_test: RuntimeError
 io/test_extension_test: RuntimeError
-io/test_runner_test: RuntimeError
 io/web_socket_pipe_test: RuntimeError
 io/web_socket_protocol_processor_test: CompileTimeError
 io/zlib_test: RuntimeError
@@ -58,7 +51,6 @@
 
 [ $compiler == app_jitk && ($mode == debug || $mode == release) ]
 dart_developer_disabled_env_test: RuntimeError
-io/code_collection_test: RuntimeError
 
 [ $compiler == dartk && $mode == debug && $runtime == vm && $strong ]
 io/file_lock_test: Slow, Pass
@@ -73,8 +65,8 @@
 io/http_basic_test: Crash
 io/web_socket_ping_test: Crash, Pass
 
-# ===== dartk + vm status lines =====
 [ $compiler == dartk && $runtime == vm && $strong ]
+http_launch_test: RuntimeError # Issue 33388
 io/http_client_request_test: Pass, Timeout
 io/http_compression_test: RuntimeError
 io/platform_resolved_executable_test/03: Pass, RuntimeError
@@ -93,10 +85,6 @@
 
 [ $compiler == dartk && $system == windows && $strong ]
 io/compile_all_test: Pass, Fail # Possibly related to issue 32373
-io/file_stream_test: RuntimeError # Issue 31904
-io/platform_test: RuntimeError # Issue 31904
-io/process_non_ascii_test: RuntimeError # Issue 31904
-io/regress_7679_test: RuntimeError # Issue 31904
 map_insert_remove_oom_test: Skip # Heap limit too low.
 
 [ $compiler == dartk && $hot_reload ]
@@ -110,12 +98,15 @@
 # are to be triaged.  Isolate tests are skipped on purpose due to the usage of
 # batch mode.
 [ $compiler == dartk && $strong && ($arch == simarm || $arch == simarm64 || $arch == simdbc64) ]
+fragmentation_test: Timeout, Pass
+io/dart_std_io_pipe_test: Timeout, Pass
 io/directory_list_sync_test: Timeout, Pass # Please triage.
 io/file_blocking_lock_test: Pass, Crash # Please triage.
 io/file_lock_test: Slow, Pass
 io/platform_resolved_executable_test/01: Pass, RuntimeError # Issue 32134
 io/platform_resolved_executable_test/05: Pass, RuntimeError # Issue 32134
 io/platform_test: RuntimeError # Please triage.
+io/process_sync_test: Timeout, Pass
 io/test_extension_fail_test: RuntimeError # Please traige.
 io/test_extension_test: RuntimeError # Please traige.
 map_insert_remove_oom_test: Skip # Heap limit too low.
@@ -134,9 +125,9 @@
 io/http_auth_test: Skip # Timeout
 io/http_proxy_advanced_test: Skip # Timeout
 io/http_read_test: Skip # Timeout
-io/non_utf8_directory_test: Crash
-io/non_utf8_file_test: Crash
-io/non_utf8_link_test: Crash
+io/non_utf8_directory_test: Pass, Timeout
+io/non_utf8_file_test: Pass, Timeout
+io/non_utf8_link_test: Pass, Timeout
 io/pipe_server_test: Skip # Timeout
 io/socket_close_test: Skip # Timeout
 io/socket_many_connections_test: Skip # Timeout
@@ -147,6 +138,7 @@
 
 [ $compiler == dartkp && $mode == debug && $runtime == dart_precompiled && $strong ]
 io/compile_all_test: Crash # Issue 32373
+io/directory_test: Crash # Issue 33475
 io/raw_socket_test: Crash
 io/skipping_dart2js_compilations_test: Crash
 io/socket_exception_test: Pass, Crash
@@ -208,3 +200,6 @@
 
 [ $fasta && !$strong ]
 regress_29350_test/none: MissingCompileTimeError
+
+[ !$strong && ($compiler == dartk || $compiler == dartkp || $runtime == dart_precompiled || $runtime == vm) ]
+*: SkipByDesign # standalone_2 is only supported in strong mode.
diff --git a/tests/standalone_2/standalone_2_precompiled.status b/tests/standalone_2/standalone_2_precompiled.status
index bbaa92a..4d15ac5 100644
--- a/tests/standalone_2/standalone_2_precompiled.status
+++ b/tests/standalone_2/standalone_2_precompiled.status
@@ -46,7 +46,6 @@
 io/stdio_nonblocking_test: Skip
 io/test_extension_fail_test: Skip
 io/test_extension_test: Skip
-io/test_runner_test: RuntimeError # Issue 33168
 io/windows_environment_test: Skip
 
 [ $arch == arm && $mode == release && $runtime == dart_precompiled && $system == android ]
diff --git a/tests/standalone_2/standalone_2_vm.status b/tests/standalone_2/standalone_2_vm.status
index 03479a7..729da33 100644
--- a/tests/standalone_2/standalone_2_vm.status
+++ b/tests/standalone_2/standalone_2_vm.status
@@ -22,6 +22,9 @@
 io/test_runner_test: RuntimeError # Issue 33168
 regress_26031_test: Skip # Platform.resolvedExecutable
 
+[ $runtime == vm ]
+io/test_runner_test: Skip # Spawns a process which runs in Dart2 mode.
+
 [ $system == android ]
 io/file_stat_test: Skip # Issue 26376
 io/file_system_watcher_test: Skip # Issue 26376
@@ -84,9 +87,20 @@
 io/file_constructor_test: RuntimeError
 
 [ $runtime == vm && ($arch == arm || $arch == arm64) ]
+io/code_collection_test: Timeout, Pass
+io/dart_std_io_pipe_test: Timeout, Pass
 io/file_input_stream_test: Skip # Issue 26109
 io/file_stream_test: Skip # Issue 26109
 io/file_typed_data_test: Skip # Issue 26109
+io/http_client_stays_alive_test: RuntimeError
+io/process_sync_test: Timeout, Pass
+
+[ $runtime == vm && ($arch == simarm || $arch == simarm64) ]
+io/code_collection_test: Timeout, Pass
+io/dart_std_io_pipe_test: Timeout, Pass
+io/http_client_stays_alive_test: Skip # Spawns process in Dart2 mode.
+io/process_sync_test: Timeout, Pass
+io/skipping_dart2js_compilations_test: Skip # Spawns process in Dart2 mode.
 
 [ $arch == simdbc || $arch == simdbc64 ]
 full_coverage_test: Skip # TODO(vegorov) SIMDBC interpreter doesn't support coverage yet.
diff --git a/third_party/pkg_tested/pkg_tested.status b/third_party/pkg_tested/pkg_tested.status
index 18998fa..2340170 100644
--- a/third_party/pkg_tested/pkg_tested.status
+++ b/third_party/pkg_tested/pkg_tested.status
@@ -14,6 +14,10 @@
 pub/test/serve/web_socket/url_to_asset_id_test: Pass, Slow
 pub/test/transformer/loads_a_diamond_transformer_dependency_graph_test: Pass, Slow
 
+[ $runtime == vm ]
+dart_style/test/command_line_test: Skip # Issue 33473
+http_io/test/http_client_stays_alive_test: Skip # Issue 33472
+
 [ $browser ]
 dart_style/*: SkipByDesign
 pub/*: SkipByDesign
diff --git a/tools/VERSION b/tools/VERSION
index ee58962..cb38d48 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 0
 PATCH 0
-PRERELEASE 63
+PRERELEASE 64
 PRERELEASE_PATCH 0
diff --git a/tools/addlatexhash.dart b/tools/addlatexhash.dart
index cbdc349..c93f039 100755
--- a/tools/addlatexhash.dart
+++ b/tools/addlatexhash.dart
@@ -237,7 +237,7 @@
 
 /// Returns true iff [line] does not end a block of lines that gets
 /// a hash value.
-isntHashBlockTerminator(line) => !isSectioningCommand(line);
+bool isntHashBlockTerminator(line) => !isSectioningCommand(line);
 
 /// Returns the label text part from [line], based on the assumption
 /// that isHashLabel(line) returns true.
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index 2007e17..3e2549b 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -1615,6 +1615,9 @@
     },
     {
       "builders": ["analyzer-analysis-server-linux"],
+      "meta": {
+        "description": "Analyze analyzer related packages."
+      },
       "steps": [
         {
           "name": "build dart",
@@ -1622,23 +1625,93 @@
           "arguments": ["create_sdk"]
         },
         {
-          "name": "Analyze analysis_server",
+          "name": "Analyze pkg/analysis_server/",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
           "arguments": ["--no-hints","pkg/analysis_server"]
         },
         {
-          "name": "Analyze analysis_server",
+          "name": "Analyze pkg/analyzer/",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
           "arguments": ["--no-hints","pkg/analyzer"]
         },
         {
-          "name": "Analyze analysis_server",
+          "name": "Analyze pkg/analyzer_plugin/",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
           "arguments": ["--no-hints","pkg/analyzer_plugin"]
         }
       ]
     },
     {
+      "builders": ["analyzer-use-fasta-parser-linux"],
+      "meta": {
+        "description": "Run the analyzer using the Fasta parser."
+      },
+      "steps": [
+        {
+          "name": "build dart",
+          "script": "tools/build.py",
+          "arguments": ["create_sdk"]
+        },
+        {
+          "name": "analyze pkg/analysis_server/",
+          "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
+          "arguments": [
+            "--no-hints",
+            "--use-fasta-parser",
+            "pkg/analysis_server"
+          ]
+        },
+        {
+          "name": "analyze pkg/analyzer/",
+          "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
+          "arguments": [
+            "--no-hints",
+            "--use-fasta-parser",
+            "pkg/analyzer"
+          ]
+        },
+        {
+          "name": "analyze pkg/analyzer_cli/lib/",
+          "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
+          "arguments": [
+            "--no-hints",
+            "--use-fasta-parser",
+            "pkg/analyzer_cli/lib"
+          ]
+        },
+        {
+          "name": "run analyzer unit tests",
+          "arguments": [
+            "--builder-tag=analyzer_use_fasta",
+            "--compiler=none",
+            "--use-sdk",
+            "--vm-options=-DuseFastaParser=true",
+            "pkg/analyzer/"
+          ]
+        },
+        {
+          "name": "run analysis server plugin tests",
+          "arguments": [
+            "--builder-tag=analyzer_use_fasta",
+            "--compiler=none",
+            "--use-sdk",
+            "--vm-options=-DuseFastaParser=true",
+            "pkg/analyzer_plugin/"
+          ]
+        },
+        {
+          "name": "run analysis server unit tests",
+          "arguments": [
+            "--builder-tag=analyzer_use_fasta",
+            "--compiler=none",
+            "--use-sdk",
+            "--vm-options=-DuseFastaParser=true",
+            "pkg/analysis_server/"
+          ]
+        }
+      ]
+    },
+    {
       "builders": ["pkg-linux-release","pkg-win-release","pkg-mac-release"],
       "meta": {
         "description": "This configuration is used by the pkg builders."
diff --git a/tools/bots/try_benchmarks.sh b/tools/bots/try_benchmarks.sh
index 919e1bb..b7c5551 100755
--- a/tools/bots/try_benchmarks.sh
+++ b/tools/bots/try_benchmarks.sh
@@ -209,7 +209,6 @@
 }
 EOF
     out/ReleaseIA32/dart --profile-period=10000 --packages=.packages hello.dart
-    out/ReleaseIA32/dart --profile-period=10000 --packages=.packages --checked hello.dart
     out/ReleaseIA32/dart-sdk/bin/dart2js --packages=.packages --out=out.js -m hello.dart
     third_party/d8/linux/ia32/d8 --stack_size=1024 sdk/lib/_internal/js_runtime/lib/preambles/d8.js out.js
     out/ReleaseIA32/dart-sdk/bin/dart2js --checked --packages=.packages --out=out.js -m hello.dart
@@ -224,7 +223,6 @@
     out/ReleaseIA32/dart pkg/front_end/tool/perf.dart scan hello.dart
     out/ReleaseIA32/dart pkg/front_end/tool/fasta_perf.dart --legacy kernel_gen_e2e hello.dart
     out/ReleaseIA32/dart pkg/front_end/tool/fasta_perf.dart kernel_gen_e2e hello.dart
-    out/ReleaseIA32/dart_bootstrap --parse_all --compiler_stats hello.dart
     out/ReleaseIA32/dart pkg/front_end/tool/perf.dart linked_summarize hello.dart
     out/ReleaseIA32/dart pkg/front_end/tool/perf.dart prelinked_summarize hello.dart
     out/ReleaseIA32/dart pkg/front_end/tool/fasta_perf.dart scan hello.dart
@@ -402,19 +400,13 @@
 }
 EOF
     out/ReleaseX64/dart --profile-period=10000 --packages=.packages hello.dart
-    out/ReleaseX64/dart --profile-period=10000 --packages=.packages --checked hello.dart
-    out/ReleaseX64/dart_bootstrap --packages=.packages --use-blobs --snapshot-kind=app-aot --snapshot=blob.bin hello.dart
-    out/ReleaseX64/dart_precompiled_runtime --profile-period=10000 blob.bin
-    DART_CONFIGURATION=ReleaseX64 pkg/vm/tool/dart2 --profile-period=10000 --packages=.packages hello.dart
     DART_CONFIGURATION=ReleaseX64 pkg/vm/tool/precompiler2 --packages=.packages hello.dart blob.bin
     DART_CONFIGURATION=ReleaseX64 pkg/vm/tool/dart_precompiled_runtime2 --profile-period=10000 blob.bin
     out/ReleaseSIMDBC64/dart --profile-period=10000 --packages=.packages hello.dart
-    out/ReleaseSIMDBC64/dart --profile-period=10000 --checked --packages=.packages hello.dart
     out/ReleaseX64/dart pkg/front_end/tool/perf.dart parse hello.dart
     out/ReleaseX64/dart pkg/front_end/tool/perf.dart scan hello.dart
     out/ReleaseX64/dart pkg/front_end/tool/fasta_perf.dart --legacy kernel_gen_e2e hello.dart
     out/ReleaseX64/dart pkg/front_end/tool/fasta_perf.dart kernel_gen_e2e hello.dart
-    out/ReleaseX64/dart_bootstrap --parse_all --compiler_stats hello.dart
     out/ReleaseX64/dart pkg/front_end/tool/perf.dart linked_summarize hello.dart
     out/ReleaseX64/dart pkg/front_end/tool/perf.dart prelinked_summarize hello.dart
     out/ReleaseX64/dart pkg/front_end/tool/fasta_perf.dart scan hello.dart
diff --git a/tools/compile_platform.py b/tools/compile_platform.py
deleted file mode 100755
index 3d71fed..0000000
--- a/tools/compile_platform.py
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-import os
-import subprocess
-import sys
-import utils
-
-usage = """compile_platform.py [options]"""
-
-def DisplayBootstrapWarning():
-  print """\
-
-
-WARNING: Your system can't run the checked-in Dart SDK.  Using the bootstrap
-Dart executable will make debug builds slow.  Please see the Wiki for
-instructions on replacing the checked-in Dart SDK.
-
-https://github.com/dart-lang/sdk/wiki/The-checked-in-SDK-in-tools
-
-"""
-
-
-def path(uri_path):
-  args = [ os.path.dirname(__file__), ".." ] + uri_path.split("/")
-  return os.path.normpath(os.path.join(*args))
-
-
-def main():
-  verbose = False
-  arguments = [ None ] # Leave room for the Dart VM executable.
-  arguments.append("--packages=" + path(".packages"))
-  arguments.append(path("pkg/front_end/tool/_fasta/compile_platform.dart"))
-  i = 1 # Skip argument #0 which is the script name.
-  dart_executable = None
-  while i < len(sys.argv):
-    argument = sys.argv[i]
-    if argument == "--dart-executable":
-      dart_executable = sys.argv[i + 1]
-      i += 1
-    elif argument.startswith("--dart-executable="):
-      dart_executable = argument[len("--dart-executable="):]
-    else:
-      if argument == "-v" or argument == "--verbose":
-        verbose = True
-      arguments.append(argument)
-    i += 1
-
-  if dart_executable:
-    dart_executable = os.path.abspath(dart_executable)
-  else:
-    if utils.CheckedInSdkCheckExecutable():
-      dart_executable = utils.CheckedInSdkExecutable()
-    else:
-      DisplayBootstrapWarning()
-      print >> sys.stderr, "ERROR: Can't locate Dart VM executable."
-      return -1
-
-  arguments[0] = os.path.abspath(dart_executable)
-  if verbose:
-    print "Running:", " ".join(arguments)
-  return subprocess.call(arguments)
-
-
-if __name__ == "__main__":
-  sys.exit(main())
diff --git a/tools/dom/dom.json b/tools/dom/dom.json
index cf6254c..97ccbd5 100644
--- a/tools/dom/dom.json
+++ b/tools/dom/dom.json
@@ -3306,6 +3306,1790 @@
     },
     "support_level": "untriaged"
   },
+  "Constants": {
+    "members": {
+      "ACTIVE_ATTRIBUTES": {
+        "support_level": "untriaged"
+      },
+      "ACTIVE_TEXTURE": {
+        "support_level": "untriaged"
+      },
+      "ACTIVE_UNIFORMS": {
+        "support_level": "untriaged"
+      },
+      "ACTIVE_UNIFORM_BLOCKS": {
+        "support_level": "untriaged"
+      },
+      "ALIASED_LINE_WIDTH_RANGE": {
+        "support_level": "untriaged"
+      },
+      "ALIASED_POINT_SIZE_RANGE": {
+        "support_level": "untriaged"
+      },
+      "ALPHA": {
+        "support_level": "untriaged"
+      },
+      "ALPHA_BITS": {
+        "support_level": "untriaged"
+      },
+      "ALREADY_SIGNALED": {
+        "support_level": "untriaged"
+      },
+      "ALWAYS": {
+        "support_level": "untriaged"
+      },
+      "ANY_SAMPLES_PASSED": {
+        "support_level": "untriaged"
+      },
+      "ANY_SAMPLES_PASSED_CONSERVATIVE": {
+        "support_level": "untriaged"
+      },
+      "ARRAY_BUFFER": {
+        "support_level": "untriaged"
+      },
+      "ARRAY_BUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "ATTACHED_SHADERS": {
+        "support_level": "untriaged"
+      },
+      "BACK": {
+        "support_level": "untriaged"
+      },
+      "BLEND": {
+        "support_level": "untriaged"
+      },
+      "BLEND_COLOR": {
+        "support_level": "untriaged"
+      },
+      "BLEND_DST_ALPHA": {
+        "support_level": "untriaged"
+      },
+      "BLEND_DST_RGB": {
+        "support_level": "untriaged"
+      },
+      "BLEND_EQUATION": {
+        "support_level": "untriaged"
+      },
+      "BLEND_EQUATION_ALPHA": {
+        "support_level": "untriaged"
+      },
+      "BLEND_EQUATION_RGB": {
+        "support_level": "untriaged"
+      },
+      "BLEND_SRC_ALPHA": {
+        "support_level": "untriaged"
+      },
+      "BLEND_SRC_RGB": {
+        "support_level": "untriaged"
+      },
+      "BLUE_BITS": {
+        "support_level": "untriaged"
+      },
+      "BOOL": {
+        "support_level": "untriaged"
+      },
+      "BOOL_VEC2": {
+        "support_level": "untriaged"
+      },
+      "BOOL_VEC3": {
+        "support_level": "untriaged"
+      },
+      "BOOL_VEC4": {
+        "support_level": "untriaged"
+      },
+      "BROWSER_DEFAULT_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "BUFFER_SIZE": {
+        "support_level": "untriaged"
+      },
+      "BUFFER_USAGE": {
+        "support_level": "untriaged"
+      },
+      "BYTE": {
+        "support_level": "untriaged"
+      },
+      "CCW": {
+        "support_level": "untriaged"
+      },
+      "CLAMP_TO_EDGE": {
+        "support_level": "untriaged"
+      },
+      "COLOR": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT0": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT0_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT1": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT10": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT10_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT11": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT11_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT12": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT12_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT13": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT13_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT14": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT14_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT15": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT15_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT1_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT2": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT2_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT3": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT3_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT4": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT4_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT5": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT5_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT6": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT6_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT7": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT7_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT8": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT8_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT9": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT9_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_BUFFER_BIT": {
+        "support_level": "untriaged"
+      },
+      "COLOR_CLEAR_VALUE": {
+        "support_level": "untriaged"
+      },
+      "COLOR_WRITEMASK": {
+        "support_level": "untriaged"
+      },
+      "COMPARE_REF_TO_TEXTURE": {
+        "support_level": "untriaged"
+      },
+      "COMPILE_STATUS": {
+        "support_level": "untriaged"
+      },
+      "COMPRESSED_TEXTURE_FORMATS": {
+        "support_level": "untriaged"
+      },
+      "CONDITION_SATISFIED": {
+        "support_level": "untriaged"
+      },
+      "CONSTANT_ALPHA": {
+        "support_level": "untriaged"
+      },
+      "CONSTANT_COLOR": {
+        "support_level": "untriaged"
+      },
+      "CONTEXT_LOST_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COPY_READ_BUFFER": {
+        "support_level": "untriaged"
+      },
+      "COPY_READ_BUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "COPY_WRITE_BUFFER": {
+        "support_level": "untriaged"
+      },
+      "COPY_WRITE_BUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "CULL_FACE": {
+        "support_level": "untriaged"
+      },
+      "CULL_FACE_MODE": {
+        "support_level": "untriaged"
+      },
+      "CURRENT_PROGRAM": {
+        "support_level": "untriaged"
+      },
+      "CURRENT_QUERY": {
+        "support_level": "untriaged"
+      },
+      "CURRENT_VERTEX_ATTRIB": {
+        "support_level": "untriaged"
+      },
+      "CW": {
+        "support_level": "untriaged"
+      },
+      "DECR": {
+        "support_level": "untriaged"
+      },
+      "DECR_WRAP": {
+        "support_level": "untriaged"
+      },
+      "DELETE_STATUS": {
+        "support_level": "untriaged"
+      },
+      "DEPTH": {
+        "support_level": "untriaged"
+      },
+      "DEPTH24_STENCIL8": {
+        "support_level": "untriaged"
+      },
+      "DEPTH32F_STENCIL8": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_ATTACHMENT": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_BITS": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_BUFFER_BIT": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_CLEAR_VALUE": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_COMPONENT": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_COMPONENT16": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_COMPONENT24": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_COMPONENT32F": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_FUNC": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_RANGE": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_STENCIL": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_STENCIL_ATTACHMENT": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_TEST": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_WRITEMASK": {
+        "support_level": "untriaged"
+      },
+      "DITHER": {
+        "support_level": "untriaged"
+      },
+      "DONT_CARE": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER0": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER0_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER1": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER10": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER10_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER11": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER11_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER12": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER12_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER13": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER13_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER14": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER14_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER15": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER15_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER1_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER2": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER2_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER3": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER3_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER4": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER4_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER5": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER5_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER6": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER6_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER7": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER7_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER8": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER8_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER9": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER9_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_FRAMEBUFFER": {
+        "support_level": "untriaged"
+      },
+      "DRAW_FRAMEBUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "DST_ALPHA": {
+        "support_level": "untriaged"
+      },
+      "DST_COLOR": {
+        "support_level": "untriaged"
+      },
+      "DYNAMIC_COPY": {
+        "support_level": "untriaged"
+      },
+      "DYNAMIC_DRAW": {
+        "support_level": "untriaged"
+      },
+      "DYNAMIC_READ": {
+        "support_level": "untriaged"
+      },
+      "ELEMENT_ARRAY_BUFFER": {
+        "support_level": "untriaged"
+      },
+      "ELEMENT_ARRAY_BUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "EQUAL": {
+        "support_level": "untriaged"
+      },
+      "FASTEST": {
+        "support_level": "untriaged"
+      },
+      "FLOAT": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_32_UNSIGNED_INT_24_8_REV": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_MAT2": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_MAT2x3": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_MAT2x4": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_MAT3": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_MAT3x2": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_MAT3x4": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_MAT4": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_MAT4x2": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_MAT4x3": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_VEC2": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_VEC3": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_VEC4": {
+        "support_level": "untriaged"
+      },
+      "FRAGMENT_SHADER": {
+        "support_level": "untriaged"
+      },
+      "FRAGMENT_SHADER_DERIVATIVE_HINT": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_BLUE_SIZE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_GREEN_SIZE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_OBJECT_NAME": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_RED_SIZE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_COMPLETE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_DEFAULT": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_INCOMPLETE_ATTACHMENT": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_INCOMPLETE_DIMENSIONS": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_INCOMPLETE_MULTISAMPLE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_UNSUPPORTED": {
+        "support_level": "untriaged"
+      },
+      "FRONT": {
+        "support_level": "untriaged"
+      },
+      "FRONT_AND_BACK": {
+        "support_level": "untriaged"
+      },
+      "FRONT_FACE": {
+        "support_level": "untriaged"
+      },
+      "FUNC_ADD": {
+        "support_level": "untriaged"
+      },
+      "FUNC_REVERSE_SUBTRACT": {
+        "support_level": "untriaged"
+      },
+      "FUNC_SUBTRACT": {
+        "support_level": "untriaged"
+      },
+      "GENERATE_MIPMAP_HINT": {
+        "support_level": "untriaged"
+      },
+      "GEQUAL": {
+        "support_level": "untriaged"
+      },
+      "GREATER": {
+        "support_level": "untriaged"
+      },
+      "GREEN_BITS": {
+        "support_level": "untriaged"
+      },
+      "HALF_FLOAT": {
+        "support_level": "untriaged"
+      },
+      "HIGH_FLOAT": {
+        "support_level": "untriaged"
+      },
+      "HIGH_INT": {
+        "support_level": "untriaged"
+      },
+      "IMPLEMENTATION_COLOR_READ_FORMAT": {
+        "support_level": "untriaged"
+      },
+      "IMPLEMENTATION_COLOR_READ_TYPE": {
+        "support_level": "untriaged"
+      },
+      "INCR": {
+        "support_level": "untriaged"
+      },
+      "INCR_WRAP": {
+        "support_level": "untriaged"
+      },
+      "INT": {
+        "support_level": "untriaged"
+      },
+      "INTERLEAVED_ATTRIBS": {
+        "support_level": "untriaged"
+      },
+      "INT_2_10_10_10_REV": {
+        "support_level": "untriaged"
+      },
+      "INT_SAMPLER_2D": {
+        "support_level": "untriaged"
+      },
+      "INT_SAMPLER_2D_ARRAY": {
+        "support_level": "untriaged"
+      },
+      "INT_SAMPLER_3D": {
+        "support_level": "untriaged"
+      },
+      "INT_SAMPLER_CUBE": {
+        "support_level": "untriaged"
+      },
+      "INT_VEC2": {
+        "support_level": "untriaged"
+      },
+      "INT_VEC3": {
+        "support_level": "untriaged"
+      },
+      "INT_VEC4": {
+        "support_level": "untriaged"
+      },
+      "INVALID_ENUM": {
+        "support_level": "untriaged"
+      },
+      "INVALID_FRAMEBUFFER_OPERATION": {
+        "support_level": "untriaged"
+      },
+      "INVALID_INDEX": {
+        "support_level": "untriaged"
+      },
+      "INVALID_OPERATION": {
+        "support_level": "untriaged"
+      },
+      "INVALID_VALUE": {
+        "support_level": "untriaged"
+      },
+      "INVERT": {
+        "support_level": "untriaged"
+      },
+      "KEEP": {
+        "support_level": "untriaged"
+      },
+      "LEQUAL": {
+        "support_level": "untriaged"
+      },
+      "LESS": {
+        "support_level": "untriaged"
+      },
+      "LINEAR": {
+        "support_level": "untriaged"
+      },
+      "LINEAR_MIPMAP_LINEAR": {
+        "support_level": "untriaged"
+      },
+      "LINEAR_MIPMAP_NEAREST": {
+        "support_level": "untriaged"
+      },
+      "LINES": {
+        "support_level": "untriaged"
+      },
+      "LINE_LOOP": {
+        "support_level": "untriaged"
+      },
+      "LINE_STRIP": {
+        "support_level": "untriaged"
+      },
+      "LINE_WIDTH": {
+        "support_level": "untriaged"
+      },
+      "LINK_STATUS": {
+        "support_level": "untriaged"
+      },
+      "LOW_FLOAT": {
+        "support_level": "untriaged"
+      },
+      "LOW_INT": {
+        "support_level": "untriaged"
+      },
+      "LUMINANCE": {
+        "support_level": "untriaged"
+      },
+      "LUMINANCE_ALPHA": {
+        "support_level": "untriaged"
+      },
+      "MAX": {
+        "support_level": "untriaged"
+      },
+      "MAX_3D_TEXTURE_SIZE": {
+        "support_level": "untriaged"
+      },
+      "MAX_ARRAY_TEXTURE_LAYERS": {
+        "support_level": "untriaged"
+      },
+      "MAX_CLIENT_WAIT_TIMEOUT_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "MAX_COLOR_ATTACHMENTS": {
+        "support_level": "untriaged"
+      },
+      "MAX_COLOR_ATTACHMENTS_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS": {
+        "support_level": "untriaged"
+      },
+      "MAX_COMBINED_TEXTURE_IMAGE_UNITS": {
+        "support_level": "untriaged"
+      },
+      "MAX_COMBINED_UNIFORM_BLOCKS": {
+        "support_level": "untriaged"
+      },
+      "MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS": {
+        "support_level": "untriaged"
+      },
+      "MAX_CUBE_MAP_TEXTURE_SIZE": {
+        "support_level": "untriaged"
+      },
+      "MAX_DRAW_BUFFERS": {
+        "support_level": "untriaged"
+      },
+      "MAX_DRAW_BUFFERS_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "MAX_ELEMENTS_INDICES": {
+        "support_level": "untriaged"
+      },
+      "MAX_ELEMENTS_VERTICES": {
+        "support_level": "untriaged"
+      },
+      "MAX_ELEMENT_INDEX": {
+        "support_level": "untriaged"
+      },
+      "MAX_FRAGMENT_INPUT_COMPONENTS": {
+        "support_level": "untriaged"
+      },
+      "MAX_FRAGMENT_UNIFORM_BLOCKS": {
+        "support_level": "untriaged"
+      },
+      "MAX_FRAGMENT_UNIFORM_COMPONENTS": {
+        "support_level": "untriaged"
+      },
+      "MAX_FRAGMENT_UNIFORM_VECTORS": {
+        "support_level": "untriaged"
+      },
+      "MAX_PROGRAM_TEXEL_OFFSET": {
+        "support_level": "untriaged"
+      },
+      "MAX_RENDERBUFFER_SIZE": {
+        "support_level": "untriaged"
+      },
+      "MAX_SAMPLES": {
+        "support_level": "untriaged"
+      },
+      "MAX_SERVER_WAIT_TIMEOUT": {
+        "support_level": "untriaged"
+      },
+      "MAX_TEXTURE_IMAGE_UNITS": {
+        "support_level": "untriaged"
+      },
+      "MAX_TEXTURE_LOD_BIAS": {
+        "support_level": "untriaged"
+      },
+      "MAX_TEXTURE_SIZE": {
+        "support_level": "untriaged"
+      },
+      "MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS": {
+        "support_level": "untriaged"
+      },
+      "MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS": {
+        "support_level": "untriaged"
+      },
+      "MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS": {
+        "support_level": "untriaged"
+      },
+      "MAX_UNIFORM_BLOCK_SIZE": {
+        "support_level": "untriaged"
+      },
+      "MAX_UNIFORM_BUFFER_BINDINGS": {
+        "support_level": "untriaged"
+      },
+      "MAX_VARYING_COMPONENTS": {
+        "support_level": "untriaged"
+      },
+      "MAX_VARYING_VECTORS": {
+        "support_level": "untriaged"
+      },
+      "MAX_VERTEX_ATTRIBS": {
+        "support_level": "untriaged"
+      },
+      "MAX_VERTEX_OUTPUT_COMPONENTS": {
+        "support_level": "untriaged"
+      },
+      "MAX_VERTEX_TEXTURE_IMAGE_UNITS": {
+        "support_level": "untriaged"
+      },
+      "MAX_VERTEX_UNIFORM_BLOCKS": {
+        "support_level": "untriaged"
+      },
+      "MAX_VERTEX_UNIFORM_COMPONENTS": {
+        "support_level": "untriaged"
+      },
+      "MAX_VERTEX_UNIFORM_VECTORS": {
+        "support_level": "untriaged"
+      },
+      "MAX_VIEWPORT_DIMS": {
+        "support_level": "untriaged"
+      },
+      "MEDIUM_FLOAT": {
+        "support_level": "untriaged"
+      },
+      "MEDIUM_INT": {
+        "support_level": "untriaged"
+      },
+      "MIN": {
+        "support_level": "untriaged"
+      },
+      "MIN_PROGRAM_TEXEL_OFFSET": {
+        "support_level": "untriaged"
+      },
+      "MIRRORED_REPEAT": {
+        "support_level": "untriaged"
+      },
+      "NEAREST": {
+        "support_level": "untriaged"
+      },
+      "NEAREST_MIPMAP_LINEAR": {
+        "support_level": "untriaged"
+      },
+      "NEAREST_MIPMAP_NEAREST": {
+        "support_level": "untriaged"
+      },
+      "NEVER": {
+        "support_level": "untriaged"
+      },
+      "NICEST": {
+        "support_level": "untriaged"
+      },
+      "NONE": {
+        "support_level": "untriaged"
+      },
+      "NOTEQUAL": {
+        "support_level": "untriaged"
+      },
+      "NO_ERROR": {
+        "support_level": "untriaged"
+      },
+      "OBJECT_TYPE": {
+        "support_level": "untriaged"
+      },
+      "ONE": {
+        "support_level": "untriaged"
+      },
+      "ONE_MINUS_CONSTANT_ALPHA": {
+        "support_level": "untriaged"
+      },
+      "ONE_MINUS_CONSTANT_COLOR": {
+        "support_level": "untriaged"
+      },
+      "ONE_MINUS_DST_ALPHA": {
+        "support_level": "untriaged"
+      },
+      "ONE_MINUS_DST_COLOR": {
+        "support_level": "untriaged"
+      },
+      "ONE_MINUS_SRC_ALPHA": {
+        "support_level": "untriaged"
+      },
+      "ONE_MINUS_SRC_COLOR": {
+        "support_level": "untriaged"
+      },
+      "OUT_OF_MEMORY": {
+        "support_level": "untriaged"
+      },
+      "PACK_ALIGNMENT": {
+        "support_level": "untriaged"
+      },
+      "PACK_ROW_LENGTH": {
+        "support_level": "untriaged"
+      },
+      "PACK_SKIP_PIXELS": {
+        "support_level": "untriaged"
+      },
+      "PACK_SKIP_ROWS": {
+        "support_level": "untriaged"
+      },
+      "PIXEL_PACK_BUFFER": {
+        "support_level": "untriaged"
+      },
+      "PIXEL_PACK_BUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "PIXEL_UNPACK_BUFFER": {
+        "support_level": "untriaged"
+      },
+      "PIXEL_UNPACK_BUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "POINTS": {
+        "support_level": "untriaged"
+      },
+      "POLYGON_OFFSET_FACTOR": {
+        "support_level": "untriaged"
+      },
+      "POLYGON_OFFSET_FILL": {
+        "support_level": "untriaged"
+      },
+      "POLYGON_OFFSET_UNITS": {
+        "support_level": "untriaged"
+      },
+      "QUERY_RESULT": {
+        "support_level": "untriaged"
+      },
+      "QUERY_RESULT_AVAILABLE": {
+        "support_level": "untriaged"
+      },
+      "R11F_G11F_B10F": {
+        "support_level": "untriaged"
+      },
+      "R16F": {
+        "support_level": "untriaged"
+      },
+      "R16I": {
+        "support_level": "untriaged"
+      },
+      "R16UI": {
+        "support_level": "untriaged"
+      },
+      "R32F": {
+        "support_level": "untriaged"
+      },
+      "R32I": {
+        "support_level": "untriaged"
+      },
+      "R32UI": {
+        "support_level": "untriaged"
+      },
+      "R8": {
+        "support_level": "untriaged"
+      },
+      "R8I": {
+        "support_level": "untriaged"
+      },
+      "R8UI": {
+        "support_level": "untriaged"
+      },
+      "R8_SNORM": {
+        "support_level": "untriaged"
+      },
+      "RASTERIZER_DISCARD": {
+        "support_level": "untriaged"
+      },
+      "READ_BUFFER": {
+        "support_level": "untriaged"
+      },
+      "READ_FRAMEBUFFER": {
+        "support_level": "untriaged"
+      },
+      "READ_FRAMEBUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "RED": {
+        "support_level": "untriaged"
+      },
+      "RED_BITS": {
+        "support_level": "untriaged"
+      },
+      "RED_INTEGER": {
+        "support_level": "untriaged"
+      },
+      "RENDERBUFFER": {
+        "support_level": "untriaged"
+      },
+      "RENDERBUFFER_ALPHA_SIZE": {
+        "support_level": "untriaged"
+      },
+      "RENDERBUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "RENDERBUFFER_BLUE_SIZE": {
+        "support_level": "untriaged"
+      },
+      "RENDERBUFFER_DEPTH_SIZE": {
+        "support_level": "untriaged"
+      },
+      "RENDERBUFFER_GREEN_SIZE": {
+        "support_level": "untriaged"
+      },
+      "RENDERBUFFER_HEIGHT": {
+        "support_level": "untriaged"
+      },
+      "RENDERBUFFER_INTERNAL_FORMAT": {
+        "support_level": "untriaged"
+      },
+      "RENDERBUFFER_RED_SIZE": {
+        "support_level": "untriaged"
+      },
+      "RENDERBUFFER_SAMPLES": {
+        "support_level": "untriaged"
+      },
+      "RENDERBUFFER_STENCIL_SIZE": {
+        "support_level": "untriaged"
+      },
+      "RENDERBUFFER_WIDTH": {
+        "support_level": "untriaged"
+      },
+      "RENDERER": {
+        "support_level": "untriaged"
+      },
+      "REPEAT": {
+        "support_level": "untriaged"
+      },
+      "REPLACE": {
+        "support_level": "untriaged"
+      },
+      "RG": {
+        "support_level": "untriaged"
+      },
+      "RG16F": {
+        "support_level": "untriaged"
+      },
+      "RG16I": {
+        "support_level": "untriaged"
+      },
+      "RG16UI": {
+        "support_level": "untriaged"
+      },
+      "RG32F": {
+        "support_level": "untriaged"
+      },
+      "RG32I": {
+        "support_level": "untriaged"
+      },
+      "RG32UI": {
+        "support_level": "untriaged"
+      },
+      "RG8": {
+        "support_level": "untriaged"
+      },
+      "RG8I": {
+        "support_level": "untriaged"
+      },
+      "RG8UI": {
+        "support_level": "untriaged"
+      },
+      "RG8_SNORM": {
+        "support_level": "untriaged"
+      },
+      "RGB": {
+        "support_level": "untriaged"
+      },
+      "RGB10_A2": {
+        "support_level": "untriaged"
+      },
+      "RGB10_A2UI": {
+        "support_level": "untriaged"
+      },
+      "RGB16F": {
+        "support_level": "untriaged"
+      },
+      "RGB16I": {
+        "support_level": "untriaged"
+      },
+      "RGB16UI": {
+        "support_level": "untriaged"
+      },
+      "RGB32F": {
+        "support_level": "untriaged"
+      },
+      "RGB32I": {
+        "support_level": "untriaged"
+      },
+      "RGB32UI": {
+        "support_level": "untriaged"
+      },
+      "RGB565": {
+        "support_level": "untriaged"
+      },
+      "RGB5_A1": {
+        "support_level": "untriaged"
+      },
+      "RGB8": {
+        "support_level": "untriaged"
+      },
+      "RGB8I": {
+        "support_level": "untriaged"
+      },
+      "RGB8UI": {
+        "support_level": "untriaged"
+      },
+      "RGB8_SNORM": {
+        "support_level": "untriaged"
+      },
+      "RGB9_E5": {
+        "support_level": "untriaged"
+      },
+      "RGBA": {
+        "support_level": "untriaged"
+      },
+      "RGBA16F": {
+        "support_level": "untriaged"
+      },
+      "RGBA16I": {
+        "support_level": "untriaged"
+      },
+      "RGBA16UI": {
+        "support_level": "untriaged"
+      },
+      "RGBA32F": {
+        "support_level": "untriaged"
+      },
+      "RGBA32I": {
+        "support_level": "untriaged"
+      },
+      "RGBA32UI": {
+        "support_level": "untriaged"
+      },
+      "RGBA4": {
+        "support_level": "untriaged"
+      },
+      "RGBA8": {
+        "support_level": "untriaged"
+      },
+      "RGBA8I": {
+        "support_level": "untriaged"
+      },
+      "RGBA8UI": {
+        "support_level": "untriaged"
+      },
+      "RGBA8_SNORM": {
+        "support_level": "untriaged"
+      },
+      "RGBA_INTEGER": {
+        "support_level": "untriaged"
+      },
+      "RGB_INTEGER": {
+        "support_level": "untriaged"
+      },
+      "RG_INTEGER": {
+        "support_level": "untriaged"
+      },
+      "SAMPLER_2D": {
+        "support_level": "untriaged"
+      },
+      "SAMPLER_2D_ARRAY": {
+        "support_level": "untriaged"
+      },
+      "SAMPLER_2D_ARRAY_SHADOW": {
+        "support_level": "untriaged"
+      },
+      "SAMPLER_2D_SHADOW": {
+        "support_level": "untriaged"
+      },
+      "SAMPLER_3D": {
+        "support_level": "untriaged"
+      },
+      "SAMPLER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "SAMPLER_CUBE": {
+        "support_level": "untriaged"
+      },
+      "SAMPLER_CUBE_SHADOW": {
+        "support_level": "untriaged"
+      },
+      "SAMPLES": {
+        "support_level": "untriaged"
+      },
+      "SAMPLE_ALPHA_TO_COVERAGE": {
+        "support_level": "untriaged"
+      },
+      "SAMPLE_BUFFERS": {
+        "support_level": "untriaged"
+      },
+      "SAMPLE_COVERAGE": {
+        "support_level": "untriaged"
+      },
+      "SAMPLE_COVERAGE_INVERT": {
+        "support_level": "untriaged"
+      },
+      "SAMPLE_COVERAGE_VALUE": {
+        "support_level": "untriaged"
+      },
+      "SCISSOR_BOX": {
+        "support_level": "untriaged"
+      },
+      "SCISSOR_TEST": {
+        "support_level": "untriaged"
+      },
+      "SEPARATE_ATTRIBS": {
+        "support_level": "untriaged"
+      },
+      "SHADER_TYPE": {
+        "support_level": "untriaged"
+      },
+      "SHADING_LANGUAGE_VERSION": {
+        "support_level": "untriaged"
+      },
+      "SHORT": {
+        "support_level": "untriaged"
+      },
+      "SIGNALED": {
+        "support_level": "untriaged"
+      },
+      "SIGNED_NORMALIZED": {
+        "support_level": "untriaged"
+      },
+      "SRC_ALPHA": {
+        "support_level": "untriaged"
+      },
+      "SRC_ALPHA_SATURATE": {
+        "support_level": "untriaged"
+      },
+      "SRC_COLOR": {
+        "support_level": "untriaged"
+      },
+      "SRGB": {
+        "support_level": "untriaged"
+      },
+      "SRGB8": {
+        "support_level": "untriaged"
+      },
+      "SRGB8_ALPHA8": {
+        "support_level": "untriaged"
+      },
+      "STATIC_COPY": {
+        "support_level": "untriaged"
+      },
+      "STATIC_DRAW": {
+        "support_level": "untriaged"
+      },
+      "STATIC_READ": {
+        "support_level": "untriaged"
+      },
+      "STENCIL": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_ATTACHMENT": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_BACK_FAIL": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_BACK_FUNC": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_BACK_PASS_DEPTH_FAIL": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_BACK_PASS_DEPTH_PASS": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_BACK_REF": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_BACK_VALUE_MASK": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_BACK_WRITEMASK": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_BITS": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_BUFFER_BIT": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_CLEAR_VALUE": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_FAIL": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_FUNC": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_INDEX8": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_PASS_DEPTH_FAIL": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_PASS_DEPTH_PASS": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_REF": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_TEST": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_VALUE_MASK": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_WRITEMASK": {
+        "support_level": "untriaged"
+      },
+      "STREAM_COPY": {
+        "support_level": "untriaged"
+      },
+      "STREAM_DRAW": {
+        "support_level": "untriaged"
+      },
+      "STREAM_READ": {
+        "support_level": "untriaged"
+      },
+      "SUBPIXEL_BITS": {
+        "support_level": "untriaged"
+      },
+      "SYNC_CONDITION": {
+        "support_level": "untriaged"
+      },
+      "SYNC_FENCE": {
+        "support_level": "untriaged"
+      },
+      "SYNC_FLAGS": {
+        "support_level": "untriaged"
+      },
+      "SYNC_FLUSH_COMMANDS_BIT": {
+        "support_level": "untriaged"
+      },
+      "SYNC_GPU_COMMANDS_COMPLETE": {
+        "support_level": "untriaged"
+      },
+      "SYNC_STATUS": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE0": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE1": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE10": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE11": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE12": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE13": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE14": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE15": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE16": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE17": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE18": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE19": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE2": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE20": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE21": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE22": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE23": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE24": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE25": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE26": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE27": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE28": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE29": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE3": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE30": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE31": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE4": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE5": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE6": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE7": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE8": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE9": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_2D": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_2D_ARRAY": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_3D": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_BASE_LEVEL": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_BINDING_2D": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_BINDING_2D_ARRAY": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_BINDING_3D": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_BINDING_CUBE_MAP": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_COMPARE_FUNC": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_COMPARE_MODE": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_CUBE_MAP": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_CUBE_MAP_NEGATIVE_X": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_CUBE_MAP_NEGATIVE_Y": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_CUBE_MAP_NEGATIVE_Z": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_CUBE_MAP_POSITIVE_X": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_CUBE_MAP_POSITIVE_Y": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_CUBE_MAP_POSITIVE_Z": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_IMMUTABLE_FORMAT": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_IMMUTABLE_LEVELS": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_MAG_FILTER": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_MAX_LEVEL": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_MAX_LOD": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_MIN_FILTER": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_MIN_LOD": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_WRAP_R": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_WRAP_S": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_WRAP_T": {
+        "support_level": "untriaged"
+      },
+      "TIMEOUT_EXPIRED": {
+        "support_level": "untriaged"
+      },
+      "TIMEOUT_IGNORED": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_ACTIVE": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_BINDING": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_BUFFER": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_BUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_BUFFER_MODE": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_BUFFER_SIZE": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_BUFFER_START": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_PAUSED": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_VARYINGS": {
+        "support_level": "untriaged"
+      },
+      "TRIANGLES": {
+        "support_level": "untriaged"
+      },
+      "TRIANGLE_FAN": {
+        "support_level": "untriaged"
+      },
+      "TRIANGLE_STRIP": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_ARRAY_STRIDE": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BLOCK_ACTIVE_UNIFORMS": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BLOCK_BINDING": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BLOCK_DATA_SIZE": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BLOCK_INDEX": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BUFFER": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BUFFER_OFFSET_ALIGNMENT": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BUFFER_SIZE": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BUFFER_START": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_IS_ROW_MAJOR": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_MATRIX_STRIDE": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_OFFSET": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_SIZE": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_TYPE": {
+        "support_level": "untriaged"
+      },
+      "UNPACK_ALIGNMENT": {
+        "support_level": "untriaged"
+      },
+      "UNPACK_COLORSPACE_CONVERSION_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "UNPACK_FLIP_Y_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "UNPACK_IMAGE_HEIGHT": {
+        "support_level": "untriaged"
+      },
+      "UNPACK_PREMULTIPLY_ALPHA_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "UNPACK_ROW_LENGTH": {
+        "support_level": "untriaged"
+      },
+      "UNPACK_SKIP_IMAGES": {
+        "support_level": "untriaged"
+      },
+      "UNPACK_SKIP_PIXELS": {
+        "support_level": "untriaged"
+      },
+      "UNPACK_SKIP_ROWS": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNALED": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_BYTE": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_10F_11F_11F_REV": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_24_8": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_2_10_10_10_REV": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_5_9_9_9_REV": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_SAMPLER_2D": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_SAMPLER_2D_ARRAY": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_SAMPLER_3D": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_SAMPLER_CUBE": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_VEC2": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_VEC3": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_VEC4": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_NORMALIZED": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_SHORT": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_SHORT_4_4_4_4": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_SHORT_5_5_5_1": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_SHORT_5_6_5": {
+        "support_level": "untriaged"
+      },
+      "VALIDATE_STATUS": {
+        "support_level": "untriaged"
+      },
+      "VENDOR": {
+        "support_level": "untriaged"
+      },
+      "VERSION": {
+        "support_level": "untriaged"
+      },
+      "VERTEX_ARRAY_BINDING": {
+        "support_level": "untriaged"
+      },
+      "VERTEX_ATTRIB_ARRAY_BUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "VERTEX_ATTRIB_ARRAY_DIVISOR": {
+        "support_level": "untriaged"
+      },
+      "VERTEX_ATTRIB_ARRAY_ENABLED": {
+        "support_level": "untriaged"
+      },
+      "VERTEX_ATTRIB_ARRAY_INTEGER": {
+        "support_level": "untriaged"
+      },
+      "VERTEX_ATTRIB_ARRAY_NORMALIZED": {
+        "support_level": "untriaged"
+      },
+      "VERTEX_ATTRIB_ARRAY_POINTER": {
+        "support_level": "untriaged"
+      },
+      "VERTEX_ATTRIB_ARRAY_SIZE": {
+        "support_level": "untriaged"
+      },
+      "VERTEX_ATTRIB_ARRAY_STRIDE": {
+        "support_level": "untriaged"
+      },
+      "VERTEX_ATTRIB_ARRAY_TYPE": {
+        "support_level": "untriaged"
+      },
+      "VERTEX_SHADER": {
+        "support_level": "untriaged"
+      },
+      "VIEWPORT": {
+        "support_level": "untriaged"
+      },
+      "WAIT_FAILED": {
+        "support_level": "untriaged"
+      },
+      "ZERO": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "ConvolverNode": {
     "comment": "https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#ConvolverNode",
     "members": {
@@ -21801,7 +23585,7 @@
     "members": {},
     "support_level": "experimental"
   },
-  "WebGL2RenderingContext": {
+  "WebGL": {
     "members": {
       "ACTIVE_ATTRIBUTES": {
         "support_level": "untriaged"
@@ -21812,6 +23596,9 @@
       "ACTIVE_UNIFORMS": {
         "support_level": "untriaged"
       },
+      "ACTIVE_UNIFORM_BLOCKS": {
+        "support_level": "untriaged"
+      },
       "ALIASED_LINE_WIDTH_RANGE": {
         "support_level": "untriaged"
       },
@@ -21824,9 +23611,18 @@
       "ALPHA_BITS": {
         "support_level": "untriaged"
       },
+      "ALREADY_SIGNALED": {
+        "support_level": "untriaged"
+      },
       "ALWAYS": {
         "support_level": "untriaged"
       },
+      "ANY_SAMPLES_PASSED": {
+        "support_level": "untriaged"
+      },
+      "ANY_SAMPLES_PASSED_CONSERVATIVE": {
+        "support_level": "untriaged"
+      },
       "ARRAY_BUFFER": {
         "support_level": "untriaged"
       },
@@ -21899,9 +23695,105 @@
       "CLAMP_TO_EDGE": {
         "support_level": "untriaged"
       },
+      "COLOR": {
+        "support_level": "untriaged"
+      },
       "COLOR_ATTACHMENT0": {
         "support_level": "untriaged"
       },
+      "COLOR_ATTACHMENT0_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT1": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT10": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT10_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT11": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT11_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT12": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT12_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT13": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT13_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT14": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT14_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT15": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT15_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT1_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT2": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT2_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT3": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT3_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT4": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT4_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT5": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT5_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT6": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT6_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT7": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT7_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT8": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT8_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT9": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT9_WEBGL": {
+        "support_level": "untriaged"
+      },
       "COLOR_BUFFER_BIT": {
         "support_level": "untriaged"
       },
@@ -21911,12 +23803,18 @@
       "COLOR_WRITEMASK": {
         "support_level": "untriaged"
       },
+      "COMPARE_REF_TO_TEXTURE": {
+        "support_level": "untriaged"
+      },
       "COMPILE_STATUS": {
         "support_level": "untriaged"
       },
       "COMPRESSED_TEXTURE_FORMATS": {
         "support_level": "untriaged"
       },
+      "CONDITION_SATISFIED": {
+        "support_level": "untriaged"
+      },
       "CONSTANT_ALPHA": {
         "support_level": "untriaged"
       },
@@ -21926,6 +23824,18 @@
       "CONTEXT_LOST_WEBGL": {
         "support_level": "untriaged"
       },
+      "COPY_READ_BUFFER": {
+        "support_level": "untriaged"
+      },
+      "COPY_READ_BUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "COPY_WRITE_BUFFER": {
+        "support_level": "untriaged"
+      },
+      "COPY_WRITE_BUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
       "CULL_FACE": {
         "support_level": "untriaged"
       },
@@ -21935,6 +23845,9 @@
       "CURRENT_PROGRAM": {
         "support_level": "untriaged"
       },
+      "CURRENT_QUERY": {
+        "support_level": "untriaged"
+      },
       "CURRENT_VERTEX_ATTRIB": {
         "support_level": "untriaged"
       },
@@ -21950,6 +23863,15 @@
       "DELETE_STATUS": {
         "support_level": "untriaged"
       },
+      "DEPTH": {
+        "support_level": "untriaged"
+      },
+      "DEPTH24_STENCIL8": {
+        "support_level": "untriaged"
+      },
+      "DEPTH32F_STENCIL8": {
+        "support_level": "untriaged"
+      },
       "DEPTH_ATTACHMENT": {
         "support_level": "untriaged"
       },
@@ -21968,6 +23890,12 @@
       "DEPTH_COMPONENT16": {
         "support_level": "untriaged"
       },
+      "DEPTH_COMPONENT24": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_COMPONENT32F": {
+        "support_level": "untriaged"
+      },
       "DEPTH_FUNC": {
         "support_level": "untriaged"
       },
@@ -21992,15 +23920,123 @@
       "DONT_CARE": {
         "support_level": "untriaged"
       },
+      "DRAW_BUFFER0": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER0_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER1": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER10": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER10_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER11": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER11_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER12": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER12_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER13": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER13_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER14": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER14_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER15": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER15_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER1_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER2": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER2_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER3": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER3_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER4": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER4_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER5": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER5_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER6": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER6_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER7": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER7_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER8": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER8_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER9": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER9_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "DRAW_FRAMEBUFFER": {
+        "support_level": "untriaged"
+      },
+      "DRAW_FRAMEBUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
       "DST_ALPHA": {
         "support_level": "untriaged"
       },
       "DST_COLOR": {
         "support_level": "untriaged"
       },
+      "DYNAMIC_COPY": {
+        "support_level": "untriaged"
+      },
       "DYNAMIC_DRAW": {
         "support_level": "untriaged"
       },
+      "DYNAMIC_READ": {
+        "support_level": "untriaged"
+      },
       "ELEMENT_ARRAY_BUFFER": {
         "support_level": "untriaged"
       },
@@ -22016,15 +24052,36 @@
       "FLOAT": {
         "support_level": "untriaged"
       },
+      "FLOAT_32_UNSIGNED_INT_24_8_REV": {
+        "support_level": "untriaged"
+      },
       "FLOAT_MAT2": {
         "support_level": "untriaged"
       },
+      "FLOAT_MAT2x3": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_MAT2x4": {
+        "support_level": "untriaged"
+      },
       "FLOAT_MAT3": {
         "support_level": "untriaged"
       },
+      "FLOAT_MAT3x2": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_MAT3x4": {
+        "support_level": "untriaged"
+      },
       "FLOAT_MAT4": {
         "support_level": "untriaged"
       },
+      "FLOAT_MAT4x2": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_MAT4x3": {
+        "support_level": "untriaged"
+      },
       "FLOAT_VEC2": {
         "support_level": "untriaged"
       },
@@ -22037,18 +24094,48 @@
       "FRAGMENT_SHADER": {
         "support_level": "untriaged"
       },
+      "FRAGMENT_SHADER_DERIVATIVE_HINT": {
+        "support_level": "untriaged"
+      },
       "FRAMEBUFFER": {
         "support_level": "untriaged"
       },
+      "FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_BLUE_SIZE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_GREEN_SIZE": {
+        "support_level": "untriaged"
+      },
       "FRAMEBUFFER_ATTACHMENT_OBJECT_NAME": {
         "support_level": "untriaged"
       },
       "FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE": {
         "support_level": "untriaged"
       },
+      "FRAMEBUFFER_ATTACHMENT_RED_SIZE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE": {
+        "support_level": "untriaged"
+      },
       "FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE": {
         "support_level": "untriaged"
       },
+      "FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER": {
+        "support_level": "untriaged"
+      },
       "FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL": {
         "support_level": "untriaged"
       },
@@ -22058,6 +24145,9 @@
       "FRAMEBUFFER_COMPLETE": {
         "support_level": "untriaged"
       },
+      "FRAMEBUFFER_DEFAULT": {
+        "support_level": "untriaged"
+      },
       "FRAMEBUFFER_INCOMPLETE_ATTACHMENT": {
         "support_level": "untriaged"
       },
@@ -22067,6 +24157,9 @@
       "FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT": {
         "support_level": "untriaged"
       },
+      "FRAMEBUFFER_INCOMPLETE_MULTISAMPLE": {
+        "support_level": "untriaged"
+      },
       "FRAMEBUFFER_UNSUPPORTED": {
         "support_level": "untriaged"
       },
@@ -22100,6 +24193,9 @@
       "GREEN_BITS": {
         "support_level": "untriaged"
       },
+      "HALF_FLOAT": {
+        "support_level": "untriaged"
+      },
       "HIGH_FLOAT": {
         "support_level": "untriaged"
       },
@@ -22121,6 +24217,24 @@
       "INT": {
         "support_level": "untriaged"
       },
+      "INTERLEAVED_ATTRIBS": {
+        "support_level": "untriaged"
+      },
+      "INT_2_10_10_10_REV": {
+        "support_level": "untriaged"
+      },
+      "INT_SAMPLER_2D": {
+        "support_level": "untriaged"
+      },
+      "INT_SAMPLER_2D_ARRAY": {
+        "support_level": "untriaged"
+      },
+      "INT_SAMPLER_3D": {
+        "support_level": "untriaged"
+      },
+      "INT_SAMPLER_CUBE": {
+        "support_level": "untriaged"
+      },
       "INT_VEC2": {
         "support_level": "untriaged"
       },
@@ -22136,6 +24250,9 @@
       "INVALID_FRAMEBUFFER_OPERATION": {
         "support_level": "untriaged"
       },
+      "INVALID_INDEX": {
+        "support_level": "untriaged"
+      },
       "INVALID_OPERATION": {
         "support_level": "untriaged"
       },
@@ -22190,33 +24307,123 @@
       "LUMINANCE_ALPHA": {
         "support_level": "untriaged"
       },
+      "MAX": {
+        "support_level": "untriaged"
+      },
+      "MAX_3D_TEXTURE_SIZE": {
+        "support_level": "untriaged"
+      },
+      "MAX_ARRAY_TEXTURE_LAYERS": {
+        "support_level": "untriaged"
+      },
+      "MAX_CLIENT_WAIT_TIMEOUT_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "MAX_COLOR_ATTACHMENTS": {
+        "support_level": "untriaged"
+      },
+      "MAX_COLOR_ATTACHMENTS_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS": {
+        "support_level": "untriaged"
+      },
       "MAX_COMBINED_TEXTURE_IMAGE_UNITS": {
         "support_level": "untriaged"
       },
+      "MAX_COMBINED_UNIFORM_BLOCKS": {
+        "support_level": "untriaged"
+      },
+      "MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS": {
+        "support_level": "untriaged"
+      },
       "MAX_CUBE_MAP_TEXTURE_SIZE": {
         "support_level": "untriaged"
       },
+      "MAX_DRAW_BUFFERS": {
+        "support_level": "untriaged"
+      },
+      "MAX_DRAW_BUFFERS_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "MAX_ELEMENTS_INDICES": {
+        "support_level": "untriaged"
+      },
+      "MAX_ELEMENTS_VERTICES": {
+        "support_level": "untriaged"
+      },
+      "MAX_ELEMENT_INDEX": {
+        "support_level": "untriaged"
+      },
+      "MAX_FRAGMENT_INPUT_COMPONENTS": {
+        "support_level": "untriaged"
+      },
+      "MAX_FRAGMENT_UNIFORM_BLOCKS": {
+        "support_level": "untriaged"
+      },
+      "MAX_FRAGMENT_UNIFORM_COMPONENTS": {
+        "support_level": "untriaged"
+      },
       "MAX_FRAGMENT_UNIFORM_VECTORS": {
         "support_level": "untriaged"
       },
+      "MAX_PROGRAM_TEXEL_OFFSET": {
+        "support_level": "untriaged"
+      },
       "MAX_RENDERBUFFER_SIZE": {
         "support_level": "untriaged"
       },
+      "MAX_SAMPLES": {
+        "support_level": "untriaged"
+      },
+      "MAX_SERVER_WAIT_TIMEOUT": {
+        "support_level": "untriaged"
+      },
       "MAX_TEXTURE_IMAGE_UNITS": {
         "support_level": "untriaged"
       },
+      "MAX_TEXTURE_LOD_BIAS": {
+        "support_level": "untriaged"
+      },
       "MAX_TEXTURE_SIZE": {
         "support_level": "untriaged"
       },
+      "MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS": {
+        "support_level": "untriaged"
+      },
+      "MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS": {
+        "support_level": "untriaged"
+      },
+      "MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS": {
+        "support_level": "untriaged"
+      },
+      "MAX_UNIFORM_BLOCK_SIZE": {
+        "support_level": "untriaged"
+      },
+      "MAX_UNIFORM_BUFFER_BINDINGS": {
+        "support_level": "untriaged"
+      },
+      "MAX_VARYING_COMPONENTS": {
+        "support_level": "untriaged"
+      },
       "MAX_VARYING_VECTORS": {
         "support_level": "untriaged"
       },
       "MAX_VERTEX_ATTRIBS": {
         "support_level": "untriaged"
       },
+      "MAX_VERTEX_OUTPUT_COMPONENTS": {
+        "support_level": "untriaged"
+      },
       "MAX_VERTEX_TEXTURE_IMAGE_UNITS": {
         "support_level": "untriaged"
       },
+      "MAX_VERTEX_UNIFORM_BLOCKS": {
+        "support_level": "untriaged"
+      },
+      "MAX_VERTEX_UNIFORM_COMPONENTS": {
+        "support_level": "untriaged"
+      },
       "MAX_VERTEX_UNIFORM_VECTORS": {
         "support_level": "untriaged"
       },
@@ -22229,6 +24436,12 @@
       "MEDIUM_INT": {
         "support_level": "untriaged"
       },
+      "MIN": {
+        "support_level": "untriaged"
+      },
+      "MIN_PROGRAM_TEXEL_OFFSET": {
+        "support_level": "untriaged"
+      },
       "MIRRORED_REPEAT": {
         "support_level": "untriaged"
       },
@@ -22256,6 +24469,9 @@
       "NO_ERROR": {
         "support_level": "untriaged"
       },
+      "OBJECT_TYPE": {
+        "support_level": "untriaged"
+      },
       "ONE": {
         "support_level": "untriaged"
       },
@@ -22283,6 +24499,27 @@
       "PACK_ALIGNMENT": {
         "support_level": "untriaged"
       },
+      "PACK_ROW_LENGTH": {
+        "support_level": "untriaged"
+      },
+      "PACK_SKIP_PIXELS": {
+        "support_level": "untriaged"
+      },
+      "PACK_SKIP_ROWS": {
+        "support_level": "untriaged"
+      },
+      "PIXEL_PACK_BUFFER": {
+        "support_level": "untriaged"
+      },
+      "PIXEL_PACK_BUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "PIXEL_UNPACK_BUFFER": {
+        "support_level": "untriaged"
+      },
+      "PIXEL_UNPACK_BUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
       "POINTS": {
         "support_level": "untriaged"
       },
@@ -22295,9 +24532,66 @@
       "POLYGON_OFFSET_UNITS": {
         "support_level": "untriaged"
       },
+      "QUERY_RESULT": {
+        "support_level": "untriaged"
+      },
+      "QUERY_RESULT_AVAILABLE": {
+        "support_level": "untriaged"
+      },
+      "R11F_G11F_B10F": {
+        "support_level": "untriaged"
+      },
+      "R16F": {
+        "support_level": "untriaged"
+      },
+      "R16I": {
+        "support_level": "untriaged"
+      },
+      "R16UI": {
+        "support_level": "untriaged"
+      },
+      "R32F": {
+        "support_level": "untriaged"
+      },
+      "R32I": {
+        "support_level": "untriaged"
+      },
+      "R32UI": {
+        "support_level": "untriaged"
+      },
+      "R8": {
+        "support_level": "untriaged"
+      },
+      "R8I": {
+        "support_level": "untriaged"
+      },
+      "R8UI": {
+        "support_level": "untriaged"
+      },
+      "R8_SNORM": {
+        "support_level": "untriaged"
+      },
+      "RASTERIZER_DISCARD": {
+        "support_level": "untriaged"
+      },
+      "READ_BUFFER": {
+        "support_level": "untriaged"
+      },
+      "READ_FRAMEBUFFER": {
+        "support_level": "untriaged"
+      },
+      "READ_FRAMEBUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "RED": {
+        "support_level": "untriaged"
+      },
       "RED_BITS": {
         "support_level": "untriaged"
       },
+      "RED_INTEGER": {
+        "support_level": "untriaged"
+      },
       "RENDERBUFFER": {
         "support_level": "untriaged"
       },
@@ -22325,6 +24619,9 @@
       "RENDERBUFFER_RED_SIZE": {
         "support_level": "untriaged"
       },
+      "RENDERBUFFER_SAMPLES": {
+        "support_level": "untriaged"
+      },
       "RENDERBUFFER_STENCIL_SIZE": {
         "support_level": "untriaged"
       },
@@ -22340,27 +24637,156 @@
       "REPLACE": {
         "support_level": "untriaged"
       },
+      "RG": {
+        "support_level": "untriaged"
+      },
+      "RG16F": {
+        "support_level": "untriaged"
+      },
+      "RG16I": {
+        "support_level": "untriaged"
+      },
+      "RG16UI": {
+        "support_level": "untriaged"
+      },
+      "RG32F": {
+        "support_level": "untriaged"
+      },
+      "RG32I": {
+        "support_level": "untriaged"
+      },
+      "RG32UI": {
+        "support_level": "untriaged"
+      },
+      "RG8": {
+        "support_level": "untriaged"
+      },
+      "RG8I": {
+        "support_level": "untriaged"
+      },
+      "RG8UI": {
+        "support_level": "untriaged"
+      },
+      "RG8_SNORM": {
+        "support_level": "untriaged"
+      },
       "RGB": {
         "support_level": "untriaged"
       },
+      "RGB10_A2": {
+        "support_level": "untriaged"
+      },
+      "RGB10_A2UI": {
+        "support_level": "untriaged"
+      },
+      "RGB16F": {
+        "support_level": "untriaged"
+      },
+      "RGB16I": {
+        "support_level": "untriaged"
+      },
+      "RGB16UI": {
+        "support_level": "untriaged"
+      },
+      "RGB32F": {
+        "support_level": "untriaged"
+      },
+      "RGB32I": {
+        "support_level": "untriaged"
+      },
+      "RGB32UI": {
+        "support_level": "untriaged"
+      },
       "RGB565": {
         "support_level": "untriaged"
       },
       "RGB5_A1": {
         "support_level": "untriaged"
       },
+      "RGB8": {
+        "support_level": "untriaged"
+      },
+      "RGB8I": {
+        "support_level": "untriaged"
+      },
+      "RGB8UI": {
+        "support_level": "untriaged"
+      },
+      "RGB8_SNORM": {
+        "support_level": "untriaged"
+      },
+      "RGB9_E5": {
+        "support_level": "untriaged"
+      },
       "RGBA": {
         "support_level": "untriaged"
       },
+      "RGBA16F": {
+        "support_level": "untriaged"
+      },
+      "RGBA16I": {
+        "support_level": "untriaged"
+      },
+      "RGBA16UI": {
+        "support_level": "untriaged"
+      },
+      "RGBA32F": {
+        "support_level": "untriaged"
+      },
+      "RGBA32I": {
+        "support_level": "untriaged"
+      },
+      "RGBA32UI": {
+        "support_level": "untriaged"
+      },
       "RGBA4": {
         "support_level": "untriaged"
       },
+      "RGBA8": {
+        "support_level": "untriaged"
+      },
+      "RGBA8I": {
+        "support_level": "untriaged"
+      },
+      "RGBA8UI": {
+        "support_level": "untriaged"
+      },
+      "RGBA8_SNORM": {
+        "support_level": "untriaged"
+      },
+      "RGBA_INTEGER": {
+        "support_level": "untriaged"
+      },
+      "RGB_INTEGER": {
+        "support_level": "untriaged"
+      },
+      "RG_INTEGER": {
+        "support_level": "untriaged"
+      },
       "SAMPLER_2D": {
         "support_level": "untriaged"
       },
+      "SAMPLER_2D_ARRAY": {
+        "support_level": "untriaged"
+      },
+      "SAMPLER_2D_ARRAY_SHADOW": {
+        "support_level": "untriaged"
+      },
+      "SAMPLER_2D_SHADOW": {
+        "support_level": "untriaged"
+      },
+      "SAMPLER_3D": {
+        "support_level": "untriaged"
+      },
+      "SAMPLER_BINDING": {
+        "support_level": "untriaged"
+      },
       "SAMPLER_CUBE": {
         "support_level": "untriaged"
       },
+      "SAMPLER_CUBE_SHADOW": {
+        "support_level": "untriaged"
+      },
       "SAMPLES": {
         "support_level": "untriaged"
       },
@@ -22385,6 +24811,9 @@
       "SCISSOR_TEST": {
         "support_level": "untriaged"
       },
+      "SEPARATE_ATTRIBS": {
+        "support_level": "untriaged"
+      },
       "SHADER_TYPE": {
         "support_level": "untriaged"
       },
@@ -22394,6 +24823,12 @@
       "SHORT": {
         "support_level": "untriaged"
       },
+      "SIGNALED": {
+        "support_level": "untriaged"
+      },
+      "SIGNED_NORMALIZED": {
+        "support_level": "untriaged"
+      },
       "SRC_ALPHA": {
         "support_level": "untriaged"
       },
@@ -22403,9 +24838,27 @@
       "SRC_COLOR": {
         "support_level": "untriaged"
       },
+      "SRGB": {
+        "support_level": "untriaged"
+      },
+      "SRGB8": {
+        "support_level": "untriaged"
+      },
+      "SRGB8_ALPHA8": {
+        "support_level": "untriaged"
+      },
+      "STATIC_COPY": {
+        "support_level": "untriaged"
+      },
       "STATIC_DRAW": {
         "support_level": "untriaged"
       },
+      "STATIC_READ": {
+        "support_level": "untriaged"
+      },
+      "STENCIL": {
+        "support_level": "untriaged"
+      },
       "STENCIL_ATTACHMENT": {
         "support_level": "untriaged"
       },
@@ -22445,9 +24898,6 @@
       "STENCIL_FUNC": {
         "support_level": "untriaged"
       },
-      "STENCIL_INDEX": {
-        "support_level": "untriaged"
-      },
       "STENCIL_INDEX8": {
         "support_level": "untriaged"
       },
@@ -22469,12 +24919,36 @@
       "STENCIL_WRITEMASK": {
         "support_level": "untriaged"
       },
+      "STREAM_COPY": {
+        "support_level": "untriaged"
+      },
       "STREAM_DRAW": {
         "support_level": "untriaged"
       },
+      "STREAM_READ": {
+        "support_level": "untriaged"
+      },
       "SUBPIXEL_BITS": {
         "support_level": "untriaged"
       },
+      "SYNC_CONDITION": {
+        "support_level": "untriaged"
+      },
+      "SYNC_FENCE": {
+        "support_level": "untriaged"
+      },
+      "SYNC_FLAGS": {
+        "support_level": "untriaged"
+      },
+      "SYNC_FLUSH_COMMANDS_BIT": {
+        "support_level": "untriaged"
+      },
+      "SYNC_GPU_COMMANDS_COMPLETE": {
+        "support_level": "untriaged"
+      },
+      "SYNC_STATUS": {
+        "support_level": "untriaged"
+      },
       "TEXTURE": {
         "support_level": "untriaged"
       },
@@ -22577,12 +25051,33 @@
       "TEXTURE_2D": {
         "support_level": "untriaged"
       },
+      "TEXTURE_2D_ARRAY": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_3D": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_BASE_LEVEL": {
+        "support_level": "untriaged"
+      },
       "TEXTURE_BINDING_2D": {
         "support_level": "untriaged"
       },
+      "TEXTURE_BINDING_2D_ARRAY": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_BINDING_3D": {
+        "support_level": "untriaged"
+      },
       "TEXTURE_BINDING_CUBE_MAP": {
         "support_level": "untriaged"
       },
+      "TEXTURE_COMPARE_FUNC": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_COMPARE_MODE": {
+        "support_level": "untriaged"
+      },
       "TEXTURE_CUBE_MAP": {
         "support_level": "untriaged"
       },
@@ -22604,18 +25099,75 @@
       "TEXTURE_CUBE_MAP_POSITIVE_Z": {
         "support_level": "untriaged"
       },
+      "TEXTURE_IMMUTABLE_FORMAT": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_IMMUTABLE_LEVELS": {
+        "support_level": "untriaged"
+      },
       "TEXTURE_MAG_FILTER": {
         "support_level": "untriaged"
       },
+      "TEXTURE_MAX_LEVEL": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_MAX_LOD": {
+        "support_level": "untriaged"
+      },
       "TEXTURE_MIN_FILTER": {
         "support_level": "untriaged"
       },
+      "TEXTURE_MIN_LOD": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_WRAP_R": {
+        "support_level": "untriaged"
+      },
       "TEXTURE_WRAP_S": {
         "support_level": "untriaged"
       },
       "TEXTURE_WRAP_T": {
         "support_level": "untriaged"
       },
+      "TIMEOUT_EXPIRED": {
+        "support_level": "untriaged"
+      },
+      "TIMEOUT_IGNORED": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_ACTIVE": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_BINDING": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_BUFFER": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_BUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_BUFFER_MODE": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_BUFFER_SIZE": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_BUFFER_START": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_PAUSED": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_VARYINGS": {
+        "support_level": "untriaged"
+      },
       "TRIANGLES": {
         "support_level": "untriaged"
       },
@@ -22625,6 +25177,60 @@
       "TRIANGLE_STRIP": {
         "support_level": "untriaged"
       },
+      "UNIFORM_ARRAY_STRIDE": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BLOCK_ACTIVE_UNIFORMS": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BLOCK_BINDING": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BLOCK_DATA_SIZE": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BLOCK_INDEX": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BUFFER": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BUFFER_OFFSET_ALIGNMENT": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BUFFER_SIZE": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BUFFER_START": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_IS_ROW_MAJOR": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_MATRIX_STRIDE": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_OFFSET": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_SIZE": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_TYPE": {
+        "support_level": "untriaged"
+      },
       "UNPACK_ALIGNMENT": {
         "support_level": "untriaged"
       },
@@ -22634,15 +25240,69 @@
       "UNPACK_FLIP_Y_WEBGL": {
         "support_level": "untriaged"
       },
+      "UNPACK_IMAGE_HEIGHT": {
+        "support_level": "untriaged"
+      },
       "UNPACK_PREMULTIPLY_ALPHA_WEBGL": {
         "support_level": "untriaged"
       },
+      "UNPACK_ROW_LENGTH": {
+        "support_level": "untriaged"
+      },
+      "UNPACK_SKIP_IMAGES": {
+        "support_level": "untriaged"
+      },
+      "UNPACK_SKIP_PIXELS": {
+        "support_level": "untriaged"
+      },
+      "UNPACK_SKIP_ROWS": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNALED": {
+        "support_level": "untriaged"
+      },
       "UNSIGNED_BYTE": {
         "support_level": "untriaged"
       },
       "UNSIGNED_INT": {
         "support_level": "untriaged"
       },
+      "UNSIGNED_INT_10F_11F_11F_REV": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_24_8": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_2_10_10_10_REV": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_5_9_9_9_REV": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_SAMPLER_2D": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_SAMPLER_2D_ARRAY": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_SAMPLER_3D": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_SAMPLER_CUBE": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_VEC2": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_VEC3": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_VEC4": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_NORMALIZED": {
+        "support_level": "untriaged"
+      },
       "UNSIGNED_SHORT": {
         "support_level": "untriaged"
       },
@@ -22664,12 +25324,21 @@
       "VERSION": {
         "support_level": "untriaged"
       },
+      "VERTEX_ARRAY_BINDING": {
+        "support_level": "untriaged"
+      },
       "VERTEX_ATTRIB_ARRAY_BUFFER_BINDING": {
         "support_level": "untriaged"
       },
+      "VERTEX_ATTRIB_ARRAY_DIVISOR": {
+        "support_level": "untriaged"
+      },
       "VERTEX_ATTRIB_ARRAY_ENABLED": {
         "support_level": "untriaged"
       },
+      "VERTEX_ATTRIB_ARRAY_INTEGER": {
+        "support_level": "untriaged"
+      },
       "VERTEX_ATTRIB_ARRAY_NORMALIZED": {
         "support_level": "untriaged"
       },
@@ -22691,6 +25360,1694 @@
       "VIEWPORT": {
         "support_level": "untriaged"
       },
+      "WAIT_FAILED": {
+        "support_level": "untriaged"
+      },
+      "ZERO": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "WebGL2RenderingContext": {
+    "members": {
+      "ACTIVE_ATTRIBUTES": {
+        "support_level": "untriaged"
+      },
+      "ACTIVE_TEXTURE": {
+        "support_level": "untriaged"
+      },
+      "ACTIVE_UNIFORMS": {
+        "support_level": "untriaged"
+      },
+      "ACTIVE_UNIFORM_BLOCKS": {
+        "support_level": "untriaged"
+      },
+      "ALIASED_LINE_WIDTH_RANGE": {
+        "support_level": "untriaged"
+      },
+      "ALIASED_POINT_SIZE_RANGE": {
+        "support_level": "untriaged"
+      },
+      "ALPHA": {
+        "support_level": "untriaged"
+      },
+      "ALPHA_BITS": {
+        "support_level": "untriaged"
+      },
+      "ALREADY_SIGNALED": {
+        "support_level": "untriaged"
+      },
+      "ALWAYS": {
+        "support_level": "untriaged"
+      },
+      "ANY_SAMPLES_PASSED": {
+        "support_level": "untriaged"
+      },
+      "ANY_SAMPLES_PASSED_CONSERVATIVE": {
+        "support_level": "untriaged"
+      },
+      "ARRAY_BUFFER": {
+        "support_level": "untriaged"
+      },
+      "ARRAY_BUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "ATTACHED_SHADERS": {
+        "support_level": "untriaged"
+      },
+      "BACK": {
+        "support_level": "untriaged"
+      },
+      "BLEND": {
+        "support_level": "untriaged"
+      },
+      "BLEND_COLOR": {
+        "support_level": "untriaged"
+      },
+      "BLEND_DST_ALPHA": {
+        "support_level": "untriaged"
+      },
+      "BLEND_DST_RGB": {
+        "support_level": "untriaged"
+      },
+      "BLEND_EQUATION": {
+        "support_level": "untriaged"
+      },
+      "BLEND_EQUATION_ALPHA": {
+        "support_level": "untriaged"
+      },
+      "BLEND_EQUATION_RGB": {
+        "support_level": "untriaged"
+      },
+      "BLEND_SRC_ALPHA": {
+        "support_level": "untriaged"
+      },
+      "BLEND_SRC_RGB": {
+        "support_level": "untriaged"
+      },
+      "BLUE_BITS": {
+        "support_level": "untriaged"
+      },
+      "BOOL": {
+        "support_level": "untriaged"
+      },
+      "BOOL_VEC2": {
+        "support_level": "untriaged"
+      },
+      "BOOL_VEC3": {
+        "support_level": "untriaged"
+      },
+      "BOOL_VEC4": {
+        "support_level": "untriaged"
+      },
+      "BROWSER_DEFAULT_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "BUFFER_SIZE": {
+        "support_level": "untriaged"
+      },
+      "BUFFER_USAGE": {
+        "support_level": "untriaged"
+      },
+      "BYTE": {
+        "support_level": "untriaged"
+      },
+      "CCW": {
+        "support_level": "untriaged"
+      },
+      "CLAMP_TO_EDGE": {
+        "support_level": "untriaged"
+      },
+      "COLOR": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT0": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT1": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT10": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT11": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT12": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT13": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT14": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT15": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT2": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT3": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT4": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT5": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT6": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT7": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT8": {
+        "support_level": "untriaged"
+      },
+      "COLOR_ATTACHMENT9": {
+        "support_level": "untriaged"
+      },
+      "COLOR_BUFFER_BIT": {
+        "support_level": "untriaged"
+      },
+      "COLOR_CLEAR_VALUE": {
+        "support_level": "untriaged"
+      },
+      "COLOR_WRITEMASK": {
+        "support_level": "untriaged"
+      },
+      "COMPARE_REF_TO_TEXTURE": {
+        "support_level": "untriaged"
+      },
+      "COMPILE_STATUS": {
+        "support_level": "untriaged"
+      },
+      "COMPRESSED_TEXTURE_FORMATS": {
+        "support_level": "untriaged"
+      },
+      "CONDITION_SATISFIED": {
+        "support_level": "untriaged"
+      },
+      "CONSTANT_ALPHA": {
+        "support_level": "untriaged"
+      },
+      "CONSTANT_COLOR": {
+        "support_level": "untriaged"
+      },
+      "CONTEXT_LOST_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "COPY_READ_BUFFER": {
+        "support_level": "untriaged"
+      },
+      "COPY_READ_BUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "COPY_WRITE_BUFFER": {
+        "support_level": "untriaged"
+      },
+      "COPY_WRITE_BUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "CULL_FACE": {
+        "support_level": "untriaged"
+      },
+      "CULL_FACE_MODE": {
+        "support_level": "untriaged"
+      },
+      "CURRENT_PROGRAM": {
+        "support_level": "untriaged"
+      },
+      "CURRENT_QUERY": {
+        "support_level": "untriaged"
+      },
+      "CURRENT_VERTEX_ATTRIB": {
+        "support_level": "untriaged"
+      },
+      "CW": {
+        "support_level": "untriaged"
+      },
+      "DECR": {
+        "support_level": "untriaged"
+      },
+      "DECR_WRAP": {
+        "support_level": "untriaged"
+      },
+      "DELETE_STATUS": {
+        "support_level": "untriaged"
+      },
+      "DEPTH": {
+        "support_level": "untriaged"
+      },
+      "DEPTH24_STENCIL8": {
+        "support_level": "untriaged"
+      },
+      "DEPTH32F_STENCIL8": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_ATTACHMENT": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_BITS": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_BUFFER_BIT": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_CLEAR_VALUE": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_COMPONENT": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_COMPONENT16": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_COMPONENT24": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_COMPONENT32F": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_FUNC": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_RANGE": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_STENCIL": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_STENCIL_ATTACHMENT": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_TEST": {
+        "support_level": "untriaged"
+      },
+      "DEPTH_WRITEMASK": {
+        "support_level": "untriaged"
+      },
+      "DITHER": {
+        "support_level": "untriaged"
+      },
+      "DONT_CARE": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER0": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER1": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER10": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER11": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER12": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER13": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER14": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER15": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER2": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER3": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER4": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER5": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER6": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER7": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER8": {
+        "support_level": "untriaged"
+      },
+      "DRAW_BUFFER9": {
+        "support_level": "untriaged"
+      },
+      "DRAW_FRAMEBUFFER": {
+        "support_level": "untriaged"
+      },
+      "DRAW_FRAMEBUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "DST_ALPHA": {
+        "support_level": "untriaged"
+      },
+      "DST_COLOR": {
+        "support_level": "untriaged"
+      },
+      "DYNAMIC_COPY": {
+        "support_level": "untriaged"
+      },
+      "DYNAMIC_DRAW": {
+        "support_level": "untriaged"
+      },
+      "DYNAMIC_READ": {
+        "support_level": "untriaged"
+      },
+      "ELEMENT_ARRAY_BUFFER": {
+        "support_level": "untriaged"
+      },
+      "ELEMENT_ARRAY_BUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "EQUAL": {
+        "support_level": "untriaged"
+      },
+      "FASTEST": {
+        "support_level": "untriaged"
+      },
+      "FLOAT": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_32_UNSIGNED_INT_24_8_REV": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_MAT2": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_MAT2x3": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_MAT2x4": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_MAT3": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_MAT3x2": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_MAT3x4": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_MAT4": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_MAT4x2": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_MAT4x3": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_VEC2": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_VEC3": {
+        "support_level": "untriaged"
+      },
+      "FLOAT_VEC4": {
+        "support_level": "untriaged"
+      },
+      "FRAGMENT_SHADER": {
+        "support_level": "untriaged"
+      },
+      "FRAGMENT_SHADER_DERIVATIVE_HINT": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_BLUE_SIZE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_GREEN_SIZE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_OBJECT_NAME": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_RED_SIZE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_COMPLETE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_DEFAULT": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_INCOMPLETE_ATTACHMENT": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_INCOMPLETE_DIMENSIONS": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_INCOMPLETE_MULTISAMPLE": {
+        "support_level": "untriaged"
+      },
+      "FRAMEBUFFER_UNSUPPORTED": {
+        "support_level": "untriaged"
+      },
+      "FRONT": {
+        "support_level": "untriaged"
+      },
+      "FRONT_AND_BACK": {
+        "support_level": "untriaged"
+      },
+      "FRONT_FACE": {
+        "support_level": "untriaged"
+      },
+      "FUNC_ADD": {
+        "support_level": "untriaged"
+      },
+      "FUNC_REVERSE_SUBTRACT": {
+        "support_level": "untriaged"
+      },
+      "FUNC_SUBTRACT": {
+        "support_level": "untriaged"
+      },
+      "GENERATE_MIPMAP_HINT": {
+        "support_level": "untriaged"
+      },
+      "GEQUAL": {
+        "support_level": "untriaged"
+      },
+      "GREATER": {
+        "support_level": "untriaged"
+      },
+      "GREEN_BITS": {
+        "support_level": "untriaged"
+      },
+      "HALF_FLOAT": {
+        "support_level": "untriaged"
+      },
+      "HIGH_FLOAT": {
+        "support_level": "untriaged"
+      },
+      "HIGH_INT": {
+        "support_level": "untriaged"
+      },
+      "IMPLEMENTATION_COLOR_READ_FORMAT": {
+        "support_level": "untriaged"
+      },
+      "IMPLEMENTATION_COLOR_READ_TYPE": {
+        "support_level": "untriaged"
+      },
+      "INCR": {
+        "support_level": "untriaged"
+      },
+      "INCR_WRAP": {
+        "support_level": "untriaged"
+      },
+      "INT": {
+        "support_level": "untriaged"
+      },
+      "INTERLEAVED_ATTRIBS": {
+        "support_level": "untriaged"
+      },
+      "INT_2_10_10_10_REV": {
+        "support_level": "untriaged"
+      },
+      "INT_SAMPLER_2D": {
+        "support_level": "untriaged"
+      },
+      "INT_SAMPLER_2D_ARRAY": {
+        "support_level": "untriaged"
+      },
+      "INT_SAMPLER_3D": {
+        "support_level": "untriaged"
+      },
+      "INT_SAMPLER_CUBE": {
+        "support_level": "untriaged"
+      },
+      "INT_VEC2": {
+        "support_level": "untriaged"
+      },
+      "INT_VEC3": {
+        "support_level": "untriaged"
+      },
+      "INT_VEC4": {
+        "support_level": "untriaged"
+      },
+      "INVALID_ENUM": {
+        "support_level": "untriaged"
+      },
+      "INVALID_FRAMEBUFFER_OPERATION": {
+        "support_level": "untriaged"
+      },
+      "INVALID_INDEX": {
+        "support_level": "untriaged"
+      },
+      "INVALID_OPERATION": {
+        "support_level": "untriaged"
+      },
+      "INVALID_VALUE": {
+        "support_level": "untriaged"
+      },
+      "INVERT": {
+        "support_level": "untriaged"
+      },
+      "KEEP": {
+        "support_level": "untriaged"
+      },
+      "LEQUAL": {
+        "support_level": "untriaged"
+      },
+      "LESS": {
+        "support_level": "untriaged"
+      },
+      "LINEAR": {
+        "support_level": "untriaged"
+      },
+      "LINEAR_MIPMAP_LINEAR": {
+        "support_level": "untriaged"
+      },
+      "LINEAR_MIPMAP_NEAREST": {
+        "support_level": "untriaged"
+      },
+      "LINES": {
+        "support_level": "untriaged"
+      },
+      "LINE_LOOP": {
+        "support_level": "untriaged"
+      },
+      "LINE_STRIP": {
+        "support_level": "untriaged"
+      },
+      "LINE_WIDTH": {
+        "support_level": "untriaged"
+      },
+      "LINK_STATUS": {
+        "support_level": "untriaged"
+      },
+      "LOW_FLOAT": {
+        "support_level": "untriaged"
+      },
+      "LOW_INT": {
+        "support_level": "untriaged"
+      },
+      "LUMINANCE": {
+        "support_level": "untriaged"
+      },
+      "LUMINANCE_ALPHA": {
+        "support_level": "untriaged"
+      },
+      "MAX": {
+        "support_level": "untriaged"
+      },
+      "MAX_3D_TEXTURE_SIZE": {
+        "support_level": "untriaged"
+      },
+      "MAX_ARRAY_TEXTURE_LAYERS": {
+        "support_level": "untriaged"
+      },
+      "MAX_CLIENT_WAIT_TIMEOUT_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "MAX_COLOR_ATTACHMENTS": {
+        "support_level": "untriaged"
+      },
+      "MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS": {
+        "support_level": "untriaged"
+      },
+      "MAX_COMBINED_TEXTURE_IMAGE_UNITS": {
+        "support_level": "untriaged"
+      },
+      "MAX_COMBINED_UNIFORM_BLOCKS": {
+        "support_level": "untriaged"
+      },
+      "MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS": {
+        "support_level": "untriaged"
+      },
+      "MAX_CUBE_MAP_TEXTURE_SIZE": {
+        "support_level": "untriaged"
+      },
+      "MAX_DRAW_BUFFERS": {
+        "support_level": "untriaged"
+      },
+      "MAX_ELEMENTS_INDICES": {
+        "support_level": "untriaged"
+      },
+      "MAX_ELEMENTS_VERTICES": {
+        "support_level": "untriaged"
+      },
+      "MAX_ELEMENT_INDEX": {
+        "support_level": "untriaged"
+      },
+      "MAX_FRAGMENT_INPUT_COMPONENTS": {
+        "support_level": "untriaged"
+      },
+      "MAX_FRAGMENT_UNIFORM_BLOCKS": {
+        "support_level": "untriaged"
+      },
+      "MAX_FRAGMENT_UNIFORM_COMPONENTS": {
+        "support_level": "untriaged"
+      },
+      "MAX_FRAGMENT_UNIFORM_VECTORS": {
+        "support_level": "untriaged"
+      },
+      "MAX_PROGRAM_TEXEL_OFFSET": {
+        "support_level": "untriaged"
+      },
+      "MAX_RENDERBUFFER_SIZE": {
+        "support_level": "untriaged"
+      },
+      "MAX_SAMPLES": {
+        "support_level": "untriaged"
+      },
+      "MAX_SERVER_WAIT_TIMEOUT": {
+        "support_level": "untriaged"
+      },
+      "MAX_TEXTURE_IMAGE_UNITS": {
+        "support_level": "untriaged"
+      },
+      "MAX_TEXTURE_LOD_BIAS": {
+        "support_level": "untriaged"
+      },
+      "MAX_TEXTURE_SIZE": {
+        "support_level": "untriaged"
+      },
+      "MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS": {
+        "support_level": "untriaged"
+      },
+      "MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS": {
+        "support_level": "untriaged"
+      },
+      "MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS": {
+        "support_level": "untriaged"
+      },
+      "MAX_UNIFORM_BLOCK_SIZE": {
+        "support_level": "untriaged"
+      },
+      "MAX_UNIFORM_BUFFER_BINDINGS": {
+        "support_level": "untriaged"
+      },
+      "MAX_VARYING_COMPONENTS": {
+        "support_level": "untriaged"
+      },
+      "MAX_VARYING_VECTORS": {
+        "support_level": "untriaged"
+      },
+      "MAX_VERTEX_ATTRIBS": {
+        "support_level": "untriaged"
+      },
+      "MAX_VERTEX_OUTPUT_COMPONENTS": {
+        "support_level": "untriaged"
+      },
+      "MAX_VERTEX_TEXTURE_IMAGE_UNITS": {
+        "support_level": "untriaged"
+      },
+      "MAX_VERTEX_UNIFORM_BLOCKS": {
+        "support_level": "untriaged"
+      },
+      "MAX_VERTEX_UNIFORM_COMPONENTS": {
+        "support_level": "untriaged"
+      },
+      "MAX_VERTEX_UNIFORM_VECTORS": {
+        "support_level": "untriaged"
+      },
+      "MAX_VIEWPORT_DIMS": {
+        "support_level": "untriaged"
+      },
+      "MEDIUM_FLOAT": {
+        "support_level": "untriaged"
+      },
+      "MEDIUM_INT": {
+        "support_level": "untriaged"
+      },
+      "MIN": {
+        "support_level": "untriaged"
+      },
+      "MIN_PROGRAM_TEXEL_OFFSET": {
+        "support_level": "untriaged"
+      },
+      "MIRRORED_REPEAT": {
+        "support_level": "untriaged"
+      },
+      "NEAREST": {
+        "support_level": "untriaged"
+      },
+      "NEAREST_MIPMAP_LINEAR": {
+        "support_level": "untriaged"
+      },
+      "NEAREST_MIPMAP_NEAREST": {
+        "support_level": "untriaged"
+      },
+      "NEVER": {
+        "support_level": "untriaged"
+      },
+      "NICEST": {
+        "support_level": "untriaged"
+      },
+      "NONE": {
+        "support_level": "untriaged"
+      },
+      "NOTEQUAL": {
+        "support_level": "untriaged"
+      },
+      "NO_ERROR": {
+        "support_level": "untriaged"
+      },
+      "OBJECT_TYPE": {
+        "support_level": "untriaged"
+      },
+      "ONE": {
+        "support_level": "untriaged"
+      },
+      "ONE_MINUS_CONSTANT_ALPHA": {
+        "support_level": "untriaged"
+      },
+      "ONE_MINUS_CONSTANT_COLOR": {
+        "support_level": "untriaged"
+      },
+      "ONE_MINUS_DST_ALPHA": {
+        "support_level": "untriaged"
+      },
+      "ONE_MINUS_DST_COLOR": {
+        "support_level": "untriaged"
+      },
+      "ONE_MINUS_SRC_ALPHA": {
+        "support_level": "untriaged"
+      },
+      "ONE_MINUS_SRC_COLOR": {
+        "support_level": "untriaged"
+      },
+      "OUT_OF_MEMORY": {
+        "support_level": "untriaged"
+      },
+      "PACK_ALIGNMENT": {
+        "support_level": "untriaged"
+      },
+      "PACK_ROW_LENGTH": {
+        "support_level": "untriaged"
+      },
+      "PACK_SKIP_PIXELS": {
+        "support_level": "untriaged"
+      },
+      "PACK_SKIP_ROWS": {
+        "support_level": "untriaged"
+      },
+      "PIXEL_PACK_BUFFER": {
+        "support_level": "untriaged"
+      },
+      "PIXEL_PACK_BUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "PIXEL_UNPACK_BUFFER": {
+        "support_level": "untriaged"
+      },
+      "PIXEL_UNPACK_BUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "POINTS": {
+        "support_level": "untriaged"
+      },
+      "POLYGON_OFFSET_FACTOR": {
+        "support_level": "untriaged"
+      },
+      "POLYGON_OFFSET_FILL": {
+        "support_level": "untriaged"
+      },
+      "POLYGON_OFFSET_UNITS": {
+        "support_level": "untriaged"
+      },
+      "QUERY_RESULT": {
+        "support_level": "untriaged"
+      },
+      "QUERY_RESULT_AVAILABLE": {
+        "support_level": "untriaged"
+      },
+      "R11F_G11F_B10F": {
+        "support_level": "untriaged"
+      },
+      "R16F": {
+        "support_level": "untriaged"
+      },
+      "R16I": {
+        "support_level": "untriaged"
+      },
+      "R16UI": {
+        "support_level": "untriaged"
+      },
+      "R32F": {
+        "support_level": "untriaged"
+      },
+      "R32I": {
+        "support_level": "untriaged"
+      },
+      "R32UI": {
+        "support_level": "untriaged"
+      },
+      "R8": {
+        "support_level": "untriaged"
+      },
+      "R8I": {
+        "support_level": "untriaged"
+      },
+      "R8UI": {
+        "support_level": "untriaged"
+      },
+      "R8_SNORM": {
+        "support_level": "untriaged"
+      },
+      "RASTERIZER_DISCARD": {
+        "support_level": "untriaged"
+      },
+      "READ_BUFFER": {
+        "support_level": "untriaged"
+      },
+      "READ_FRAMEBUFFER": {
+        "support_level": "untriaged"
+      },
+      "READ_FRAMEBUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "RED": {
+        "support_level": "untriaged"
+      },
+      "RED_BITS": {
+        "support_level": "untriaged"
+      },
+      "RED_INTEGER": {
+        "support_level": "untriaged"
+      },
+      "RENDERBUFFER": {
+        "support_level": "untriaged"
+      },
+      "RENDERBUFFER_ALPHA_SIZE": {
+        "support_level": "untriaged"
+      },
+      "RENDERBUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "RENDERBUFFER_BLUE_SIZE": {
+        "support_level": "untriaged"
+      },
+      "RENDERBUFFER_DEPTH_SIZE": {
+        "support_level": "untriaged"
+      },
+      "RENDERBUFFER_GREEN_SIZE": {
+        "support_level": "untriaged"
+      },
+      "RENDERBUFFER_HEIGHT": {
+        "support_level": "untriaged"
+      },
+      "RENDERBUFFER_INTERNAL_FORMAT": {
+        "support_level": "untriaged"
+      },
+      "RENDERBUFFER_RED_SIZE": {
+        "support_level": "untriaged"
+      },
+      "RENDERBUFFER_SAMPLES": {
+        "support_level": "untriaged"
+      },
+      "RENDERBUFFER_STENCIL_SIZE": {
+        "support_level": "untriaged"
+      },
+      "RENDERBUFFER_WIDTH": {
+        "support_level": "untriaged"
+      },
+      "RENDERER": {
+        "support_level": "untriaged"
+      },
+      "REPEAT": {
+        "support_level": "untriaged"
+      },
+      "REPLACE": {
+        "support_level": "untriaged"
+      },
+      "RG": {
+        "support_level": "untriaged"
+      },
+      "RG16F": {
+        "support_level": "untriaged"
+      },
+      "RG16I": {
+        "support_level": "untriaged"
+      },
+      "RG16UI": {
+        "support_level": "untriaged"
+      },
+      "RG32F": {
+        "support_level": "untriaged"
+      },
+      "RG32I": {
+        "support_level": "untriaged"
+      },
+      "RG32UI": {
+        "support_level": "untriaged"
+      },
+      "RG8": {
+        "support_level": "untriaged"
+      },
+      "RG8I": {
+        "support_level": "untriaged"
+      },
+      "RG8UI": {
+        "support_level": "untriaged"
+      },
+      "RG8_SNORM": {
+        "support_level": "untriaged"
+      },
+      "RGB": {
+        "support_level": "untriaged"
+      },
+      "RGB10_A2": {
+        "support_level": "untriaged"
+      },
+      "RGB10_A2UI": {
+        "support_level": "untriaged"
+      },
+      "RGB16F": {
+        "support_level": "untriaged"
+      },
+      "RGB16I": {
+        "support_level": "untriaged"
+      },
+      "RGB16UI": {
+        "support_level": "untriaged"
+      },
+      "RGB32F": {
+        "support_level": "untriaged"
+      },
+      "RGB32I": {
+        "support_level": "untriaged"
+      },
+      "RGB32UI": {
+        "support_level": "untriaged"
+      },
+      "RGB565": {
+        "support_level": "untriaged"
+      },
+      "RGB5_A1": {
+        "support_level": "untriaged"
+      },
+      "RGB8": {
+        "support_level": "untriaged"
+      },
+      "RGB8I": {
+        "support_level": "untriaged"
+      },
+      "RGB8UI": {
+        "support_level": "untriaged"
+      },
+      "RGB8_SNORM": {
+        "support_level": "untriaged"
+      },
+      "RGB9_E5": {
+        "support_level": "untriaged"
+      },
+      "RGBA": {
+        "support_level": "untriaged"
+      },
+      "RGBA16F": {
+        "support_level": "untriaged"
+      },
+      "RGBA16I": {
+        "support_level": "untriaged"
+      },
+      "RGBA16UI": {
+        "support_level": "untriaged"
+      },
+      "RGBA32F": {
+        "support_level": "untriaged"
+      },
+      "RGBA32I": {
+        "support_level": "untriaged"
+      },
+      "RGBA32UI": {
+        "support_level": "untriaged"
+      },
+      "RGBA4": {
+        "support_level": "untriaged"
+      },
+      "RGBA8": {
+        "support_level": "untriaged"
+      },
+      "RGBA8I": {
+        "support_level": "untriaged"
+      },
+      "RGBA8UI": {
+        "support_level": "untriaged"
+      },
+      "RGBA8_SNORM": {
+        "support_level": "untriaged"
+      },
+      "RGBA_INTEGER": {
+        "support_level": "untriaged"
+      },
+      "RGB_INTEGER": {
+        "support_level": "untriaged"
+      },
+      "RG_INTEGER": {
+        "support_level": "untriaged"
+      },
+      "SAMPLER_2D": {
+        "support_level": "untriaged"
+      },
+      "SAMPLER_2D_ARRAY": {
+        "support_level": "untriaged"
+      },
+      "SAMPLER_2D_ARRAY_SHADOW": {
+        "support_level": "untriaged"
+      },
+      "SAMPLER_2D_SHADOW": {
+        "support_level": "untriaged"
+      },
+      "SAMPLER_3D": {
+        "support_level": "untriaged"
+      },
+      "SAMPLER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "SAMPLER_CUBE": {
+        "support_level": "untriaged"
+      },
+      "SAMPLER_CUBE_SHADOW": {
+        "support_level": "untriaged"
+      },
+      "SAMPLES": {
+        "support_level": "untriaged"
+      },
+      "SAMPLE_ALPHA_TO_COVERAGE": {
+        "support_level": "untriaged"
+      },
+      "SAMPLE_BUFFERS": {
+        "support_level": "untriaged"
+      },
+      "SAMPLE_COVERAGE": {
+        "support_level": "untriaged"
+      },
+      "SAMPLE_COVERAGE_INVERT": {
+        "support_level": "untriaged"
+      },
+      "SAMPLE_COVERAGE_VALUE": {
+        "support_level": "untriaged"
+      },
+      "SCISSOR_BOX": {
+        "support_level": "untriaged"
+      },
+      "SCISSOR_TEST": {
+        "support_level": "untriaged"
+      },
+      "SEPARATE_ATTRIBS": {
+        "support_level": "untriaged"
+      },
+      "SHADER_TYPE": {
+        "support_level": "untriaged"
+      },
+      "SHADING_LANGUAGE_VERSION": {
+        "support_level": "untriaged"
+      },
+      "SHORT": {
+        "support_level": "untriaged"
+      },
+      "SIGNALED": {
+        "support_level": "untriaged"
+      },
+      "SIGNED_NORMALIZED": {
+        "support_level": "untriaged"
+      },
+      "SRC_ALPHA": {
+        "support_level": "untriaged"
+      },
+      "SRC_ALPHA_SATURATE": {
+        "support_level": "untriaged"
+      },
+      "SRC_COLOR": {
+        "support_level": "untriaged"
+      },
+      "SRGB": {
+        "support_level": "untriaged"
+      },
+      "SRGB8": {
+        "support_level": "untriaged"
+      },
+      "SRGB8_ALPHA8": {
+        "support_level": "untriaged"
+      },
+      "STATIC_COPY": {
+        "support_level": "untriaged"
+      },
+      "STATIC_DRAW": {
+        "support_level": "untriaged"
+      },
+      "STATIC_READ": {
+        "support_level": "untriaged"
+      },
+      "STENCIL": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_ATTACHMENT": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_BACK_FAIL": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_BACK_FUNC": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_BACK_PASS_DEPTH_FAIL": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_BACK_PASS_DEPTH_PASS": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_BACK_REF": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_BACK_VALUE_MASK": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_BACK_WRITEMASK": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_BITS": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_BUFFER_BIT": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_CLEAR_VALUE": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_FAIL": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_FUNC": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_INDEX": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_INDEX8": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_PASS_DEPTH_FAIL": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_PASS_DEPTH_PASS": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_REF": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_TEST": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_VALUE_MASK": {
+        "support_level": "untriaged"
+      },
+      "STENCIL_WRITEMASK": {
+        "support_level": "untriaged"
+      },
+      "STREAM_COPY": {
+        "support_level": "untriaged"
+      },
+      "STREAM_DRAW": {
+        "support_level": "untriaged"
+      },
+      "STREAM_READ": {
+        "support_level": "untriaged"
+      },
+      "SUBPIXEL_BITS": {
+        "support_level": "untriaged"
+      },
+      "SYNC_CONDITION": {
+        "support_level": "untriaged"
+      },
+      "SYNC_FENCE": {
+        "support_level": "untriaged"
+      },
+      "SYNC_FLAGS": {
+        "support_level": "untriaged"
+      },
+      "SYNC_FLUSH_COMMANDS_BIT": {
+        "support_level": "untriaged"
+      },
+      "SYNC_GPU_COMMANDS_COMPLETE": {
+        "support_level": "untriaged"
+      },
+      "SYNC_STATUS": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE0": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE1": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE10": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE11": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE12": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE13": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE14": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE15": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE16": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE17": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE18": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE19": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE2": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE20": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE21": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE22": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE23": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE24": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE25": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE26": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE27": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE28": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE29": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE3": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE30": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE31": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE4": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE5": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE6": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE7": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE8": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE9": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_2D": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_2D_ARRAY": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_3D": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_BASE_LEVEL": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_BINDING_2D": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_BINDING_2D_ARRAY": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_BINDING_3D": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_BINDING_CUBE_MAP": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_COMPARE_FUNC": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_COMPARE_MODE": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_CUBE_MAP": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_CUBE_MAP_NEGATIVE_X": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_CUBE_MAP_NEGATIVE_Y": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_CUBE_MAP_NEGATIVE_Z": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_CUBE_MAP_POSITIVE_X": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_CUBE_MAP_POSITIVE_Y": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_CUBE_MAP_POSITIVE_Z": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_IMMUTABLE_FORMAT": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_IMMUTABLE_LEVELS": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_MAG_FILTER": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_MAX_LEVEL": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_MAX_LOD": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_MIN_FILTER": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_MIN_LOD": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_WRAP_R": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_WRAP_S": {
+        "support_level": "untriaged"
+      },
+      "TEXTURE_WRAP_T": {
+        "support_level": "untriaged"
+      },
+      "TIMEOUT_EXPIRED": {
+        "support_level": "untriaged"
+      },
+      "TIMEOUT_IGNORED": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_ACTIVE": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_BINDING": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_BUFFER": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_BUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_BUFFER_MODE": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_BUFFER_SIZE": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_BUFFER_START": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_PAUSED": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN": {
+        "support_level": "untriaged"
+      },
+      "TRANSFORM_FEEDBACK_VARYINGS": {
+        "support_level": "untriaged"
+      },
+      "TRIANGLES": {
+        "support_level": "untriaged"
+      },
+      "TRIANGLE_FAN": {
+        "support_level": "untriaged"
+      },
+      "TRIANGLE_STRIP": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_ARRAY_STRIDE": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BLOCK_ACTIVE_UNIFORMS": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BLOCK_BINDING": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BLOCK_DATA_SIZE": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BLOCK_INDEX": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BUFFER": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BUFFER_OFFSET_ALIGNMENT": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BUFFER_SIZE": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_BUFFER_START": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_IS_ROW_MAJOR": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_MATRIX_STRIDE": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_OFFSET": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_SIZE": {
+        "support_level": "untriaged"
+      },
+      "UNIFORM_TYPE": {
+        "support_level": "untriaged"
+      },
+      "UNPACK_ALIGNMENT": {
+        "support_level": "untriaged"
+      },
+      "UNPACK_COLORSPACE_CONVERSION_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "UNPACK_FLIP_Y_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "UNPACK_IMAGE_HEIGHT": {
+        "support_level": "untriaged"
+      },
+      "UNPACK_PREMULTIPLY_ALPHA_WEBGL": {
+        "support_level": "untriaged"
+      },
+      "UNPACK_ROW_LENGTH": {
+        "support_level": "untriaged"
+      },
+      "UNPACK_SKIP_IMAGES": {
+        "support_level": "untriaged"
+      },
+      "UNPACK_SKIP_PIXELS": {
+        "support_level": "untriaged"
+      },
+      "UNPACK_SKIP_ROWS": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNALED": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_BYTE": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_10F_11F_11F_REV": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_24_8": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_2_10_10_10_REV": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_5_9_9_9_REV": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_SAMPLER_2D": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_SAMPLER_2D_ARRAY": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_SAMPLER_3D": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_SAMPLER_CUBE": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_VEC2": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_VEC3": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_INT_VEC4": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_NORMALIZED": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_SHORT": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_SHORT_4_4_4_4": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_SHORT_5_5_5_1": {
+        "support_level": "untriaged"
+      },
+      "UNSIGNED_SHORT_5_6_5": {
+        "support_level": "untriaged"
+      },
+      "VALIDATE_STATUS": {
+        "support_level": "untriaged"
+      },
+      "VENDOR": {
+        "support_level": "untriaged"
+      },
+      "VERSION": {
+        "support_level": "untriaged"
+      },
+      "VERTEX_ARRAY_BINDING": {
+        "support_level": "untriaged"
+      },
+      "VERTEX_ATTRIB_ARRAY_BUFFER_BINDING": {
+        "support_level": "untriaged"
+      },
+      "VERTEX_ATTRIB_ARRAY_DIVISOR": {
+        "support_level": "untriaged"
+      },
+      "VERTEX_ATTRIB_ARRAY_ENABLED": {
+        "support_level": "untriaged"
+      },
+      "VERTEX_ATTRIB_ARRAY_INTEGER": {
+        "support_level": "untriaged"
+      },
+      "VERTEX_ATTRIB_ARRAY_NORMALIZED": {
+        "support_level": "untriaged"
+      },
+      "VERTEX_ATTRIB_ARRAY_POINTER": {
+        "support_level": "untriaged"
+      },
+      "VERTEX_ATTRIB_ARRAY_SIZE": {
+        "support_level": "untriaged"
+      },
+      "VERTEX_ATTRIB_ARRAY_STRIDE": {
+        "support_level": "untriaged"
+      },
+      "VERTEX_ATTRIB_ARRAY_TYPE": {
+        "support_level": "untriaged"
+      },
+      "VERTEX_SHADER": {
+        "support_level": "untriaged"
+      },
+      "VIEWPORT": {
+        "support_level": "untriaged"
+      },
+      "WAIT_FAILED": {
+        "support_level": "untriaged"
+      },
       "ZERO": {
         "support_level": "untriaged"
       },
diff --git a/tools/dom/scripts/css_code_generator.py b/tools/dom/scripts/css_code_generator.py
index bbbd9eb..1d921ef 100644
--- a/tools/dom/scripts/css_code_generator.py
+++ b/tools/dom/scripts/css_code_generator.py
@@ -144,7 +144,6 @@
   }
 
 
-  @DomName('CSSStyleDeclaration.setProperty')
   void setProperty(String propertyName, String value, [String priority]) {
     return _setPropertyHelper(_browserPropertyName(propertyName),
       value, priority);
diff --git a/tools/dom/scripts/dartdomgenerator.py b/tools/dom/scripts/dartdomgenerator.py
index 2a07584..9148767 100755
--- a/tools/dom/scripts/dartdomgenerator.py
+++ b/tools/dom/scripts/dartdomgenerator.py
@@ -88,7 +88,7 @@
   return common_database
 
 def GenerateFromDatabase(common_database,
-                         dart2js_output_dir, dartium_output_dir, blink_output_dir,
+                         dart2js_output_dir,
                          update_dom_metadata=False,
                          logging_level=logging.WARNING, dart_js_interop=False):
   print '\n ----- Accessing DOM using %s -----\n' % ('dart:js' if dart_js_interop else 'C++')
@@ -136,11 +136,13 @@
     event_generator = HtmlEventGenerator(webkit_database, renamer, metadata,
         template_loader)
 
-    def generate_interface(interface):
+    def generate_interface(interface, gl_constants=None):
       backend = backend_factory(interface)
       interface_generator = HtmlDartInterfaceGenerator(
           options, dart_library_emitter, event_generator, interface, backend)
       interface_generator.Generate()
+      if len(backend._gl_constants) > 0 and not(gl_constants is None):
+          gl_constants.extend(backend._gl_constants)
 
     generator.Generate(webkit_database, common_database, generate_interface)
 
@@ -171,49 +173,8 @@
 
     print 'Generated dart2js in %s seconds' % round(time.time() - start_time, 2)
 
-  if dartium_output_dir:
-    template_paths = ['html/dartium', 'html/impl', 'html/interface', '']
-    template_loader = TemplateLoader(template_dir,
-                                     template_paths,
-                                     {'DARTIUM': True,
-                                      'DART2JS': False,
-                                      'JSINTEROP': dart_js_interop})
-    backend_options = GeneratorOptions(
-        template_loader, webkit_database, type_registry, renamer,
-        metadata, dart_js_interop)
-    cpp_output_dir = os.path.join(dartium_output_dir, 'cpp')
-    cpp_library_emitter = CPPLibraryEmitter(emitters, cpp_output_dir)
-    dart_output_dir = os.path.join(dartium_output_dir, 'dart')
-    backend_factory = lambda interface:\
-        DartiumBackend(interface, cpp_library_emitter, backend_options, _logger)
-    dart_libraries = DartLibraries(
-        HTML_LIBRARY_NAMES, template_loader, 'dartium', dartium_output_dir, dart_js_interop)
-
-    print '\nGenerating dartium:\n'
-    start_time = time.time()
-
-    RunGenerator(dart_libraries, dart_output_dir, template_loader,
-                 backend_factory, dart_js_interop)
-    print 'Generated dartium in %s seconds' % round(time.time() - start_time, 2)
-
-    cpp_library_emitter.EmitDerivedSources(
-        template_loader.Load('cpp_derived_sources.template'),
-        dartium_output_dir)
-    cpp_library_emitter.EmitResolver(
-        template_loader.Load('cpp_resolver.template'), dartium_output_dir)
-    cpp_library_emitter.EmitClassIdTable(
-        webkit_database, dartium_output_dir, type_registry, renamer)
-
   emitters.Flush()
 
-  if blink_output_dir:
-    print '\nGenerating _blink:\n'
-    start_time = time.time()
-
-    Generate_Blink(blink_output_dir, webkit_database, type_registry)
-
-    print 'Generated _blink in %s seconds' % round(time.time() - start_time, 2)
-
   if update_dom_metadata:
     metadata.Flush()
 
@@ -312,12 +273,6 @@
   dart2js_output_dir = None
   if 'htmldart2js' in systems:
     dart2js_output_dir = os.path.join(output_dir, 'dart2js')
-  dartium_output_dir = None
-  if 'htmldartium' in systems:
-    dartium_output_dir = os.path.join(output_dir, 'dartium')
-  blink_output_dir = None
-  if '_blink' in systems:
-    blink_output_dir = os.path.join(output_dir, 'dartium')
 
   logging_level = options.logging_level \
     if options.logging == logging.NOTSET else options.logging
@@ -331,8 +286,6 @@
 
   GenerateFromDatabase(database,
                        dart2js_output_dir,
-                       dartium_output_dir,
-                       blink_output_dir,
                        options.update_dom_metadata,
                        logging_level,
                        options.dart_js_interop)
@@ -347,32 +300,6 @@
           os.path.join(dart2js_output_dir, '%s_dart2js.dart' % library_name),
           os.path.join('..', '..', '..', 'sdk', 'lib', library_name, 'dart2js'))
 
-  if 'htmldartium' in systems:
-    _logger.info('Generating dartium single files.')
-    file_generation_start_time = time.time()
-
-    for library_name in HTML_LIBRARY_NAMES:
-      GenerateSingleFile(
-          os.path.join(dartium_output_dir, '%s_dartium.dart' % library_name),
-          os.path.join('..', '..', '..', 'sdk', 'lib', library_name, 'dartium'))
-
-    if (not(options.no_cached_patches)):
-      # Blow away the cached_patches.dart needs to be re-generated for Dartium
-      # see tools/dartium/generate_patches.sh
-      cached_patches_filename = os.path.join('..', '..', '..', 'sdk', 'lib', 'js', 'dartium',
-                                             'cached_patches.dart')
-      cached_patches = open(cached_patches_filename, 'w')
-      cached_patches.write(CACHED_PATCHES);
-      cached_patches.close()
-
-  if '_blink' in systems:
-    _logger.info('Generating dartium _blink file.')
-    file_generation_start_time = time.time()
-
-    GenerateSingleFile(
-        os.path.join(dartium_output_dir, '%s_dartium.dart' % '_blink'),
-        os.path.join('..', '..', '..', 'sdk', 'lib', '_blink', 'dartium'))
-
   print '\nGenerating single file %s seconds' % round(time.time() - file_generation_start_time, 2)
 
   end_time = time.time()
diff --git a/tools/dom/scripts/dartgenerator.py b/tools/dom/scripts/dartgenerator.py
index 52ea4b5..8faa945 100755
--- a/tools/dom/scripts/dartgenerator.py
+++ b/tools/dom/scripts/dartgenerator.py
@@ -12,7 +12,7 @@
 import re
 import shutil
 from generator import *
-from idlnode import IDLType, resolveTypedef
+from idlnode import IDLType, IDLInterface, resolveTypedef
 
 _logger = logging.getLogger('dartgenerator')
 
@@ -176,6 +176,10 @@
         continue
       interfaces.append(interface)
 
+    # All web_gl constants from WebGLRenderingContextBase, WebGL2RenderingContextBase, WebGLDrawBuffers are generated
+    # in a synthesized class WebGL.  Those IDLConstants are in web_gl_constants.
+    web_gl_constants = []
+
     # Render all interfaces into Dart and save them in files.
     for interface in self._PreOrderInterfaces(interfaces):
       interface_name = interface.id
@@ -186,7 +190,13 @@
         continue
 
       _logger.info('Generating %s' % interface.id)
-      generate_interface(interface)
+      generate_interface(interface, gl_constants = web_gl_constants)
+
+    # Generate the WEB_GL constants
+    web_gl_constants_interface = IDLInterface(None, "WebGL")
+    web_gl_constants_interface.constants = web_gl_constants
+    self._database._all_interfaces['WebGL'] = web_gl_constants_interface
+    generate_interface(web_gl_constants_interface)
 
   def _PreOrderInterfaces(self, interfaces):
     """Returns the interfaces in pre-order, i.e. parents first."""
diff --git a/tools/dom/scripts/dartmetadata.py b/tools/dom/scripts/dartmetadata.py
index 3b7ac56..39736b1 100644
--- a/tools/dom/scripts/dartmetadata.py
+++ b/tools/dom/scripts/dartmetadata.py
@@ -456,19 +456,16 @@
 
 _blink_experimental_annotations = [
   "@SupportedBrowser(SupportedBrowser.CHROME)",
-  "@Experimental()",
 ]
 
 _indexed_db_annotations = [
   "@SupportedBrowser(SupportedBrowser.CHROME)",
   "@SupportedBrowser(SupportedBrowser.FIREFOX, '15')",
   "@SupportedBrowser(SupportedBrowser.IE, '10')",
-  "@Experimental()",
 ]
 
 _file_system_annotations = [
   "@SupportedBrowser(SupportedBrowser.CHROME)",
-  "@Experimental()",
 ]
 
 _all_but_ie9_annotations = [
@@ -494,17 +491,14 @@
 
 _rtc_annotations = [ # Note: Firefox nightly builds also support this.
   "@SupportedBrowser(SupportedBrowser.CHROME)",
-  "@Experimental()",
 ]
 
 _shadow_dom_annotations = [
   "@SupportedBrowser(SupportedBrowser.CHROME, '26')",
-  "@Experimental()",
 ]
 
 _speech_recognition_annotations = [
   "@SupportedBrowser(SupportedBrowser.CHROME, '25')",
-  "@Experimental()",
 ]
 
 _svg_annotations = _all_but_ie9_annotations;
@@ -512,13 +506,11 @@
 _web_sql_annotations = [
   "@SupportedBrowser(SupportedBrowser.CHROME)",
   "@SupportedBrowser(SupportedBrowser.SAFARI)",
-  "@Experimental()",
 ]
 
 _webgl_annotations = [
   "@SupportedBrowser(SupportedBrowser.CHROME)",
   "@SupportedBrowser(SupportedBrowser.FIREFOX)",
-  "@Experimental()",
 ]
 
 _web_audio_annotations = _webgl_annotations
@@ -526,7 +518,6 @@
 _webkit_experimental_annotations = [
   "@SupportedBrowser(SupportedBrowser.CHROME)",
   "@SupportedBrowser(SupportedBrowser.SAFARI)",
-  "@Experimental()",
 ]
 
 # Annotations to be placed on generated members.
@@ -558,17 +549,15 @@
   'Window.webkitResolveLocalFileSystemURL': _file_system_annotations,
   'Element.createShadowRoot': [
     "@SupportedBrowser(SupportedBrowser.CHROME, '25')",
-    "@Experimental()",
   ],
   'Element.ontransitionend': _all_but_ie9_annotations,
   # Placeholder to add experimental flag, implementation for this is
   # pending in a separate CL.
-  'Element.webkitMatchesSelector': ['@Experimental()'],
+  'Element.webkitMatchesSelector': [],
   'Event.clipboardData': [
     "@SupportedBrowser(SupportedBrowser.CHROME)",
     "@SupportedBrowser(SupportedBrowser.FIREFOX)",
     "@SupportedBrowser(SupportedBrowser.SAFARI)",
-    "@Experimental()",
   ],
   'FormData': _all_but_ie9_annotations,
   'HashChangeEvent': [
@@ -619,7 +608,6 @@
     "@SupportedBrowser(SupportedBrowser.CHROME)",
     "@SupportedBrowser(SupportedBrowser.FIREFOX)",
     "@SupportedBrowser(SupportedBrowser.SAFARI)",
-    "@Experimental()",
   ],
   'Performance': _performance_annotations,
   'PopStateEvent': _history_annotations,
@@ -760,12 +748,7 @@
       key = interface.id
       dom_name = interface.javascript_binding_name
 
-    annotations = ["@DomName('" + dom_name + "')"]
-
-    # Only add this for members, so we don't add DocsEditable to templated
-    # classes (they get it from the default class template)
-    if member_name:
-      annotations.append('@DocsEditable()');
+    annotations = []
 
     if key in _annotations:
       annotations.extend(_annotations[key])
@@ -893,10 +876,6 @@
     if dart_action:
       if dart_action == 'unstable':
         annotations.append('@Unstable()')
-      elif dart_action == 'experimental':
-        if comment:
-          annotations.append('// %s' % comment)
-        annotations.append('@Experimental() // %s' % support_level)
       elif dart_action == 'suppress':
         if comment:
           annotations.append('// %s' % comment)
@@ -909,16 +888,6 @@
         pass
       else:
         _logger.warn('Unknown dart_action - %s:%s' % (interface_id, member_id))
-    elif support_level == 'untriaged':
-      annotations.append('@Experimental() // untriaged')
-    elif support_level == 'experimental':
-      if comment:
-        annotations.append('// %s' % comment)
-      annotations.append('@Experimental()')
-    elif support_level == 'nonstandard':
-      if comment:
-        annotations.append('// %s' % comment)
-      annotations.append('@Experimental() // non-standard')
     elif support_level == 'stable':
       pass
     elif support_level == 'deprecated':
diff --git a/tools/dom/scripts/htmldartgenerator.py b/tools/dom/scripts/htmldartgenerator.py
index 52b1dfe..cbc0417 100644
--- a/tools/dom/scripts/htmldartgenerator.py
+++ b/tools/dom/scripts/htmldartgenerator.py
@@ -64,16 +64,20 @@
 
   def EmitEventGetter(self, events_class_name):
     self._members_emitter.Emit(
-        "\n  @DocsEditable()"
-        "\n  @DomName('EventTarget.addEventListener, "
         "EventTarget.removeEventListener, EventTarget.dispatchEvent')"
         "\n  @deprecated"
         "\n  $TYPE get on =>\n    new $TYPE(this);\n",
         TYPE=events_class_name)
 
   def AddMembers(self, interface, declare_only=False, dart_js_interop=False):
-    for const in sorted(interface.constants, ConstantOutputOrder):
-      self.AddConstant(const)
+    if self._interface.id == 'WebGLRenderingContextBase' or self._interface.id == 'WebGL2RenderingContextBase' or \
+        self._interface.id == 'WebGLDrawBuffers':
+      # Constants in classes WebGLRenderingContextBase, WebGL2RenderingContext, WebGLDrawBuffers are consolidated into
+      # one synthesized class (WebGL).
+      self._gl_constants.extend(interface.constants);
+    else:
+      for const in sorted(interface.constants, ConstantOutputOrder):
+        self.AddConstant(const)
 
     for attr in sorted(interface.attributes, ConstantOutputOrder):
       if attr.type.id != 'EventHandler' and attr.type.id != 'EventListener':
@@ -111,28 +115,7 @@
           convert_to_future_members):
         self.AddOperation(ConvertToFuture(info), declare_only)
 
-  def _HoistableConstants(self, interface):
-    consts = []
-    if interface.parents:
-      for parent in interface.parents:
-        parent_interface = self._database.GetInterface(parent.type.id)
-        # TODO(vsm): This should be a general check.  E.g., on private
-        # interfaces?
-        if parent.type.id == 'WebGLRenderingContextBase':
-          consts = consts + parent_interface.constants
-    return consts
-
   def AddSecondaryMembers(self, interface):
-    # With multiple inheritance, attributes and operations of non-first
-    # interfaces need to be added.  Sometimes the attribute or operation is
-    # defined in the current interface as well as a parent.  In that case we
-    # avoid making a duplicate definition and pray that the signatures match.
-    if not self._renamer.ShouldSuppressInterface(interface):
-      secondary_constants = sorted(self._HoistableConstants(interface),
-                                     ConstantOutputOrder)
-      for const in secondary_constants:
-        self.AddConstant(const)
-
     secondary_parents = self._database.TransitiveSecondaryParents(interface,
                           not self._dart_use_blink)
     remove_duplicate_parents = list(set(secondary_parents))
diff --git a/tools/dom/scripts/htmlrenamer.py b/tools/dom/scripts/htmlrenamer.py
index d0cb493..0148a18 100644
--- a/tools/dom/scripts/htmlrenamer.py
+++ b/tools/dom/scripts/htmlrenamer.py
@@ -444,6 +444,7 @@
   'SubtleCrypto.importKey',
   'SubtleCrypto.unwrapKey',
   'ShadowRoot.applyAuthorStyles',
+  'SpeechSynthesis.getVoices',
 
   'TextEvent.initTextEvent',
   # TODO(leafp): These have been converted from int to double in Chrome 37.
@@ -1109,7 +1110,8 @@
     if interface.id.startswith("SVG"):
       return 'svg'
     if interface.id.startswith("WebGL") or interface.id.startswith("OES") \
-        or interface.id.startswith("EXT"):
+        or interface.id.startswith("EXT") \
+        or interface.id == "WebGL":    # Name of the synthesized class for WebGL constants.
       return 'web_gl'
 
     if interface.id in typed_array_renames:
@@ -1133,7 +1135,8 @@
     if interface.id.startswith("SVG"):
       return 'Svg'
     if interface.id.startswith("WebGL") or interface.id.startswith("OES") \
-        or interface.id.startswith("EXT"):
+        or interface.id.startswith("EXT") \
+        or interface.id == 'WebGL':     # Name of the synthesized class for WebGL constants.
       return 'WebGl'
 
     if interface.id in typed_array_renames:
@@ -1153,7 +1156,9 @@
     # Strip off any standard prefixes.
     name = re.sub(r'^SVG', '', dart_name)
     name = re.sub(r'^IDB', '', name)
-    name = re.sub(r'^WebGL', '', name)
+    # Don't Strip the synthesized class name WebGL contains all rendering/draw constants.
+    if name != 'WebGL':
+      name = re.sub(r'^WebGL', '', name)
     name = re.sub(r'^WebKit', '', name)
 
     return self._CamelCaseName(name)
diff --git a/tools/dom/scripts/systemhtml.py b/tools/dom/scripts/systemhtml.py
index 458d810..1f74820 100644
--- a/tools/dom/scripts/systemhtml.py
+++ b/tools/dom/scripts/systemhtml.py
@@ -39,7 +39,6 @@
     'AudioContext.createGain',
     'AudioContext.createScriptProcessor',
     'CanvasRenderingContext2D.drawImage',
-    'CanvasRenderingContext2D.fill',
     'CanvasRenderingContext2D.fillText',
     'CanvasRenderingContext2D.lineDashOffset',
     'CanvasRenderingContext2D.setLineDash',
@@ -877,6 +876,8 @@
     self._interface_type_info = self._type_registry.TypeInfo(self._interface.id)
     self._current_secondary_parent = None
     self._library_name = self._renamer.GetLibraryName(self._interface)
+    # Global constants for all WebGLRenderingContextBase, WebGL2RenderingContextBase, WebGLDrawBuffers
+    self._gl_constants = []
     _logger.setLevel(logging_level)
 
   def ImplementsMergedMembers(self):
@@ -1126,14 +1127,16 @@
     input_type = self._NarrowInputType(attribute.type.id)
     metadata = self._Metadata(attribute.type.id, attribute.id, output_type)
     rename = self._RenamingAnnotation(attribute.id, html_name)
+    static_attribute = 'static' if attribute.is_static else ''
     if not read_only:
       if attribute.type.id == 'Promise':
         _logger.warn('R/W member is a Promise: %s.%s' % (self._interface.id, html_name))
+      template = '\n  $RENAME$METADATA$STATIC $TYPE $NAME;\n'
       self._members_emitter.Emit(
-          '\n  $RENAME$METADATA$TYPE $NAME;'
-          '\n',
+          template,
           RENAME=rename,
           METADATA=metadata,
+          STATIC=static_attribute,
           NAME=html_name,
           TYPE=output_type)
     else:
@@ -1165,6 +1168,7 @@
                                      PROMISE_CALL=promiseCall,
                                      NAME=html_name)
       else:
+        template = '\n  $RENAME$(ANNOTATIONS)$STATIC final $TYPE $NAME;\n'
         # Need to use a getter for list.length properties so we can add a
         # setter which throws an exception, satisfying List API.
         if self._interface_type_info.list_item_type() and html_name == 'length':
@@ -1174,6 +1178,7 @@
             template,
             RENAME=rename,
             ANNOTATIONS=metadata,
+            STATIC=static_attribute,
             NAME=html_name,
             TYPE=input_type if output_type == 'double' else output_type)
 
diff --git a/tools/dom/scripts/systemnative.py b/tools/dom/scripts/systemnative.py
index 1df7f8c..31276a7 100644
--- a/tools/dom/scripts/systemnative.py
+++ b/tools/dom/scripts/systemnative.py
@@ -260,7 +260,6 @@
             self.DeriveQualifiedBlinkName(self._interface.id,
                                           dart_native_name)
         self._members_emitter.Emit(
-            '\n  @DocsEditable()\n'
             '  static $INTERFACE_NAME $FACTORY_METHOD_NAME($PARAMETERS) => '
             '$TOPLEVEL_NAME($OUTPARAMETERS);\n',
             INTERFACE_NAME=self._interface_type_info.interface_name(),
diff --git a/tools/dom/src/Dimension.dart b/tools/dom/src/Dimension.dart
index d9b34d9..502b68d 100644
--- a/tools/dom/src/Dimension.dart
+++ b/tools/dom/src/Dimension.dart
@@ -5,7 +5,6 @@
  * [length measurement](https://developer.mozilla.org/en-US/docs/Web/CSS/length)
  * in CSS.
  */
-@Experimental()
 class Dimension {
   num _value;
   String _unit;
diff --git a/tools/dom/src/WebGLConstants.dart b/tools/dom/src/WebGLConstants.dart
deleted file mode 100644
index 89d87ce..0000000
--- a/tools/dom/src/WebGLConstants.dart
+++ /dev/null
@@ -1,333 +0,0 @@
-// Copyright (c) 2013, 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.
-
-part of dom.web_gl;
-
-const int ACTIVE_ATTRIBUTES = RenderingContext.ACTIVE_ATTRIBUTES;
-const int ACTIVE_TEXTURE = RenderingContext.ACTIVE_TEXTURE;
-const int ACTIVE_UNIFORMS = RenderingContext.ACTIVE_UNIFORMS;
-const int ALIASED_LINE_WIDTH_RANGE = RenderingContext.ALIASED_LINE_WIDTH_RANGE;
-const int ALIASED_POINT_SIZE_RANGE = RenderingContext.ALIASED_POINT_SIZE_RANGE;
-const int ALPHA = RenderingContext.ALPHA;
-const int ALPHA_BITS = RenderingContext.ALPHA_BITS;
-const int ALWAYS = RenderingContext.ALWAYS;
-const int ARRAY_BUFFER = RenderingContext.ARRAY_BUFFER;
-const int ARRAY_BUFFER_BINDING = RenderingContext.ARRAY_BUFFER_BINDING;
-const int ATTACHED_SHADERS = RenderingContext.ATTACHED_SHADERS;
-const int BACK = RenderingContext.BACK;
-const int BLEND = RenderingContext.BLEND;
-const int BLEND_COLOR = RenderingContext.BLEND_COLOR;
-const int BLEND_DST_ALPHA = RenderingContext.BLEND_DST_ALPHA;
-const int BLEND_DST_RGB = RenderingContext.BLEND_DST_RGB;
-const int BLEND_EQUATION = RenderingContext.BLEND_EQUATION;
-const int BLEND_EQUATION_ALPHA = RenderingContext.BLEND_EQUATION_ALPHA;
-const int BLEND_EQUATION_RGB = RenderingContext.BLEND_EQUATION_RGB;
-const int BLEND_SRC_ALPHA = RenderingContext.BLEND_SRC_ALPHA;
-const int BLEND_SRC_RGB = RenderingContext.BLEND_SRC_RGB;
-const int BLUE_BITS = RenderingContext.BLUE_BITS;
-const int BOOL = RenderingContext.BOOL;
-const int BOOL_VEC2 = RenderingContext.BOOL_VEC2;
-const int BOOL_VEC3 = RenderingContext.BOOL_VEC3;
-const int BOOL_VEC4 = RenderingContext.BOOL_VEC4;
-const int BROWSER_DEFAULT_WEBGL = RenderingContext.BROWSER_DEFAULT_WEBGL;
-const int BUFFER_SIZE = RenderingContext.BUFFER_SIZE;
-const int BUFFER_USAGE = RenderingContext.BUFFER_USAGE;
-const int BYTE = RenderingContext.BYTE;
-const int CCW = RenderingContext.CCW;
-const int CLAMP_TO_EDGE = RenderingContext.CLAMP_TO_EDGE;
-const int COLOR_ATTACHMENT0 = RenderingContext.COLOR_ATTACHMENT0;
-const int COLOR_BUFFER_BIT = RenderingContext.COLOR_BUFFER_BIT;
-const int COLOR_CLEAR_VALUE = RenderingContext.COLOR_CLEAR_VALUE;
-const int COLOR_WRITEMASK = RenderingContext.COLOR_WRITEMASK;
-const int COMPILE_STATUS = RenderingContext.COMPILE_STATUS;
-const int COMPRESSED_TEXTURE_FORMATS =
-    RenderingContext.COMPRESSED_TEXTURE_FORMATS;
-const int CONSTANT_ALPHA = RenderingContext.CONSTANT_ALPHA;
-const int CONSTANT_COLOR = RenderingContext.CONSTANT_COLOR;
-const int CONTEXT_LOST_WEBGL = RenderingContext.CONTEXT_LOST_WEBGL;
-const int CULL_FACE = RenderingContext.CULL_FACE;
-const int CULL_FACE_MODE = RenderingContext.CULL_FACE_MODE;
-const int CURRENT_PROGRAM = RenderingContext.CURRENT_PROGRAM;
-const int CURRENT_VERTEX_ATTRIB = RenderingContext.CURRENT_VERTEX_ATTRIB;
-const int CW = RenderingContext.CW;
-const int DECR = RenderingContext.DECR;
-const int DECR_WRAP = RenderingContext.DECR_WRAP;
-const int DELETE_STATUS = RenderingContext.DELETE_STATUS;
-const int DEPTH_ATTACHMENT = RenderingContext.DEPTH_ATTACHMENT;
-const int DEPTH_BITS = RenderingContext.DEPTH_BITS;
-const int DEPTH_BUFFER_BIT = RenderingContext.DEPTH_BUFFER_BIT;
-const int DEPTH_CLEAR_VALUE = RenderingContext.DEPTH_CLEAR_VALUE;
-const int DEPTH_COMPONENT = RenderingContext.DEPTH_COMPONENT;
-const int DEPTH_COMPONENT16 = RenderingContext.DEPTH_COMPONENT16;
-const int DEPTH_FUNC = RenderingContext.DEPTH_FUNC;
-const int DEPTH_RANGE = RenderingContext.DEPTH_RANGE;
-const int DEPTH_STENCIL = RenderingContext.DEPTH_STENCIL;
-const int DEPTH_STENCIL_ATTACHMENT = RenderingContext.DEPTH_STENCIL_ATTACHMENT;
-const int DEPTH_TEST = RenderingContext.DEPTH_TEST;
-const int DEPTH_WRITEMASK = RenderingContext.DEPTH_WRITEMASK;
-const int DITHER = RenderingContext.DITHER;
-const int DONT_CARE = RenderingContext.DONT_CARE;
-const int DST_ALPHA = RenderingContext.DST_ALPHA;
-const int DST_COLOR = RenderingContext.DST_COLOR;
-const int DYNAMIC_DRAW = RenderingContext.DYNAMIC_DRAW;
-const int ELEMENT_ARRAY_BUFFER = RenderingContext.ELEMENT_ARRAY_BUFFER;
-const int ELEMENT_ARRAY_BUFFER_BINDING =
-    RenderingContext.ELEMENT_ARRAY_BUFFER_BINDING;
-const int EQUAL = RenderingContext.EQUAL;
-const int FASTEST = RenderingContext.FASTEST;
-const int FLOAT = RenderingContext.FLOAT;
-const int FLOAT_MAT2 = RenderingContext.FLOAT_MAT2;
-const int FLOAT_MAT3 = RenderingContext.FLOAT_MAT3;
-const int FLOAT_MAT4 = RenderingContext.FLOAT_MAT4;
-const int FLOAT_VEC2 = RenderingContext.FLOAT_VEC2;
-const int FLOAT_VEC3 = RenderingContext.FLOAT_VEC3;
-const int FLOAT_VEC4 = RenderingContext.FLOAT_VEC4;
-const int FRAGMENT_SHADER = RenderingContext.FRAGMENT_SHADER;
-const int FRAMEBUFFER = RenderingContext.FRAMEBUFFER;
-const int FRAMEBUFFER_ATTACHMENT_OBJECT_NAME =
-    RenderingContext.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME;
-const int FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE =
-    RenderingContext.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE;
-const int FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE =
-    RenderingContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE;
-const int FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL =
-    RenderingContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL;
-const int FRAMEBUFFER_BINDING = RenderingContext.FRAMEBUFFER_BINDING;
-const int FRAMEBUFFER_COMPLETE = RenderingContext.FRAMEBUFFER_COMPLETE;
-const int FRAMEBUFFER_INCOMPLETE_ATTACHMENT =
-    RenderingContext.FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
-const int FRAMEBUFFER_INCOMPLETE_DIMENSIONS =
-    RenderingContext.FRAMEBUFFER_INCOMPLETE_DIMENSIONS;
-const int FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT =
-    RenderingContext.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT;
-const int FRAMEBUFFER_UNSUPPORTED = RenderingContext.FRAMEBUFFER_UNSUPPORTED;
-const int FRONT = RenderingContext.FRONT;
-const int FRONT_AND_BACK = RenderingContext.FRONT_AND_BACK;
-const int FRONT_FACE = RenderingContext.FRONT_FACE;
-const int FUNC_ADD = RenderingContext.FUNC_ADD;
-const int FUNC_REVERSE_SUBTRACT = RenderingContext.FUNC_REVERSE_SUBTRACT;
-const int FUNC_SUBTRACT = RenderingContext.FUNC_SUBTRACT;
-const int GENERATE_MIPMAP_HINT = RenderingContext.GENERATE_MIPMAP_HINT;
-const int GEQUAL = RenderingContext.GEQUAL;
-const int GREATER = RenderingContext.GREATER;
-const int GREEN_BITS = RenderingContext.GREEN_BITS;
-const int HALF_FLOAT_OES = OesTextureHalfFloat.HALF_FLOAT_OES;
-const int HIGH_FLOAT = RenderingContext.HIGH_FLOAT;
-const int HIGH_INT = RenderingContext.HIGH_INT;
-const int INCR = RenderingContext.INCR;
-const int INCR_WRAP = RenderingContext.INCR_WRAP;
-const int INT = RenderingContext.INT;
-const int INT_VEC2 = RenderingContext.INT_VEC2;
-const int INT_VEC3 = RenderingContext.INT_VEC3;
-const int INT_VEC4 = RenderingContext.INT_VEC4;
-const int INVALID_ENUM = RenderingContext.INVALID_ENUM;
-const int INVALID_FRAMEBUFFER_OPERATION =
-    RenderingContext.INVALID_FRAMEBUFFER_OPERATION;
-const int INVALID_OPERATION = RenderingContext.INVALID_OPERATION;
-const int INVALID_VALUE = RenderingContext.INVALID_VALUE;
-const int INVERT = RenderingContext.INVERT;
-const int KEEP = RenderingContext.KEEP;
-const int LEQUAL = RenderingContext.LEQUAL;
-const int LESS = RenderingContext.LESS;
-const int LINEAR = RenderingContext.LINEAR;
-const int LINEAR_MIPMAP_LINEAR = RenderingContext.LINEAR_MIPMAP_LINEAR;
-const int LINEAR_MIPMAP_NEAREST = RenderingContext.LINEAR_MIPMAP_NEAREST;
-const int LINES = RenderingContext.LINES;
-const int LINE_LOOP = RenderingContext.LINE_LOOP;
-const int LINE_STRIP = RenderingContext.LINE_STRIP;
-const int LINE_WIDTH = RenderingContext.LINE_WIDTH;
-const int LINK_STATUS = RenderingContext.LINK_STATUS;
-const int LOW_FLOAT = RenderingContext.LOW_FLOAT;
-const int LOW_INT = RenderingContext.LOW_INT;
-const int LUMINANCE = RenderingContext.LUMINANCE;
-const int LUMINANCE_ALPHA = RenderingContext.LUMINANCE_ALPHA;
-const int MAX_COMBINED_TEXTURE_IMAGE_UNITS =
-    RenderingContext.MAX_COMBINED_TEXTURE_IMAGE_UNITS;
-const int MAX_CUBE_MAP_TEXTURE_SIZE =
-    RenderingContext.MAX_CUBE_MAP_TEXTURE_SIZE;
-const int MAX_FRAGMENT_UNIFORM_VECTORS =
-    RenderingContext.MAX_FRAGMENT_UNIFORM_VECTORS;
-const int MAX_RENDERBUFFER_SIZE = RenderingContext.MAX_RENDERBUFFER_SIZE;
-const int MAX_TEXTURE_IMAGE_UNITS = RenderingContext.MAX_TEXTURE_IMAGE_UNITS;
-const int MAX_TEXTURE_SIZE = RenderingContext.MAX_TEXTURE_SIZE;
-const int MAX_VARYING_VECTORS = RenderingContext.MAX_VARYING_VECTORS;
-const int MAX_VERTEX_ATTRIBS = RenderingContext.MAX_VERTEX_ATTRIBS;
-const int MAX_VERTEX_TEXTURE_IMAGE_UNITS =
-    RenderingContext.MAX_VERTEX_TEXTURE_IMAGE_UNITS;
-const int MAX_VERTEX_UNIFORM_VECTORS =
-    RenderingContext.MAX_VERTEX_UNIFORM_VECTORS;
-const int MAX_VIEWPORT_DIMS = RenderingContext.MAX_VIEWPORT_DIMS;
-const int MEDIUM_FLOAT = RenderingContext.MEDIUM_FLOAT;
-const int MEDIUM_INT = RenderingContext.MEDIUM_INT;
-const int MIRRORED_REPEAT = RenderingContext.MIRRORED_REPEAT;
-const int NEAREST = RenderingContext.NEAREST;
-const int NEAREST_MIPMAP_LINEAR = RenderingContext.NEAREST_MIPMAP_LINEAR;
-const int NEAREST_MIPMAP_NEAREST = RenderingContext.NEAREST_MIPMAP_NEAREST;
-const int NEVER = RenderingContext.NEVER;
-const int NICEST = RenderingContext.NICEST;
-const int NONE = RenderingContext.NONE;
-const int NOTEQUAL = RenderingContext.NOTEQUAL;
-const int NO_ERROR = RenderingContext.NO_ERROR;
-const int ONE = RenderingContext.ONE;
-const int ONE_MINUS_CONSTANT_ALPHA = RenderingContext.ONE_MINUS_CONSTANT_ALPHA;
-const int ONE_MINUS_CONSTANT_COLOR = RenderingContext.ONE_MINUS_CONSTANT_COLOR;
-const int ONE_MINUS_DST_ALPHA = RenderingContext.ONE_MINUS_DST_ALPHA;
-const int ONE_MINUS_DST_COLOR = RenderingContext.ONE_MINUS_DST_COLOR;
-const int ONE_MINUS_SRC_ALPHA = RenderingContext.ONE_MINUS_SRC_ALPHA;
-const int ONE_MINUS_SRC_COLOR = RenderingContext.ONE_MINUS_SRC_COLOR;
-const int OUT_OF_MEMORY = RenderingContext.OUT_OF_MEMORY;
-const int PACK_ALIGNMENT = RenderingContext.PACK_ALIGNMENT;
-const int POINTS = RenderingContext.POINTS;
-const int POLYGON_OFFSET_FACTOR = RenderingContext.POLYGON_OFFSET_FACTOR;
-const int POLYGON_OFFSET_FILL = RenderingContext.POLYGON_OFFSET_FILL;
-const int POLYGON_OFFSET_UNITS = RenderingContext.POLYGON_OFFSET_UNITS;
-const int RED_BITS = RenderingContext.RED_BITS;
-const int RENDERBUFFER = RenderingContext.RENDERBUFFER;
-const int RENDERBUFFER_ALPHA_SIZE = RenderingContext.RENDERBUFFER_ALPHA_SIZE;
-const int RENDERBUFFER_BINDING = RenderingContext.RENDERBUFFER_BINDING;
-const int RENDERBUFFER_BLUE_SIZE = RenderingContext.RENDERBUFFER_BLUE_SIZE;
-const int RENDERBUFFER_DEPTH_SIZE = RenderingContext.RENDERBUFFER_DEPTH_SIZE;
-const int RENDERBUFFER_GREEN_SIZE = RenderingContext.RENDERBUFFER_GREEN_SIZE;
-const int RENDERBUFFER_HEIGHT = RenderingContext.RENDERBUFFER_HEIGHT;
-const int RENDERBUFFER_INTERNAL_FORMAT =
-    RenderingContext.RENDERBUFFER_INTERNAL_FORMAT;
-const int RENDERBUFFER_RED_SIZE = RenderingContext.RENDERBUFFER_RED_SIZE;
-const int RENDERBUFFER_STENCIL_SIZE =
-    RenderingContext.RENDERBUFFER_STENCIL_SIZE;
-const int RENDERBUFFER_WIDTH = RenderingContext.RENDERBUFFER_WIDTH;
-const int RENDERER = RenderingContext.RENDERER;
-const int REPEAT = RenderingContext.REPEAT;
-const int REPLACE = RenderingContext.REPLACE;
-const int RGB = RenderingContext.RGB;
-const int RGB565 = RenderingContext.RGB565;
-const int RGB5_A1 = RenderingContext.RGB5_A1;
-const int RGBA = RenderingContext.RGBA;
-const int RGBA4 = RenderingContext.RGBA4;
-const int SAMPLER_2D = RenderingContext.SAMPLER_2D;
-const int SAMPLER_CUBE = RenderingContext.SAMPLER_CUBE;
-const int SAMPLES = RenderingContext.SAMPLES;
-const int SAMPLE_ALPHA_TO_COVERAGE = RenderingContext.SAMPLE_ALPHA_TO_COVERAGE;
-const int SAMPLE_BUFFERS = RenderingContext.SAMPLE_BUFFERS;
-const int SAMPLE_COVERAGE = RenderingContext.SAMPLE_COVERAGE;
-const int SAMPLE_COVERAGE_INVERT = RenderingContext.SAMPLE_COVERAGE_INVERT;
-const int SAMPLE_COVERAGE_VALUE = RenderingContext.SAMPLE_COVERAGE_VALUE;
-const int SCISSOR_BOX = RenderingContext.SCISSOR_BOX;
-const int SCISSOR_TEST = RenderingContext.SCISSOR_TEST;
-const int SHADER_TYPE = RenderingContext.SHADER_TYPE;
-const int SHADING_LANGUAGE_VERSION = RenderingContext.SHADING_LANGUAGE_VERSION;
-const int SHORT = RenderingContext.SHORT;
-const int SRC_ALPHA = RenderingContext.SRC_ALPHA;
-const int SRC_ALPHA_SATURATE = RenderingContext.SRC_ALPHA_SATURATE;
-const int SRC_COLOR = RenderingContext.SRC_COLOR;
-const int STATIC_DRAW = RenderingContext.STATIC_DRAW;
-const int STENCIL_ATTACHMENT = RenderingContext.STENCIL_ATTACHMENT;
-const int STENCIL_BACK_FAIL = RenderingContext.STENCIL_BACK_FAIL;
-const int STENCIL_BACK_FUNC = RenderingContext.STENCIL_BACK_FUNC;
-const int STENCIL_BACK_PASS_DEPTH_FAIL =
-    RenderingContext.STENCIL_BACK_PASS_DEPTH_FAIL;
-const int STENCIL_BACK_PASS_DEPTH_PASS =
-    RenderingContext.STENCIL_BACK_PASS_DEPTH_PASS;
-const int STENCIL_BACK_REF = RenderingContext.STENCIL_BACK_REF;
-const int STENCIL_BACK_VALUE_MASK = RenderingContext.STENCIL_BACK_VALUE_MASK;
-const int STENCIL_BACK_WRITEMASK = RenderingContext.STENCIL_BACK_WRITEMASK;
-const int STENCIL_BITS = RenderingContext.STENCIL_BITS;
-const int STENCIL_BUFFER_BIT = RenderingContext.STENCIL_BUFFER_BIT;
-const int STENCIL_CLEAR_VALUE = RenderingContext.STENCIL_CLEAR_VALUE;
-const int STENCIL_FAIL = RenderingContext.STENCIL_FAIL;
-const int STENCIL_FUNC = RenderingContext.STENCIL_FUNC;
-const int STENCIL_INDEX8 = RenderingContext.STENCIL_INDEX8;
-const int STENCIL_PASS_DEPTH_FAIL = RenderingContext.STENCIL_PASS_DEPTH_FAIL;
-const int STENCIL_PASS_DEPTH_PASS = RenderingContext.STENCIL_PASS_DEPTH_PASS;
-const int STENCIL_REF = RenderingContext.STENCIL_REF;
-const int STENCIL_TEST = RenderingContext.STENCIL_TEST;
-const int STENCIL_VALUE_MASK = RenderingContext.STENCIL_VALUE_MASK;
-const int STENCIL_WRITEMASK = RenderingContext.STENCIL_WRITEMASK;
-const int STREAM_DRAW = RenderingContext.STREAM_DRAW;
-const int SUBPIXEL_BITS = RenderingContext.SUBPIXEL_BITS;
-const int TEXTURE = RenderingContext.TEXTURE;
-const int TEXTURE0 = RenderingContext.TEXTURE0;
-const int TEXTURE1 = RenderingContext.TEXTURE1;
-const int TEXTURE10 = RenderingContext.TEXTURE10;
-const int TEXTURE11 = RenderingContext.TEXTURE11;
-const int TEXTURE12 = RenderingContext.TEXTURE12;
-const int TEXTURE13 = RenderingContext.TEXTURE13;
-const int TEXTURE14 = RenderingContext.TEXTURE14;
-const int TEXTURE15 = RenderingContext.TEXTURE15;
-const int TEXTURE16 = RenderingContext.TEXTURE16;
-const int TEXTURE17 = RenderingContext.TEXTURE17;
-const int TEXTURE18 = RenderingContext.TEXTURE18;
-const int TEXTURE19 = RenderingContext.TEXTURE19;
-const int TEXTURE2 = RenderingContext.TEXTURE2;
-const int TEXTURE20 = RenderingContext.TEXTURE20;
-const int TEXTURE21 = RenderingContext.TEXTURE21;
-const int TEXTURE22 = RenderingContext.TEXTURE22;
-const int TEXTURE23 = RenderingContext.TEXTURE23;
-const int TEXTURE24 = RenderingContext.TEXTURE24;
-const int TEXTURE25 = RenderingContext.TEXTURE25;
-const int TEXTURE26 = RenderingContext.TEXTURE26;
-const int TEXTURE27 = RenderingContext.TEXTURE27;
-const int TEXTURE28 = RenderingContext.TEXTURE28;
-const int TEXTURE29 = RenderingContext.TEXTURE29;
-const int TEXTURE3 = RenderingContext.TEXTURE3;
-const int TEXTURE30 = RenderingContext.TEXTURE30;
-const int TEXTURE31 = RenderingContext.TEXTURE31;
-const int TEXTURE4 = RenderingContext.TEXTURE4;
-const int TEXTURE5 = RenderingContext.TEXTURE5;
-const int TEXTURE6 = RenderingContext.TEXTURE6;
-const int TEXTURE7 = RenderingContext.TEXTURE7;
-const int TEXTURE8 = RenderingContext.TEXTURE8;
-const int TEXTURE9 = RenderingContext.TEXTURE9;
-const int TEXTURE_2D = RenderingContext.TEXTURE_2D;
-const int TEXTURE_BINDING_2D = RenderingContext.TEXTURE_BINDING_2D;
-const int TEXTURE_BINDING_CUBE_MAP = RenderingContext.TEXTURE_BINDING_CUBE_MAP;
-const int TEXTURE_CUBE_MAP = RenderingContext.TEXTURE_CUBE_MAP;
-const int TEXTURE_CUBE_MAP_NEGATIVE_X =
-    RenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_X;
-const int TEXTURE_CUBE_MAP_NEGATIVE_Y =
-    RenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_Y;
-const int TEXTURE_CUBE_MAP_NEGATIVE_Z =
-    RenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_Z;
-const int TEXTURE_CUBE_MAP_POSITIVE_X =
-    RenderingContext.TEXTURE_CUBE_MAP_POSITIVE_X;
-const int TEXTURE_CUBE_MAP_POSITIVE_Y =
-    RenderingContext.TEXTURE_CUBE_MAP_POSITIVE_Y;
-const int TEXTURE_CUBE_MAP_POSITIVE_Z =
-    RenderingContext.TEXTURE_CUBE_MAP_POSITIVE_Z;
-const int TEXTURE_MAG_FILTER = RenderingContext.TEXTURE_MAG_FILTER;
-const int TEXTURE_MIN_FILTER = RenderingContext.TEXTURE_MIN_FILTER;
-const int TEXTURE_WRAP_S = RenderingContext.TEXTURE_WRAP_S;
-const int TEXTURE_WRAP_T = RenderingContext.TEXTURE_WRAP_T;
-const int TRIANGLES = RenderingContext.TRIANGLES;
-const int TRIANGLE_FAN = RenderingContext.TRIANGLE_FAN;
-const int TRIANGLE_STRIP = RenderingContext.TRIANGLE_STRIP;
-const int UNPACK_ALIGNMENT = RenderingContext.UNPACK_ALIGNMENT;
-const int UNPACK_COLORSPACE_CONVERSION_WEBGL =
-    RenderingContext.UNPACK_COLORSPACE_CONVERSION_WEBGL;
-const int UNPACK_FLIP_Y_WEBGL = RenderingContext.UNPACK_FLIP_Y_WEBGL;
-const int UNPACK_PREMULTIPLY_ALPHA_WEBGL =
-    RenderingContext.UNPACK_PREMULTIPLY_ALPHA_WEBGL;
-const int UNSIGNED_BYTE = RenderingContext.UNSIGNED_BYTE;
-const int UNSIGNED_INT = RenderingContext.UNSIGNED_INT;
-const int UNSIGNED_SHORT = RenderingContext.UNSIGNED_SHORT;
-const int UNSIGNED_SHORT_4_4_4_4 = RenderingContext.UNSIGNED_SHORT_4_4_4_4;
-const int UNSIGNED_SHORT_5_5_5_1 = RenderingContext.UNSIGNED_SHORT_5_5_5_1;
-const int UNSIGNED_SHORT_5_6_5 = RenderingContext.UNSIGNED_SHORT_5_6_5;
-const int VALIDATE_STATUS = RenderingContext.VALIDATE_STATUS;
-const int VENDOR = RenderingContext.VENDOR;
-const int VERSION = RenderingContext.VERSION;
-const int VERTEX_ATTRIB_ARRAY_BUFFER_BINDING =
-    RenderingContext.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING;
-const int VERTEX_ATTRIB_ARRAY_ENABLED =
-    RenderingContext.VERTEX_ATTRIB_ARRAY_ENABLED;
-const int VERTEX_ATTRIB_ARRAY_NORMALIZED =
-    RenderingContext.VERTEX_ATTRIB_ARRAY_NORMALIZED;
-const int VERTEX_ATTRIB_ARRAY_POINTER =
-    RenderingContext.VERTEX_ATTRIB_ARRAY_POINTER;
-const int VERTEX_ATTRIB_ARRAY_SIZE = RenderingContext.VERTEX_ATTRIB_ARRAY_SIZE;
-const int VERTEX_ATTRIB_ARRAY_STRIDE =
-    RenderingContext.VERTEX_ATTRIB_ARRAY_STRIDE;
-const int VERTEX_ATTRIB_ARRAY_TYPE = RenderingContext.VERTEX_ATTRIB_ARRAY_TYPE;
-const int VERTEX_SHADER = RenderingContext.VERTEX_SHADER;
-const int VIEWPORT = RenderingContext.VIEWPORT;
-const int ZERO = RenderingContext.ZERO;
diff --git a/tools/dom/src/dart2js_Console.dart b/tools/dom/src/dart2js_Console.dart
index 6166c0a..5ed9206 100644
--- a/tools/dom/src/dart2js_Console.dart
+++ b/tools/dom/src/dart2js_Console.dart
@@ -10,95 +10,73 @@
 
   bool get _isConsoleDefined => JS('bool', 'typeof console != "undefined"');
 
-  @DomName('Console.memory')
   MemoryInfo get memory =>
       _isConsoleDefined ? JS('MemoryInfo', 'window.console.memory') : null;
 
-  @DomName('Console.assertCondition')
   void assertCondition(bool condition, Object arg) => _isConsoleDefined
       ? JS('void', 'window.console.assertCondition(#, #)', condition, arg)
       : null;
 
-  @DomName('Console.clear')
   void clear(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.clear(#)', arg) : null;
 
-  @DomName('Console.count')
   void count(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.count(#)', arg) : null;
 
-  @DomName('Console.debug')
   void debug(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.debug(#)', arg) : null;
 
-  @DomName('Console.dir')
   void dir(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.dir(#)', arg) : null;
 
-  @DomName('Console.dirxml')
   void dirxml(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.dirxml(#)', arg) : null;
 
-  @DomName('Console.error')
   void error(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.error(#)', arg) : null;
 
-  @DomName('Console.group')
   void group(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.group(#)', arg) : null;
 
-  @DomName('Console.groupCollapsed')
   void groupCollapsed(Object arg) => _isConsoleDefined
       ? JS('void', 'window.console.groupCollapsed(#)', arg)
       : null;
 
-  @DomName('Console.groupEnd')
   void groupEnd() =>
       _isConsoleDefined ? JS('void', 'window.console.groupEnd()') : null;
 
-  @DomName('Console.info')
   void info(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.info(#)', arg) : null;
 
-  @DomName('Console.log')
   void log(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.log(#)', arg) : null;
 
-  @DomName('Console.markTimeline')
   void markTimeline(Object arg) => _isConsoleDefined
       ? JS('void', 'window.console.markTimeline(#)', arg)
       : null;
 
-  @DomName('Console.profile')
   void profile(String title) =>
       _isConsoleDefined ? JS('void', 'window.console.profile(#)', title) : null;
 
-  @DomName('Console.profileEnd')
   void profileEnd(String title) => _isConsoleDefined
       ? JS('void', 'window.console.profileEnd(#)', title)
       : null;
 
-  @DomName('Console.table')
   void table(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.table(#)', arg) : null;
 
-  @DomName('Console.time')
   void time(String title) =>
       _isConsoleDefined ? JS('void', 'window.console.time(#)', title) : null;
 
-  @DomName('Console.timeEnd')
   void timeEnd(String title) =>
       _isConsoleDefined ? JS('void', 'window.console.timeEnd(#)', title) : null;
 
-  @DomName('Console.timeStamp')
   void timeStamp(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.timeStamp(#)', arg) : null;
 
-  @DomName('Console.trace')
   void trace(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.trace(#)', arg) : null;
 
-  @DomName('Console.warn')
   void warn(Object arg) =>
       _isConsoleDefined ? JS('void', 'window.console.warn(#)', arg) : null;
 }
diff --git a/tools/dom/src/dart2js_KeyEvent.dart b/tools/dom/src/dart2js_KeyEvent.dart
index e4bc296..ad8c905 100644
--- a/tools/dom/src/dart2js_KeyEvent.dart
+++ b/tools/dom/src/dart2js_KeyEvent.dart
@@ -25,7 +25,6 @@
  * on how we can make this class work with as many international keyboards as
  * possible. Bugs welcome!
  */
-@Experimental()
 class KeyEvent extends _WrappedEvent implements KeyboardEvent {
   /** The parent KeyboardEvent that this KeyEvent is wrapping and "fixing". */
   KeyboardEvent _parent;
@@ -230,10 +229,8 @@
         "Cannot initialize a KeyboardEvent from a KeyEvent.");
   }
 
-  @Experimental() // untriaged
   bool getModifierState(String keyArgument) => throw new UnimplementedError();
 
-  @Experimental() // untriaged
   bool get repeat => throw new UnimplementedError();
   bool get isComposed => throw new UnimplementedError();
   dynamic get _get_view => throw new UnimplementedError();
diff --git a/tools/dom/src/dart2js_WrappedEvent.dart b/tools/dom/src/dart2js_WrappedEvent.dart
index 02dab3d..4d2ac28 100644
--- a/tools/dom/src/dart2js_WrappedEvent.dart
+++ b/tools/dom/src/dart2js_WrappedEvent.dart
@@ -83,7 +83,6 @@
    *   from W3C.
    */
   // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#extensions-to-event
-  @Experimental()
   List<Node> get path => wrapped.path;
 
   dynamic get _get_currentTarget => wrapped._get_currentTarget;
diff --git a/tools/dom/src/shared_html.dart b/tools/dom/src/shared_html.dart
index d9b75ff..f2aa8a9 100644
--- a/tools/dom/src/shared_html.dart
+++ b/tools/dom/src/shared_html.dart
@@ -53,7 +53,7 @@
  * For details about CSS selector syntax, see the
  * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
  */
-ElementList<Element> querySelectorAll(String selectors) =>
+ElementList<T> querySelectorAll<T extends Element>(String selectors) =>
     document.querySelectorAll(selectors);
 
 /// A utility for changing the Dart wrapper type for elements.
diff --git a/tools/dom/templates/dart2js_impl.darttemplate b/tools/dom/templates/dart2js_impl.darttemplate
index fb30e0b..b88676a 100644
--- a/tools/dom/templates/dart2js_impl.darttemplate
+++ b/tools/dom/templates/dart2js_impl.darttemplate
@@ -4,6 +4,5 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$MIXINS$IMPLEMENTS {
 $!MEMBERS}
diff --git a/tools/dom/templates/dart2js_maplike_impl.darttemplate b/tools/dom/templates/dart2js_maplike_impl.darttemplate
index c2f8f91..05af119 100644
--- a/tools/dom/templates/dart2js_maplike_impl.darttemplate
+++ b/tools/dom/templates/dart2js_maplike_impl.darttemplate
@@ -4,7 +4,6 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$MIXINS$IMPLEMENTS {
 $!MEMBERS
 
diff --git a/tools/dom/templates/html/dart2js/html_dart2js.darttemplate b/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
index d989b1d..fc54b75 100644
--- a/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
+++ b/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
@@ -5,7 +5,6 @@
 // DO NOT EDIT - unless you are editing documentation as per:
 // https://code.google.com/p/dart/wiki/ContributingHTMLDocumentation
 // Auto-generated dart:html library.
-
 /**
  * HTML elements and other resources for web-based applications that need to
  * interact with the browser and the DOM (Document Object Model).
@@ -16,20 +15,6 @@
  * check out the [Element] class, the base class for many of the HTML
  * DOM types.
  *
- * ## Other resources
- *
- * * If you've never written a web app before, try our
- * tutorials&mdash;[A Game of Darts](http://dartlang.org/docs/tutorials).
- *
- * * To see some web-based Dart apps in action and to play with the code,
- * download
- * [Dart Editor](http://www.dartlang.org/#get-started)
- * and run its built-in examples.
- *
- * * For even more examples, see
- * [Dart HTML5 Samples](https://github.com/dart-lang/dart-html5-samples)
- * on Github.
- *
  * {@category Web}
  */
 library dart.dom.html;
@@ -163,7 +148,6 @@
   HtmlElement.created() : super.created();
 
   // From NoncedElement
-  @DomName('HTMLElement.nonce')
   String nonce;
 }
 
@@ -171,7 +155,5 @@
  * Emitted for any setlike IDL entry needs a callback signature.
  * Today there is only one.
  */
-@DomName('FontFaceSetForEachCallback')
-@Experimental() // untriaged
 typedef void FontFaceSetForEachCallback(
     FontFace fontFace, FontFace fontFaceAgain, FontFaceSet set);
diff --git a/tools/dom/templates/html/dart2js/impl_Console.darttemplate b/tools/dom/templates/html/dart2js/impl_Console.darttemplate
index 4372f85..890ad2d 100644
--- a/tools/dom/templates/html/dart2js/impl_Console.darttemplate
+++ b/tools/dom/templates/html/dart2js/impl_Console.darttemplate
@@ -12,91 +12,69 @@
 
   bool get _isConsoleDefined => JS('bool', 'typeof console != "undefined"');
 
-  @DomName('Console.memory')
   MemoryInfo get memory => _isConsoleDefined ?
       JS('MemoryInfo', 'console.memory') : null;
 
-  @DomName('Console.assertCondition')
   void assertCondition(bool condition, Object arg) => _isConsoleDefined ?
       JS('void', 'console.assertCondition(#, #)', condition, arg) : null;
 
-  @DomName('Console.clear')
   void clear(Object arg) => _isConsoleDefined ?
       JS('void', 'console.clear(#)', arg) : null;
 
-  @DomName('Console.count')
   void count(Object arg) => _isConsoleDefined ?
       JS('void', 'console.count(#)', arg) : null;
 
-  @DomName('Console.debug')
   void debug(Object arg) => _isConsoleDefined ?
       JS('void', 'console.debug(#)', arg) : null;
 
-  @DomName('Console.dir')
   void dir(Object arg) => _isConsoleDefined ?
       JS('void', 'console.dir(#)', arg) : null;
 
-  @DomName('Console.dirxml')
   void dirxml(Object arg) => _isConsoleDefined ?
       JS('void', 'console.dirxml(#)', arg) : null;
 
-  @DomName('Console.error')
   void error(Object arg) => _isConsoleDefined ?
       JS('void', 'console.error(#)', arg) : null;
 
-  @DomName('Console.group')
   void group(Object arg) => _isConsoleDefined ?
       JS('void', 'console.group(#)', arg) : null;
 
-  @DomName('Console.groupCollapsed')
   void groupCollapsed(Object arg) => _isConsoleDefined ?
       JS('void', 'console.groupCollapsed(#)', arg) : null;
 
-  @DomName('Console.groupEnd')
   void groupEnd() => _isConsoleDefined ?
       JS('void', 'console.groupEnd()') : null;
 
-  @DomName('Console.info')
   void info(Object arg) => _isConsoleDefined ?
       JS('void', 'console.info(#)', arg) : null;
 
-  @DomName('Console.log')
   void log(Object arg) => _isConsoleDefined ?
       JS('void', 'console.log(#)', arg) : null;
 
-  @DomName('Console.markTimeline')
   void markTimeline(Object arg) => _isConsoleDefined ?
       JS('void', 'console.markTimeline(#)', arg) : null;
 
-  @DomName('Console.profile')
   void profile(String title) => _isConsoleDefined ?
       JS('void', 'console.profile(#)', title) : null;
 
-  @DomName('Console.profileEnd')
   void profileEnd(String title) => _isConsoleDefined ?
       JS('void', 'console.profileEnd(#)', title) : null;
 
-  @DomName('Console.table')
   void table(Object arg) => _isConsoleDefined ?
       JS('void', 'console.table(#)', arg) : null;
 
-  @DomName('Console.time')
   void time(String title) => _isConsoleDefined ?
       JS('void', 'console.time(#)', title) : null;
 
-  @DomName('Console.timeEnd')
   void timeEnd(String title) => _isConsoleDefined ?
       JS('void', 'console.timeEnd(#)', title) : null;
 
-  @DomName('Console.timeStamp')
   void timeStamp(Object arg) => _isConsoleDefined ?
       JS('void', 'console.timeStamp(#)', arg) : null;
 
-  @DomName('Console.trace')
   void trace(Object arg) => _isConsoleDefined ?
       JS('void', 'console.trace(#)', arg) : null;
 
-  @DomName('Console.warn')
   void warn(Object arg) => _isConsoleDefined ?
       JS('void', 'console.warn(#)', arg) : null;
 $!MEMBERS
diff --git a/tools/dom/templates/html/dart2js/impl_HTMLAnchorElement.darttemplate b/tools/dom/templates/html/dart2js/impl_HTMLAnchorElement.darttemplate
index fb6ff5f..ede3614 100644
--- a/tools/dom/templates/html/dart2js/impl_HTMLAnchorElement.darttemplate
+++ b/tools/dom/templates/html/dart2js/impl_HTMLAnchorElement.darttemplate
@@ -4,11 +4,8 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$MIXINS$IMPLEMENTS {
 $!MEMBERS
 
-  @DomName('HTMLAnchorElement.toString')
-  @DocsEditable()
   String toString() => JS('String', 'String(#)', this);
 }
diff --git a/tools/dom/templates/html/dart2js/impl_HTMLAreaElement.darttemplate b/tools/dom/templates/html/dart2js/impl_HTMLAreaElement.darttemplate
index df3fdd6..ede3614 100644
--- a/tools/dom/templates/html/dart2js/impl_HTMLAreaElement.darttemplate
+++ b/tools/dom/templates/html/dart2js/impl_HTMLAreaElement.darttemplate
@@ -4,11 +4,8 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$MIXINS$IMPLEMENTS {
 $!MEMBERS
 
-  @DomName('HTMLAreaElement.toString')
-  @DocsEditable()
   String toString() => JS('String', 'String(#)', this);
 }
diff --git a/tools/dom/templates/html/dart2js/impl_KeyboardEvent.darttemplate b/tools/dom/templates/html/dart2js/impl_KeyboardEvent.darttemplate
index 28374c1..dbb094f6 100644
--- a/tools/dom/templates/html/dart2js/impl_KeyboardEvent.darttemplate
+++ b/tools/dom/templates/html/dart2js/impl_KeyboardEvent.darttemplate
@@ -44,7 +44,6 @@
     return e;
   }
 
-  @DomName('KeyboardEvent.initKeyboardEvent')
   void _initKeyboardEvent(String type, bool canBubble, bool cancelable,
       Window view, String keyIdentifier, int location, bool ctrlKey,
       bool altKey, bool shiftKey, bool metaKey) {
@@ -64,13 +63,10 @@
     }
   }
 
-  @DomName('KeyboardEvent.keyCode')
   final int keyCode;
 
-  @DomName('KeyboardEvent.charCode')
   final int charCode;
 
-  @DomName('KeyboardEvent.which')
   int get which => _which;
 $!MEMBERS
 }
diff --git a/tools/dom/templates/html/dart2js/impl_MouseEvent.darttemplate b/tools/dom/templates/html/dart2js/impl_MouseEvent.darttemplate
index 2b582c6..f6c080a 100644
--- a/tools/dom/templates/html/dart2js/impl_MouseEvent.darttemplate
+++ b/tools/dom/templates/html/dart2js/impl_MouseEvent.darttemplate
@@ -22,14 +22,10 @@
   }
 $!MEMBERS
 
-  @DomName('MouseEvent.clientX') @DomName('MouseEvent.clientY')
   Point get client => new Point(_clientX, _clientY);
 
-  @DomName('MouseEvent.movementX')
-  @DomName('MouseEvent.movementY')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
-  @Experimental()
   Point get movement => new Point(_movementX, _movementY);
 
   /**
@@ -56,19 +52,12 @@
     }
   }
 
-  @DomName('MouseEvent.screenX')
-  @DomName('MouseEvent.screenY')
   Point get screen => new Point(_screenX, _screenY);
 
-  @DomName('MouseEvent.layerX')
-  @DomName('MouseEvent.layerY')
   Point get layer => new Point(_layerX, _layerY);
 
-  @DomName('MouseEvent.pageX')
-  @DomName('MouseEvent.pageY')
   Point get page => new Point(_pageX, _pageY);
 
-  @DomName('MouseEvent.dataTransfer')
   DataTransfer get dataTransfer => JS('DataTransfer', "#['dataTransfer']", this);
 
 }
diff --git a/tools/dom/templates/html/dart2js/impl_PaymentRequest.darttemplate b/tools/dom/templates/html/dart2js/impl_PaymentRequest.darttemplate
index 3110cc8..96e0513 100644
--- a/tools/dom/templates/html/dart2js/impl_PaymentRequest.darttemplate
+++ b/tools/dom/templates/html/dart2js/impl_PaymentRequest.darttemplate
@@ -4,7 +4,6 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$MIXINS$IMPLEMENTS {
   factory PaymentRequest(List<Map> methodData, Map details,
       [Map options]) {
diff --git a/tools/dom/templates/html/dart2js/impl_URL.darttemplate b/tools/dom/templates/html/dart2js/impl_URL.darttemplate
index 1e14cca..7e7350e 100644
--- a/tools/dom/templates/html/dart2js/impl_URL.darttemplate
+++ b/tools/dom/templates/html/dart2js/impl_URL.darttemplate
@@ -24,8 +24,6 @@
       JS('void',
          '(self.URL || self.webkitURL).revokeObjectURL(#)', url);
 
-  @DomName('URL.toString')
-  @DocsEditable()
   String toString() => JS('String', 'String(#)', this);
 
 $!MEMBERS
diff --git a/tools/dom/templates/html/dart2js/web_gl_dart2js.darttemplate b/tools/dom/templates/html/dart2js/web_gl_dart2js.darttemplate
index e336c9b..8780f3a 100644
--- a/tools/dom/templates/html/dart2js/web_gl_dart2js.darttemplate
+++ b/tools/dom/templates/html/dart2js/web_gl_dart2js.darttemplate
@@ -20,6 +20,4 @@
 import 'dart:_foreign_helper' show JS;
 import 'dart:_interceptors' show Interceptor, JSExtendableArray;
 
-part '$AUXILIARY_DIR/WebGLConstants.dart';
-
 $!GENERATED_DART_FILES
diff --git a/tools/dom/templates/html/impl/impl_AbstractWorker.darttemplate b/tools/dom/templates/html/impl/impl_AbstractWorker.darttemplate
index 8bb0f41..745d25b 100644
--- a/tools/dom/templates/html/impl/impl_AbstractWorker.darttemplate
+++ b/tools/dom/templates/html/impl/impl_AbstractWorker.darttemplate
@@ -4,6 +4,5 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$MIXINS implements EventTarget {
 $!MEMBERS}
diff --git a/tools/dom/templates/html/impl/impl_AudioContext.darttemplate b/tools/dom/templates/html/impl/impl_AudioContext.darttemplate
index a90e62e..d98519b 100644
--- a/tools/dom/templates/html/impl/impl_AudioContext.darttemplate
+++ b/tools/dom/templates/html/impl/impl_AudioContext.darttemplate
@@ -41,13 +41,10 @@
   }
 
   @JSName('decodeAudioData')
-  @DomName('AudioContext.decodeAudioData')
-  @DocsEditable()
   Future _decodeAudioData(ByteBuffer audioData,
       [DecodeSuccessCallback successCallback,
       DecodeErrorCallback errorCallback]) native;
 
-  @DomName('AudioContext.decodeAudioData')
   Future<AudioBuffer> decodeAudioData(ByteBuffer audioData,
       [DecodeSuccessCallback successCallback,
       DecodeErrorCallback errorCallback]) {
diff --git a/tools/dom/templates/html/impl/impl_AudioNode.darttemplate b/tools/dom/templates/html/impl/impl_AudioNode.darttemplate
index e5ba37a..1342ec5b 100644
--- a/tools/dom/templates/html/impl/impl_AudioNode.darttemplate
+++ b/tools/dom/templates/html/impl/impl_AudioNode.darttemplate
@@ -6,12 +6,10 @@
 
 $(ANNOTATIONS)$(NATIVESPEC)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 $!MEMBERS
-  @DomName('AudioNode.connect')
   void connectNode(AudioNode destination, [int output = 0, int input = 0]) {
     _connect(destination, output, input);
   }
 
-  @DomName('AudioNode.connect')
   void connectParam(AudioParam destination, [int output = 0]) {
     _connect(destination, output);
   }
diff --git a/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate b/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
index 03a2914..574ef48 100644
--- a/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
+++ b/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
@@ -53,7 +53,6 @@
   }
 
 
-  @DomName('CSSStyleDeclaration.setProperty')
   void setProperty(String propertyName, String value, [String priority]) {
     return _setPropertyHelper(_browserPropertyName(propertyName),
       value, priority);
diff --git a/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate b/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
index a2df9a3..ac9403d 100644
--- a/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
+++ b/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
@@ -11,8 +11,6 @@
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS implements CanvasRenderingContext {
 $!MEMBERS
 
-  @DomName('CanvasRenderingContext2D.createImageDataFromImageData')
-  @DocsEditable()
   ImageData createImageDataFromImageData(ImageData imagedata) =>
     JS('ImageData', '#.createImageData(#)', this, imagedata);
 
@@ -52,7 +50,6 @@
     this.strokeStyle = 'hsla($h, $s%, $l%, $a)';
   }
 
-  @DomName('CanvasRenderingContext2D.arc')
   void arc(num x,  num y,  num radius,  num startAngle, num endAngle,
       [bool anticlockwise = false]) {
     // TODO(terry): This should not be needed: dartbug.com/20939.
@@ -60,7 +57,6 @@
        endAngle, anticlockwise);
   }
 
-  @DomName('CanvasRenderingContext2D.createPatternFromImage')
   CanvasPattern createPatternFromImage(ImageElement image, String repetitionType) =>
     JS('CanvasPattern', '#.createPattern(#, #)', this, image, repetitionType);
 
@@ -104,7 +100,6 @@
    *   * [drawImage](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-drawimage)
    * from the WHATWG.
    */
-  @DomName('CanvasRenderingContext2D.drawImage')
   void drawImageToRect(CanvasImageSource source, Rectangle destRect,
       {Rectangle sourceRect}) {
     if (sourceRect == null) {
@@ -155,7 +150,6 @@
    *   * [drawImage](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-drawimage)
    * from the WHATWG.
    */
-  @DomName('CanvasRenderingContext2D.drawImage')
   @JSName('drawImage')
   void drawImage(CanvasImageSource source, num destX, num destY) native;
 
@@ -185,7 +179,6 @@
    *   * [drawImage](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-drawimage)
    * from the WHATWG.
    */
-  @DomName('CanvasRenderingContext2D.drawImage')
   @JSName('drawImage')
   void drawImageScaled(CanvasImageSource source,
       num destX, num destY, num destWidth, num destHeight) native;
@@ -219,7 +212,6 @@
    *   * [drawImage](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-drawimage)
    * from the WHATWG.
    */
-  @DomName('CanvasRenderingContext2D.drawImage')
   @JSName('drawImage')
   void drawImageScaledFromSource(CanvasImageSource source,
       num sourceX, num sourceY, num sourceWidth, num sourceHeight,
@@ -229,7 +221,6 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @SupportedBrowser(SupportedBrowser.IE, '11')
   @Unstable()
-  @DomName('CanvasRenderingContext2D.lineDashOffset')
   // TODO(14316): Firefox has this functionality with mozDashOffset, but it
   // needs to be polyfilled.
   num get lineDashOffset => JS('num',
@@ -239,7 +230,6 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @SupportedBrowser(SupportedBrowser.IE, '11')
   @Unstable()
-  @DomName('CanvasRenderingContext2D.lineDashOffset')
   // TODO(14316): Firefox has this functionality with mozDashOffset, but it
   // needs to be polyfilled.
   set lineDashOffset(num value) {
@@ -252,7 +242,6 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @SupportedBrowser(SupportedBrowser.IE, '11')
   @Unstable()
-  @DomName('CanvasRenderingContext2D.getLineDash')
   List<num> getLineDash() {
     // TODO(14316): Firefox has this functionality with mozDash, but it's a bit
     // different.
@@ -267,7 +256,6 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @SupportedBrowser(SupportedBrowser.IE, '11')
   @Unstable()
-  @DomName('CanvasRenderingContext2D.setLineDash')
   void setLineDash(List<num> dash) {
     // TODO(14316): Firefox has this functionality with mozDash, but it's a bit
     // different.
@@ -293,7 +281,6 @@
    * [CanvasRenderingContext2D.textBaseLine] properties are also applied to the
    * drawn text.
    */
-  @DomName('CanvasRenderingContext2D.fillText')
   void fillText(String text, num x, num y, [num maxWidth]) {
     if (maxWidth != null) {
       JS('void', '#.fillText(#, #, #, #)', this, text, x, y, maxWidth);
@@ -302,14 +289,7 @@
     }
   }
 
-  @DomName('CanvasRenderingContext2D.fill')
-  void fill([String winding = 'nonzero']) {
-    JS('void', '#.fill(#)', this, winding);
-  }
-
   /** Deprecated always returns 1.0 */
-  @DomName('CanvasRenderingContext2D.webkitBackingStorePixelRation')
-  @Experimental()
   @deprecated
   double get backingStorePixelRatio => 1.0;
 }
diff --git a/tools/dom/templates/html/impl/impl_Comment.darttemplate b/tools/dom/templates/html/impl/impl_Comment.darttemplate
index 44b6b54..aebaf0b 100644
--- a/tools/dom/templates/html/impl/impl_Comment.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Comment.darttemplate
@@ -4,7 +4,6 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$MIXINS$IMPLEMENTS {
   factory Comment([String data]) {
     return JS('returns:Comment;depends:none;effects:none;new:true',
diff --git a/tools/dom/templates/html/impl/impl_CustomEvent.darttemplate b/tools/dom/templates/html/impl/impl_CustomEvent.darttemplate
index 317a9cc..02a4f92 100644
--- a/tools/dom/templates/html/impl/impl_CustomEvent.darttemplate
+++ b/tools/dom/templates/html/impl/impl_CustomEvent.darttemplate
@@ -33,7 +33,6 @@
     return e;
   }
 
-  @DomName('CustomEvent.detail')
   get detail {
     if (_dartDetail != null) {
       return _dartDetail;
diff --git a/tools/dom/templates/html/impl/impl_DOMException.darttemplate b/tools/dom/templates/html/impl/impl_DOMException.darttemplate
index 963cb3c..4eddc81 100644
--- a/tools/dom/templates/html/impl/impl_DOMException.darttemplate
+++ b/tools/dom/templates/html/impl/impl_DOMException.darttemplate
@@ -41,7 +41,5 @@
     return errorName;
   }
 $!MEMBERS
-  @DomName('DOMException.toString')
-  @DocsEditable()
   String toString() => JS('String', 'String(#)', this);
 }
diff --git a/tools/dom/templates/html/impl/impl_DOMRect.darttemplate b/tools/dom/templates/html/impl/impl_DOMRect.darttemplate
index 22f115e..f99d980 100644
--- a/tools/dom/templates/html/impl/impl_DOMRect.darttemplate
+++ b/tools/dom/templates/html/impl/impl_DOMRect.darttemplate
@@ -4,7 +4,6 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS implements Rectangle$IMPLEMENTS {
 
   // NOTE! All code below should be common with RectangleBase.
diff --git a/tools/dom/templates/html/impl/impl_DOMRectReadOnly.darttemplate b/tools/dom/templates/html/impl/impl_DOMRectReadOnly.darttemplate
index b17b5bc..912f652 100644
--- a/tools/dom/templates/html/impl/impl_DOMRectReadOnly.darttemplate
+++ b/tools/dom/templates/html/impl/impl_DOMRectReadOnly.darttemplate
@@ -4,7 +4,6 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS implements Rectangle$IMPLEMENTS {
 
   // NOTE! All code below should be common with RectangleBase.
diff --git a/tools/dom/templates/html/impl/impl_DataTransferItemList.darttemplate b/tools/dom/templates/html/impl/impl_DataTransferItemList.darttemplate
index 1636c05..940eeac 100644
--- a/tools/dom/templates/html/impl/impl_DataTransferItemList.darttemplate
+++ b/tools/dom/templates/html/impl/impl_DataTransferItemList.darttemplate
@@ -4,7 +4,6 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$MIXINS$IMPLEMENTS {
 $!MEMBERS
 
diff --git a/tools/dom/templates/html/impl/impl_Database.darttemplate b/tools/dom/templates/html/impl/impl_Database.darttemplate
index ef5d8bd..5bc5d1e 100644
--- a/tools/dom/templates/html/impl/impl_Database.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Database.darttemplate
@@ -4,13 +4,10 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 $!MEMBERS
 
   @JSName('transaction')
-  @DomName('Database.transaction')
-  @DocsEditable()
   Future<SqlTransaction> transaction_future() {
     var completer = new Completer<SqlTransaction>();
     transaction((value) {
diff --git a/tools/dom/templates/html/impl/impl_DirectoryReader.darttemplate b/tools/dom/templates/html/impl/impl_DirectoryReader.darttemplate
index 2e28d10..53bc0ef 100644
--- a/tools/dom/templates/html/impl/impl_DirectoryReader.darttemplate
+++ b/tools/dom/templates/html/impl/impl_DirectoryReader.darttemplate
@@ -7,8 +7,6 @@
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 $!MEMBERS
 
-  @DomName('DirectoryReader.readEntries')
-  @DocsEditable()
   Future<List<Entry>> readEntries() {
     var completer = new Completer<List<Entry>>();
     _readEntries((value) {
diff --git a/tools/dom/templates/html/impl/impl_Document.darttemplate b/tools/dom/templates/html/impl/impl_Document.darttemplate
index a7336fb..838507e 100644
--- a/tools/dom/templates/html/impl/impl_Document.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Document.darttemplate
@@ -4,7 +4,6 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME extends Node
 {
 
@@ -42,7 +41,6 @@
         registerElement2(tag, {'prototype': customElementClass, 'extends': extendsTag});
   }
 
-  @DomName('Document.createElement')
   @ForceInline() // Almost all call sites have one argument.
   Element createElement(String tagName, [String typeExtension]) {
     return (typeExtension == null)
@@ -52,41 +50,33 @@
 
   // The two-argument version of this is automatically generated, but we need to
   // omit the typeExtension if it's null on Firefox or we get an is="null" attribute.
-  @DomName('Document.createElement')
   _createElement_2(String tagName) =>
       JS('Element', '#.createElement(#)', this, tagName);
 
   // The three-argument version of this is automatically generated, but we need to
   // omit the typeExtension if it's null on Firefox or we get an is="null" attribute.
-  @DomName('Document.createElementNS')
   _createElementNS_2(String namespaceURI, String qualifiedName) =>
       JS('Element', '#.createElementNS(#, #)', this, namespaceURI, qualifiedName);
 
-  @DomName('Document.createElementNS')
-  @DocsEditable()
   Element createElementNS(String namespaceURI, String qualifiedName, [String typeExtension]) {
     return (typeExtension == null)
         ? _createElementNS_2(namespaceURI, qualifiedName)
         : _createElementNS(namespaceURI, qualifiedName, typeExtension);
   }
 
-  @DomName('Document.createNodeIterator')
   NodeIterator _createNodeIterator(Node root,
       [int whatToShow, NodeFilter filter])
       => JS('NodeIterator', '#.createNodeIterator(#, #, #, false)',
           this, root, whatToShow, filter);
 
-  @DomName('Document.createTreeWalker')
   TreeWalker _createTreeWalker(Node root,
       [int whatToShow, NodeFilter filter])
       => JS('TreeWalker', '#.createTreeWalker(#, #, #, false)',
           this, root, whatToShow, filter);
 
-  @DomName('Document.visibilityState')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
-  @Experimental()
   String get visibilityState => JS('String',
     '(#.visibilityState || #.mozVisibilityState || #.msVisibilityState ||'
       '#.webkitVisibilityState)', this, this, this, this);
diff --git a/tools/dom/templates/html/impl/impl_DocumentType.darttemplate b/tools/dom/templates/html/impl/impl_DocumentType.darttemplate
index 0517910..cfc1a6e 100644
--- a/tools/dom/templates/html/impl/impl_DocumentType.darttemplate
+++ b/tools/dom/templates/html/impl/impl_DocumentType.darttemplate
@@ -4,7 +4,6 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 $!MEMBERS
 }
diff --git a/tools/dom/templates/html/impl/impl_Element.darttemplate b/tools/dom/templates/html/impl/impl_Element.darttemplate
index c894295..f8f956e 100644
--- a/tools/dom/templates/html/impl/impl_Element.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Element.darttemplate
@@ -211,7 +211,6 @@
    * Unlike [getBoundingClientRect], the dimensions of this rectangle
    * will return the same numerical height if the element is hidden or not.
    */
-  @Experimental()
   CssRect get contentEdge;
 
   /**
@@ -226,7 +225,6 @@
    * is also a rectangle equalling the dimensions of clientHeight and
    * clientWidth.
    */
-  @Experimental()
   CssRect get paddingEdge;
 
   /**
@@ -239,7 +237,6 @@
    * will return the same numerical height if the element is hidden or not. This
    * can be used to retrieve jQuery's `outerHeight` value for an element.
    */
-  @Experimental()
   CssRect get borderEdge;
 
   /**
@@ -252,7 +249,6 @@
    * will return the same numerical height if the element is hidden or not. This
    * can be used to retrieve jQuery's `outerHeight` value for an element.
    */
-  @Experimental()
   CssRect get marginEdge;
 $!STREAM_GETTER_SIGNATURES
 }
@@ -323,7 +319,6 @@
 $!ELEMENT_STREAM_GETTERS
 }
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 
   /**
@@ -598,7 +593,6 @@
    * For details about CSS selector syntax, see the
    * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
    */
-  @DomName('Element.querySelectorAll')
   ElementList<T> querySelectorAll<T extends Element>(String selectors) =>
     new _FrozenElementList<T>._wrap(_querySelectorAll(selectors));
 
@@ -738,7 +732,6 @@
    * [Custom Elements](http://w3c.github.io/webcomponents/spec/custom/#dfn-attached-callback)
    * draft specification.
    */
-  @Experimental()
   void attached() {
     // For the deprecation period, call the old callback.
     enteredView();
@@ -752,19 +745,15 @@
    * [Custom Elements](http://w3c.github.io/webcomponents/spec/custom/#dfn-detached-callback)
    * draft specification.
    */
-  @Experimental()
   void detached() {
     // For the deprecation period, call the old callback.
     leftView();
   }
 
   /** *Deprecated*: override [attached] instead. */
-  @Experimental()
   @deprecated
   void enteredView() {}
 
-  @DomName('Element.getClientRects')
-  @DocsEditable()
   List<Rectangle> getClientRects() {
     var value = _getClientRects();
 
@@ -780,7 +769,6 @@
   }
 
   /** *Deprecated*: override [detached] instead. */
-  @Experimental()
   @deprecated
   void leftView() {}
 
@@ -806,7 +794,6 @@
    * for the transition, or a Map with fields corresponding to those
    * of the [Timing] object.
   **/
-  @Experimental()
   @SupportedBrowser(SupportedBrowser.CHROME, '36')
   Animation animate(Iterable<Map<String, dynamic>> frames, [timing]) {
     if (frames is! Iterable || !(frames.every((x) => x is Map))) {
@@ -825,17 +812,13 @@
       : _animate(convertedFrames, convertedTiming);
   }
 
-  @DomName('Element.animate')
   @JSName('animate')
-  @Experimental() // untriaged
   Animation _animate(Object effect, [timing]) native;
   /**
    * Called by the DOM whenever an attribute on this has been changed.
    */
   void attributeChanged(String name, String oldValue, String newValue) {}
 
-  @DomName('Element.localName')
-  @DocsEditable()
   @Returns('String')
   // Non-null for Elements.
   String get localName => JS('String', '#', _localName);
@@ -850,7 +833,6 @@
    * * [Node.namespaceURI](http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeNSname)
    *   from W3C.
    */
-  @DomName('Element.namespaceUri')
   String get namespaceUri => _namespaceUri;
 
   /**
@@ -902,7 +884,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.mouseWheelEvent')
   static const EventStreamProvider<WheelEvent> mouseWheelEvent =
       const _CustomEventStreamProvider<WheelEvent>(
         Element._determineMouseWheelEventType);
@@ -915,7 +896,6 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Element.transitionEndEvent')
   static const EventStreamProvider<TransitionEvent> transitionEndEvent =
       const _CustomEventStreamProvider<TransitionEvent>(
         Element._determineTransitionEventType);
@@ -1032,7 +1012,6 @@
   /**
    * Checks if this element matches the CSS selectors.
    */
-  @Experimental()
   bool matches(String selectors) {
     if (JS('bool', '!!#.matches', this)) {
       return JS('bool', '#.matches(#)', this, selectors);
@@ -1050,7 +1029,6 @@
   }
 
   /** Checks if this element or any of its parents match the CSS selectors. */
-  @Experimental()
   bool matchesWithAncestors(String selectors) {
     var elem = this;
     do {
@@ -1069,9 +1047,7 @@
    *   from HTML5Rocks.
    * * [Shadow DOM specification](http://www.w3.org/TR/shadow-dom/) from W3C.
    */
-  @DomName('Element.createShadowRoot')
   @SupportedBrowser(SupportedBrowser.CHROME, '25')
-  @Experimental()
   ShadowRoot createShadowRoot() {
     return JS('ShadowRoot',
       '(#.createShadowRoot || #.webkitCreateShadowRoot).call(#)',
@@ -1088,9 +1064,7 @@
    * * [Shadow DOM specification](http://www.w3.org/TR/shadow-dom/)
    *   from W3C.
    */
-  @DomName('Element.shadowRoot')
   @SupportedBrowser(SupportedBrowser.CHROME, '25')
-  @Experimental()
   ShadowRoot get shadowRoot =>
       JS('ShadowRoot|Null', '#.shadowRoot || #.webkitShadowRoot', this, this);
 
@@ -1107,7 +1081,6 @@
    * animation frame is discouraged. See also:
    * [Browser Reflow](https://developers.google.com/speed/articles/reflow)
    */
-  @Experimental()
   CssRect get contentEdge => new _ContentCssRect(this);
 
   /**
@@ -1127,7 +1100,6 @@
    * animation frame is discouraged. See also:
    * [Browser Reflow](https://developers.google.com/speed/articles/reflow)
    */
-  @Experimental()
   CssRect get paddingEdge => new _PaddingCssRect(this);
 
   /**
@@ -1146,7 +1118,6 @@
    * animation frame is discouraged. See also:
    * [Browser Reflow](https://developers.google.com/speed/articles/reflow)
    */
-  @Experimental()
   CssRect get borderEdge => new _BorderCssRect(this);
 
   /**
@@ -1165,7 +1136,6 @@
    * animation frame is discouraged. See also:
    * [Browser Reflow](https://developers.google.com/speed/articles/reflow)
    */
-  @Experimental()
   CssRect get marginEdge => new _MarginCssRect(this);
 
   /**
@@ -1175,7 +1145,6 @@
    * This method is the Dart equivalent to jQuery's
    * [offset](http://api.jquery.com/offset/) method.
    */
-  @Experimental()
   Point get documentOffset => offsetTo(document.documentElement);
 
   /**
@@ -1189,7 +1158,6 @@
    * element is _not_ an offset parent or transitive offset parent to this
    * element, an [ArgumentError] is thrown.
    */
-  @Experimental()
   Point offsetTo(Element parent) {
     return Element._offsetToHelper(this, parent);
   }
@@ -1430,52 +1398,29 @@
     return result;
   }
 
-  @DomName('Element.offsetParent')
-  @DocsEditable()
   final Element offsetParent;
 
-  @DomName('Element.offsetHeight')
-  @DocsEditable()
   int get offsetHeight => JS('num', '#.offsetHeight', this).round();
 
-  @DomName('Element.offsetLeft')
-  @DocsEditable()
   int get offsetLeft => JS('num', '#.offsetLeft', this).round();
 
-  @DomName('Element.offsetTop')
-  @DocsEditable()
   int get offsetTop => JS('num', '#.offsetTop', this).round();
 
-  @DomName('Element.offsetWidth')
-  @DocsEditable()
   int get offsetWidth => JS('num', '#.offsetWidth', this).round();
 
-  @DomName('Element.scrollHeight')
-  @DocsEditable()
   int get scrollHeight => JS('num', '#.scrollHeight', this).round();
-
-  @DomName('Element.scrollLeft')
-  @DocsEditable()
   int get scrollLeft => JS('num', '#.scrollLeft', this).round();
 
-  @DomName('Element.scrollLeft')
-  @DocsEditable()
   set scrollLeft(int value) {
     JS("void", "#.scrollLeft = #", this, value.round());
   }
 
-  @DomName('Element.scrollTop')
-  @DocsEditable()
   int get scrollTop => JS('num', '#.scrollTop', this).round();
 
-  @DomName('Element.scrollTop')
-  @DocsEditable()
   set scrollTop(int value) {
     JS("void", "#.scrollTop = #", this, value.round());
   }
 
-  @DomName('Element.scrollWidth')
-  @DocsEditable()
   int get scrollWidth => JS('num', '#.scrollWidth', this).round();
 
 $!MEMBERS
@@ -1484,7 +1429,6 @@
 
 class _ElementFactoryProvider {
 
-  @DomName('Document.createElement')
   // Optimization to improve performance until the dart2js compiler inlines this
   // method.
   static dynamic createElement_tag(String tag, String typeExtension) {
diff --git a/tools/dom/templates/html/impl/impl_Event.darttemplate b/tools/dom/templates/html/impl/impl_Event.darttemplate
index 6359078..45a00d5 100644
--- a/tools/dom/templates/html/impl/impl_Event.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Event.darttemplate
@@ -57,9 +57,6 @@
     throw new StateError('No selector matched for populating matchedTarget.');
   }
 
-  @DomName('Event.path')
-  @DocsEditable()
-  @Experimental()
   List<EventTarget> get path =>
     JS('bool', '!!#.composedPath', this) ? composedPath() : [];
 
diff --git a/tools/dom/templates/html/impl/impl_FileReader.darttemplate b/tools/dom/templates/html/impl/impl_FileReader.darttemplate
index c2bbff1..366774b 100644
--- a/tools/dom/templates/html/impl/impl_FileReader.darttemplate
+++ b/tools/dom/templates/html/impl/impl_FileReader.darttemplate
@@ -4,11 +4,8 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 
-  @DomName('FileReader.result')
-  @DocsEditable()
   Object get result {
     var res = JS('Null|String|NativeByteBuffer', '#.result', this);
     if (res is ByteBuffer) {
diff --git a/tools/dom/templates/html/impl/impl_Geolocation.darttemplate b/tools/dom/templates/html/impl/impl_Geolocation.darttemplate
index 1396e4a..456850e 100644
--- a/tools/dom/templates/html/impl/impl_Geolocation.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Geolocation.darttemplate
@@ -4,10 +4,8 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 
-  @DomName('Geolocation.getCurrentPosition')
   Future<Geoposition> getCurrentPosition({bool enableHighAccuracy,
       Duration timeout, Duration maximumAge}) {
     var options = {};
@@ -36,7 +34,6 @@
     return completer.future;
   }
 
-  @DomName('Geolocation.watchPosition')
   Stream<Geoposition> watchPosition({bool enableHighAccuracy,
       Duration timeout, Duration maximumAge}) {
 
diff --git a/tools/dom/templates/html/impl/impl_GlobalEventHandlers.darttemplate b/tools/dom/templates/html/impl/impl_GlobalEventHandlers.darttemplate
index af140f7..7ce924f 100644
--- a/tools/dom/templates/html/impl/impl_GlobalEventHandlers.darttemplate
+++ b/tools/dom/templates/html/impl/impl_GlobalEventHandlers.darttemplate
@@ -7,7 +7,6 @@
 // We implement EventTarget and have stubs for its methods because it's tricky to
 // convince the scripts to make our instance methods abstract, and the bodies that
 // get generated require `this` to be an EventTarget.
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME implements EventTarget {
 
   void addEventListener(String type, dynamic listener(Event event), [bool useCapture]);
diff --git a/tools/dom/templates/html/impl/impl_HTMLAudioElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLAudioElement.darttemplate
index f9895fb..be9517a 100644
--- a/tools/dom/templates/html/impl/impl_HTMLAudioElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLAudioElement.darttemplate
@@ -4,7 +4,6 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 $!MEMBERS
   factory AudioElement([String src]) => new AudioElement._(src);
diff --git a/tools/dom/templates/html/impl/impl_HTMLCanvasElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLCanvasElement.darttemplate
index 1e3a14b..bfde34a 100644
--- a/tools/dom/templates/html/impl/impl_HTMLCanvasElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLCanvasElement.darttemplate
@@ -21,7 +21,6 @@
    */
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
-  @Experimental()
   gl.RenderingContext getContext3d({alpha: true, depth: true, stencil: false,
     antialias: true, premultipliedAlpha: true, preserveDrawingBuffer: false}) {
 
diff --git a/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate b/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate
index 6469079..6ad09ec 100644
--- a/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate
@@ -9,46 +9,35 @@
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 $!MEMBERS
 
-  @DomName('Document.body')
   BodyElement body;
 
   /// UNSTABLE: Chrome-only - create a Range from the given point.
-  @DomName('Document.caretRangeFromPoint')
   @Unstable()
   Range caretRangeFromPoint(int x, int y) {
     return _caretRangeFromPoint(x, y);
   }
 
-  @DomName('Document.elementFromPoint')
   Element elementFromPoint(int x, int y) {
     return _elementFromPoint(x, y);
   }
 
-  @DomName('Document.head')
   HeadElement get head => _head;
 
-  @DomName('Document.lastModified')
   String get lastModified => _lastModified;
 
-  @DomName('Document.preferredStylesheetSet')
   String get preferredStylesheetSet => _preferredStylesheetSet;
 
-  @DomName('Document.referrer')
   String get referrer => _referrer;
 
-  @DomName('Document.selectedStylesheetSet')
   String get selectedStylesheetSet => _selectedStylesheetSet;
   set selectedStylesheetSet(String value) {
     _selectedStylesheetSet = value;
   }
 
-  @DomName('Document.styleSheets')
   List<StyleSheet> get styleSheets => _styleSheets;
 
-  @DomName('Document.title')
   String get title => _title;
 
-  @DomName('Document.title')
   set title(String value) {
     _title = value;
   }
@@ -65,16 +54,13 @@
    *   from WebPlatform.org.
    * * [Fullscreen specification](http://www.w3.org/TR/fullscreen/) from W3C.
    */
-  @DomName('Document.webkitExitFullscreen')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
   void exitFullscreen() {
     _webkitExitFullscreen();
   }
 
 
-  @Experimental()
   /**
    * Register a custom subclass of Element to be instantiatable by the DOM.
    *
@@ -122,7 +108,6 @@
 
   /** *Deprecated*: use [registerElement] instead. */
   @deprecated
-  @Experimental()
   void register(String tag, Type customElementClass, {String extendsTag}) {
     return registerElement(tag, customElementClass, extendsTag: extendsTag);
   }
@@ -133,11 +118,9 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Document.visibilityChange')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
-  @Experimental()
   static const EventStreamProvider<Event> visibilityChangeEvent =
       const _CustomEventStreamProvider<Event>(
         _determineVisibilityChangeEventType);
@@ -159,7 +142,6 @@
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
-  @Experimental()
   Stream<Event> get onVisibilityChange =>
       visibilityChangeEvent.forTarget(this);
 
@@ -171,7 +153,6 @@
   ///
   /// If the type is not a direct subclass of HtmlElement then the extendsTag
   /// parameter must be provided.
-  @Experimental()
   ElementUpgrader createElementUpgrader(Type type, {String extendsTag}) {
     return new _JSElementUpgrader(this, type, extendsTag);
   }
diff --git a/tools/dom/templates/html/impl/impl_HTMLElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLElement.darttemplate
index 2f16d16..36795c9 100644
--- a/tools/dom/templates/html/impl/impl_HTMLElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLElement.darttemplate
@@ -4,7 +4,6 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 $!MEMBERS
 }
diff --git a/tools/dom/templates/html/impl/impl_HTMLFrameSetElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLFrameSetElement.darttemplate
index 0517910..cfc1a6e 100644
--- a/tools/dom/templates/html/impl/impl_HTMLFrameSetElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLFrameSetElement.darttemplate
@@ -4,7 +4,6 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 $!MEMBERS
 }
diff --git a/tools/dom/templates/html/impl/impl_HTMLInputElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLInputElement.darttemplate
index e6ad32f..12f29c3 100644
--- a/tools/dom/templates/html/impl/impl_HTMLInputElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLInputElement.darttemplate
@@ -50,40 +50,28 @@
  * Exposes the functionality common between all InputElement types.
  */
 abstract class InputElementBase implements Element {
-  @DomName('HTMLInputElement.autofocus')
   bool autofocus;
 
-  @DomName('HTMLInputElement.disabled')
   bool disabled;
 
-  @DomName('HTMLInputElement.incremental')
   bool incremental;
 
-  @DomName('HTMLInputElement.indeterminate')
   bool indeterminate;
 
-  @DomName('HTMLInputElement.labels')
   List<Node> get labels;
 
-  @DomName('HTMLInputElement.name')
   String name;
 
-  @DomName('HTMLInputElement.validationMessage')
   String get validationMessage;
 
-  @DomName('HTMLInputElement.validity')
   ValidityState get validity;
 
-  @DomName('HTMLInputElement.value')
   String value;
 
-  @DomName('HTMLInputElement.willValidate')
   bool get willValidate;
 
-  @DomName('HTMLInputElement.checkValidity')
   bool checkValidity();
 
-  @DomName('HTMLInputElement.setCustomValidity')
   void setCustomValidity(String error);
 }
 
@@ -99,40 +87,28 @@
  * Base interface for all inputs which involve text editing.
  */
 abstract class TextInputElementBase implements InputElementBase {
-  @DomName('HTMLInputElement.autocomplete')
   String autocomplete;
 
-  @DomName('HTMLInputElement.maxLength')
   int maxLength;
 
-  @DomName('HTMLInputElement.pattern')
   String pattern;
 
-  @DomName('HTMLInputElement.placeholder')
   String placeholder;
 
-  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  @DomName('HTMLInputElement.required')
   bool required;
 
-  @DomName('HTMLInputElement.size')
   int size;
 
-  @DomName('HTMLInputElement.select')
   void select();
 
-  @DomName('HTMLInputElement.selectionDirection')
   String selectionDirection;
 
-  @DomName('HTMLInputElement.selectionEnd')
   int selectionEnd;
 
-  @DomName('HTMLInputElement.selectionStart')
   int selectionStart;
 
-  @DomName('HTMLInputElement.setSelectionRange')
   void setSelectionRange(int start, int end, [String direction]);
 }
 
@@ -149,10 +125,8 @@
 abstract class SearchInputElement implements TextInputElementBase {
   factory SearchInputElement() => new InputElement(type: 'search');
 
-  @DomName('HTMLInputElement.dirName')
   String dirName;
 
-  @DomName('HTMLInputElement.list')
   Element get list;
 
   /// Returns true if this input type is supported on the current platform.
@@ -167,10 +141,8 @@
 abstract class TextInputElement implements TextInputElementBase {
   factory TextInputElement() => new InputElement(type: 'text');
 
-  @DomName('HTMLInputElement.dirName')
   String dirName;
 
-  @DomName('HTMLInputElement.list')
   Element get list;
 }
 
@@ -186,7 +158,6 @@
 abstract class UrlInputElement implements TextInputElementBase {
   factory UrlInputElement() => new InputElement(type: 'url');
 
-  @DomName('HTMLInputElement.list')
   Element get list;
 
   /// Returns true if this input type is supported on the current platform.
@@ -210,7 +181,6 @@
 abstract class TelephoneInputElement implements TextInputElementBase {
   factory TelephoneInputElement() => new InputElement(type: 'tel');
 
-  @DomName('HTMLInputElement.list')
   Element get list;
 
   /// Returns true if this input type is supported on the current platform.
@@ -231,34 +201,24 @@
 abstract class EmailInputElement implements TextInputElementBase {
   factory EmailInputElement() => new InputElement(type: 'email');
 
-  @DomName('HTMLInputElement.autocomplete')
   String autocomplete;
 
-  @DomName('HTMLInputElement.autofocus')
   bool autofocus;
 
-  @DomName('HTMLInputElement.list')
   Element get list;
 
-  @DomName('HTMLInputElement.maxLength')
   int maxLength;
 
-  @DomName('HTMLInputElement.multiple')
   bool multiple;
 
-  @DomName('HTMLInputElement.pattern')
   String pattern;
 
-  @DomName('HTMLInputElement.placeholder')
   String placeholder;
 
-  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  @DomName('HTMLInputElement.required')
   bool required;
 
-  @DomName('HTMLInputElement.size')
   int size;
 
   /// Returns true if this input type is supported on the current platform.
@@ -279,25 +239,18 @@
  */
 abstract class RangeInputElementBase implements InputElementBase {
 
-  @DomName('HTMLInputElement.list')
   Element get list;
 
-  @DomName('HTMLInputElement.max')
   String max;
 
-  @DomName('HTMLInputElement.min')
   String min;
 
-  @DomName('HTMLInputElement.step')
   String step;
 
-  @DomName('HTMLInputElement.valueAsNumber')
   num valueAsNumber;
 
-  @DomName('HTMLInputElement.stepDown')
   void stepDown([int n]);
 
-  @DomName('HTMLInputElement.stepUp')
   void stepUp([int n]);
 }
 
@@ -307,17 +260,13 @@
  * Use [supported] to check if this is supported on the current platform.
  */
 @SupportedBrowser(SupportedBrowser.CHROME, '25')
-@Experimental()
 abstract class DateInputElement implements RangeInputElementBase {
   factory DateInputElement() => new InputElement(type: 'date');
 
-  @DomName('HTMLInputElement.valueAsDate')
   DateTime valueAsDate;
 
-  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -332,17 +281,13 @@
  * Use [supported] to check if this is supported on the current platform.
  */
 @SupportedBrowser(SupportedBrowser.CHROME, '25')
-@Experimental()
 abstract class MonthInputElement implements RangeInputElementBase {
   factory MonthInputElement() => new InputElement(type: 'month');
 
-  @DomName('HTMLInputElement.valueAsDate')
   DateTime valueAsDate;
 
-  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -357,17 +302,13 @@
  * Use [supported] to check if this is supported on the current platform.
  */
 @SupportedBrowser(SupportedBrowser.CHROME, '25')
-@Experimental()
 abstract class WeekInputElement implements RangeInputElementBase {
   factory WeekInputElement() => new InputElement(type: 'week');
 
-  @DomName('HTMLInputElement.valueAsDate')
   DateTime valueAsDate;
 
-  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -382,17 +323,13 @@
  * Use [supported] to check if this is supported on the current platform.
  */
 @SupportedBrowser(SupportedBrowser.CHROME)
-@Experimental()
 abstract class TimeInputElement implements RangeInputElementBase {
   factory TimeInputElement() => new InputElement(type: 'time');
 
-  @DomName('HTMLInputElement.valueAsDate')
   DateTime valueAsDate;
 
-  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -408,15 +345,12 @@
  * Use [supported] to check if this is supported on the current platform.
  */
 @SupportedBrowser(SupportedBrowser.CHROME, '25')
-@Experimental()
 abstract class LocalDateTimeInputElement implements RangeInputElementBase {
   factory LocalDateTimeInputElement() =>
       new InputElement(type: 'datetime-local');
 
-  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -431,17 +365,13 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.IE)
 @SupportedBrowser(SupportedBrowser.SAFARI)
-@Experimental()
 abstract class NumberInputElement implements RangeInputElementBase {
   factory NumberInputElement() => new InputElement(type: 'number');
 
-  @DomName('HTMLInputElement.placeholder')
   String placeholder;
 
-  @DomName('HTMLInputElement.readOnly')
   bool readOnly;
 
-  @DomName('HTMLInputElement.required')
   bool required;
 
   /// Returns true if this input type is supported on the current platform.
@@ -458,7 +388,6 @@
  */
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.IE, '10')
-@Experimental()
 abstract class RangeInputElement implements RangeInputElementBase {
   factory RangeInputElement() => new InputElement(type: 'range');
 
@@ -477,10 +406,8 @@
 abstract class CheckboxInputElement implements InputElementBase {
   factory CheckboxInputElement() => new InputElement(type: 'checkbox');
 
-  @DomName('HTMLInputElement.checked')
   bool checked;
 
-  @DomName('HTMLInputElement.required')
   bool required;
 }
 
@@ -499,10 +426,8 @@
 abstract class RadioButtonInputElement implements InputElementBase {
   factory RadioButtonInputElement() => new InputElement(type: 'radio');
 
-  @DomName('HTMLInputElement.checked')
   bool checked;
 
-  @DomName('HTMLInputElement.required')
   bool required;
 }
 
@@ -512,16 +437,12 @@
 abstract class FileUploadInputElement implements InputElementBase {
   factory FileUploadInputElement() => new InputElement(type: 'file');
 
-  @DomName('HTMLInputElement.accept')
   String accept;
 
-  @DomName('HTMLInputElement.multiple')
   bool multiple;
 
-  @DomName('HTMLInputElement.required')
   bool required;
 
-  @DomName('HTMLInputElement.files')
   List<File> files;
 }
 
@@ -531,19 +452,14 @@
 abstract class SubmitButtonInputElement implements InputElementBase {
   factory SubmitButtonInputElement() => new InputElement(type: 'submit');
 
-  @DomName('HTMLInputElement.formAction')
   String formAction;
 
-  @DomName('HTMLInputElement.formEnctype')
   String formEnctype;
 
-  @DomName('HTMLInputElement.formMethod')
   String formMethod;
 
-  @DomName('HTMLInputElement.formNoValidate')
   bool formNoValidate;
 
-  @DomName('HTMLInputElement.formTarget')
   String formTarget;
 }
 
@@ -554,31 +470,22 @@
 abstract class ImageButtonInputElement implements InputElementBase {
   factory ImageButtonInputElement() => new InputElement(type: 'image');
 
-  @DomName('HTMLInputElement.alt')
   String alt;
 
-  @DomName('HTMLInputElement.formAction')
   String formAction;
 
-  @DomName('HTMLInputElement.formEnctype')
   String formEnctype;
 
-  @DomName('HTMLInputElement.formMethod')
   String formMethod;
 
-  @DomName('HTMLInputElement.formNoValidate')
   bool formNoValidate;
 
-  @DomName('HTMLInputElement.formTarget')
   String formTarget;
 
-  @DomName('HTMLInputElement.height')
   int height;
 
-  @DomName('HTMLInputElement.src')
   String src;
 
-  @DomName('HTMLInputElement.width')
   int width;
 }
 
diff --git a/tools/dom/templates/html/impl/impl_HTMLLinkElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLLinkElement.darttemplate
index 831534a..92b704b3 100644
--- a/tools/dom/templates/html/impl/impl_HTMLLinkElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLLinkElement.darttemplate
@@ -4,7 +4,6 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$MIXINS$IMPLEMENTS {
 $!MEMBERS
 
diff --git a/tools/dom/templates/html/impl/impl_HTMLTableElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLTableElement.darttemplate
index 67738cd..6f71be6 100644
--- a/tools/dom/templates/html/impl/impl_HTMLTableElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLTableElement.darttemplate
@@ -4,14 +4,11 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 
-  @DomName('HTMLTableElement.tBodies')
   List<TableSectionElement> get tBodies =>
   new _WrappedList<TableSectionElement>(_tBodies);
 
-  @DomName('HTMLTableElement.rows')
   List<TableRowElement> get rows =>
       new _WrappedList<TableRowElement>(_rows);
 
diff --git a/tools/dom/templates/html/impl/impl_HTMLTableRowElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLTableRowElement.darttemplate
index 7bce32d..0b119f4 100644
--- a/tools/dom/templates/html/impl/impl_HTMLTableRowElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLTableRowElement.darttemplate
@@ -4,10 +4,8 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 
-  @DomName('HTMLTableRowElement.cells')
   List<TableCellElement> get cells =>
       new _WrappedList<TableCellElement>(_cells);
 
diff --git a/tools/dom/templates/html/impl/impl_HTMLTableSectionElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLTableSectionElement.darttemplate
index 00a0803..b7a08a6 100644
--- a/tools/dom/templates/html/impl/impl_HTMLTableSectionElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLTableSectionElement.darttemplate
@@ -4,10 +4,8 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 
-  @DomName('HTMLTableSectionElement.rows')
   List<TableRowElement> get rows =>
     new _WrappedList<TableRowElement>(_rows);
 
diff --git a/tools/dom/templates/html/impl/impl_HTMLTemplateElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLTemplateElement.darttemplate
index 7d546fe..f37da96 100644
--- a/tools/dom/templates/html/impl/impl_HTMLTemplateElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLTemplateElement.darttemplate
@@ -6,7 +6,6 @@
 
 part of $LIBRARYNAME;
 
-@Experimental()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 $!MEMBERS
 
diff --git a/tools/dom/templates/html/impl/impl_IDBCursor.darttemplate b/tools/dom/templates/html/impl/impl_IDBCursor.darttemplate
index 0fef1c3..4154659 100644
--- a/tools/dom/templates/html/impl/impl_IDBCursor.darttemplate
+++ b/tools/dom/templates/html/impl/impl_IDBCursor.darttemplate
@@ -5,7 +5,6 @@
 part of $LIBRARYNAME;
 
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
-  @DomName('IDBCursor.delete')
   Future delete() {
    try {
       return _completeRequest(_delete());
@@ -14,7 +13,6 @@
     }
   }
 
-  @DomName('IDBCursor.value')
   Future update(value) {
    try {
       return _completeRequest(_update(value));
@@ -24,7 +22,6 @@
   }
 
   @JSName('continue')
-  @DomName('IDBCursor.continue')
   void next([Object key]) {
     if (key == null) {
       JS('void', '#.continue()', this);
diff --git a/tools/dom/templates/html/impl/impl_IDBDatabase.darttemplate b/tools/dom/templates/html/impl/impl_IDBDatabase.darttemplate
index 0485ff3..76adb99 100644
--- a/tools/dom/templates/html/impl/impl_IDBDatabase.darttemplate
+++ b/tools/dom/templates/html/impl/impl_IDBDatabase.darttemplate
@@ -4,10 +4,7 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
-  @DomName('IDBDatabase.createObjectStore')
-  @DocsEditable()
   ObjectStore createObjectStore(String name,
       {String keyPath, bool autoIncrement}) {
     var options = {};
diff --git a/tools/dom/templates/html/impl/impl_IDBFactory.darttemplate b/tools/dom/templates/html/impl/impl_IDBFactory.darttemplate
index 2fba73d..4fd732e 100644
--- a/tools/dom/templates/html/impl/impl_IDBFactory.darttemplate
+++ b/tools/dom/templates/html/impl/impl_IDBFactory.darttemplate
@@ -15,7 +15,6 @@
         'window.mozIndexedDB)');
   }
 
-  @DomName('IDBFactory.open')
   Future<Database> open(String name,
       {int version, void onUpgradeNeeded(VersionChangeEvent event),
       void onBlocked(Event event)}) {
@@ -43,7 +42,6 @@
     }
   }
 
-  @DomName('IDBFactory.deleteDatabase')
   Future<IdbFactory> deleteDatabase(String name,
       {void onBlocked(Event e)}) {
     try {
diff --git a/tools/dom/templates/html/impl/impl_IDBIndex.darttemplate b/tools/dom/templates/html/impl/impl_IDBIndex.darttemplate
index ff033a2..608f1bc 100644
--- a/tools/dom/templates/html/impl/impl_IDBIndex.darttemplate
+++ b/tools/dom/templates/html/impl/impl_IDBIndex.darttemplate
@@ -5,7 +5,6 @@
 part of $LIBRARYNAME;
 
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
-  @DomName('IDBIndex.count')
   Future<int> count([key_OR_range]) {
    try {
       var request = _count(key_OR_range);
@@ -15,7 +14,6 @@
     }
   }
 
-  @DomName('IDBIndex.get')
   Future get(key) {
     try {
       var request = _get(key);
@@ -26,7 +24,6 @@
     }
   }
 
-  @DomName('IDBIndex.getKey')
   Future getKey(key) {
     try {
       var request = _getKey(key);
diff --git a/tools/dom/templates/html/impl/impl_IDBKeyRange.darttemplate b/tools/dom/templates/html/impl/impl_IDBKeyRange.darttemplate
index 28439a4..1572c87 100644
--- a/tools/dom/templates/html/impl/impl_IDBKeyRange.darttemplate
+++ b/tools/dom/templates/html/impl/impl_IDBKeyRange.darttemplate
@@ -5,19 +5,15 @@
 part of $LIBRARYNAME;
 
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
-  @DomName('IDBKeyRange.only')
   factory KeyRange.only(/*Key*/ value) =>
       _KeyRangeFactoryProvider.create$(CLASSNAME)_only(value);
 
-  @DomName('IDBKeyRange.lowerBound')
   factory KeyRange.lowerBound(/*Key*/ bound, [bool open = false]) =>
       _KeyRangeFactoryProvider.create$(CLASSNAME)_lowerBound(bound, open);
 
-  @DomName('IDBKeyRange.upperBound')
   factory KeyRange.upperBound(/*Key*/ bound, [bool open = false]) =>
       _KeyRangeFactoryProvider.create$(CLASSNAME)_upperBound(bound, open);
 
-  @DomName('KeyRange.bound')
   factory KeyRange.bound(/*Key*/ lower, /*Key*/ upper,
                             [bool lowerOpen = false, bool upperOpen = false]) =>
       _KeyRangeFactoryProvider.create$(CLASSNAME)_bound(
diff --git a/tools/dom/templates/html/impl/impl_IDBObjectStore.darttemplate b/tools/dom/templates/html/impl/impl_IDBObjectStore.darttemplate
index 2dfff92..704d16e 100644
--- a/tools/dom/templates/html/impl/impl_IDBObjectStore.darttemplate
+++ b/tools/dom/templates/html/impl/impl_IDBObjectStore.darttemplate
@@ -6,7 +6,6 @@
 
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 
-  @DomName('IDBObjectStore.add')
   Future add(value, [key]) {
     try {
       var request;
@@ -21,7 +20,6 @@
     }
   }
 
-  @DomName('IDBObjectStore.clear')
   Future clear() {
     try {
       return _completeRequest(_clear());
@@ -30,7 +28,6 @@
     }
   }
 
-  @DomName('IDBObjectStore.delete')
   Future delete(key_OR_keyRange){
     try {
       return _completeRequest(_delete(key_OR_keyRange));
@@ -39,7 +36,6 @@
     }
   }
 
-  @DomName('IDBObjectStore.count')
   Future<int> count([key_OR_range]) {
    try {
       var request = _count(key_OR_range);
@@ -49,7 +45,6 @@
     }
   }
 
-  @DomName('IDBObjectStore.put')
   Future put(value, [key]) {
     try {
       var request;
@@ -64,7 +59,6 @@
     }
   }
 
-  @DomName('IDBObjectStore.get')
   Future getObject(key) {
     try {
       var request = _get(key);
@@ -96,7 +90,6 @@
    * must be done synchronously unless they are additional async requests to
    * the current transaction.
    */
-  @DomName('IDBObjectStore.openCursor')
   Stream<CursorWithValue> openCursor({key, KeyRange range, String direction,
       bool autoAdvance}) {
     var key_OR_range = null;
@@ -119,7 +112,6 @@
     return _cursorStreamFromResult(request, autoAdvance);
   }
 
-  @DomName('IDBObjectStore.createIndex')
   Index createIndex(String name, keyPath, {bool unique, bool multiEntry}) {
     var options = {};
     if (unique != null) {
diff --git a/tools/dom/templates/html/impl/impl_IDBVersionChangeEvent.darttemplate b/tools/dom/templates/html/impl/impl_IDBVersionChangeEvent.darttemplate
index 60faa8d..f93d07e 100644
--- a/tools/dom/templates/html/impl/impl_IDBVersionChangeEvent.darttemplate
+++ b/tools/dom/templates/html/impl/impl_IDBVersionChangeEvent.darttemplate
@@ -7,8 +7,6 @@
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 $!MEMBERS
   @JSName('target')
-  @DomName('IDBVersionChangeEvent.target')
-  @DocsEditable()
   final OpenDBRequest target;
 }
 
diff --git a/tools/dom/templates/html/impl/impl_Location.darttemplate b/tools/dom/templates/html/impl/impl_Location.darttemplate
index 345bc532..eb9529c 100644
--- a/tools/dom/templates/html/impl/impl_Location.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Location.darttemplate
@@ -4,11 +4,9 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 $!MEMBERS
 
-  @DomName('Location.origin')
   String get origin {
     if (JS('bool', '("origin" in #)', this)) {
       return JS('String', '#.origin', this);
@@ -16,7 +14,5 @@
     return '${this.protocol}//${this.host}';
   }
 
-  @DomName('Location.toString')
-  @DocsEditable()
   String toString() => JS('String', 'String(#)', this);
 }
diff --git a/tools/dom/templates/html/impl/impl_MessageEvent.darttemplate b/tools/dom/templates/html/impl/impl_MessageEvent.darttemplate
index 826f607..571ab6d2 100644
--- a/tools/dom/templates/html/impl/impl_MessageEvent.darttemplate
+++ b/tools/dom/templates/html/impl/impl_MessageEvent.darttemplate
@@ -29,13 +29,9 @@
   // TODO(alanknight): This really should be generated by the
   // _OutputConversion in the systemnative.py script, but that doesn't
   // use those conversions right now, so do this as a one-off.
-  @DomName('MessageEvent.data')
-  @DocsEditable()
   dynamic get data => convertNativeToDart_SerializedScriptValue(this._get_data);
 
   @JSName('data')
-  @DomName('MessageEvent.data')
-  @DocsEditable()
   @annotation_Creates_SerializedScriptValue
   @annotation_Returns_SerializedScriptValue
   final dynamic _get_data;
diff --git a/tools/dom/templates/html/impl/impl_Navigator.darttemplate b/tools/dom/templates/html/impl/impl_Navigator.darttemplate
index 022e9e3..5265a5b 100644
--- a/tools/dom/templates/html/impl/impl_Navigator.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Navigator.darttemplate
@@ -6,7 +6,6 @@
 
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 
-  @DomName('Navigator.getGamepads')
   List<Gamepad> getGamepads() {
     var gamepadList = _getGamepads();
 
@@ -20,7 +19,6 @@
     return gamepadList;
   }
 
-  @DomName('Navigator.language')
   String get language => JS('String', '#.language || #.userLanguage', this,
       this);
 
@@ -59,9 +57,7 @@
    * See also:
    * * [MediaStream.supported]
    */
-  @DomName('Navigator.webkitGetUserMedia')
   @SupportedBrowser(SupportedBrowser.CHROME)
-  @Experimental()
   Future<MediaStream> getUserMedia({audio: false, video: false}) {
     var completer = new Completer<MediaStream>();
     var options = {
diff --git a/tools/dom/templates/html/impl/impl_Node.darttemplate b/tools/dom/templates/html/impl/impl_Node.darttemplate
index a05ab6e..fef9633 100644
--- a/tools/dom/templates/html/impl/impl_Node.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Node.darttemplate
@@ -199,7 +199,6 @@
   /**
    * Removes this node from the DOM.
    */
-  @DomName('Node.removeChild')
   void remove() {
     // TODO(jacobr): should we throw an exception if parent is already null?
     // TODO(vsm): Use the native remove when available.
@@ -212,7 +211,6 @@
   /**
    * Replaces this node with another node.
    */
-  @DomName('Node.replaceChild')
   Node replaceWith(Node otherNode) {
     try {
       final Node parent = this.parentNode;
@@ -270,8 +268,6 @@
    * * [Node.childNodes](https://developer.mozilla.org/en-US/docs/Web/API/Node.childNodes)
    *   from MDN.
    */
-  @DomName('Node.childNodes')
-  @DocsEditable()
   @Returns('NodeList')
   @Creates('NodeList')
   final List<Node> childNodes;
diff --git a/tools/dom/templates/html/impl/impl_RTCPeerConnection.darttemplate b/tools/dom/templates/html/impl/impl_RTCPeerConnection.darttemplate
index c1ed25a..508af04 100644
--- a/tools/dom/templates/html/impl/impl_RTCPeerConnection.darttemplate
+++ b/tools/dom/templates/html/impl/impl_RTCPeerConnection.darttemplate
@@ -50,9 +50,6 @@
     return completer.future;
   }
 
-  @DomName('RTCPeerConnection.generateCertificate')
-  @DocsEditable()
-  @Experimental() // untriaged
   static Future generateCertificate(/*AlgorithmIdentifier*/ keygenAlgorithm) =>
       JS('dynamic', 'generateCertificate(#)', keygenAlgorithm);
 
diff --git a/tools/dom/templates/html/impl/impl_Range.darttemplate b/tools/dom/templates/html/impl/impl_Range.darttemplate
index c6dba15..f420027 100644
--- a/tools/dom/templates/html/impl/impl_Range.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Range.darttemplate
@@ -13,8 +13,6 @@
       document._caretRangeFromPoint(point.x, point.y);
 $!MEMBERS
 
-  @DomName('Range.getClientRects')
-  @DocsEditable()
   List<Rectangle> getClientRects() {
     var value = _getClientRects();
 
diff --git a/tools/dom/templates/html/impl/impl_SVGColor.darttemplate b/tools/dom/templates/html/impl/impl_SVGColor.darttemplate
index 053f229..0a06097 100644
--- a/tools/dom/templates/html/impl/impl_SVGColor.darttemplate
+++ b/tools/dom/templates/html/impl/impl_SVGColor.darttemplate
@@ -6,7 +6,6 @@
 
 // Hack because the baseclass is private in dart:html, and we want to omit this
 // type entirely but can't.
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$IMPLEMENTS {
   _SVGColor.internal();
 }
diff --git a/tools/dom/templates/html/impl/impl_SVGCursorElement.darttemplate b/tools/dom/templates/html/impl/impl_SVGCursorElement.darttemplate
index 0517910..cfc1a6e 100644
--- a/tools/dom/templates/html/impl/impl_SVGCursorElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_SVGCursorElement.darttemplate
@@ -4,7 +4,6 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 $!MEMBERS
 }
diff --git a/tools/dom/templates/html/impl/impl_SVGElement.darttemplate b/tools/dom/templates/html/impl/impl_SVGElement.darttemplate
index bcd5eb5..2c4cd6a 100644
--- a/tools/dom/templates/html/impl/impl_SVGElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_SVGElement.darttemplate
@@ -112,18 +112,15 @@
 
   // Unsupported methods inherited from Element.
 
-  @DomName('Element.insertAdjacentText')
   void insertAdjacentText(String where, String text) {
     throw new UnsupportedError("Cannot invoke insertAdjacentText on SVG.");
   }
 
-  @DomName('Element.insertAdjacentHTML')
   void insertAdjacentHtml(String where, String text, {NodeValidator validator,
       NodeTreeSanitizer treeSanitizer}) {
     throw new UnsupportedError("Cannot invoke insertAdjacentHtml on SVG.");
   }
 
-  @DomName('Element.insertAdjacentElement')
   Element insertAdjacentElement(String where, Element element) {
     throw new UnsupportedError("Cannot invoke insertAdjacentElement on SVG.");
   }
diff --git a/tools/dom/templates/html/impl/impl_SVGFEDropShadowElement.darttemplate b/tools/dom/templates/html/impl/impl_SVGFEDropShadowElement.darttemplate
index 0517910..cfc1a6e 100644
--- a/tools/dom/templates/html/impl/impl_SVGFEDropShadowElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_SVGFEDropShadowElement.darttemplate
@@ -4,7 +4,6 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 $!MEMBERS
 }
diff --git a/tools/dom/templates/html/impl/impl_SVGGlyphRefElement.darttemplate b/tools/dom/templates/html/impl/impl_SVGGlyphRefElement.darttemplate
index 0517910..cfc1a6e 100644
--- a/tools/dom/templates/html/impl/impl_SVGGlyphRefElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_SVGGlyphRefElement.darttemplate
@@ -4,7 +4,6 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 $!MEMBERS
 }
diff --git a/tools/dom/templates/html/impl/impl_SVGMPathElement.darttemplate b/tools/dom/templates/html/impl/impl_SVGMPathElement.darttemplate
index 0517910..cfc1a6e 100644
--- a/tools/dom/templates/html/impl/impl_SVGMPathElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_SVGMPathElement.darttemplate
@@ -4,7 +4,6 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 $!MEMBERS
 }
diff --git a/tools/dom/templates/html/impl/impl_Screen.darttemplate b/tools/dom/templates/html/impl/impl_Screen.darttemplate
index efffa28..e31aed5 100644
--- a/tools/dom/templates/html/impl/impl_Screen.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Screen.darttemplate
@@ -4,13 +4,8 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 
-  @DomName('Screen.availHeight')
-  @DomName('Screen.availLeft')
-  @DomName('Screen.availTop')
-  @DomName('Screen.availWidth')
   Rectangle get available => new Rectangle(_availLeft, _availTop, _availWidth,
       _availHeight);
 $!MEMBERS}
diff --git a/tools/dom/templates/html/impl/impl_ServiceWorkerMessageEvent.darttemplate b/tools/dom/templates/html/impl/impl_ServiceWorkerMessageEvent.darttemplate
index 63ba163..2df0f3b 100644
--- a/tools/dom/templates/html/impl/impl_ServiceWorkerMessageEvent.darttemplate
+++ b/tools/dom/templates/html/impl/impl_ServiceWorkerMessageEvent.darttemplate
@@ -13,13 +13,9 @@
   // TODO(alanknight): This really should be generated by the
   // _OutputConversion in the systemnative.py script, but that doesn't
   // use those conversions right now, so do this as a one-off.
-  @DomName('ServiceWorkerMessageEvent.data')
-  @DocsEditable()
   dynamic get data => convertNativeToDart_SerializedScriptValue(this._get_data);
 
   @JSName('data')
-  @DomName('ServiceWorkerMessageEvent.data')
-  @DocsEditable()
   @annotation_Creates_SerializedScriptValue
   @annotation_Returns_SerializedScriptValue
   final dynamic _get_data;
diff --git a/tools/dom/templates/html/impl/impl_SpeechSynthesis.darttemplate b/tools/dom/templates/html/impl/impl_SpeechSynthesis.darttemplate
new file mode 100644
index 0000000..20e19cf
--- /dev/null
+++ b/tools/dom/templates/html/impl/impl_SpeechSynthesis.darttemplate
@@ -0,0 +1,19 @@
+// Copyright (c) 2012, 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.
+
+part of $LIBRARYNAME;
+
+$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS
+{
+  @DomName('SpeechSynthesis.getVoices')
+  @DocsEditable()
+  List<SpeechSynthesisVoice> getVoices() {
+    List<SpeechSynthesisVoice> voices = _getVoices();
+    if (voices.length > 0)
+      applyExtension('SpeechSynthesisVoice', voices[0]);
+    return voices;
+  }
+
+$!MEMBERS
+}
diff --git a/tools/dom/templates/html/impl/impl_Touch.darttemplate b/tools/dom/templates/html/impl/impl_Touch.darttemplate
index 7f599fa..ef3b5c2 100644
--- a/tools/dom/templates/html/impl/impl_Touch.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Touch.darttemplate
@@ -4,7 +4,6 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 $!MEMBERS
 
@@ -19,30 +18,18 @@
   int get __radiusX => JS('num', '#.radiusX', this).round();
   int get __radiusY => JS('num', '#.radiusY', this).round();
 
-  @DomName('Touch.clientX')
-  @DomName('Touch.clientY')
   Point get client => new Point(__clientX, __clientY);
 
-  @DomName('Touch.pageX')
-  @DomName('Touch.pageY')
   Point get page => new Point(__pageX, __pageY);
 
-  @DomName('Touch.screenX')
-  @DomName('Touch.screenY')
   Point get screen => new Point(__screenX, __screenY);
 
-  @DomName('Touch.radiusX')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
   int get radiusX => __radiusX;
 
-  @DomName('Touch.radiusY')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
   int get radiusY => __radiusY;
 
 }
diff --git a/tools/dom/templates/html/impl/impl_WebGL.darttemplate b/tools/dom/templates/html/impl/impl_WebGL.darttemplate
new file mode 100644
index 0000000..1aaf0ed
--- /dev/null
+++ b/tools/dom/templates/html/impl/impl_WebGL.darttemplate
@@ -0,0 +1,15 @@
+// Copyright (c) 2018, 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.
+
+part of $LIBRARYNAME;
+
+/// Amalgamation of the WebGL constants from the IDL interfaces in
+/// WebGLRenderingContextBase, WebGL2RenderingContextBase, & WebGLDrawBuffers.
+/// Because the RenderingContextBase interfaces are hidden they would be
+/// replicated in more than one class (e.g., RenderingContext and
+/// RenderingContext2) to prevent that duplication these 600+ constants are
+/// defined in one abstract class (WebGL).
+$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)abstract class $CLASSNAME {
+$!MEMBERS
+}
diff --git a/tools/dom/templates/html/impl/impl_WebGL2RenderingContext.darttemplate b/tools/dom/templates/html/impl/impl_WebGL2RenderingContext.darttemplate
index b4a0e4e..04b82e8 100644
--- a/tools/dom/templates/html/impl/impl_WebGL2RenderingContext.darttemplate
+++ b/tools/dom/templates/html/impl/impl_WebGL2RenderingContext.darttemplate
@@ -4,12 +4,9 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)class $CLASSNAME$EXTENDS implements _WebGL2RenderingContextBase, _WebGLRenderingContextBase {
 $!MEMBERS
 
-  @DomName('WebGLRenderingContext2.readPixels')
-  @DocsEditable()
   void readPixels(int x, int y, int width, int height, int format, int type,
           TypedData pixels) {
       _readPixels(x, y, width, height, format, type, pixels);
diff --git a/tools/dom/templates/html/impl/impl_WebGLCanvas.darttemplate b/tools/dom/templates/html/impl/impl_WebGLCanvas.darttemplate
index 26e09b6..a4730dc 100644
--- a/tools/dom/templates/html/impl/impl_WebGLCanvas.darttemplate
+++ b/tools/dom/templates/html/impl/impl_WebGLCanvas.darttemplate
@@ -4,18 +4,13 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)class $CLASSNAME$EXTENDS {
 $!MEMBERS
 
   @JSName('canvas')
-  @DomName('WebGLCanvas.canvas')
-  @DocsEditable()
   final CanvasElement canvas;
 
   @JSName('canvas')
-  @DomName('WebGLCanvas.offscreenCanvas')
-  @DocsEditable()
   final OffscreenCanvas offscreenCanvas;
 }
 
diff --git a/tools/dom/templates/html/impl/impl_WebGLRenderingContext.darttemplate b/tools/dom/templates/html/impl/impl_WebGLRenderingContext.darttemplate
index 90cf7f0..ac73e21 100644
--- a/tools/dom/templates/html/impl/impl_WebGLRenderingContext.darttemplate
+++ b/tools/dom/templates/html/impl/impl_WebGLRenderingContext.darttemplate
@@ -7,8 +7,6 @@
 $(ANNOTATIONS)$(NATIVESPEC)class $CLASSNAME$EXTENDS implements CanvasRenderingContext {
 $!MEMBERS
 
-  @DomName('WebGLRenderingContext.readPixels')
-  @DocsEditable()
   void readPixels(int x, int y, int width, int height, int format, int type,
           TypedData pixels) {
       _readPixels(x, y, width, height, format, type, pixels);
diff --git a/tools/dom/templates/html/impl/impl_WebKitCSSKeyframesRule.darttemplate b/tools/dom/templates/html/impl/impl_WebKitCSSKeyframesRule.darttemplate
index 19ee4cc..00cfadd 100644
--- a/tools/dom/templates/html/impl/impl_WebKitCSSKeyframesRule.darttemplate
+++ b/tools/dom/templates/html/impl/impl_WebKitCSSKeyframesRule.darttemplate
@@ -4,7 +4,6 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$MIXINS$IMPLEMENTS {
 $!MEMBERS
 
diff --git a/tools/dom/templates/html/impl/impl_WheelEvent.darttemplate b/tools/dom/templates/html/impl/impl_WheelEvent.darttemplate
index 188c9a2..0768608 100644
--- a/tools/dom/templates/html/impl/impl_WheelEvent.darttemplate
+++ b/tools/dom/templates/html/impl/impl_WheelEvent.darttemplate
@@ -54,7 +54,6 @@
    *
    * * [WheelEvent.deltaY](http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html#events-WheelEvent-deltaY) from the W3C.
    */
-  @DomName('WheelEvent.deltaY')
   num get deltaY {
     if (JS('bool', '#.deltaY !== undefined', this)) {
       // W3C WheelEvent
@@ -72,7 +71,6 @@
    *
    * * [WheelEvent.deltaX](http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html#events-WheelEvent-deltaX) from the W3C.
    */
-  @DomName('WheelEvent.deltaX')
   num get deltaX {
     if (JS('bool', '#.deltaX !== undefined', this)) {
       // W3C WheelEvent
@@ -82,7 +80,6 @@
         'deltaX is not supported');
   }
 
-  @DomName('WheelEvent.deltaMode')
   int get deltaMode {
     if (JS('bool', '!!(#.deltaMode)', this)) {
       return JS('int', '#.deltaMode', this);
diff --git a/tools/dom/templates/html/impl/impl_Window.darttemplate b/tools/dom/templates/html/impl/impl_Window.darttemplate
index cf5ddf9..03d768f 100644
--- a/tools/dom/templates/html/impl/impl_Window.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Window.darttemplate
@@ -4,7 +4,6 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)@Native("Window,DOMWindow")
 $(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 
@@ -107,7 +106,6 @@
    * Note: The supplied [callback] needs to call [requestAnimationFrame] again
    * for the animation to continue.
    */
-  @DomName('Window.requestAnimationFrame')
   int requestAnimationFrame(FrameRequestCallback callback) {
     _ensureRequestAnimationFrame();
     return _requestAnimationFrame(_wrapZone(callback));
@@ -167,14 +165,12 @@
   @SupportedBrowser(SupportedBrowser.CHROME, '23.0')
   @SupportedBrowser(SupportedBrowser.FIREFOX, '15.0')
   @SupportedBrowser(SupportedBrowser.IE, '10.0')
-  @Experimental()
   IdbFactory get indexedDB =>
       JS('IdbFactory|Null',  // If not supported, returns null.
          '#.indexedDB || #.webkitIndexedDB || #.mozIndexedDB',
          this, this, this);
 
   /// The debugging console for this window.
-  @DomName('Window.console')
   Console get console => Console._safeConsole;
 
   /**
@@ -202,16 +198,13 @@
    *
    * See [EventStreamProvider] for usage information.
    */
-  @DomName('Window.beforeunloadEvent')
   static const EventStreamProvider<BeforeUnloadEvent> beforeUnloadEvent =
       const _BeforeUnloadEventStreamProvider('beforeunload');
 
   /// Stream of `beforeunload` events handled by this [Window].
-  @DomName('Window.onbeforeunload')
   Stream<Event> get onBeforeUnload => beforeUnloadEvent.forTarget(this);
 
   /// Stream of `wheel` events handled by this [Window].
-  @DomName('Window.onWheel')
   Stream<WheelEvent> get onWheel => Element.wheelEvent.forTarget(this);
 
   /**
@@ -231,11 +224,8 @@
   }
 
   @JSName('openDatabase')
-  @DomName('Window.openDatabase')
-  @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
   @Creates('SqlDatabase')
   SqlDatabase openDatabase(
       String name, String version, String displayName, int estimatedSize,
@@ -252,12 +242,8 @@
     return db;
   }
 
-  @DomName('Window.pageXOffset')
-  @DocsEditable()
   int get pageXOffset => JS('num', '#.pageXOffset', this).round();
 
-  @DomName('Window.pageYOffset')
-  @DocsEditable()
   int get pageYOffset => JS('num', '#.pageYOffset', this).round();
 
   /**
@@ -270,8 +256,6 @@
    * * [scrollX](https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollX)
    *   from MDN.
    */
-  @DomName('Window.scrollX')
-  @DocsEditable()
   int get scrollX => JS('bool', '("scrollX" in #)', this) ?
       JS('num', '#.scrollX', this).round() :
       document.documentElement.scrollLeft;
@@ -286,8 +270,6 @@
    * * [scrollY](https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollY)
    *   from MDN.
    */
-  @DomName('Window.scrollY')
-  @DocsEditable()
   int get scrollY => JS('bool', '("scrollY" in #)', this) ?
       JS('num', '#.scrollY', this).round() :
       document.documentElement.scrollTop;
diff --git a/tools/dom/templates/html/impl/impl_WindowEventHandlers.darttemplate b/tools/dom/templates/html/impl/impl_WindowEventHandlers.darttemplate
index d1b4f83..a5065ed 100644
--- a/tools/dom/templates/html/impl/impl_WindowEventHandlers.darttemplate
+++ b/tools/dom/templates/html/impl/impl_WindowEventHandlers.darttemplate
@@ -4,6 +4,5 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME extends EventTarget {
 $!MEMBERS}
diff --git a/tools/dom/templates/html/impl/impl_WorkerLocation.darttemplate b/tools/dom/templates/html/impl/impl_WorkerLocation.darttemplate
index 0517910..cfc1a6e 100644
--- a/tools/dom/templates/html/impl/impl_WorkerLocation.darttemplate
+++ b/tools/dom/templates/html/impl/impl_WorkerLocation.darttemplate
@@ -4,7 +4,6 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 $!MEMBERS
 }
diff --git a/tools/dom/templates/html/impl/impl_WorkerNavigator.darttemplate b/tools/dom/templates/html/impl/impl_WorkerNavigator.darttemplate
index 0517910..cfc1a6e 100644
--- a/tools/dom/templates/html/impl/impl_WorkerNavigator.darttemplate
+++ b/tools/dom/templates/html/impl/impl_WorkerNavigator.darttemplate
@@ -4,7 +4,6 @@
 
 part of $LIBRARYNAME;
 
-@DocsEditable()
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 $!MEMBERS
 }
diff --git a/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate b/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate
index 51c129f..97b141a 100644
--- a/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate
+++ b/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate
@@ -292,7 +292,6 @@
    * This API provides a subset of [request] which works on IE9. If IE9
    * cross-origin support is not required then [request] should be used instead.
    */
-  @Experimental()
   static Future<String> requestCrossOrigin(String url,
       {String method, String sendData}) {
     if (supportsCrossOrigin) {
@@ -381,8 +380,6 @@
    * `open` method is intended only for more complex HTTP requests where
    * finer-grained control is needed.
    */
-  @DomName('XMLHttpRequest.open')
-  @DocsEditable()
   void open(String method, String url, {bool async, String user, String password}) native;
 
 $!MEMBERS
diff --git a/tools/sdks/linux/dart-sdk.tar.gz.sha1 b/tools/sdks/linux/dart-sdk.tar.gz.sha1
index c32cb3c..445af50 100644
--- a/tools/sdks/linux/dart-sdk.tar.gz.sha1
+++ b/tools/sdks/linux/dart-sdk.tar.gz.sha1
@@ -1 +1 @@
-dbd141e72b88a1a30768af3acf75eba45963a896
\ No newline at end of file
+2abdfae6bf237e3d10e7d6e7680e62653c59f167
\ No newline at end of file
diff --git a/tools/sdks/mac/dart-sdk.tar.gz.sha1 b/tools/sdks/mac/dart-sdk.tar.gz.sha1
index cf501d1..355c7c2 100644
--- a/tools/sdks/mac/dart-sdk.tar.gz.sha1
+++ b/tools/sdks/mac/dart-sdk.tar.gz.sha1
@@ -1 +1 @@
-6b686b5dd4a33806fc136cf01fa4bf3ac7f661b7
\ No newline at end of file
+e2d609d355ce8e8a0de9dc107818055fead5c6c1
\ No newline at end of file
diff --git a/tools/sdks/win/dart-sdk.tar.gz.sha1 b/tools/sdks/win/dart-sdk.tar.gz.sha1
index 902188f..9cd92de 100644
--- a/tools/sdks/win/dart-sdk.tar.gz.sha1
+++ b/tools/sdks/win/dart-sdk.tar.gz.sha1
@@ -1 +1 @@
-898a3784afca3a8f0e8624fda56d243aadd1b95d
\ No newline at end of file
+c5cca53d8fa715c6409eca288cd5560d55d50bdc
\ No newline at end of file
diff --git a/tools/testing/dart/browser_test.dart b/tools/testing/dart/browser_test.dart
index 1cf0526..2db6368 100644
--- a/tools/testing/dart/browser_test.dart
+++ b/tools/testing/dart/browser_test.dart
@@ -29,8 +29,6 @@
           onerror="scriptTagOnErrorCallback(null)"
           defer>
   </script>
-  <script type="text/javascript"
-          src="/root_dart/pkg/browser/lib/dart.js"></script>
 </body>
 </html>""";
 }
diff --git a/tools/testing/dart/compiler_configuration.dart b/tools/testing/dart/compiler_configuration.dart
index 15ac03d..757ef01 100644
--- a/tools/testing/dart/compiler_configuration.dart
+++ b/tools/testing/dart/compiler_configuration.dart
@@ -41,11 +41,7 @@
   bool get _useSdk => _configuration.useSdk;
   bool get _useEnableAsserts => _configuration.useEnableAsserts;
 
-  /// Only some subclasses support this check, but we statically allow calling
-  /// it on [CompilerConfiguration].
-  bool get useDfe {
-    throw new UnsupportedError("This compiler does not support DFE.");
-  }
+  bool get previewDart2 => !_configuration.noPreviewDart2;
 
   /// Whether to run the runtime on the compilation result of a test which
   /// expects a compile-time error and the compiler did not emit one.
@@ -66,13 +62,15 @@
         return new DevKernelCompilerConfiguration(configuration);
 
       case Compiler.appJit:
-        return new AppJitCompilerConfiguration(configuration);
+        return new AppJitCompilerConfiguration(configuration,
+            previewDart2: false);
 
       case Compiler.appJitk:
-        return new AppJitCompilerConfiguration(configuration, useDfe: true);
+        return new AppJitCompilerConfiguration(configuration);
 
       case Compiler.precompiler:
-        return new PrecompilerCompilerConfiguration(configuration);
+        return new PrecompilerCompilerConfiguration(configuration,
+            previewDart2: false);
 
       case Compiler.dartk:
         if (configuration.architecture == Architecture.simdbc64 ||
@@ -80,11 +78,10 @@
             configuration.architecture == Architecture.simarm64) {
           return new VMKernelCompilerConfiguration(configuration);
         }
-        return new NoneCompilerConfiguration(configuration, useDfe: true);
+        return new NoneCompilerConfiguration(configuration);
 
       case Compiler.dartkp:
-        return new PrecompilerCompilerConfiguration(configuration,
-            useDfe: true);
+        return new PrecompilerCompilerConfiguration(configuration);
 
       case Compiler.specParser:
         return new SpecParserCompilerConfiguration(configuration);
@@ -156,11 +153,7 @@
 
 /// The "none" compiler.
 class NoneCompilerConfiguration extends CompilerConfiguration {
-  // This boolean is used by the [VMTestSuite] for running cc tests via
-  // run_vm_tests.
-  final bool useDfe;
-
-  NoneCompilerConfiguration(Configuration configuration, {this.useDfe: false})
+  NoneCompilerConfiguration(Configuration configuration)
       : super._subclass(configuration);
 
   bool get hasCompiler => false;
@@ -173,29 +166,22 @@
       List<String> originalArguments,
       CommandArtifact artifact) {
     var args = <String>[];
-    if (useDfe) {
-      // DFE+strong configuration is a Dart 2.0 configuration which uses
-      // pkg/vm/tool/dart2 wrapper script, which takes care of passing
-      // correct arguments to VM binary. No need to pass any additional
-      // arguments.
-      if (!_isStrong) {
-        args.add('--preview_dart_2');
-      }
+    if (previewDart2) {
       if (_isDebug) {
         // Temporarily disable background compilation to avoid flaky crashes
         // (see http://dartbug.com/30016 for details).
         args.add('--no-background-compilation');
       }
+      if (_isChecked) {
+        args.add('--enable_asserts');
+      }
     } else {
       args.add('--no-preview-dart-2');
-      if (_isStrong) {
-        args.add('--strong');
+      if (_isChecked) {
+        args.add('--enable_asserts');
+        args.add('--enable_type_checks');
       }
     }
-    if (_isChecked) {
-      args.add('--enable_asserts');
-      args.add('--enable_type_checks');
-    }
     if (_useEnableAsserts) {
       args.add('--enable_asserts');
     }
@@ -216,12 +202,6 @@
   VMKernelCompilerConfiguration(Configuration configuration)
       : super._subclass(configuration);
 
-  // This boolean is used by the [VMTestSuite] for running cc tests via
-  // run_vm_tests.  We enable it here, so the cc tests continue to use the
-  // kernel-isolate.  All the remaining tests will use a separate compilation
-  // command (which this class represents).
-  bool get useDfe => true;
-
   bool get _isAot => false;
 
   // Issue(http://dartbug.com/29840): Currently fasta sometimes does not emit a
@@ -254,12 +234,7 @@
       List<String> originalArguments,
       CommandArtifact artifact) {
     var args = <String>[];
-    args.add('--preview-dart-2');
-    if (_isChecked) {
-      args.add('--enable_asserts');
-      args.add('--enable_type_checks');
-    }
-    if (_useEnableAsserts) {
+    if (_isChecked || _useEnableAsserts) {
       args.add('--enable_asserts');
     }
     if (_configuration.hotReload) {
@@ -664,9 +639,7 @@
 
 class PrecompilerCompilerConfiguration extends CompilerConfiguration
     with VMKernelCompilerMixin {
-  // This boolean is used by the [VMTestSuite] for running cc tests via
-  // run_vm_tests.
-  final bool useDfe;
+  final bool previewDart2;
 
   bool get _isAndroid => _configuration.system == System.android;
   bool get _isArm => _configuration.architecture == Architecture.arm;
@@ -675,7 +648,7 @@
   bool get _isAot => true;
 
   PrecompilerCompilerConfiguration(Configuration configuration,
-      {this.useDfe: false})
+      {this.previewDart2: true})
       : super._subclass(configuration);
 
   int get timeoutMultiplier {
@@ -689,7 +662,7 @@
       List<String> arguments, Map<String, String> environmentOverrides) {
     var commands = <Command>[];
 
-    if (useDfe) {
+    if (previewDart2) {
       commands.add(computeCompileToKernelCommand(
           tempDir, arguments, environmentOverrides));
     }
@@ -697,7 +670,7 @@
     commands.add(
         computeDartBootstrapCommand(tempDir, arguments, environmentOverrides));
 
-    if (useDfe) {
+    if (previewDart2) {
       commands.add(computeRemoveKernelFileCommand(
           tempDir, arguments, environmentOverrides));
     }
@@ -770,8 +743,7 @@
     if (_isStrong) {
       args.add('--strong');
     }
-    if (useDfe) {
-      args.add('--preview-dart-2');
+    if (previewDart2) {
       args.addAll(_replaceDartFiles(arguments, tempKernelFile(tempDir)));
     } else {
       args.add('--no-preview-dart-2');
@@ -892,12 +864,19 @@
       List<String> originalArguments,
       CommandArtifact artifact) {
     var args = <String>[];
-    if (_isChecked) {
-      args.add('--enable_asserts');
-      args.add('--enable_type_checks');
+    if (previewDart2) {
+      if (_isChecked) {
+        args.add('--enable_asserts');
+      }
+    } else {
+      args.add('--no-preview-dart-2');
+      if (_isChecked) {
+        args.add('--enable_asserts');
+        args.add('--enable_type_checks');
+      }
     }
-    if (useDfe) {
-      args.add('--preview-dart-2');
+    if (_useEnableAsserts) {
+      args.add('--enable_asserts');
     }
     var dir = artifact.filename;
     if (runtimeConfiguration is DartPrecompiledAdbRuntimeConfiguration) {
@@ -916,11 +895,10 @@
 }
 
 class AppJitCompilerConfiguration extends CompilerConfiguration {
-  // This boolean is used by the [VMTestSuite] for running cc tests via
-  // run_vm_tests.
-  final bool useDfe;
+  final bool previewDart2;
 
-  AppJitCompilerConfiguration(Configuration configuration, {this.useDfe: false})
+  AppJitCompilerConfiguration(Configuration configuration,
+      {this.previewDart2: true})
       : super._subclass(configuration);
 
   int get timeoutMultiplier {
@@ -944,9 +922,7 @@
     var exec = "${_configuration.buildDirectory}/dart";
     var snapshot = "$tempDir/out.jitsnapshot";
     var args = ["--snapshot=$snapshot", "--snapshot-kind=app-jit"];
-    if (useDfe) {
-      args.add("--preview-dart-2");
-    } else {
+    if (!previewDart2) {
       args.add("--no-preview-dart-2");
     }
     args.addAll(arguments);
@@ -977,14 +953,19 @@
       List<String> originalArguments,
       CommandArtifact artifact) {
     var args = <String>[];
-    if (_isChecked) {
-      args.add('--enable_asserts');
-      args.add('--enable_type_checks');
-    }
-    if (useDfe) {
-      args.add('--preview-dart-2');
+    if (previewDart2) {
+      if (_isChecked) {
+        args.add('--enable_asserts');
+      }
     } else {
       args.add("--no-preview-dart-2");
+      if (_isChecked) {
+        args.add('--enable_asserts');
+        args.add('--enable_type_checks');
+      }
+    }
+    if (_useEnableAsserts) {
+      args.add('--enable_asserts');
     }
     args
       ..addAll(vmOptions)
@@ -1030,6 +1011,10 @@
     } else {
       arguments.add('--no-strong');
     }
+    if (_configuration.compiler == Compiler.dart2analyzer &&
+        _configuration.usesFasta) {
+      arguments.add('--use-fasta-parser');
+    }
 
     // Since this is not a real compilation, no artifacts are produced.
     return new CommandArtifact([
@@ -1171,9 +1156,6 @@
       : super._subclass(configuration);
 
   @override
-  bool get useDfe => true;
-
-  @override
   bool get runRuntimeDespiteMissingCompileTimeError => true;
 
   @override
diff --git a/tools/testing/dart/configuration.dart b/tools/testing/dart/configuration.dart
index a6ad1fd..e78b2d4 100644
--- a/tools/testing/dart/configuration.dart
+++ b/tools/testing/dart/configuration.dart
@@ -41,7 +41,6 @@
       this.listTests,
       this.listStatusFiles,
       this.noPreviewDart2,
-      this.previewDart2,
       this.printTiming,
       this.printReport,
       this.reportInJson,
@@ -116,7 +115,6 @@
   final bool listTests;
   final bool listStatusFiles;
   final bool noPreviewDart2;
-  final bool previewDart2;
   final bool printTiming;
   final bool printReport;
   final bool reportInJson;
@@ -194,16 +192,11 @@
       Compiler.fasta,
     ];
     return fastaCompilers.contains(compiler) ||
-        compiler == Compiler.dart2js && !useDart2JSOldFrontend;
+        (compiler == Compiler.dart2js && !useDart2JSOldFrontend) ||
+        (compiler == Compiler.dart2analyzer &&
+            builderTag == 'analyzer_use_fasta');
   }
 
-  /// Returns true if this configuration is considered Dart 2.0 configuration
-  /// by VM (which is identified by using common front-end and strong mode).
-  /// In this case instead of invoking VM binary directly we use
-  /// pkg/vm/tool/dart2 wrapper script, which takes care of passing
-  /// correct arguments to VM binary.
-  bool get usingDart2VMWrapper => isStrong && compiler == Compiler.dartk;
-
   /// The base directory named for this configuration, like:
   ///
   ///     none_vm_release_x64
@@ -478,7 +471,6 @@
         'fast_startup': useFastStartup,
         'timeout': timeout,
         'no_preview_dart_2': noPreviewDart2,
-        'preview_dart_2': previewDart2,
         'dart2js_with_kernel': useDart2JSWithKernel,
         'dart2js_old_frontend': useDart2JSOldFrontend,
         'enable_asserts': useEnableAsserts,
diff --git a/tools/testing/dart/environment.dart b/tools/testing/dart/environment.dart
index 01da811..55397f8 100644
--- a/tools/testing/dart/environment.dart
+++ b/tools/testing/dart/environment.dart
@@ -33,10 +33,11 @@
   "minified": new _Variable.bool((c) => c.isMinified),
   "mode": new _Variable((c) => c.mode.name, Mode.names),
   "no_preview_dart_2": new _Variable.bool((c) => c.noPreviewDart2),
-  "preview_dart_2": new _Variable.bool((c) => c.previewDart2),
+  "preview_dart_2": new _Variable.bool((c) => !c.noPreviewDart2),
   "runtime": new _Variable(_runtimeName, Runtime.names),
   "spec_parser": new _Variable.bool((c) => c.compiler == Compiler.specParser),
-  "strong": new _Variable.bool((c) => c.isStrong),
+  "strong": new _Variable.bool(
+      (c) => c.isStrong || c.compilerConfiguration.previewDart2),
   "system": new _Variable((c) => c.system.name, System.names),
   "use_sdk": new _Variable.bool((c) => c.useSdk)
 };
diff --git a/tools/testing/dart/options.dart b/tools/testing/dart/options.dart
index 5bb7760..5493852 100644
--- a/tools/testing/dart/options.dart
+++ b/tools/testing/dart/options.dart
@@ -168,10 +168,10 @@
     new _Option.bool('enable_asserts',
         'Pass the --enable-asserts flag to dart2js or to the vm.'),
     new _Option.bool(
-        'no_preview_dart_2', 'Pass the --no-preview-dart-2 flag for Dart1 mode',
+        'preview_dart_2', 'Pass the --preview-dart-2 flag to analyzer',
         hide: true),
-    new _Option.bool('preview_dart_2',
-        'Pass the --preview-dart-2 flag to analyzer, or pass --no-preview-dart-2 if false.',
+    new _Option.bool(
+        'no_preview_dart_2', 'Pass the --no-preview-dart-2 flag to analyzer',
         hide: true),
     // TODO(sigmund): replace dart2js_with_kernel with preview-dart-2.
     new _Option.bool(
@@ -465,6 +465,10 @@
       }
     }
 
+    if (configuration['no_preview_dart_2'] && configuration['preview_dart_2']) {
+      _fail('"--no-preview-dart-2" and "--preview-dart-2" specified,');
+    }
+
     return _createConfigurations(configuration);
   }
 
@@ -645,8 +649,7 @@
                 isVerbose: data["verbose"] as bool,
                 listTests: data["list"] as bool,
                 listStatusFiles: data["list_status_files"] as bool,
-                noPreviewDart2: !(data["preview_dart_2"] as bool),
-                previewDart2: data["preview_dart_2"] as bool,
+                noPreviewDart2: data["no_preview_dart_2"] as bool,
                 printTiming: data["time"] as bool,
                 printReport: data["report"] as bool,
                 reportInJson: data["report_in_json"] as bool,
@@ -765,7 +768,7 @@
 If you specify only a runtime ("-r"), then an appropriate default compiler will
 be chosen for that runtime. Likewise, if you specify only a compiler ("-c"),
 then a matching runtime is chosen. If neither compiler nor runtime is selected,
-the test is run directly from source on the VM. 
+the test is run directly from source on the VM.
 
 Options:''');
 
diff --git a/tools/testing/dart/test_suite.dart b/tools/testing/dart/test_suite.dart
index 4a16a03..84594c8 100644
--- a/tools/testing/dart/test_suite.dart
+++ b/tools/testing/dart/test_suite.dart
@@ -130,10 +130,6 @@
     _environmentOverrides = {
       'DART_CONFIGURATION': configuration.configurationDirectory,
     };
-
-    if (useSdk && configuration.usingDart2VMWrapper) {
-      _environmentOverrides['DART_USE_SDK'] = '1';
-    }
   }
 
   Map<String, String> get environmentOverrides => _environmentOverrides;
@@ -168,14 +164,6 @@
     // Controlled by user with the option "--dart".
     var dartExecutable = configuration.dartPath;
 
-    if (configuration.usingDart2VMWrapper) {
-      if (dartExecutable != null) {
-        throw 'Can not use --dart when testing Dart 2.0 configuration';
-      }
-
-      dartExecutable = 'pkg/vm/tool/dart2$executableScriptSuffix';
-    }
-
     if (dartExecutable == null) {
       dartExecutable = dartVmExecutableFileName;
     }
@@ -489,7 +477,7 @@
 
   void _addTest(ExpectationSet testExpectations, String testName) {
     var args = configuration.standardOptions.toList();
-    if (configuration.compilerConfiguration.useDfe) {
+    if (configuration.compilerConfiguration.previewDart2) {
       args.add('--use-dart-frontend');
       // '--dfe' has to be the first argument for run_vm_test to pick it up.
       args.insert(0, '--dfe=$buildDir/gen/kernel-service.dart.snapshot');
@@ -859,14 +847,6 @@
         allVmOptions = vmOptions.toList()..addAll(extraVmOptions);
       }
 
-      // TODO(rnystrom): Hack. When running the 2.0 tests, always implicitly
-      // turn on reified generics in the VM.
-      // Note that VMOptions=--no-reify-generic-functions in test is ignored.
-      // Dart 2 VM wrapper (pkg/vm/tool/dart2) already passes correct arguments.
-      if (suiteName.endsWith("_2") && !configuration.usingDart2VMWrapper) {
-        allVmOptions = allVmOptions.toList()..add("--reify-generic-functions");
-      }
-
       var commands =
           makeCommands(info, vmOptionsVariant, allVmOptions, commonArguments);
       var expectations = testExpectations.expectations(testName);
@@ -1279,6 +1259,13 @@
     if (options != null) args.addAll(options);
     options = optionsFromFile['dart2jsOptions'] as List<String>;
     if (options != null) args.addAll(options);
+    if (configuration.compiler == Compiler.dart2js) {
+      if (configuration.noPreviewDart2) {
+        args.add("--no-preview-dart-2");
+      } else {
+        args.add("--preview-dart-2");
+      }
+    }
 
     return Command.compilation(Compiler.dart2js.name, outputFile,
         dart2JsBootstrapDependencies, compilerPath, args, environmentOverrides,
@@ -1309,13 +1296,24 @@
     if (configuration.compiler == Compiler.dart2analyzer) {
       args.add('--format=machine');
       args.add('--no-hints');
-      if (configuration.previewDart2) args.add("--preview-dart-2");
-      if (configuration.noPreviewDart2) args.add("--no-preview-dart-2");
 
       if (filePath.filename.contains("dart2js") ||
           filePath.directoryPath.segments().last.contains('html_common')) {
         args.add("--use-dart2js-libraries");
       }
+      if (configuration.noPreviewDart2) {
+        args.add("--no-preview-dart-2");
+      } else {
+        args.add("--preview-dart-2");
+      }
+    }
+
+    if (configuration.compiler == Compiler.dart2js) {
+      if (configuration.noPreviewDart2) {
+        args.add("--no-preview-dart-2");
+      } else {
+        args.add("--preview-dart-2");
+      }
     }
 
     var isMultitest = optionsFromFile["isMultitest"] as bool;
diff --git a/utils/analysis_server/BUILD.gn b/utils/analysis_server/BUILD.gn
index 9359e2c..625dd25 100644
--- a/utils/analysis_server/BUILD.gn
+++ b/utils/analysis_server/BUILD.gn
@@ -5,6 +5,7 @@
 import("../application_snapshot.gni")
 
 application_snapshot("analysis_server") {
+  dart_version = 2
   main_dart = "../../pkg/analysis_server/bin/server.dart"
   training_args = [ "--help" ]
 }
diff --git a/utils/application_snapshot.gni b/utils/application_snapshot.gni
index 3630bee..5ed85b2 100644
--- a/utils/application_snapshot.gni
+++ b/utils/application_snapshot.gni
@@ -76,6 +76,7 @@
   if (defined(invoker.output)) {
     output = invoker.output
   }
+  # TODO(asiva), flip default once the VM is dart2 by default.
   dart_version = 1
   if (defined(invoker.dart_version)) {
     dart_version = invoker.dart_version
@@ -85,14 +86,15 @@
   dart_action(target_name) {
     deps = extra_deps
 
-    if (dart_version == 2) {
+    if (dart_version == 1) {
+      snapshot_vm_args += [ "--no-preview-dart-2" ]
+    } else {
       # HACK: When creating app-jit snapshots for Dart 2 apps, the standalone
       # Dart VM binary requires the app-jit snapshot for the kernel service to
       # be adjacent to it. This deps ensures that it is there, but a different
       # approach will be needed when the kernel service itself switches to
       # Dart 2 to avoid creating a circular dependence.
       deps += [ "$_dart_root/utils/kernel-service:copy_kernel_service_snapshot"]
-      snapshot_vm_args += [ "--preview-dart-2" ]
     }
 
     depfile = "$output.d"
@@ -173,6 +175,9 @@
     abs_output = rebase_path(output, root_build_dir)
 
     vm_args = [
+      # TODO(asiva): For not use --no-preview-dart-2, need to flip this to use
+      # gen_kernel to generate a kernel file before creating an app snapshot.
+      "--no-preview-dart-2",
       "--deterministic",
       "--packages=$dot_packages",
       "--snapshot-kind=app-aot",
diff --git a/utils/bazel/BUILD.gn b/utils/bazel/BUILD.gn
index 79a0a7e..6f6d3da 100644
--- a/utils/bazel/BUILD.gn
+++ b/utils/bazel/BUILD.gn
@@ -4,7 +4,7 @@
 
 import("../application_snapshot.gni")
 
-application_snapshot("kernel_summary_worker") {
-  main_dart = "kernel_summary_worker.dart"
+application_snapshot("kernel_worker") {
+  main_dart = "kernel_worker.dart"
   training_args = [ "--help" ]
 }
diff --git a/utils/bazel/kernel_summary_worker.dart b/utils/bazel/kernel_worker.dart
similarity index 80%
rename from utils/bazel/kernel_summary_worker.dart
rename to utils/bazel/kernel_worker.dart
index 9ac2ab9..27bfd22 100644
--- a/utils/bazel/kernel_summary_worker.dart
+++ b/utils/bazel/kernel_worker.dart
@@ -15,9 +15,10 @@
 import 'package:args/args.dart';
 import 'package:bazel_worker/bazel_worker.dart';
 import 'package:build_integration/file_system/multi_root.dart';
-import 'package:front_end/src/api_unstable/summary_worker.dart' as fe;
+import 'package:front_end/src/api_unstable/bazel_worker.dart' as fe;
 import 'package:kernel/ast.dart' show Component, Library;
 import 'package:kernel/target/targets.dart';
+import 'package:kernel/target/vm.dart';
 
 main(List<String> args) async {
   args = preprocessArgs(args);
@@ -27,22 +28,22 @@
       throw new StateError(
           "unexpected args, expected only --persistent-worker but got: $args");
     }
-    await new SummaryWorker().run();
+    await new KernelWorker().run();
   } else {
-    var succeeded = await computeSummary(args);
+    var succeeded = await computeKernel(args);
     if (!succeeded) {
       exitCode = 15;
     }
   }
 }
 
-/// A bazel worker loop that can compute summaries.
-class SummaryWorker extends AsyncWorkerLoop {
+/// A bazel worker loop that can compute full or summary kernel files.
+class KernelWorker extends AsyncWorkerLoop {
   Future<WorkResponse> performRequest(WorkRequest request) async {
     var outputBuffer = new StringBuffer();
     var response = new WorkResponse()..exitCode = 0;
     try {
-      var succeeded = await computeSummary(request.arguments,
+      var succeeded = await computeKernel(request.arguments,
           isWorker: true, outputBuffer: outputBuffer);
       if (!succeeded) {
         response.exitCode = 15;
@@ -87,15 +88,20 @@
       negatable: false,
       help: 'Whether source files loaded implicitly should be included as '
           'part of the summary.')
+  ..addFlag('summary-only',
+      defaultsTo: true,
+      negatable: true,
+      help: 'Whether to only build summary files.')
   ..addOption('dart-sdk-summary')
-  ..addOption('input-summary', allowMultiple: true)
-  ..addOption('multi-root', allowMultiple: true)
+  ..addMultiOption('input-summary')
+  ..addMultiOption('input-linked')
+  ..addMultiOption('multi-root')
   ..addOption('multi-root-scheme', defaultsTo: 'org-dartlang-multi-root')
   ..addOption('packages-file')
-  ..addOption('source', allowMultiple: true)
+  ..addMultiOption('source')
   ..addOption('output');
 
-/// Computes a kernel summary based on [args].
+/// Computes a kernel file based on [args].
 ///
 /// If [isWorker] is true then exit codes will not be set on failure.
 ///
@@ -103,14 +109,16 @@
 /// instead of printed to the console.
 ///
 /// Returns whether or not the summary was successfully output.
-Future<bool> computeSummary(List<String> args,
+Future<bool> computeKernel(List<String> args,
     {bool isWorker: false, StringBuffer outputBuffer}) async {
+  dynamic out = outputBuffer ?? stderr;
   bool succeeded = true;
   var parsedArgs = summaryArgsParser.parse(args);
 
   if (parsedArgs['help']) {
-    print(summaryArgsParser.usage);
-    exit(0);
+    out.writeln(summaryArgsParser.usage);
+    if (!isWorker) exit(0);
+    return false;
   }
 
   // Bazel creates an overlay file system where some files may be located in the
@@ -121,32 +129,41 @@
   var fileSystem = new MultiRootFileSystem(parsedArgs['multi-root-scheme'],
       multiRoots, fe.StandardFileSystem.instance);
   var sources = parsedArgs['source'].map(Uri.parse).toList();
+  Target target;
+  var summaryOnly = parsedArgs['summary-only'] as bool;
+  var excludeNonSources = parsedArgs['exclude-non-sources'] as bool;
+  if (summaryOnly) {
+    target = new SummaryTarget(
+        sources, excludeNonSources, new TargetFlags(strongMode: true));
+  } else {
+    target = new VmTarget(new TargetFlags(strongMode: true));
+  }
   var state = await fe.initializeCompiler(
       // TODO(sigmund): pass an old state once we can make use of it.
       null,
       Uri.base.resolve(parsedArgs['dart-sdk-summary']),
       Uri.base.resolve(parsedArgs['packages-file']),
       parsedArgs['input-summary'].map(Uri.base.resolve).toList(),
-      new SummaryTarget(sources, parsedArgs['exclude-non-sources'],
-          new TargetFlags(strongMode: true)),
+      parsedArgs['input-linked'].map(Uri.base.resolve).toList(),
+      target,
       fileSystem);
 
   void onProblem(fe.FormattedMessage message, severity,
       List<fe.FormattedMessage> context) {
-    dynamic out = outputBuffer ?? stderr;
-    out.println(message.formatted);
+    out.writeln(message.formatted);
     for (fe.FormattedMessage message in context) {
-      out.println(message.formatted);
+      out.writeln(message.formatted);
     }
     succeeded = false;
   }
 
-  var summary = await fe.compile(state, sources, onProblem);
+  var kernel =
+      await fe.compile(state, sources, onProblem, summaryOnly: summaryOnly);
 
-  if (summary != null) {
+  if (kernel != null) {
     var outputFile = new File(parsedArgs['output']);
     outputFile.createSync(recursive: true);
-    outputFile.writeAsBytesSync(summary);
+    outputFile.writeAsBytesSync(kernel);
   } else {
     assert(!succeeded);
   }
diff --git a/utils/compile_platform.gni b/utils/compile_platform.gni
index 9c157b7..94bce50 100644
--- a/utils/compile_platform.gni
+++ b/utils/compile_platform.gni
@@ -2,29 +2,22 @@
 # 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("../build/dart/dart_host_sdk_toolchain.gni")
-import("../build/dart/prebuilt_dart_sdk.gni")
-
-_is_fuchsia = defined(is_fuchsia_tree) && is_fuchsia_tree
-
-if (_is_fuchsia) {
-  import("//build/dart/dart.gni")
-}
+import("../build/dart/dart_action.gni")
 
 _dart_root = get_path_info("..", "abspath")
 
 template("compile_platform") {
   assert(defined(invoker.libraries_specification_uri),
-      "Need 'libraries_specification_uri' in $target_name")
+         "Need 'libraries_specification_uri' in $target_name")
   assert(defined(invoker.outputs), "Need 'outputs' in $target_name")
   assert(defined(invoker.args), "Need 'args' in $target_name")
   if (defined(invoker.single_root_scheme)) {
     assert(defined(invoker.single_root_base),
-        "Need 'single_root_base' in $target_name")
+           "Need 'single_root_base' in $target_name")
   }
   if (defined(invoker.single_root_base)) {
     assert(defined(invoker.single_root_scheme),
-        "Need 'single_root_scheme' in $target_name")
+           "Need 'single_root_scheme' in $target_name")
   }
   assert(!defined(invoker.script), "Remove 'script' from $target_name")
   assert(!defined(invoker.depfile), "Remove 'depfile' from $target_name")
@@ -41,8 +34,10 @@
         invoker.add_implicit_vm_platform_dependency
   }
 
-  action(target_name) {
-    script = "$_dart_root/tools/compile_platform.py"
+  prebuilt_dart_action(target_name) {
+    script = "$_dart_root/pkg/front_end/tool/_fasta/compile_platform.dart"
+
+    packages = "$_dart_root/.packages"
 
     outputs = invoker.outputs
 
@@ -64,34 +59,21 @@
     }
     depfile = outputs[0] + ".d"
 
-    if (_is_fuchsia) {
-      args += [
-        "--dart-executable",
-        rebase_path(prebuilt_dart),
-      ]
-    } else if (!prebuilt_dart_exe_works) {
-      deps += [ "$_dart_root/runtime/bin:dart_bootstrap($dart_host_toolchain)" ]
-      dart_out_dir = get_label_info(
-              "$_dart_root/runtime/bin:dart_bootstrap($dart_host_toolchain)",
-              "root_out_dir")
-      args += [
-        "--dart-executable",
-        rebase_path("$dart_out_dir/dart_bootstrap$executable_suffix"),
-      ]
-    }
-
     args += invoker.args
     if (defined(invoker.single_root_scheme)) {
-      args += ["--single-root-scheme=" + invoker.single_root_scheme]
+      args += [ "--single-root-scheme=" + invoker.single_root_scheme ]
     }
     if (defined(invoker.single_root_base)) {
-      args += ["--single-root-base=" + invoker.single_root_base]
+      args += [ "--single-root-base=" + invoker.single_root_base ]
     }
     if (defined(invoker.single_root_scheme)) {
-      args += [invoker.libraries_specification_uri]
+      args += [ invoker.libraries_specification_uri ]
     } else {
-      args += [rebase_path(invoker.libraries_specification_uri, root_build_dir)]
+      args +=
+          [ rebase_path(invoker.libraries_specification_uri, root_build_dir) ]
     }
+    args +=
+        [ rebase_path("$root_out_dir/vm_outline_strong.dill", root_build_dir) ]
     args += rebase_path(outputs, root_build_dir)
   }
 }
diff --git a/utils/dartdevc/BUILD.gn b/utils/dartdevc/BUILD.gn
index abadd8d..d3e0c7b 100644
--- a/utils/dartdevc/BUILD.gn
+++ b/utils/dartdevc/BUILD.gn
@@ -124,6 +124,8 @@
 # Apply dev_compiler's patch files to create the Dart version of the dartdevc
 # SDK.
 prebuilt_dart_action("dartdevc_patch_sdk") {
+  vm_args = ["--preview-dart-2"]
+
   # TODO(rnystrom): Unfork DDC's patch_sdk.dart script with the
   # tools/patch_sdk.dart and then change this to use generate_patch_sdk().
   deps = [
@@ -165,6 +167,8 @@
 # Compiles the Dart core libraries and DDC runtime to an analyzer summary and
 # JS.
 prebuilt_dart_action("dartdevc_sdk") {
+  vm_args = ["--preview-dart-2"]
+
   deps = [
     ":dartdevc_files_stamp",
     ":dartdevc_patch_sdk",
@@ -261,6 +265,8 @@
 # Compiles the packages used by the tests to JS with dartdevc so that they are
 # available for loading by the tests.
 prebuilt_dart_action("dartdevc_test_pkg") {
+  vm_args = ["--preview-dart-2"]
+
   deps = [
     ":dartdevc_files_stamp",
     ":dartdevc_sdk",
@@ -322,13 +328,18 @@
 
 # Compiles the DDC SDK's kernel summary and JS code.
 prebuilt_dart_action("dartdevk_sdk") {
+  vm_args = ["--preview-dart-2"]
+
   deps = [
+    "../../pkg:pkg_files_stamp",
     ":dartdevc_files_stamp",
     ":dartdevc_sdk_patch_stamp",
   ]
 
   inputs = [
+    "../../pkg/dev_compiler/tool/kernel_sdk.dart",
     "$target_gen_dir/dartdevc_files.stamp",
+    "$root_gen_dir/pkg_files.stamp",
   ]
 
   outputs = [
diff --git a/utils/generate_entry_points_json.gni b/utils/generate_entry_points_json.gni
index 04fc0fc..dbb3a42 100644
--- a/utils/generate_entry_points_json.gni
+++ b/utils/generate_entry_points_json.gni
@@ -30,6 +30,7 @@
       output,
     ]
     vm_args = [
+      "--no-preview-dart-2",
       "--print-precompiler-entry-points=" + rebase_path(output),
       "--snapshot=" + rebase_path("$target_gen_dir/dummy.snapshot"),
       "--snapshot-kind=app-aot",