Version 2.15.0-130.0.dev

Merge commit '9872fd192e883952d86c49668bd1a38c1075763d' into 'dev'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 298aa20..fee0ec7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -101,7 +101,10 @@
 
 #### Linter
 
-Updated the Linter to `1.11.0`, which includes changes that
+Updated the Linter to `1.12.0`, which includes changes that
+- update `avoid_print` to allow `kDebugMode`-wrapped print calls.
+- fix handling of initializing formals in `prefer_final_parameters`.
+- fix `unnecessary_parenthesis` false positive with function expressions.
 - adds support for constructor tear-offs to `avoid_redundant_argument_values`, 
   `unnecessary_lambdas`, and `unnecessary_parenthesis`.
 - adds a new lint: `unnecessary_constructor_name` to flag unnecessary uses of 
diff --git a/DEPS b/DEPS
index 7c61dee..c431fa6 100644
--- a/DEPS
+++ b/DEPS
@@ -105,7 +105,7 @@
   # For more details, see https://github.com/dart-lang/sdk/issues/30164
   "dart_style_rev": "14d9b6fd58cc4744676c12be3cc5eee2a779db82",
 
-  "dartdoc_rev" : "7fd237db737752800505eff510bf3fa8d3e00eb7",
+  "dartdoc_rev" : "e5ebb7a6e88427db25c21811dc91190475934b17",
   "devtools_rev" : "2b47d9ed486479153ca2fd038000950674ed1beb",
   "jsshell_tag": "version:88.0",
   "ffi_rev": "4dd32429880a57b64edaf54c9d5af8a9fa9a4ffb",
@@ -121,7 +121,7 @@
   "intl_tag": "0.17.0-nullsafety",
   "jinja2_rev": "2222b31554f03e62600cd7e383376a7c187967a1",
   "json_rpc_2_rev": "7e00f893440a72de0637970325e4ea44bd1e8c8e",
-  "linter_tag": "1.11.0",
+  "linter_tag": "1.12.0",
   "lints_tag": "f9670df2a66e0ec12eb51554e70c1cbf56c8f5d0",
   "logging_rev": "575781ef196e4fed4fb737e38fb4b73d62727187",
   "markupsafe_rev": "8f45f5cfa0009d2a70589bcda0349b8cb2b72783",
diff --git a/pkg/_js_interop_checks/lib/src/transformations/js_util_optimizer.dart b/pkg/_js_interop_checks/lib/src/transformations/js_util_optimizer.dart
index c5933d5..1e03d65 100644
--- a/pkg/_js_interop_checks/lib/src/transformations/js_util_optimizer.dart
+++ b/pkg/_js_interop_checks/lib/src/transformations/js_util_optimizer.dart
@@ -6,7 +6,6 @@
 import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/core_types.dart';
 import 'package:kernel/type_environment.dart';
-import 'package:kernel/kernel.dart';
 
 /// Replaces js_util methods with inline calls to foreign_helper JS which
 /// emits the code as a JavaScript code fragment.
diff --git a/pkg/analyzer/lib/error/error.dart b/pkg/analyzer/lib/error/error.dart
index 3ff56b9..d80043e 100644
--- a/pkg/analyzer/lib/error/error.dart
+++ b/pkg/analyzer/lib/error/error.dart
@@ -5,7 +5,6 @@
 import 'dart:collection';
 
 import 'package:_fe_analyzer_shared/src/base/errors.dart';
-import 'package:_fe_analyzer_shared/src/messages/codes.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/dart/error/ffi_code.dart';
@@ -1014,23 +1013,15 @@
   /// [length]. The error will have the given [errorCode] and the map  of
   /// [arguments] will be used to complete the message and correction. If any
   /// [contextMessages] are provided, they will be recorded with the error.
-  AnalysisError.withNamedArguments(this.source, int offset, int length,
-      this.errorCode, Map<String, dynamic> arguments,
+  ///
+  /// Deprecated - no analyzer errors use named arguments anymore.  Please use
+  /// `AnalysisError()`.
+  @deprecated
+  AnalysisError.withNamedArguments(Source source, int offset, int length,
+      ErrorCode errorCode, Map<String, dynamic> arguments,
       {List<DiagnosticMessage> contextMessages = const []})
-      : _contextMessages = contextMessages {
-    var messageText = applyArgumentsToTemplate(errorCode.message, arguments);
-    var correctionTemplate = errorCode.correction;
-    if (correctionTemplate != null) {
-      _correction = applyArgumentsToTemplate(correctionTemplate, arguments);
-    }
-    _problemMessage = DiagnosticMessageImpl(
-      filePath: source.fullName,
-      length: length,
-      message: messageText,
-      offset: offset,
-      url: null,
-    );
-  }
+      : this(source, offset, length, errorCode,
+            _translateNamedArguments(arguments), contextMessages);
 
   @override
   List<DiagnosticMessage> get contextMessages => _contextMessages;
@@ -1130,4 +1121,21 @@
     }
     return errors.toList();
   }
+
+  static List<Object?>? _translateNamedArguments(
+      Map<String, dynamic> arguments) {
+    // All analyzer errors now use positional arguments, so if this method is
+    // being called, either no arguments were provided to the
+    // AnalysisError.withNamedArguments constructor, or the client was
+    // developed against an older version of the analyzer that used named
+    // arguments.  In either case, we'll make a best effort translation of named
+    // arguments to positional ones.  In the case where some arguments were
+    // provided, we have an assertion to alert the developer that they may not
+    // get correct results.
+    assert(
+        arguments.isEmpty,
+        'AnalysisError.withNamedArguments is no longer supported.  Making a '
+        'best effort translation to positional arguments.  Please use '
+        'AnalysisError() instead.');
+  }
 }
diff --git a/pkg/analyzer/lib/error/listener.dart b/pkg/analyzer/lib/error/listener.dart
index af873be..346f462 100644
--- a/pkg/analyzer/lib/error/listener.dart
+++ b/pkg/analyzer/lib/error/listener.dart
@@ -127,6 +127,11 @@
 
   /// Report an error with the given [errorCode] and [message]. The location of
   /// the error is specified by the given [offset] and [length].
+  ///
+  /// Deprecated - the [Message] type assumes named arguments, and no analyzer
+  /// errors use named arguments anymore.  Please use other methods of
+  /// [ErrorReporter].
+  @deprecated
   void reportErrorMessage(
       ErrorCode errorCode, int offset, int length, Message message) {
     _errorListener.onError(AnalysisError.withNamedArguments(
diff --git a/pkg/analyzer/lib/file_system/memory_file_system.dart b/pkg/analyzer/lib/file_system/memory_file_system.dart
index 76b90a1..c023d3b 100644
--- a/pkg/analyzer/lib/file_system/memory_file_system.dart
+++ b/pkg/analyzer/lib/file_system/memory_file_system.dart
@@ -480,7 +480,9 @@
     var canonicalPath = provider._resolveLinks(path);
     var data = provider._pathToData[canonicalPath];
     if (data is! _FileData) {
-      throw FileSystemException(path, 'File does not exist.');
+      // TODO(scheglov) Remove the path from the message.
+      // When https://github.com/dart-lang/dartdoc/pull/2796 is in google3.
+      throw FileSystemException(path, 'File "$path" does not exist.');
     }
     return data.bytes;
   }
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index a62d6d3..a8b5cae 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -8922,6 +8922,16 @@
   /// Initialize a newly created identifier.
   SimpleIdentifierImpl(this.token);
 
+  /// Return the cascade that contains this [SimpleIdentifier].
+  CascadeExpressionImpl? get ancestorCascade {
+    var operatorType = token.previous?.type;
+    if (operatorType == TokenType.PERIOD_PERIOD ||
+        operatorType == TokenType.QUESTION_PERIOD_PERIOD) {
+      return thisOrAncestorOfType<CascadeExpressionImpl>();
+    }
+    return null;
+  }
+
   @override
   Token get beginToken => token;
 
diff --git a/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart b/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
index a24b695..d498abb 100644
--- a/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
+++ b/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
@@ -161,8 +161,8 @@
 
 const ParserErrorCode _BINARY_OPERATOR_WRITTEN_OUT = ParserErrorCode(
     'BINARY_OPERATOR_WRITTEN_OUT',
-    r"Binary operator '#string' is written as '#string2' instead of the written out word.",
-    correction: "Try replacing '#string' with '#string2'.");
+    r"Binary operator '{0}' is written as '{1}' instead of the written out word.",
+    correction: "Try replacing '{0}' with '{1}'.");
 
 const ParserErrorCode _BREAK_OUTSIDE_OF_LOOP = ParserErrorCode(
     'BREAK_OUTSIDE_OF_LOOP',
@@ -190,7 +190,7 @@
 
 const ParserErrorCode _CONFLICTING_MODIFIERS = ParserErrorCode(
     'CONFLICTING_MODIFIERS',
-    r"Members can't be declared to be both '#string' and '#string2'.",
+    r"Members can't be declared to be both '{0}' and '{1}'.",
     correction: "Try removing one of the keywords.");
 
 const ParserErrorCode _CONSTRUCTOR_WITH_RETURN_TYPE = ParserErrorCode(
@@ -252,7 +252,7 @@
     correction: "Try moving the directive before any declarations.");
 
 const ParserErrorCode _DUPLICATED_MODIFIER = ParserErrorCode(
-    'DUPLICATED_MODIFIER', r"The modifier '#lexeme' was already specified.",
+    'DUPLICATED_MODIFIER', r"The modifier '{0}' was already specified.",
     correction: "Try removing all but one occurrence of the modifier.");
 
 const ParserErrorCode _DUPLICATE_DEFERRED = ParserErrorCode(
@@ -262,7 +262,7 @@
 
 const ParserErrorCode _DUPLICATE_LABEL_IN_SWITCH_STATEMENT = ParserErrorCode(
     'DUPLICATE_LABEL_IN_SWITCH_STATEMENT',
-    r"The label '#name' was already used in this switch statement.",
+    r"The label '{0}' was already used in this switch statement.",
     correction: "Try choosing a different name for this label.");
 
 const ParserErrorCode _DUPLICATE_PREFIX = ParserErrorCode('DUPLICATE_PREFIX',
@@ -279,7 +279,7 @@
     correction: "Try putting parentheses around one of the comparisons.");
 
 const ParserErrorCode _EXPECTED_BODY = ParserErrorCode(
-    'EXPECTED_BODY', r"A #string must have a body, even if it is empty.",
+    'EXPECTED_BODY', r"A {0} must have a body, even if it is empty.",
     correction: "Try adding an empty body.");
 
 const ParserErrorCode _EXPECTED_ELSE_OR_COMMA =
@@ -287,17 +287,17 @@
 
 const ParserErrorCode _EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD = ParserErrorCode(
     'EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD',
-    r"'#lexeme' can't be used as an identifier because it's a keyword.",
+    r"'{0}' can't be used as an identifier because it's a keyword.",
     correction: "Try renaming this to be an identifier that isn't a keyword.");
 
 const ParserErrorCode _EXPECTED_INSTEAD =
-    ParserErrorCode('EXPECTED_INSTEAD', r"Expected '#string' instead of this.");
+    ParserErrorCode('EXPECTED_INSTEAD', r"Expected '{0}' instead of this.");
 
 const ParserErrorCode _EXPERIMENT_NOT_ENABLED = ParserErrorCode(
     'EXPERIMENT_NOT_ENABLED',
-    r"This requires the '#string' language feature to be enabled.",
+    r"This requires the '{0}' language feature to be enabled.",
     correction:
-        "Try updating your pubspec.yaml to set the minimum SDK constraint to #string2 or higher, and running 'pub get'.");
+        "Try updating your pubspec.yaml to set the minimum SDK constraint to {1} or higher, and running 'pub get'.");
 
 const ParserErrorCode _EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE = ParserErrorCode(
     'EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE',
@@ -367,8 +367,8 @@
     correction: "Try removing the keyword 'external'.");
 
 const ParserErrorCode _EXTRANEOUS_MODIFIER = ParserErrorCode(
-    'EXTRANEOUS_MODIFIER', r"Can't have modifier '#lexeme' here.",
-    correction: "Try removing '#lexeme'.");
+    'EXTRANEOUS_MODIFIER', r"Can't have modifier '{0}' here.",
+    correction: "Try removing '{0}'.");
 
 const ParserErrorCode _FACTORY_TOP_LEVEL_DECLARATION = ParserErrorCode(
     'FACTORY_TOP_LEVEL_DECLARATION',
@@ -452,8 +452,8 @@
     'INVALID_INITIALIZER', r"Not a valid initializer.",
     correction: "To initialize a field, use the syntax 'name = value'.");
 
-const ParserErrorCode _INVALID_OPERATOR = ParserErrorCode('INVALID_OPERATOR',
-    r"The string '#lexeme' isn't a user-definable operator.");
+const ParserErrorCode _INVALID_OPERATOR = ParserErrorCode(
+    'INVALID_OPERATOR', r"The string '{0}' isn't a user-definable operator.");
 
 const ParserErrorCode _INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER =
     ParserErrorCode('INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER',
@@ -474,8 +474,8 @@
 
 const ParserErrorCode _INVALID_USE_OF_COVARIANT_IN_EXTENSION = ParserErrorCode(
     'INVALID_USE_OF_COVARIANT_IN_EXTENSION',
-    r"Can't have modifier '#lexeme' in an extension.",
-    correction: "Try removing '#lexeme'.",
+    r"Can't have modifier '{0}' in an extension.",
+    correction: "Try removing '{0}'.",
     hasPublishedDocs: true);
 
 const ParserErrorCode _LIBRARY_DIRECTIVE_NOT_FIRST = ParserErrorCode(
@@ -485,13 +485,13 @@
         "Try moving the library directive before any other directives.");
 
 const ParserErrorCode _LITERAL_WITH_CLASS = ParserErrorCode(
-    'LITERAL_WITH_CLASS', r"A #string literal can't be prefixed by '#lexeme'.",
-    correction: "Try removing '#lexeme'");
+    'LITERAL_WITH_CLASS', r"A {0} literal can't be prefixed by '{1}'.",
+    correction: "Try removing '{1}'");
 
 const ParserErrorCode _LITERAL_WITH_CLASS_AND_NEW = ParserErrorCode(
     'LITERAL_WITH_CLASS_AND_NEW',
-    r"A #string literal can't be prefixed by 'new #lexeme'.",
-    correction: "Try removing 'new' and '#lexeme'");
+    r"A {0} literal can't be prefixed by 'new {1}'.",
+    correction: "Try removing 'new' and '{1}'");
 
 const ParserErrorCode _LITERAL_WITH_NEW = ParserErrorCode(
     'LITERAL_WITH_NEW', r"A literal can't be prefixed by 'new'.",
@@ -550,7 +550,7 @@
 
 const ParserErrorCode _MODIFIER_OUT_OF_ORDER = ParserErrorCode(
     'MODIFIER_OUT_OF_ORDER',
-    r"The modifier '#string' should be before the modifier '#string2'.",
+    r"The modifier '{0}' should be before the modifier '{1}'.",
     correction: "Try re-ordering the modifiers.");
 
 const ParserErrorCode _MULTIPLE_EXTENDS_CLAUSES = ParserErrorCode(
@@ -650,7 +650,7 @@
 
 const ParserErrorCode _TYPE_ARGUMENTS_ON_TYPE_VARIABLE = ParserErrorCode(
     'TYPE_ARGUMENTS_ON_TYPE_VARIABLE',
-    r"Can't use type arguments with type variable '#name'.",
+    r"Can't use type arguments with type variable '{0}'.",
     correction: "Try removing the type arguments.");
 
 const ParserErrorCode _TYPE_BEFORE_FACTORY = ParserErrorCode(
diff --git a/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
index 0427d04..48be249 100644
--- a/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
@@ -89,7 +89,6 @@
       prefixType = prefixElement.returnType;
     }
 
-    function.prefix.staticType = prefixType;
     if (prefixType != null && prefixType.isDynamic) {
       _errorReporter.reportErrorForNode(
         CompileTimeErrorCode.GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC,
@@ -301,19 +300,15 @@
   /// There are three possible valid cases: tearing off the `call` method of a
   /// function element, tearing off an extension element declared on [Function],
   /// and tearing off an extension element declared on a function type.
-  ExecutableElement? _resolveFunctionElementFunction(
+  Element? _resolveFunctionTypeFunction(
     Expression receiver,
     SimpleIdentifier methodName,
-    FunctionElement receiverElement,
+    FunctionType receiverType,
   ) {
-    if (methodName.name == FunctionElement.CALL_METHOD_NAME) {
-      return receiverElement;
-    }
-
     var methodElement = _resolver.typePropertyResolver
         .resolve(
           receiver: receiver,
-          receiverType: receiverElement.type,
+          receiverType: receiverType,
           name: methodName.name,
           propertyErrorEntity: methodName,
           nameErrorEntity: methodName,
@@ -342,6 +337,7 @@
     }
 
     function.prefix.staticElement = prefixElement;
+    function.prefix.staticType = prefixElement.referenceType;
     var functionName = function.identifier.name;
 
     if (prefixElement is PrefixElement) {
@@ -376,28 +372,22 @@
       return;
     }
 
-    var methodElement = _resolveTypeProperty(
+    var functionType = _resolveTypeProperty(
       receiver: function.prefix,
-      receiverElement: prefixElement,
       name: function.identifier,
       nameErrorEntity: function,
     );
 
-    if (methodElement is MethodElement) {
-      function.identifier.staticElement = methodElement;
-      function.staticType = methodElement.type;
-      _resolve(
-        node: node,
-        rawType: methodElement.type,
-        name: functionName,
-      );
-      return;
-    }
-
-    if (methodElement is PropertyAccessorElement) {
-      function.accept(_resolver);
-      _resolveDisallowedExpression(node, methodElement.returnType);
-      return;
+    if (functionType != null) {
+      if (functionType is FunctionType) {
+        function.staticType = functionType;
+        _resolve(
+          node: node,
+          rawType: functionType,
+          name: functionName,
+        );
+        return;
+      }
     }
 
     function.accept(_resolver);
@@ -425,39 +415,12 @@
         node.staticType = DynamicTypeImpl.instance;
         return;
       }
-    } else if (target is PrefixedIdentifierImpl) {
-      var prefixElement = target.prefix.scopeLookupResult!.getter;
-      if (prefixElement is PrefixElement) {
-        var prefixName = target.identifier.name;
-        var targetElement = prefixElement.scope.lookup(prefixName).getter;
-
-        var methodElement = _resolveTypeProperty(
-          receiver: target,
-          receiverElement: targetElement,
-          name: function.propertyName,
-          nameErrorEntity: function,
-        );
-
-        if (methodElement == null) {
-          // The target is known, but the method is not; [UNDEFINED_GETTER] is
-          // reported elsewhere.
-          node.staticType = DynamicTypeImpl.instance;
-          return;
-        } else {
-          _resolveReceiverPrefix(node, prefixElement, target, methodElement);
-          return;
-        }
-      } else {
-        // The prefix is unknown; [UNDEFINED_IDENTIFIER] is reported elsewhere.
-        node.staticType = DynamicTypeImpl.instance;
-        return;
-      }
     } else if (target is ExtensionOverrideImpl) {
       _resolveExtensionOverride(node, function, target);
       return;
     } else {
-      targetType = target.typeOrThrow;
-      if (targetType.isDynamic) {
+      var targetType = target.staticType;
+      if (targetType != null && targetType.isDynamic) {
         _errorReporter.reportErrorForNode(
           CompileTimeErrorCode.GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC,
           node,
@@ -466,6 +429,29 @@
         node.staticType = DynamicTypeImpl.instance;
         return;
       }
+      var functionType = _resolveTypeProperty(
+        receiver: target,
+        name: function.propertyName,
+        nameErrorEntity: function,
+      );
+
+      if (functionType == null) {
+        // The target is known, but the method is not; [UNDEFINED_GETTER] is
+        // reported elsewhere.
+        node.staticType = DynamicTypeImpl.instance;
+        return;
+      } else {
+        if (functionType is FunctionType) {
+          function.staticType = functionType;
+          _resolve(
+            node: node,
+            rawType: functionType,
+            name: function.propertyName.name,
+          );
+        }
+
+        return;
+      }
     }
 
     var propertyElement = _resolver.typePropertyResolver
@@ -719,47 +705,52 @@
     NodeReplacer.replace(node, typeLiteral);
   }
 
-  /// Resolves [name] as a property on [receiver] (with element
-  /// [receiverElement]).
+  /// Resolves [name] as a property on [receiver].
   ///
-  /// Returns `null` if [receiverElement] is `null`, a [TypeParameterElement],
-  /// or a [TypeAliasElement] for a non-interface type.
-  ExecutableElement? _resolveTypeProperty({
+  /// Returns `null` if [receiver]'s type is `null`, a [TypeParameterType],
+  /// or a type alias for a non-interface type.
+  DartType? _resolveTypeProperty({
     required Expression receiver,
-    required Element? receiverElement,
-    required SimpleIdentifier name,
+    required SimpleIdentifierImpl name,
     required SyntacticEntity nameErrorEntity,
   }) {
-    if (receiverElement == null) {
-      return null;
-    }
-    if (receiverElement is TypeParameterElement) {
-      return null;
-    }
-    if (receiverElement is ClassElement) {
-      return _resolveStaticElement(receiverElement, name);
-    } else if (receiverElement is FunctionElement) {
-      return _resolveFunctionElementFunction(receiver, name, receiverElement);
-    } else if (receiverElement is TypeAliasElement) {
-      var aliasedType = receiverElement.aliasedType;
-      if (aliasedType is InterfaceType) {
-        return _resolveStaticElement(aliasedType.element, name);
-      } else {
-        return null;
+    if (receiver is Identifier) {
+      var receiverElement = receiver.staticElement;
+      if (receiverElement is ClassElement) {
+        var element = _resolveStaticElement(receiverElement, name);
+        name.staticElement = element;
+        // TODO(srawlins): Should this use referenceType? E.g. if `element`
+        // is a function-typed static getter.
+        return element?.type;
+      } else if (receiverElement is TypeAliasElement) {
+        var aliasedType = receiverElement.aliasedType;
+        if (aliasedType is InterfaceType) {
+          var element = _resolveStaticElement(aliasedType.element, name);
+          name.staticElement = element;
+          // TODO(srawlins): Should this use referenceType? E.g. if `element`
+          // is a function-typed static getter.
+          return element?.type;
+        } else {
+          return null;
+        }
       }
     }
 
-    DartType receiverType;
-    if (receiverElement is VariableElement) {
-      receiverType = receiverElement.type;
-    } else if (receiverElement is PropertyAccessorElement) {
-      receiverType = receiverElement.returnType;
-    } else {
-      assert(false,
-          'Unexpected receiverElement type: ${receiverElement.runtimeType}');
+    var receiverType = receiver.staticType;
+    if (receiverType == null) {
       return null;
+    } else if (receiverType is TypeParameterType) {
+      return null;
+    } else if (receiverType is FunctionType) {
+      if (name.name == FunctionElement.CALL_METHOD_NAME) {
+        return receiverType;
+      }
+      var element = _resolveFunctionTypeFunction(receiver, name, receiverType);
+      name.staticElement = element;
+      return element?.referenceType;
     }
-    var methodElement = _resolver.typePropertyResolver
+
+    var element = _resolver.typePropertyResolver
         .resolve(
           receiver: receiver,
           receiverType: receiverType,
@@ -768,10 +759,35 @@
           nameErrorEntity: nameErrorEntity,
         )
         .getter;
-    if (methodElement != null && methodElement.isStatic) {
-      _reportInvalidAccessToStaticMember(name, methodElement,
+    name.staticElement = element;
+    if (element != null && element.isStatic) {
+      _reportInvalidAccessToStaticMember(name, element,
           implicitReceiver: false);
     }
-    return methodElement;
+    return element?.referenceType;
+  }
+}
+
+extension on Element {
+  /// Returns the 'type' of `this`, when accessed as a "reference", not
+  /// immediately followed by parentheses and arguments.
+  ///
+  /// For all elements that don't have a type (for example, [ExportElement]),
+  /// `null` is returned. For [PropertyAccessorElement], the return value is
+  /// returned. For all other elements, their `type` property is returned.
+  DartType? get referenceType {
+    if (this is ConstructorElement) {
+      return (this as ConstructorElement).type;
+    } else if (this is FunctionElement) {
+      return (this as FunctionElement).type;
+    } else if (this is PropertyAccessorElement) {
+      return (this as PropertyAccessorElement).returnType;
+    } else if (this is MethodElement) {
+      return (this as MethodElement).type;
+    } else if (this is VariableElement) {
+      return (this as VariableElement).type;
+    } else {
+      return null;
+    }
   }
 }
diff --git a/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
index 307a656..dd2e688 100644
--- a/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
@@ -197,6 +197,19 @@
     required bool hasRead,
     required bool hasWrite,
   }) {
+    var ancestorCascade = node.ancestorCascade;
+    if (ancestorCascade != null) {
+      return _resolve(
+        node: node,
+        target: ancestorCascade.target,
+        isCascaded: true,
+        isNullAware: ancestorCascade.isNullAware,
+        propertyName: node,
+        hasRead: hasRead,
+        hasWrite: hasWrite,
+      );
+    }
+
     Element? readElementRequested;
     Element? readElementRecovery;
     if (hasRead) {
@@ -479,7 +492,7 @@
           _errorReporter.reportErrorForNode(
             CompileTimeErrorCode.PRIVATE_SETTER,
             propertyName,
-            [propertyName.name, typeReference.name],
+            [propertyName.name],
           );
         }
         _checkForStaticAccessToInstanceMember(propertyName, writeElement);
diff --git a/pkg/analyzer/lib/src/error/best_practices_verifier.dart b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
index 53d62f5..e7ac1b0 100644
--- a/pkg/analyzer/lib/src/error/best_practices_verifier.dart
+++ b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
@@ -240,7 +240,7 @@
           _errorReporter.reportErrorForNode(
               HintCode.INVALID_VISIBLE_FOR_OVERRIDING_ANNOTATION,
               node,
-              [declaredElement.name, node.name.name]);
+              [declaredElement.name]);
         }
 
         if (parent is TopLevelVariableDeclaration) {
diff --git a/pkg/analyzer/lib/src/error/codes.dart b/pkg/analyzer/lib/src/error/codes.dart
index 2974e8f..3945838 100644
--- a/pkg/analyzer/lib/src/error/codes.dart
+++ b/pkg/analyzer/lib/src/error/codes.dart
@@ -14793,7 +14793,6 @@
           correction:
               "Try adjusting the number of type arguments to match the number "
               "of type parameters.",
-          hasPublishedDocs: true,
           uniqueName: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS_ANONYMOUS_FUNCTION');
 
   /**
@@ -14912,8 +14911,7 @@
               "but {2} type arguments were given.",
           correction:
               "Try adjusting the number of type arguments to match the number "
-              "of type parameters.",
-          hasPublishedDocs: true);
+              "of type parameters.");
 
   /**
    * Parameters:
diff --git a/pkg/analyzer/lib/src/fasta/error_converter.dart b/pkg/analyzer/lib/src/fasta/error_converter.dart
index d4e4833..f207a06 100644
--- a/pkg/analyzer/lib/src/fasta/error_converter.dart
+++ b/pkg/analyzer/lib/src/fasta/error_converter.dart
@@ -340,12 +340,8 @@
     if (index > 0 && index < fastaAnalyzerErrorCodes.length) {
       var errorCode = fastaAnalyzerErrorCodes[index];
       if (errorCode != null) {
-        errorReporter!.reportError(AnalysisError.withNamedArguments(
-            errorReporter!.source,
-            offset,
-            length,
-            errorCode,
-            message.arguments));
+        errorReporter!.reportError(AnalysisError(errorReporter!.source, offset,
+            length, errorCode, message.arguments.values.toList()));
         return;
       }
     }
@@ -362,8 +358,8 @@
   void _reportByCode(
       ErrorCode errorCode, Message message, int offset, int length) {
     if (errorReporter != null) {
-      errorReporter!.reportError(AnalysisError.withNamedArguments(
-          errorReporter!.source, offset, length, errorCode, message.arguments));
+      errorReporter!.reportError(AnalysisError(errorReporter!.source, offset,
+          length, errorCode, message.arguments.values.toList()));
     }
   }
 }
diff --git a/pkg/analyzer/lib/src/generated/ffi_verifier.dart b/pkg/analyzer/lib/src/generated/ffi_verifier.dart
index f34c237..5c672ce 100644
--- a/pkg/analyzer/lib/src/generated/ffi_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/ffi_verifier.dart
@@ -701,8 +701,15 @@
       } else if (declaredType.isArray) {
         final typeArg = (declaredType as InterfaceType).typeArguments.single;
         if (!_isSized(typeArg)) {
+          AstNode errorNode = fieldType;
+          if (fieldType is TypeName) {
+            var typeArguments = fieldType.typeArguments?.arguments;
+            if (typeArguments != null && typeArguments.isNotEmpty) {
+              errorNode = typeArguments[0];
+            }
+          }
           _errorReporter.reportErrorForNode(FfiCode.NON_SIZED_TYPE_ARGUMENT,
-              fieldType, [_arrayClassName, typeArg.toString()]);
+              errorNode, [_arrayClassName, typeArg]);
         }
         final arrayDimensions = declaredType.arrayDimensions;
         _validateSizeOfAnnotation(fieldType, annotations, arrayDimensions);
diff --git a/pkg/analyzer/lib/src/generated/parser.dart b/pkg/analyzer/lib/src/generated/parser.dart
index ff6050c..a332a6c 100644
--- a/pkg/analyzer/lib/src/generated/parser.dart
+++ b/pkg/analyzer/lib/src/generated/parser.dart
@@ -13,101 +13,11 @@
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/token.dart';
 import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/dart/scanner/scanner.dart';
 import 'package:analyzer/src/fasta/ast_builder.dart';
 import 'package:analyzer/src/generated/source.dart';
 
 export 'package:analyzer/src/dart/error/syntactic_errors.dart';
 
-/// A simple data-holder for a method that needs to return multiple values.
-class CommentAndMetadata {
-  /// The documentation comment that was parsed, or `null` if none was given.
-  final Comment? comment;
-
-  /// The metadata that was parsed, or `null` if none was given.
-  final List<Annotation>? metadata;
-
-  /// Initialize a newly created holder with the given [comment] and [metadata].
-  CommentAndMetadata(this.comment, this.metadata);
-
-  /// Return `true` if some metadata was parsed.
-  bool get hasMetadata => metadata != null && metadata!.isNotEmpty;
-}
-
-/// A simple data-holder for a method that needs to return multiple values.
-class FinalConstVarOrType {
-  /// The 'final', 'const' or 'var' keyword, or `null` if none was given.
-  final Token keyword;
-
-  /// The type, or `null` if no type was specified.
-  final TypeAnnotation type;
-
-  /// Initialize a newly created holder with the given [keyword] and [type].
-  FinalConstVarOrType(this.keyword, this.type);
-}
-
-/// A simple data-holder for a method that needs to return multiple values.
-class Modifiers {
-  /// The token representing the keyword 'abstract', or `null` if the keyword
-  /// was not found.
-  Token? abstractKeyword;
-
-  /// The token representing the keyword 'const', or `null` if the keyword was
-  /// not found.
-  Token? constKeyword;
-
-  /// The token representing the keyword 'covariant', or `null` if the keyword
-  /// was not found.
-  Token? covariantKeyword;
-
-  /// The token representing the keyword 'external', or `null` if the keyword
-  /// was not found.
-  Token? externalKeyword;
-
-  /// The token representing the keyword 'factory', or `null` if the keyword was
-  /// not found.
-  Token? factoryKeyword;
-
-  /// The token representing the keyword 'final', or `null` if the keyword was
-  /// not found.
-  Token? finalKeyword;
-
-  /// The token representing the keyword 'static', or `null` if the keyword was
-  /// not found.
-  Token? staticKeyword;
-
-  /// The token representing the keyword 'var', or `null` if the keyword was not
-  /// found.
-  Token? varKeyword;
-
-  @override
-  String toString() {
-    StringBuffer buffer = StringBuffer();
-    bool needsSpace = _appendKeyword(buffer, false, abstractKeyword);
-    needsSpace = _appendKeyword(buffer, needsSpace, constKeyword);
-    needsSpace = _appendKeyword(buffer, needsSpace, externalKeyword);
-    needsSpace = _appendKeyword(buffer, needsSpace, factoryKeyword);
-    needsSpace = _appendKeyword(buffer, needsSpace, finalKeyword);
-    needsSpace = _appendKeyword(buffer, needsSpace, staticKeyword);
-    _appendKeyword(buffer, needsSpace, varKeyword);
-    return buffer.toString();
-  }
-
-  /// If the given [keyword] is not `null`, append it to the given [buffer],
-  /// prefixing it with a space if [needsSpace] is `true`. Return `true` if
-  /// subsequent keywords need to be prefixed with a space.
-  bool _appendKeyword(StringBuffer buffer, bool needsSpace, Token? keyword) {
-    if (keyword != null) {
-      if (needsSpace) {
-        buffer.writeCharCode(0x20);
-      }
-      buffer.write(keyword.lexeme);
-      return true;
-    }
-    return needsSpace;
-  }
-}
-
 /// A parser used to parse tokens into an AST structure.
 class Parser {
   late Token currentToken;
diff --git a/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart b/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
index 9585048..abb0b8d 100644
--- a/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
@@ -129,6 +129,10 @@
   a.b.foo<int>;
 }
 ''', [
+      // TODO(srawlins): Get the information to [FunctionReferenceResolve] that
+      //  [PropertyElementResolver] encountered an error, to avoid double reporting.
+      error(CompileTimeErrorCode.GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC,
+          10, 12),
       error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 10, 1),
     ]);
 
@@ -431,7 +435,7 @@
   }
 
   test_instanceGetter_explicitReceiver() async {
-    await assertErrorsInCode('''
+    await assertNoErrorsInCode('''
 class A {
   late void Function<T>(T) foo;
 }
@@ -439,10 +443,7 @@
 bar(A a) {
   a.foo<int>;
 }
-''', [
-      error(
-          CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 58, 5),
-    ]);
+''');
 
     assertFunctionReference(findNode.functionReference('foo<int>;'),
         findElement.getter('foo'), 'void Function(int)');
@@ -480,6 +481,42 @@
         reference, findElement.method('foo'), 'void Function(int)');
   }
 
+  test_instanceMethod_call() async {
+    await assertNoErrorsInCode('''
+class C {
+  void foo<T>(T a) {}
+
+  void bar() {
+    foo.call<int>;
+  }
+}
+''');
+
+    var reference = findNode.functionReference('foo.call<int>;');
+    // TODO(srawlins): PropertyElementResolver does not return an element for
+    // `.call`. If we want `findElement.method('foo')` here, we must change the
+    // policy over there.
+    assertFunctionReference(reference, null, 'void Function(int)');
+  }
+
+  test_instanceMethod_explicitReceiver_call() async {
+    await assertNoErrorsInCode('''
+class C {
+  void foo<T>(T a) {}
+}
+
+void bar(C c) {
+  c.foo.call<int>;
+}
+''');
+
+    var reference = findNode.functionReference('foo.call<int>;');
+    // TODO(srawlins): PropertyElementResolver does not return an element for
+    // `.call`. If we want `findElement.method('foo')` here, we must change the
+    // policy over there.
+    assertFunctionReference(reference, null, 'void Function(int)');
+  }
+
   test_instanceMethod_explicitReceiver_field() async {
     await assertNoErrorsInCode('''
 class A {
@@ -515,6 +552,22 @@
         findElement.method('foo'), 'void Function(int)');
   }
 
+  test_instanceMethod_explicitReceiver_receiverIsNotIdentifier_call() async {
+    await assertNoErrorsInCode('''
+extension on List<Object?> {
+  void foo<T>(T a) {}
+}
+
+var a = [].foo.call<int>;
+''');
+
+    var reference = findNode.functionReference('foo.call<int>;');
+    // TODO(srawlins): PropertyElementResolver does not return an element for
+    // `.call`. If we want `findElement.method('foo')` here, we must change the
+    // policy over there.
+    assertFunctionReference(reference, null, 'void Function(int)');
+  }
+
   test_instanceMethod_explicitReceiver_super() async {
     await assertNoErrorsInCode('''
 class A {
@@ -785,6 +838,43 @@
         reference, findElement.parameter('foo'), 'void Function(int)');
   }
 
+  test_localVariable_call() async {
+    await assertNoErrorsInCode('''
+void foo<T>(T a) {}
+
+void bar() {
+  var fn = foo;
+  fn.call<int>;
+}
+''');
+
+    var reference = findNode.functionReference('fn.call<int>;');
+    // TODO(srawlins): PropertyElementResolver does not return an element for
+    // `.call`. If we want `findElement.method('foo')` here, we must change the
+    // policy over there.
+    assertFunctionReference(reference, null, 'void Function(int)');
+  }
+
+  test_localVariable_call_tooManyTypeArgs() async {
+    await assertErrorsInCode('''
+void foo<T>(T a) {}
+
+void bar() {
+  void Function(int) fn = foo;
+  fn.call<int>;
+}
+''', [
+      error(
+          CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION, 74, 5),
+    ]);
+
+    var reference = findNode.functionReference('fn.call<int>;');
+    // TODO(srawlins): PropertyElementResolver does not return an element for
+    // `.call`. If we want `findElement.method('fn')` here, we must change the
+    // policy over there.
+    assertFunctionReference(reference, null, 'void Function(int)');
+  }
+
   test_localVariable_typeVariable_boundToFunction() async {
     await assertErrorsInCode('''
 void bar<T extends Function>(T foo) {
@@ -1176,6 +1266,8 @@
   prefix.a.foo<int>;
 }
 ''', [
+      error(CompileTimeErrorCode.GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC,
+          38, 17),
       error(CompileTimeErrorCode.UNDEFINED_PREFIXED_NAME, 45, 1),
     ]);
 
diff --git a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
index 4fe187f..8b89110 100644
--- a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
@@ -1561,6 +1561,39 @@
     assertType(foo.propertyName, 'double Function(int)');
   }
 
+  /// It is important to use this expression as an initializer of a top-level
+  /// variable, because of the way top-level inference works, at the time of
+  /// writing this. We resolve initializers twice - first for dependencies,
+  /// then for resolution. This has its issues (for example we miss some
+  /// dependencies), but the important thing is that we rewrite `foo(0)` from
+  /// being a [MethodInvocation] to [FunctionExpressionInvocation]. So, during
+  /// the second pass we see [SimpleIdentifier] `foo` as a `function`. And
+  /// we should be aware that it is not a stand-alone identifier, but a
+  /// cascade section.
+  test_hasReceiver_instance_getter_cascade() async {
+    await resolveTestCode(r'''
+class C {
+  double Function(int) get foo => 0;
+}
+
+var v = C()..foo(0) = 0;
+''');
+
+    var invocation = findNode.functionExpressionInvocation('foo(0)');
+    assertFunctionExpressionInvocation(
+      invocation,
+      element: null,
+      typeArgumentTypes: [],
+      invokeType: 'double Function(int)',
+      type: 'double',
+    );
+    assertSimpleIdentifier(
+      invocation.function,
+      element: findElement.getter('foo'),
+      type: 'double Function(int)',
+    );
+  }
+
   test_hasReceiver_instance_getter_switchStatementExpression() async {
     await assertNoErrorsInCode(r'''
 class C {
diff --git a/pkg/analyzer/test/src/diagnostics/non_sized_type_argument_test.dart b/pkg/analyzer/test/src/diagnostics/non_sized_type_argument_test.dart
index c06084a..ca3c9b5 100644
--- a/pkg/analyzer/test/src/diagnostics/non_sized_type_argument_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_sized_type_argument_test.dart
@@ -24,7 +24,7 @@
   external Array<Void> a0;
 }
 ''', [
-      error(FfiCode.NON_SIZED_TYPE_ARGUMENT, 68, 11),
+      error(FfiCode.NON_SIZED_TYPE_ARGUMENT, 74, 4),
     ]);
   }
 
@@ -37,7 +37,7 @@
   external Array<Void> a0;
 }
 ''', [
-      error(FfiCode.NON_SIZED_TYPE_ARGUMENT, 67, 11),
+      error(FfiCode.NON_SIZED_TYPE_ARGUMENT, 73, 4),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index a4ad397..1c07a3e 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -796,13 +796,12 @@
       }
 
       var aliasedElement = e.aliasedElement;
-      if (aliasedElement is GenericFunctionTypeElement) {
-        final aliasedElement_ = aliasedElement as GenericFunctionTypeElement;
+      if (aliasedElement is GenericFunctionTypeElementImpl) {
         _writelnWithIndent('aliasedElement: GenericFunctionTypeElement');
         _withIndent(() {
-          _writeTypeParameterElements(aliasedElement_.typeParameters);
-          _writeParameterElements(aliasedElement_.parameters);
-          _writeType(aliasedElement_.returnType, name: 'returnType');
+          _writeTypeParameterElements(aliasedElement.typeParameters);
+          _writeParameterElements(aliasedElement.parameters);
+          _writeType(aliasedElement.returnType, name: 'returnType');
         });
       }
     });
diff --git a/pkg/analyzer/tool/diagnostics/diagnostics.md b/pkg/analyzer/tool/diagnostics/diagnostics.md
index da67bc4..9a10697 100644
--- a/pkg/analyzer/tool/diagnostics/diagnostics.md
+++ b/pkg/analyzer/tool/diagnostics/diagnostics.md
@@ -7100,7 +7100,7 @@
 
 ### invalid_use_of_covariant_in_extension
 
-_Can't have modifier '#lexeme' in an extension._
+_Can't have modifier '{0}' in an extension._
 
 #### Description
 
diff --git a/pkg/analyzer/tool/messages/generate.dart b/pkg/analyzer/tool/messages/generate.dart
index 2e1c1a7..3747771 100644
--- a/pkg/analyzer/tool/messages/generate.dart
+++ b/pkg/analyzer/tool/messages/generate.dart
@@ -14,6 +14,7 @@
 ///
 /// It is expected that 'pkg/front_end/tool/fasta generate-messages'
 /// has already been successfully run.
+import 'dart:convert';
 import 'dart:io';
 
 import 'package:_fe_analyzer_shared/src/scanner/scanner.dart';
@@ -60,6 +61,12 @@
 final String analyzerPkgPath =
     normalize(join(pkg_root.packageRoot, 'analyzer'));
 
+/// Pattern used by the front end to identify placeholders in error message
+/// strings.  TODO(paulberry): share this regexp (and the code for interpreting
+/// it) between the CFE and analyzer.
+final RegExp _placeholderPattern =
+    RegExp("#\([-a-zA-Z0-9_]+\)(?:%\([0-9]*\)\.\([0-9]+\))?");
+
 /// Return an entry containing 2 strings,
 /// the name of the class containing the error and the name of the error,
 /// or throw an exception if 'analyzerCode:' field is invalid.
@@ -188,10 +195,13 @@
       out.writeln('const $className _$errorCode =');
       out.writeln('$className(');
       out.writeln("'$errorCode',");
-      out.writeln('r"${entry['template']}"');
+      final placeholderToIndexMap = _computePlaceholderToIndexMap(entry);
+      out.writeln(
+          'r"${_convertTemplate(placeholderToIndexMap, entry['template'])}"');
       final tip = entry['tip'];
       if (tip is String) {
-        out.writeln(',correction: "$tip"');
+        out.writeln(
+            ',correction: "${_convertTemplate(placeholderToIndexMap, tip)}"');
       }
       final hasPublishedDocs = entry['hasPublishedDocs'];
       if (hasPublishedDocs is bool && hasPublishedDocs) {
@@ -334,4 +344,33 @@
       }
     }
   }
+
+  /// Given a messages.yaml entry, come up with a mapping from placeholder
+  /// patterns in its message and tip strings to their corresponding indices.
+  Map<String, int> _computePlaceholderToIndexMap(Map<Object?, Object?> entry) {
+    var mapping = <String, int>{};
+    for (var key in const ['template', 'tip']) {
+      var value = entry[key];
+      if (value is! String) continue;
+      for (Match match in _placeholderPattern.allMatches(value)) {
+        // CFE supports a bunch of formatting options that we don't; make sure
+        // none of those are used.
+        if (match.group(0) != '#${match.group(1)}') {
+          throw 'Template string ${json.encode(entry)} contains unsupported '
+              'placeholder pattern ${json.encode(match.group(0))}';
+        }
+
+        mapping[match.group(0)!] ??= mapping.length;
+      }
+    }
+    return mapping;
+  }
+
+  /// Convert a CFE template string (which uses placeholders like `#string`) to
+  /// an analyzer template string (which uses placeholders like `{0}`).
+  String _convertTemplate(
+      Map<String, int> placeholderToIndexMap, String entry) {
+    return entry.replaceAllMapped(_placeholderPattern,
+        (match) => '{${placeholderToIndexMap[match.group(0)!]}}');
+  }
 }
diff --git a/pkg/compiler/lib/src/deferred_load/algorithm_state.dart b/pkg/compiler/lib/src/deferred_load/algorithm_state.dart
index ad11986..4aca919 100644
--- a/pkg/compiler/lib/src/deferred_load/algorithm_state.dart
+++ b/pkg/compiler/lib/src/deferred_load/algorithm_state.dart
@@ -22,7 +22,7 @@
   final KClosedWorld closedWorld;
   final EntityDataRegistry registry;
   final Map<EntityData, ImportSet> entityToSet = {};
-  final Map<EntityData, EntityDataInfo> entityDataToInfo = {};
+  final Map<EntityData, Set<EntityData>> directDependencies = {};
   final ImportSetLattice importSets;
   final WorkQueue queue;
 
@@ -80,41 +80,35 @@
     }
   }
 
-  /// Returns the [EntityDataInfo] associated with a given [EntityData].
-  /// Note: In the event of a cache miss, i.e. the first time we ever see a new
-  /// [EntityData], we will add all reachable deferred roots to the queue for
-  /// processing.
-  EntityDataInfo getInfo(EntityData data) {
-    // Check for cached [EntityDataInfo], otherwise create a new one and
-    // collect dependencies.
-    var info = entityDataToInfo[data];
-    if (info == null) {
-      var infoBuilder =
-          EntityDataInfoBuilder(closedWorld, elementMap, compiler, registry);
-      var visitor = EntityDataInfoVisitor(infoBuilder);
-      data.accept(visitor);
-      info = infoBuilder.info;
-      entityDataToInfo[data] = info;
+  /// Processes an [EntityData], if we haven't seen it before we enqueue all
+  /// deferred roots and recursively populate caches.
+  void processEntity(EntityData entityData) {
+    if (directDependencies.containsKey(entityData)) return;
+    var infoBuilder =
+        EntityDataInfoBuilder(closedWorld, elementMap, compiler, registry);
+    var visitor = EntityDataInfoVisitor(infoBuilder);
+    entityData.accept(visitor);
+    var info = infoBuilder.info;
+    directDependencies[entityData] = info.directDependencies;
 
-      // This is the first time we have seen this [EntityData] before so process
-      // all deferred roots.
-      info.deferredRoots.forEach((entity, imports) {
-        for (ImportEntity deferredImport in imports) {
-          queue.addEntityData(entity, importSets.initialSetOf(deferredImport));
-        }
-      });
-    }
-    return info;
+    // This is the first time we have seen this [EntityData] before so process
+    // all deferred roots and direct dependencies.
+    info.deferredRoots.forEach((entity, imports) {
+      processEntity(entity);
+      for (ImportEntity deferredImport in imports) {
+        queue.addEntityData(entity, importSets.initialSetOf(deferredImport));
+      }
+    });
+    info.directDependencies.forEach(processEntity);
   }
 
   /// Updates the dependencies of a given [EntityData] from [oldSet] to
   /// [newSet].
   void updateDependencies(
       EntityData entityData, ImportSet oldSet, ImportSet newSet) {
-    var info = getInfo(entityData);
-
-    // Process all direct dependencies.
-    for (var entity in info.directDependencies) {
+    assert(directDependencies.containsKey(entityData));
+    var directDependenciesList = directDependencies[entityData];
+    for (var entity in directDependenciesList) {
       update(entity, oldSet, newSet);
     }
   }
diff --git a/pkg/compiler/lib/src/deferred_load/work_queue.dart b/pkg/compiler/lib/src/deferred_load/work_queue.dart
index 90bf329..9c9c554 100644
--- a/pkg/compiler/lib/src/deferred_load/work_queue.dart
+++ b/pkg/compiler/lib/src/deferred_load/work_queue.dart
@@ -64,6 +64,7 @@
     var item = nextItem();
     var entityData = item.entityData;
     pendingWorkItems.remove(entityData);
+    state.processEntity(entityData);
     ImportSet oldSet = state.entityToSet[entityData];
     ImportSet newSet = _importSets.union(oldSet, item.importsToAdd);
     state.update(entityData, oldSet, newSet);
diff --git a/pkg/compiler/lib/src/inferrer/abstract_value_domain.dart b/pkg/compiler/lib/src/inferrer/abstract_value_domain.dart
index d2b10ed..582d331 100644
--- a/pkg/compiler/lib/src/inferrer/abstract_value_domain.dart
+++ b/pkg/compiler/lib/src/inferrer/abstract_value_domain.dart
@@ -30,15 +30,15 @@
 
   /// A value of `Abstract.True` is used when the property is known _always_ to
   /// be true.
-  static const AbstractBool True = const AbstractBool._(true);
+  static const AbstractBool True = AbstractBool._(true);
 
   /// A value of `Abstract.False` is used when the property is known _never_ to
   /// be true.
-  static const AbstractBool False = const AbstractBool._(false);
+  static const AbstractBool False = AbstractBool._(false);
 
   /// A value of `Abstract.Maybe` is used when the property might or might not
   /// be true.
-  static const AbstractBool Maybe = const AbstractBool._(null);
+  static const AbstractBool Maybe = AbstractBool._(null);
 
   static AbstractBool trueOrMaybe(bool value) => value ? True : Maybe;
 
diff --git a/pkg/compiler/lib/src/inferrer/builder_kernel.dart b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
index 7429e8d..12f0069 100644
--- a/pkg/compiler/lib/src/inferrer/builder_kernel.dart
+++ b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
@@ -105,7 +105,7 @@
   final Map<JumpTarget, List<LocalState>> _continuesFor =
       <JumpTarget, List<LocalState>>{};
   TypeInformation _returnType;
-  final Set<Local> _capturedVariables = new Set<Local>();
+  final Set<Local> _capturedVariables = Set<Local>();
   final Map<Local, FieldEntity> _capturedAndBoxed;
 
   final StaticTypeProvider _staticTypeProvider;
@@ -131,15 +131,15 @@
         this._sideEffectsBuilder = _analyzedMember is FunctionEntity
             ? _inferrer.inferredDataBuilder
                 .getSideEffectsBuilder(_analyzedMember)
-            : new SideEffectsBuilder.free(_analyzedMember),
+            : SideEffectsBuilder.free(_analyzedMember),
         this._inGenerativeConstructor = _analyzedNode is ir.Constructor,
         this._capturedAndBoxed = capturedAndBoxed != null
-            ? new Map<Local, FieldEntity>.from(capturedAndBoxed)
+            ? Map<Local, FieldEntity>.from(capturedAndBoxed)
             : <Local, FieldEntity>{} {
     if (_state != null) return;
 
-    _state = new LocalState.initial(
-        inGenerativeConstructor: _inGenerativeConstructor);
+    _state =
+        LocalState.initial(inGenerativeConstructor: _inGenerativeConstructor);
   }
 
   JsToElementMap get _elementMap => _closedWorld.elementMap;
@@ -253,7 +253,7 @@
     }
   }
 
-  TypeInformation visit(ir.Node node, {bool conditionContext: false}) {
+  TypeInformation visit(ir.Node node, {bool conditionContext = false}) {
     var oldAccumulateIsChecks = _accumulateIsChecks;
     _accumulateIsChecks = conditionContext;
     var result = node?.accept(this);
@@ -339,7 +339,7 @@
   visitSuperInitializer(ir.SuperInitializer node) {
     ConstructorEntity constructor = _elementMap.getConstructor(node.target);
     ArgumentsTypes arguments = analyzeArguments(node.arguments);
-    Selector selector = new Selector(SelectorKind.CALL, constructor.memberName,
+    Selector selector = Selector(SelectorKind.CALL, constructor.memberName,
         _elementMap.getCallStructure(node.arguments));
     handleConstructorInvoke(
         node, node.arguments, selector, constructor, arguments);
@@ -355,7 +355,7 @@
   visitRedirectingInitializer(ir.RedirectingInitializer node) {
     ConstructorEntity constructor = _elementMap.getConstructor(node.target);
     ArgumentsTypes arguments = analyzeArguments(node.arguments);
-    Selector selector = new Selector(SelectorKind.CALL, constructor.memberName,
+    Selector selector = Selector(SelectorKind.CALL, constructor.memberName,
         _elementMap.getCallStructure(node.arguments));
     handleConstructorInvoke(
         node, node.arguments, selector, constructor, arguments);
@@ -452,13 +452,13 @@
 
   @override
   TypeInformation defaultExpression(ir.Expression node) {
-    throw new UnimplementedError(
+    throw UnimplementedError(
         'Unhandled expression: ${node} (${node.runtimeType})');
   }
 
   @override
   defaultStatement(ir.Statement node) {
-    throw new UnimplementedError(
+    throw UnimplementedError(
         'Unhandled statement: ${node} (${node.runtimeType})');
   }
 
@@ -503,7 +503,7 @@
     handleCondition(node.condition);
     LocalState afterConditionWhenTrue = _stateAfterWhenTrue;
     LocalState afterConditionWhenFalse = _stateAfterWhenFalse;
-    _state = new LocalState.childPath(afterConditionWhenFalse);
+    _state = LocalState.childPath(afterConditionWhenFalse);
     visit(node.message);
     LocalState stateAfterMessage = _state;
     stateAfterMessage.seenReturnOrThrow = true;
@@ -529,9 +529,9 @@
     // Do a deep-copy of the locals, because the code following the
     // break will change them.
     if (_localsMap.generateContinueForBreak(node)) {
-      _continuesFor[target].add(new LocalState.deepCopyOf(_state));
+      _continuesFor[target].add(LocalState.deepCopyOf(_state));
     } else {
-      _breaksFor[target].add(new LocalState.deepCopyOf(_state));
+      _breaksFor[target].add(LocalState.deepCopyOf(_state));
     }
     return null;
   }
@@ -579,7 +579,7 @@
         changed = false;
         for (ir.SwitchCase switchCase in node.cases) {
           LocalState stateBeforeCase = _state;
-          _state = new LocalState.childPath(stateBeforeCase);
+          _state = LocalState.childPath(stateBeforeCase);
           visit(switchCase);
           LocalState stateAfterCase = _state;
           changed =
@@ -599,7 +599,7 @@
         if (switchCase.isDefault) {
           hasDefaultCase = true;
         }
-        _state = new LocalState.childPath(stateBeforeCase);
+        _state = LocalState.childPath(stateBeforeCase);
         visit(switchCase);
         statesToMerge.add(_state);
       }
@@ -623,7 +623,7 @@
     _state.seenBreakOrContinue = true;
     // Do a deep-copy of the locals, because the code following the
     // break will change them.
-    _continuesFor[target].add(new LocalState.deepCopyOf(_state));
+    _continuesFor[target].add(LocalState.deepCopyOf(_state));
     return null;
   }
 
@@ -687,7 +687,7 @@
   @override
   TypeInformation visitMapLiteral(ir.MapLiteral node) {
     return createMapTypeInformation(
-        node, node.entries.map((e) => new Pair(visit(e.key), visit(e.value))),
+        node, node.entries.map((e) => Pair(visit(e.key), visit(e.value))),
         isConst: node.isConst);
   }
 
@@ -859,7 +859,7 @@
       named[argument.name] = visit(value);
     }
 
-    return new ArgumentsTypes(positional, named);
+    return ArgumentsTypes(positional, named);
   }
 
   AbstractValue _typeOfReceiver(ir.TreeNode node, ir.TreeNode receiver) {
@@ -1103,7 +1103,7 @@
       TypeInformation receiverType,
       TypeInformation rhsType,
       ir.VariableDeclaration variable) {
-    ArgumentsTypes arguments = new ArgumentsTypes([rhsType], null);
+    ArgumentsTypes arguments = ArgumentsTypes([rhsType], null);
     return _handleDynamic(CallType.access, node, selector, mask, receiverType,
         arguments, variable);
   }
@@ -1154,7 +1154,7 @@
 
       /// Synthesize a call to the [StreamIterator] constructor.
       iteratorType = handleStaticInvoke(
-          node, null, constructor, new ArgumentsTypes([expressionType], null));
+          node, null, constructor, ArgumentsTypes([expressionType], null));
     } else {
       TypeInformation expressionType = visit(node.iterable);
       Selector iteratorSelector = Selectors.iterator;
@@ -1163,18 +1163,18 @@
       moveNextMask = _memberData.typeOfIteratorMoveNext(node);
 
       iteratorType = handleDynamicInvoke(CallType.forIn, node, iteratorSelector,
-          iteratorMask, expressionType, new ArgumentsTypes.empty(), null);
+          iteratorMask, expressionType, ArgumentsTypes.empty(), null);
     }
 
     handleDynamicInvoke(CallType.forIn, node, Selectors.moveNext, moveNextMask,
-        iteratorType, new ArgumentsTypes.empty(), null);
+        iteratorType, ArgumentsTypes.empty(), null);
     TypeInformation currentType = handleDynamicInvoke(
         CallType.forIn,
         node,
         Selectors.current,
         currentMask,
         iteratorType,
-        new ArgumentsTypes.empty(),
+        ArgumentsTypes.empty(),
         null);
 
     Local variable = _localsMap.getLocalVariable(node.variable);
@@ -1226,7 +1226,7 @@
       // Setup (and clear in case of multiple iterations of the loop)
       // the lists of breaks and continues seen in the loop.
       _setupBreaksAndContinues(target);
-      _state = new LocalState.childPath(stateBefore);
+      _state = LocalState.childPath(stateBefore);
       logic();
       changed = stateBefore.mergeAll(_inferrer, _getLoopBackEdges(target));
     } while (changed);
@@ -1576,7 +1576,7 @@
       ir.Node node, ir.Member target) {
     MemberEntity member = _elementMap.getMember(target);
     return handleStaticInvoke(
-        node, new Selector.getter(member.memberName), member, null);
+        node, Selector.getter(member.memberName), member, null);
   }
 
   @override
@@ -1586,8 +1586,8 @@
       _state.markThisAsExposed();
     }
     MemberEntity member = _elementMap.getMember(node.target);
-    handleStaticInvoke(node, new Selector.setter(member.memberName), member,
-        new ArgumentsTypes([rhsType], null));
+    handleStaticInvoke(node, Selector.setter(member.memberName), member,
+        ArgumentsTypes([rhsType], null));
     return rhsType;
   }
 
@@ -1706,8 +1706,8 @@
     if (operand is ir.VariableGet) {
       Local local = _localsMap.getLocalVariable(operand.variable);
       DartType localType = _elementMap.getDartType(node.type);
-      LocalState stateAfterCheckWhenTrue = new LocalState.childPath(_state);
-      LocalState stateAfterCheckWhenFalse = new LocalState.childPath(_state);
+      LocalState stateAfterCheckWhenTrue = LocalState.childPath(_state);
+      LocalState stateAfterCheckWhenFalse = LocalState.childPath(_state);
 
       // Narrow variable to tested type on true branch.
       TypeInformation currentTypeInformation = stateAfterCheckWhenTrue
@@ -1724,8 +1724,8 @@
     if (receiver is ir.VariableGet) {
       Local local = _localsMap.getLocalVariable(receiver.variable);
       DartType localType = _localsMap.getLocalType(_elementMap, local);
-      LocalState stateAfterCheckWhenNull = new LocalState.childPath(_state);
-      LocalState stateAfterCheckWhenNotNull = new LocalState.childPath(_state);
+      LocalState stateAfterCheckWhenNull = LocalState.childPath(_state);
+      LocalState stateAfterCheckWhenNotNull = LocalState.childPath(_state);
 
       // Narrow tested variable to 'Null' on true branch.
       stateAfterCheckWhenNull.updateLocal(_inferrer, _capturedAndBoxed, local,
@@ -1753,10 +1753,10 @@
     handleCondition(node.condition);
     LocalState stateAfterConditionWhenTrue = _stateAfterWhenTrue;
     LocalState stateAfterConditionWhenFalse = _stateAfterWhenFalse;
-    _state = new LocalState.childPath(stateAfterConditionWhenTrue);
+    _state = LocalState.childPath(stateAfterConditionWhenTrue);
     visit(node.then);
     LocalState stateAfterThen = _state;
-    _state = new LocalState.childPath(stateAfterConditionWhenFalse);
+    _state = LocalState.childPath(stateAfterConditionWhenFalse);
     visit(node.otherwise);
     LocalState stateAfterElse = _state;
     _state =
@@ -1787,16 +1787,16 @@
   TypeInformation visitLogicalExpression(ir.LogicalExpression node) {
     if (node.operatorEnum == ir.LogicalExpressionOperator.AND) {
       LocalState stateBefore = _state;
-      _state = new LocalState.childPath(stateBefore);
+      _state = LocalState.childPath(stateBefore);
       TypeInformation leftInfo = handleCondition(node.left);
       LocalState stateAfterLeftWhenTrue = _stateAfterWhenTrue;
       LocalState stateAfterLeftWhenFalse = _stateAfterWhenFalse;
-      _state = new LocalState.childPath(stateAfterLeftWhenTrue);
+      _state = LocalState.childPath(stateAfterLeftWhenTrue);
       TypeInformation rightInfo = handleCondition(node.right);
       LocalState stateAfterRightWhenTrue = _stateAfterWhenTrue;
       LocalState stateAfterRightWhenFalse = _stateAfterWhenFalse;
       LocalState stateAfterWhenTrue = stateAfterRightWhenTrue;
-      LocalState stateAfterWhenFalse = new LocalState.childPath(stateBefore)
+      LocalState stateAfterWhenFalse = LocalState.childPath(stateBefore)
           .mergeDiamondFlow(
               _inferrer, stateAfterLeftWhenFalse, stateAfterRightWhenFalse);
       LocalState after = stateBefore.mergeDiamondFlow(
@@ -1812,15 +1812,15 @@
       return _types.boolType;
     } else if (node.operatorEnum == ir.LogicalExpressionOperator.OR) {
       LocalState stateBefore = _state;
-      _state = new LocalState.childPath(stateBefore);
+      _state = LocalState.childPath(stateBefore);
       TypeInformation leftInfo = handleCondition(node.left);
       LocalState stateAfterLeftWhenTrue = _stateAfterWhenTrue;
       LocalState stateAfterLeftWhenFalse = _stateAfterWhenFalse;
-      _state = new LocalState.childPath(stateAfterLeftWhenFalse);
+      _state = LocalState.childPath(stateAfterLeftWhenFalse);
       TypeInformation rightInfo = handleCondition(node.right);
       LocalState stateAfterRightWhenTrue = _stateAfterWhenTrue;
       LocalState stateAfterRightWhenFalse = _stateAfterWhenFalse;
-      LocalState stateAfterWhenTrue = new LocalState.childPath(stateBefore)
+      LocalState stateAfterWhenTrue = LocalState.childPath(stateBefore)
           .mergeDiamondFlow(
               _inferrer, stateAfterLeftWhenTrue, stateAfterRightWhenTrue);
       LocalState stateAfterWhenFalse = stateAfterRightWhenFalse;
@@ -1847,10 +1847,10 @@
     handleCondition(node.condition);
     LocalState stateAfterWhenTrue = _stateAfterWhenTrue;
     LocalState stateAfterWhenFalse = _stateAfterWhenFalse;
-    _state = new LocalState.childPath(stateAfterWhenTrue);
+    _state = LocalState.childPath(stateAfterWhenTrue);
     TypeInformation firstType = visit(node.then);
     LocalState stateAfterThen = _state;
-    _state = new LocalState.childPath(stateAfterWhenFalse);
+    _state = LocalState.childPath(stateAfterWhenFalse);
     TypeInformation secondType = visit(node.otherwise);
     LocalState stateAfterElse = _state;
     _state =
@@ -1903,8 +1903,8 @@
     // We don't put the closure in the work queue of the
     // inferrer, because it will share information with its enclosing
     // method, like for example the types of local variables.
-    LocalState closureState = new LocalState.closure(_state);
-    KernelTypeGraphBuilder visitor = new KernelTypeGraphBuilder(
+    LocalState closureState = LocalState.closure(_state);
+    KernelTypeGraphBuilder visitor = KernelTypeGraphBuilder(
         _options,
         _closedWorld,
         _inferrer,
@@ -1934,7 +1934,7 @@
   visitWhileStatement(ir.WhileStatement node) {
     return handleLoop(node, _localsMap.getJumpTargetForWhile(node), () {
       handleCondition(node.condition);
-      _state = new LocalState.childPath(_stateAfterWhenTrue);
+      _state = LocalState.childPath(_stateAfterWhenTrue);
       visit(node.body);
     });
   }
@@ -1959,7 +1959,7 @@
     }
     return handleLoop(node, _localsMap.getJumpTargetForFor(node), () {
       handleCondition(node.condition);
-      _state = new LocalState.childPath(_stateAfterWhenTrue);
+      _state = LocalState.childPath(_stateAfterWhenTrue);
       visit(node.body);
       for (ir.Expression update in node.updates) {
         visit(update);
@@ -1970,14 +1970,14 @@
   @override
   visitTryCatch(ir.TryCatch node) {
     LocalState stateBefore = _state;
-    _state = new LocalState.tryBlock(stateBefore, node);
+    _state = LocalState.tryBlock(stateBefore, node);
     _state.markInitializationAsIndefinite();
     visit(node.body);
     LocalState stateAfterBody = _state;
     _state = stateBefore.mergeFlow(_inferrer, stateAfterBody);
     for (ir.Catch catchBlock in node.catches) {
       LocalState stateBeforeCatch = _state;
-      _state = new LocalState.childPath(stateBeforeCatch);
+      _state = LocalState.childPath(stateBeforeCatch);
       visit(catchBlock);
       LocalState stateAfterCatch = _state;
       _state = stateBeforeCatch.mergeFlow(_inferrer, stateAfterCatch);
@@ -1988,7 +1988,7 @@
   @override
   visitTryFinally(ir.TryFinally node) {
     LocalState stateBefore = _state;
-    _state = new LocalState.tryBlock(stateBefore, node);
+    _state = LocalState.tryBlock(stateBefore, node);
     _state.markInitializationAsIndefinite();
     visit(node.body);
     LocalState stateAfterBody = _state;
@@ -2058,7 +2058,7 @@
     _state.markThisAsExposed();
 
     ir.Member target = getEffectiveSuperTarget(node.interfaceTarget);
-    Selector selector = new Selector.getter(_elementMap.getName(node.name));
+    Selector selector = Selector.getter(_elementMap.getName(node.name));
     if (target == null) {
       // TODO(johnniwinther): Remove this when the CFE checks for missing
       //  concrete super targets.
@@ -2094,8 +2094,8 @@
 
     TypeInformation rhsType = visit(node.value);
     ir.Member target = getEffectiveSuperTarget(node.interfaceTarget);
-    Selector selector = new Selector.setter(_elementMap.getName(node.name));
-    ArgumentsTypes arguments = new ArgumentsTypes([rhsType], null);
+    Selector selector = Selector.setter(_elementMap.getName(node.name));
+    ArgumentsTypes arguments = ArgumentsTypes([rhsType], null);
     if (target == null) {
       // TODO(johnniwinther): Remove this when the CFE checks for missing
       //  concrete super targets.
@@ -2176,7 +2176,7 @@
 
   @override
   TypeInformation visitConstantExpression(ir.ConstantExpression node) {
-    return new TypeInformationConstantVisitor(this, node)
+    return TypeInformationConstantVisitor(this, node)
         .visitConstant(node.constant);
   }
 }
@@ -2190,7 +2190,7 @@
 
   @override
   TypeInformation defaultConstant(ir.Constant node) {
-    throw new UnsupportedError("Unexpected constant: "
+    throw UnsupportedError("Unexpected constant: "
         "${node} (${node.runtimeType})");
   }
 
@@ -2227,24 +2227,23 @@
   @override
   TypeInformation visitMapConstant(ir.MapConstant node) {
     return builder.createMapTypeInformation(
-        new ConstantReference(expression, node),
+        ConstantReference(expression, node),
         node.entries
-            .map((e) => new Pair(visitConstant(e.key), visitConstant(e.value))),
+            .map((e) => Pair(visitConstant(e.key), visitConstant(e.value))),
         isConst: true);
   }
 
   @override
   TypeInformation visitListConstant(ir.ListConstant node) {
     return builder.createListTypeInformation(
-        new ConstantReference(expression, node),
+        ConstantReference(expression, node),
         node.entries.map((e) => visitConstant(e)),
         isConst: true);
   }
 
   @override
   TypeInformation visitSetConstant(ir.SetConstant node) {
-    return builder.createSetTypeInformation(
-        new ConstantReference(expression, node),
+    return builder.createSetTypeInformation(ConstantReference(expression, node),
         node.entries.map((e) => visitConstant(e)),
         isConst: true);
   }
@@ -2299,34 +2298,31 @@
   LocalsHandler _tryBlock;
 
   LocalState.initial({bool inGenerativeConstructor})
-      : this.internal(
-            new LocalsHandler(),
-            inGenerativeConstructor ? new FieldInitializationScope() : null,
-            null,
-            seenReturnOrThrow: false,
-            seenBreakOrContinue: false);
+      : this.internal(LocalsHandler(),
+            inGenerativeConstructor ? FieldInitializationScope() : null, null,
+            seenReturnOrThrow: false, seenBreakOrContinue: false);
 
   LocalState.childPath(LocalState other)
-      : this.internal(new LocalsHandler.from(other._locals),
-            new FieldInitializationScope.from(other._fields), other._tryBlock,
+      : this.internal(LocalsHandler.from(other._locals),
+            FieldInitializationScope.from(other._fields), other._tryBlock,
             seenReturnOrThrow: false, seenBreakOrContinue: false);
 
   LocalState.closure(LocalState other)
-      : this.internal(new LocalsHandler.from(other._locals),
-            new FieldInitializationScope.from(other._fields), null,
+      : this.internal(LocalsHandler.from(other._locals),
+            FieldInitializationScope.from(other._fields), null,
             seenReturnOrThrow: false, seenBreakOrContinue: false);
 
   factory LocalState.tryBlock(LocalState other, ir.TreeNode node) {
-    LocalsHandler locals = new LocalsHandler.tryBlock(other._locals, node);
+    LocalsHandler locals = LocalsHandler.tryBlock(other._locals, node);
     FieldInitializationScope fieldScope =
-        new FieldInitializationScope.from(other._fields);
+        FieldInitializationScope.from(other._fields);
     LocalsHandler tryBlock = locals;
-    return new LocalState.internal(locals, fieldScope, tryBlock,
+    return LocalState.internal(locals, fieldScope, tryBlock,
         seenReturnOrThrow: false, seenBreakOrContinue: false);
   }
 
   LocalState.deepCopyOf(LocalState other)
-      : _locals = new LocalsHandler.deepCopyOf(other._locals),
+      : _locals = LocalsHandler.deepCopyOf(other._locals),
         _tryBlock = other._tryBlock,
         _fields = other._fields;
 
@@ -2374,8 +2370,8 @@
       TypeInformation type,
       ir.Node node,
       DartType staticType,
-      {isCast: true,
-      excludeNull: false}) {
+      {isCast = true,
+      excludeNull = false}) {
     assert(type != null);
     type = inferrer.types.narrowType(type, staticType,
         isCast: isCast, excludeNull: excludeNull, excludeLateSentinel: true);
@@ -2396,7 +2392,7 @@
       return this;
     }
     LocalsHandler locals = _locals.mergeFlow(inferrer, other._locals);
-    return new LocalState.internal(locals, _fields, _tryBlock,
+    return LocalState.internal(locals, _fields, _tryBlock,
         seenReturnOrThrow: seenReturnOrThrow,
         seenBreakOrContinue: seenBreakOrContinue);
   }
@@ -2422,13 +2418,13 @@
 
     FieldInitializationScope fieldScope = _fields?.mergeDiamondFlow(
         inferrer, thenBranch._fields, elseBranch._fields);
-    return new LocalState.internal(locals, fieldScope, _tryBlock,
+    return LocalState.internal(locals, fieldScope, _tryBlock,
         seenReturnOrThrow: seenReturnOrThrow,
         seenBreakOrContinue: seenBreakOrContinue);
   }
 
   LocalState mergeAfterBreaks(InferrerEngine inferrer, List<LocalState> states,
-      {bool keepOwnLocals: true}) {
+      {bool keepOwnLocals = true}) {
     bool allBranchesAbort = true;
     for (LocalState state in states) {
       allBranchesAbort = allBranchesAbort && state.seenReturnOrThrow;
@@ -2443,7 +2439,7 @@
             .map((LocalState state) => state._locals),
         keepOwnLocals: keepOwnLocals);
     seenReturnOrThrow = allBranchesAbort && !keepOwnLocals;
-    return new LocalState.internal(locals, _fields, _tryBlock,
+    return LocalState.internal(locals, _fields, _tryBlock,
         seenReturnOrThrow: seenReturnOrThrow,
         seenBreakOrContinue: seenBreakOrContinue);
   }
@@ -2466,7 +2462,7 @@
   }
 
   String toStructuredText(String indent) {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     _toStructuredText(sb, indent);
     return sb.toString();
   }
@@ -2480,7 +2476,7 @@
 
   @override
   String toString() {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('LocalState(');
     sb.write('locals=$_locals');
     if (_fields != null) {
diff --git a/pkg/compiler/lib/src/inferrer/inferrer_engine.dart b/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
index defc8a7..d0f7742 100644
--- a/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
+++ b/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
@@ -47,16 +47,15 @@
 class InferrerEngine {
   /// A set of selector names that [List] implements, that we know return their
   /// element type.
-  final Set<Selector> returnsListElementTypeSet =
-      new Set<Selector>.from(<Selector>[
-    new Selector.getter(const PublicName('first')),
-    new Selector.getter(const PublicName('last')),
-    new Selector.getter(const PublicName('single')),
-    new Selector.call(const PublicName('singleWhere'), CallStructure.ONE_ARG),
-    new Selector.call(const PublicName('elementAt'), CallStructure.ONE_ARG),
-    new Selector.index(),
-    new Selector.call(const PublicName('removeAt'), CallStructure.ONE_ARG),
-    new Selector.call(const PublicName('removeLast'), CallStructure.NO_ARGS)
+  final Set<Selector> returnsListElementTypeSet = Set<Selector>.from(<Selector>[
+    Selector.getter(const PublicName('first')),
+    Selector.getter(const PublicName('last')),
+    Selector.getter(const PublicName('single')),
+    Selector.call(const PublicName('singleWhere'), CallStructure.ONE_ARG),
+    Selector.call(const PublicName('elementAt'), CallStructure.ONE_ARG),
+    Selector.index(),
+    Selector.call(const PublicName('removeAt'), CallStructure.ONE_ARG),
+    Selector.call(const PublicName('removeLast'), CallStructure.NO_ARGS)
   ]);
 
   /// The [JClosedWorld] on which inference reasoning is based.
@@ -91,12 +90,12 @@
   final CompilerOutput _compilerOutput;
 
   final Set<ConstructorEntity> _generativeConstructorsExposingThis =
-      new Set<ConstructorEntity>();
+      Set<ConstructorEntity>();
 
   /// Data computed internally within elements, like the type-mask of a send a
   /// list allocation, or a for-in loop.
   final Map<MemberEntity, GlobalTypeInferenceElementData> _memberData =
-      new Map<MemberEntity, GlobalTypeInferenceElementData>();
+      Map<MemberEntity, GlobalTypeInferenceElementData>();
 
   ElementEnvironment get _elementEnvironment => closedWorld.elementEnvironment;
 
@@ -117,8 +116,8 @@
       this.mainElement,
       this.globalLocalsMap,
       this.inferredDataBuilder)
-      : this.types = new TypeSystem(closedWorld,
-            new KernelTypeSystemStrategy(closedWorld, globalLocalsMap));
+      : this.types = TypeSystem(closedWorld,
+            KernelTypeSystemStrategy(closedWorld, globalLocalsMap));
 
   /// Applies [f] to all elements in the universe that match [selector] and
   /// [mask]. If [f] returns false, aborts the iteration.
@@ -132,7 +131,7 @@
 
   // TODO(johnniwinther): Make this private again.
   GlobalTypeInferenceElementData dataOfMember(MemberEntity element) =>
-      _memberData[element] ??= new KernelGlobalTypeInferenceElementData();
+      _memberData[element] ??= KernelGlobalTypeInferenceElementData();
 
   /// Update [sideEffects] with the side effects of [callee] being
   /// called with [selector].
@@ -254,7 +253,7 @@
     if (info.analyzed) return;
     info.analyzed = true;
 
-    ListTracerVisitor tracer = new ListTracerVisitor(info, this);
+    ListTracerVisitor tracer = ListTracerVisitor(info, this);
     bool succeeded = tracer.run();
     if (!succeeded) return;
 
@@ -274,7 +273,7 @@
     if (info.analyzed) return;
     info.analyzed = true;
 
-    SetTracerVisitor tracer = new SetTracerVisitor(info, this);
+    SetTracerVisitor tracer = SetTracerVisitor(info, this);
     bool succeeded = tracer.run();
     if (!succeeded) return;
 
@@ -290,7 +289,7 @@
   void analyzeMapAndEnqueue(MapTypeInformation info) {
     if (info.analyzed) return;
     info.analyzed = true;
-    MapTracerVisitor tracer = new MapTracerVisitor(info, this);
+    MapTracerVisitor tracer = MapTracerVisitor(info, this);
 
     bool succeeded = tracer.run();
     if (!succeeded) return;
@@ -319,7 +318,7 @@
   void _runOverAllElements() {
     metrics.analyze.measure(_analyzeAllElements);
     TypeGraphDump dump =
-        debug.PRINT_GRAPH ? new TypeGraphDump(_compilerOutput, this) : null;
+        debug.PRINT_GRAPH ? TypeGraphDump(_compilerOutput, this) : null;
 
     dump?.beforeAnalysis();
     _buildWorkQueue();
@@ -341,7 +340,7 @@
       analyzeMapAndEnqueue(info);
     });
 
-    Set<FunctionEntity> bailedOutOn = new Set<FunctionEntity>();
+    Set<FunctionEntity> bailedOutOn = Set<FunctionEntity>();
 
     // Trace closures to potentially infer argument types.
     types.allocatedClosures.forEach((dynamic info) {
@@ -384,7 +383,7 @@
 
       if (info is ClosureTypeInformation) {
         Iterable<FunctionEntity> elements = [info.closure];
-        trace(elements, new ClosureTracerVisitor(elements, info, this));
+        trace(elements, ClosureTracerVisitor(elements, info, this));
       } else if (info is CallSiteTypeInformation) {
         if (info is StaticCallSiteTypeInformation &&
             info.selector != null &&
@@ -398,18 +397,18 @@
           FunctionEntity callMethod = _lookupCallMethod(cls);
           assert(callMethod != null, failedAt(cls));
           Iterable<FunctionEntity> elements = [callMethod];
-          trace(elements, new ClosureTracerVisitor(elements, info, this));
+          trace(elements, ClosureTracerVisitor(elements, info, this));
         } else {
           // We only are interested in functions here, as other targets
           // of this closure call are not a root to trace but an intermediate
           // for some other function.
-          Iterable<FunctionEntity> elements = new List<FunctionEntity>.from(
+          Iterable<FunctionEntity> elements = List<FunctionEntity>.from(
               info.callees.where((e) => e.isFunction));
-          trace(elements, new ClosureTracerVisitor(elements, info, this));
+          trace(elements, ClosureTracerVisitor(elements, info, this));
         }
       } else if (info is MemberTypeInformation) {
         trace(<FunctionEntity>[info.member],
-            new StaticTearOffClosureTracerVisitor(info.member, info, this));
+            StaticTearOffClosureTracerVisitor(info.member, info, this));
       } else if (info is ParameterTypeInformation) {
         failedAt(
             NO_LOCATION_SPANNABLE, 'Unexpected closure allocation info $info');
@@ -421,7 +420,7 @@
     // Reset all nodes that use lists/maps that have been inferred, as well
     // as nodes that use elements fetched from these lists/maps. The
     // workset for a new run of the analysis will be these nodes.
-    Set<TypeInformation> seenTypes = new Set<TypeInformation>();
+    Set<TypeInformation> seenTypes = Set<TypeInformation>();
     while (!_workQueue.isEmpty) {
       TypeInformation info = _workQueue.remove();
       if (seenTypes.contains(info)) continue;
@@ -595,7 +594,7 @@
                 // of the type graph and do not drop any flow edges.
                 AbstractValue refinedType =
                     abstractValueDomain.computeAbstractValueForConstant(value);
-                type = new NarrowTypeInformation(
+                type = NarrowTypeInformation(
                     abstractValueDomain, type, refinedType);
                 types.allocatedTypes.add(type);
               }
@@ -630,7 +629,7 @@
   /// Visits [body] to compute the [TypeInformation] node for [member].
   TypeInformation _computeMemberTypeInformation(
       MemberEntity member, ir.Node body) {
-    KernelTypeGraphBuilder visitor = new KernelTypeGraphBuilder(
+    KernelTypeGraphBuilder visitor = KernelTypeGraphBuilder(
         _options,
         closedWorld,
         this,
@@ -753,7 +752,7 @@
   /// added to the work queue.
   void updateParameterInputs(TypeInformation caller, MemberEntity callee,
       ArgumentsTypes arguments, Selector selector,
-      {bool remove, bool addToQueue: true}) {
+      {bool remove, bool addToQueue = true}) {
     if (callee.name == Identifiers.noSuchMethod_) return;
     if (callee.isField) {
       if (selector.isSetter) {
@@ -855,7 +854,7 @@
   /// should be present and a default type for each parameter should exist.
   TypeInformation getDefaultTypeOfParameter(Local parameter) {
     return _defaultTypeOfParameter.putIfAbsent(parameter, () {
-      return new PlaceholderTypeInformation(
+      return PlaceholderTypeInformation(
           abstractValueDomain, types.currentMember);
     });
   }
@@ -927,7 +926,7 @@
       ArgumentsTypes arguments,
       SideEffectsBuilder sideEffectsBuilder,
       bool inLoop) {
-    CallSiteTypeInformation info = new StaticCallSiteTypeInformation(
+    CallSiteTypeInformation info = StaticCallSiteTypeInformation(
         abstractValueDomain,
         types.currentMember,
         node,
@@ -988,7 +987,7 @@
       _updateSideEffects(sideEffectsBuilder, selector, callee);
     });
 
-    CallSiteTypeInformation info = new DynamicCallSiteTypeInformation(
+    CallSiteTypeInformation info = DynamicCallSiteTypeInformation(
         abstractValueDomain,
         types.currentMember,
         callType,
@@ -1008,8 +1007,8 @@
   /// Registers a call to await with an expression of type [argumentType] as
   /// argument.
   TypeInformation registerAwait(ir.Node node, TypeInformation argument) {
-    AwaitTypeInformation info = new AwaitTypeInformation(
-        abstractValueDomain, types.currentMember, node);
+    AwaitTypeInformation info =
+        AwaitTypeInformation(abstractValueDomain, types.currentMember, node);
     info.addInput(argument);
     types.allocatedTypes.add(info);
     return info;
@@ -1018,8 +1017,8 @@
   /// Registers a call to yield with an expression of type [argumentType] as
   /// argument.
   TypeInformation registerYield(ir.Node node, TypeInformation argument) {
-    YieldTypeInformation info = new YieldTypeInformation(
-        abstractValueDomain, types.currentMember, node);
+    YieldTypeInformation info =
+        YieldTypeInformation(abstractValueDomain, types.currentMember, node);
     info.addInput(argument);
     types.allocatedTypes.add(info);
     return info;
@@ -1040,7 +1039,7 @@
       SideEffectsBuilder sideEffectsBuilder,
       {bool inLoop}) {
     sideEffectsBuilder.setAllSideEffectsAndDependsOnSomething();
-    CallSiteTypeInformation info = new ClosureCallSiteTypeInformation(
+    CallSiteTypeInformation info = ClosureCallSiteTypeInformation(
         abstractValueDomain,
         types.currentMember,
         node,
@@ -1149,21 +1148,21 @@
     if (info != null) return info;
 
     TypeInformation receiverType =
-        new IndirectParameterTypeInformation(abstractValueDomain, 'receiver');
+        IndirectParameterTypeInformation(abstractValueDomain, 'receiver');
     List<TypeInformation> positional = [];
     for (int i = 0; i < structure.positionalArgumentCount; i++) {
       positional
-          .add(new IndirectParameterTypeInformation(abstractValueDomain, '$i'));
+          .add(IndirectParameterTypeInformation(abstractValueDomain, '$i'));
     }
     Map<String, TypeInformation> named = {};
     if (structure.namedArgumentCount > 0) {
       for (var name in structure.namedArguments) {
         named[name] =
-            new IndirectParameterTypeInformation(abstractValueDomain, name);
+            IndirectParameterTypeInformation(abstractValueDomain, name);
       }
     }
 
-    info = _sharedCalls[selector] = new DynamicCallSiteTypeInformation(
+    info = _sharedCalls[selector] = DynamicCallSiteTypeInformation(
         abstractValueDomain,
         null,
         CallType.indirectAccess,
@@ -1295,18 +1294,13 @@
     MemberTypeInformation memberTypeInformation =
         types.getInferredTypeOfMember(member);
     if (isClosure) {
-      return new ParameterTypeInformation.localFunction(
+      return ParameterTypeInformation.localFunction(
           abstractValueDomain, memberTypeInformation, parameter, type, member);
     } else if (member.isInstanceMember) {
-      return new ParameterTypeInformation.instanceMember(
-          abstractValueDomain,
-          memberTypeInformation,
-          parameter,
-          type,
-          member,
-          new ParameterInputs());
+      return ParameterTypeInformation.instanceMember(abstractValueDomain,
+          memberTypeInformation, parameter, type, member, ParameterInputs());
     } else {
-      return new ParameterTypeInformation.static(
+      return ParameterTypeInformation.static(
           abstractValueDomain, memberTypeInformation, parameter, type, member);
     }
   }
@@ -1317,26 +1311,26 @@
     if (member.isField) {
       FieldEntity field = member;
       DartType type = _elementEnvironment.getFieldType(field);
-      return new FieldTypeInformation(abstractValueDomain, field, type);
+      return FieldTypeInformation(abstractValueDomain, field, type);
     } else if (member.isGetter) {
       FunctionEntity getter = member;
       DartType type = _elementEnvironment.getFunctionType(getter);
-      return new GetterTypeInformation(abstractValueDomain, getter, type);
+      return GetterTypeInformation(abstractValueDomain, getter, type);
     } else if (member.isSetter) {
       FunctionEntity setter = member;
-      return new SetterTypeInformation(abstractValueDomain, setter);
+      return SetterTypeInformation(abstractValueDomain, setter);
     } else if (member.isFunction) {
       FunctionEntity method = member;
       DartType type = _elementEnvironment.getFunctionType(method);
-      return new MethodTypeInformation(abstractValueDomain, method, type);
+      return MethodTypeInformation(abstractValueDomain, method, type);
     } else {
       ConstructorEntity constructor = member;
       if (constructor.isFactoryConstructor) {
         DartType type = _elementEnvironment.getFunctionType(constructor);
-        return new FactoryConstructorTypeInformation(
+        return FactoryConstructorTypeInformation(
             abstractValueDomain, constructor, type);
       } else {
-        return new GenerativeConstructorTypeInformation(
+        return GenerativeConstructorTypeInformation(
             abstractValueDomain, constructor);
       }
     }
@@ -1383,7 +1377,7 @@
               () => abstractValueDomain.readAbstractValueFromDataSource(source),
               emptyAsNull: true);
       source.end(tag);
-      return new KernelGlobalTypeInferenceElementData.internal(
+      return KernelGlobalTypeInferenceElementData.internal(
           sendMap, iteratorMap, currentMap, moveNextMap);
     });
   }
diff --git a/pkg/compiler/lib/src/inferrer/list_tracer.dart b/pkg/compiler/lib/src/inferrer/list_tracer.dart
index 17bb7ed..4918a33 100644
--- a/pkg/compiler/lib/src/inferrer/list_tracer.dart
+++ b/pkg/compiler/lib/src/inferrer/list_tracer.dart
@@ -15,7 +15,7 @@
 /// A set of selector names that [List] implements, that we know do not
 /// change the element type of the list, or let the list escape to code
 /// that might change the element type.
-Set<String> okListSelectorsSet = new Set<String>.from(const <String>[
+Set<String> okListSelectorsSet = Set<String>.from(const <String>[
   // From Object.
   '==',
   'hashCode',
@@ -75,7 +75,7 @@
   'checkGrowable',
 ]);
 
-Set<String> doNotChangeLengthSelectorsSet = new Set<String>.from(const <String>[
+Set<String> doNotChangeLengthSelectorsSet = Set<String>.from(const <String>[
   // From Object.
   '==',
   'hashCode',
@@ -131,7 +131,7 @@
 
 class ListTracerVisitor extends TracerVisitor {
   // The [Set] of found assignments to the list.
-  Set<TypeInformation> inputs = new Setlet<TypeInformation>();
+  Set<TypeInformation> inputs = Setlet<TypeInformation>();
   bool callsGrowableMethod = false;
 
   ListTracerVisitor(tracedType, inferrer) : super(tracedType, inferrer);
diff --git a/pkg/compiler/lib/src/inferrer/locals_handler.dart b/pkg/compiler/lib/src/inferrer/locals_handler.dart
index 49ee715..ed565ca 100644
--- a/pkg/compiler/lib/src/inferrer/locals_handler.dart
+++ b/pkg/compiler/lib/src/inferrer/locals_handler.dart
@@ -51,13 +51,13 @@
   VariableScope.deepCopyOf(VariableScope other)
       : variables = other.variables == null
             ? null
-            : new Map<Local, TypeInformation>.from(other.variables),
+            : Map<Local, TypeInformation>.from(other.variables),
         tryBlock = other.tryBlock,
         copyOf = other.copyOf ?? other,
         _level = other._level,
         parent = other.parent == null
             ? null
-            : new VariableScope.deepCopyOf(other.parent);
+            : VariableScope.deepCopyOf(other.parent);
 
   /// `true` if this scope is for a try block.
   bool get isTry => tryBlock != null;
@@ -94,7 +94,7 @@
   void operator []=(Local variable, TypeInformation mask) {
     assert(mask != null);
     if (variables == null) {
-      variables = new Map<Local, TypeInformation>();
+      variables = Map<Local, TypeInformation>();
     }
     variables[variable] = mask;
   }
@@ -103,7 +103,7 @@
   /// [scope]. [f] is called at most once for each variable.
   void forEachLocalUntilScope(
       VariableScope scope, void f(Local variable, TypeInformation type)) {
-    _forEachLocalUntilScope(scope, f, new Setlet<Local>(), this);
+    _forEachLocalUntilScope(scope, f, Setlet<Local>(), this);
   }
 
   void _forEachLocalUntilScope(
@@ -142,7 +142,7 @@
   }
 
   String toStructuredText(String indent) {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     _toStructuredText(sb, indent);
     return sb.toString();
   }
@@ -196,13 +196,13 @@
 
   factory FieldInitializationScope.from(FieldInitializationScope other) {
     if (other == null) return null;
-    return new FieldInitializationScope.internalFrom(other);
+    return FieldInitializationScope.internalFrom(other);
   }
 
   void updateField(FieldEntity field, TypeInformation type) {
     if (isThisExposed) return;
     if (isIndefinite) return;
-    fields ??= new Map<FieldEntity, TypeInformation>();
+    fields ??= Map<FieldEntity, TypeInformation>();
     fields[field] = type;
   }
 
@@ -259,7 +259,7 @@
   int get length => positional.length + named.length;
 
   @override
-  Iterator<TypeInformation> get iterator => new ArgumentsTypesIterator(this);
+  Iterator<TypeInformation> get iterator => ArgumentsTypesIterator(this);
 
   @override
   String toString() => "{ positional = $positional, named = $named }";
@@ -279,7 +279,7 @@
   }
 
   @override
-  int get hashCode => throw new UnsupportedError('ArgumentsTypes.hashCode');
+  int get hashCode => throw UnsupportedError('ArgumentsTypes.hashCode');
 
   bool hasNoArguments() => positional.isEmpty && named.isEmpty;
 
@@ -329,16 +329,16 @@
 class LocalsHandler {
   final VariableScope _locals;
 
-  LocalsHandler() : _locals = new VariableScope();
+  LocalsHandler() : _locals = VariableScope();
 
   LocalsHandler.from(LocalsHandler other)
-      : _locals = new VariableScope(parent: other._locals);
+      : _locals = VariableScope(parent: other._locals);
 
   LocalsHandler.tryBlock(LocalsHandler other, ir.TreeNode block)
-      : _locals = new VariableScope.tryBlock(block, parent: other._locals);
+      : _locals = VariableScope.tryBlock(block, parent: other._locals);
 
   LocalsHandler.deepCopyOf(LocalsHandler other)
-      : _locals = new VariableScope.deepCopyOf(other._locals);
+      : _locals = VariableScope.deepCopyOf(other._locals);
 
   TypeInformation use(InferrerEngine inferrer, Local local) {
     return _locals[local];
@@ -376,7 +376,7 @@
   /// replaced by the variables types in [other]. Otherwise the variable types
   /// from both are merged with a phi type.
   LocalsHandler mergeFlow(InferrerEngine inferrer, LocalsHandler other,
-      {bool inPlace: false}) {
+      {bool inPlace = false}) {
     VariableScope common = _locals.commonParent(other._locals);
     assert(
         common != null,
@@ -475,15 +475,15 @@
   /// labeled statement that do not break out.
   LocalsHandler mergeAfterBreaks(
       InferrerEngine inferrer, Iterable<LocalsHandler> handlers,
-      {bool keepOwnLocals: true}) {
+      {bool keepOwnLocals = true}) {
     ir.Node tryBlock = _locals.tryBlock;
     // Use a separate locals handler to perform the merge in, so that Phi
     // creation does not invalidate previous type knowledge while we might
     // still look it up.
     VariableScope merged = tryBlock != null
-        ? new VariableScope.tryBlock(tryBlock, parent: _locals)
-        : new VariableScope(parent: _locals);
-    Set<Local> seenLocals = new Setlet<Local>();
+        ? VariableScope.tryBlock(tryBlock, parent: _locals)
+        : VariableScope(parent: _locals);
+    Set<Local> seenLocals = Setlet<Local>();
     // Merge all other handlers.
     for (LocalsHandler handler in handlers) {
       VariableScope common = _locals.commonParent(handler._locals);
@@ -587,7 +587,7 @@
   }
 
   String toStructuredText(String indent) {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     _toStructuredText(sb, indent);
     return sb.toString();
   }
@@ -601,7 +601,7 @@
 
   @override
   String toString() {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('LocalsHandler(');
     sb.write('locals=$_locals');
     sb.write(')');
diff --git a/pkg/compiler/lib/src/inferrer/map_tracer.dart b/pkg/compiler/lib/src/inferrer/map_tracer.dart
index 3f29c0c..70f36d1 100644
--- a/pkg/compiler/lib/src/inferrer/map_tracer.dart
+++ b/pkg/compiler/lib/src/inferrer/map_tracer.dart
@@ -10,7 +10,7 @@
 import 'node_tracer.dart';
 import 'type_graph_nodes.dart';
 
-Set<String> okMapSelectorsSet = new Set.from(const <String>[
+Set<String> okMapSelectorsSet = Set.from(const <String>[
   // From Object.
   "==",
   "hashCode",
diff --git a/pkg/compiler/lib/src/inferrer/node_tracer.dart b/pkg/compiler/lib/src/inferrer/node_tracer.dart
index 4d4a4bd..8500f56 100644
--- a/pkg/compiler/lib/src/inferrer/node_tracer.dart
+++ b/pkg/compiler/lib/src/inferrer/node_tracer.dart
@@ -14,7 +14,7 @@
 
 // A set of selectors we know do not escape the elements inside the
 // list.
-Set<String> doesNotEscapeListSet = new Set<String>.from(const <String>[
+Set<String> doesNotEscapeListSet = Set<String>.from(const <String>[
   // From Object.
   '==',
   'hashCode',
@@ -51,7 +51,7 @@
   'checkGrowable',
 ]);
 
-Set<String> doesNotEscapeSetSet = new Set<String>.from(const <String>[
+Set<String> doesNotEscapeSetSet = Set<String>.from(const <String>[
   // From Object.
   '==',
   'hashCode',
@@ -76,7 +76,7 @@
   'retainAll',
 ]);
 
-Set<String> doesNotEscapeMapSet = new Set<String>.from(const <String>[
+Set<String> doesNotEscapeMapSet = Set<String>.from(const <String>[
   // From Object.
   '==',
   'hashCode',
@@ -101,8 +101,8 @@
   final InferrerEngine inferrer;
 
   static const int MAX_ANALYSIS_COUNT =
-      const int.fromEnvironment('dart2js.tracing.limit', defaultValue: 32);
-  final Setlet<MemberEntity> analyzedElements = new Setlet<MemberEntity>();
+      int.fromEnvironment('dart2js.tracing.limit', defaultValue: 32);
+  final Setlet<MemberEntity> analyzedElements = Setlet<MemberEntity>();
 
   TracerVisitor(this.tracedType, this.inferrer);
 
@@ -125,7 +125,7 @@
   /// maps and we must check how it escapes from these maps.
   final List<MapTypeInformation> mapsToAnalyze = <MapTypeInformation>[];
 
-  final Setlet<TypeInformation> flowsInto = new Setlet<TypeInformation>();
+  final Setlet<TypeInformation> flowsInto = Setlet<TypeInformation>();
 
   // The current [TypeInformation] in the analysis.
   TypeInformation currentUser;
diff --git a/pkg/compiler/lib/src/inferrer/set_tracer.dart b/pkg/compiler/lib/src/inferrer/set_tracer.dart
index 8a98719..df495bf 100644
--- a/pkg/compiler/lib/src/inferrer/set_tracer.dart
+++ b/pkg/compiler/lib/src/inferrer/set_tracer.dart
@@ -13,7 +13,7 @@
 /// A set of selector names that [Set] implements and which we know do not
 /// change the element type of the set or let the set escape to code that might
 /// change the element type.
-Set<String> okSetSelectorSet = new Set<String>.from(const <String>[
+Set<String> okSetSelectorSet = Set<String>.from(const <String>[
   // From Object.
   '==',
   'hashCode',
diff --git a/pkg/compiler/lib/src/inferrer/trivial.dart b/pkg/compiler/lib/src/inferrer/trivial.dart
index 3f6fe3a..6ba231b 100644
--- a/pkg/compiler/lib/src/inferrer/trivial.dart
+++ b/pkg/compiler/lib/src/inferrer/trivial.dart
@@ -101,14 +101,13 @@
 
   @override
   AbstractValue getDictionaryValueForKey(AbstractValue value, String key) {
-    throw new UnsupportedError(
+    throw UnsupportedError(
         "TrivialAbstractValueDomain.getDictionaryValueForKey");
   }
 
   @override
   bool containsDictionaryKey(AbstractValue value, String key) {
-    throw new UnsupportedError(
-        "TrivialAbstractValueDomain.containsDictionaryKey");
+    throw UnsupportedError("TrivialAbstractValueDomain.containsDictionaryKey");
   }
 
   @override
@@ -126,12 +125,12 @@
 
   @override
   AbstractValue getMapValueType(AbstractValue value) {
-    throw new UnsupportedError("TrivialAbstractValueDomain.getMapValueType");
+    throw UnsupportedError("TrivialAbstractValueDomain.getMapValueType");
   }
 
   @override
   AbstractValue getMapKeyType(AbstractValue value) {
-    throw new UnsupportedError("TrivialAbstractValueDomain.getMapKeyType");
+    throw UnsupportedError("TrivialAbstractValueDomain.getMapKeyType");
   }
 
   @override
@@ -148,7 +147,7 @@
 
   @override
   AbstractValue getSetElementType(AbstractValue value) {
-    throw new UnsupportedError("TrivialAbstractValueDomain.getSetElementType");
+    throw UnsupportedError("TrivialAbstractValueDomain.getSetElementType");
   }
 
   @override
@@ -167,7 +166,7 @@
 
   @override
   AbstractValue getContainerElementType(AbstractValue value) {
-    throw new UnsupportedError(
+    throw UnsupportedError(
         "TrivialAbstractValueDomain.getContainerElementType");
   }
 
@@ -363,8 +362,7 @@
   AbstractValueWithPrecision createFromStaticType(DartType type,
       {ClassRelation classRelation = ClassRelation.subtype, bool nullable}) {
     assert(nullable != null);
-    return const AbstractValueWithPrecision(
-        const TrivialAbstractValue(), false);
+    return const AbstractValueWithPrecision(TrivialAbstractValue(), false);
   }
 
   @override
diff --git a/pkg/compiler/lib/src/inferrer/type_graph_dump.dart b/pkg/compiler/lib/src/inferrer/type_graph_dump.dart
index ac9c901..ff82843 100644
--- a/pkg/compiler/lib/src/inferrer/type_graph_dump.dart
+++ b/pkg/compiler/lib/src/inferrer/type_graph_dump.dart
@@ -36,7 +36,7 @@
       <TypeInformation, Set<TypeInformation>>{};
   final Map<TypeInformation, Set<TypeInformation>> assignmentsBeforeTracing =
       <TypeInformation, Set<TypeInformation>>{};
-  final Set<String> usedFilenames = new Set<String>();
+  final Set<String> usedFilenames = Set<String>();
 
   TypeGraphDump(this.compilerOutput, this.inferrer);
 
@@ -80,7 +80,7 @@
         String name = filenameFromElement(element);
         output = compilerOutput.createOutputSink(
             '$outputDir/$name', 'dot', OutputType.debug);
-        _GraphGenerator visitor = new _GraphGenerator(
+        _GraphGenerator visitor = _GraphGenerator(
             this, element, output, inferrer.abstractValueDomain.getCompactText);
         for (TypeInformation node in nodes[element]) {
           visitor.visit(node);
@@ -135,7 +135,7 @@
 /// Builds the Graphviz Dot file for one function body.
 class _GraphGenerator extends TypeInformationVisitor {
   final TypeGraphDump global;
-  final Set<TypeInformation> seen = new Set<TypeInformation>();
+  final Set<TypeInformation> seen = Set<TypeInformation>();
   final List<TypeInformation> worklist = <TypeInformation>[];
   final Map<TypeInformation, int> nodeId = <TypeInformation, int>{};
   final String Function(AbstractValue) formatType;
@@ -172,7 +172,9 @@
   }
 
   void append(String string) {
-    output..add(string)..add('\n');
+    output
+      ..add(string)
+      ..add('\n');
   }
 
   String shorten(String text) {
@@ -193,7 +195,7 @@
     return '$id';
   }
 
-  final RegExp escapeRegexp = new RegExp('["{}<>|]');
+  final RegExp escapeRegexp = RegExp('["{}<>|]');
 
   /// Escapes characters in [text] so it can be used as part of a label.
   String escapeLabel(String text) {
@@ -205,7 +207,7 @@
   /// If [dst] is a record type node, [port] may refer to one of the fields
   /// defined in that record (e.g. `obj`, `arg0`, `arg1`, etc)
   void addEdge(TypeInformation src, TypeInformation dst,
-      {String port, String color: 'black'}) {
+      {String port, String color = 'black'}) {
     if (isExternal(src) && isExternal(dst)) {
       return; // Do not add edges between external nodes.
     }
@@ -268,7 +270,7 @@
   /// [inputs] specify named inputs to the node. If omitted, edges will be
   /// based on [node.inputs].
   void addNode(TypeInformation node, String text,
-      {String color: defaultNodeColor, Map<String, TypeInformation> inputs}) {
+      {String color = defaultNodeColor, Map<String, TypeInformation> inputs}) {
     seen.add(node);
     String style = getStyleForNode(node, color);
     text = appendDetails(node, text);
diff --git a/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart b/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart
index f770d9b..97278f3 100644
--- a/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart
+++ b/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart
@@ -25,7 +25,7 @@
 /// [TypeInformation.inQueue] that a node is in the queue only once at
 /// a time.
 class WorkQueue {
-  final Queue<TypeInformation> queue = new Queue<TypeInformation>();
+  final Queue<TypeInformation> queue = Queue<TypeInformation>();
 
   void add(TypeInformation element) {
     if (element.doNotEnqueue) return;
@@ -125,12 +125,12 @@
 
       bool isCalledOnce = typeInformation.isCalledOnce();
 
-      memberResults[member] = new GlobalTypeInferenceMemberResultImpl(
+      memberResults[member] = GlobalTypeInferenceMemberResultImpl(
           data, returnType, type,
           throwsAlways: throwsAlways, isCalledOnce: isCalledOnce);
     }
 
-    Set<FieldEntity> freeVariables = new Set<FieldEntity>();
+    Set<FieldEntity> freeVariables = Set<FieldEntity>();
     inferrer.types.forEachMemberType(
         (MemberEntity member, MemberTypeInformation typeInformation) {
       createMemberResults(member, typeInformation);
@@ -169,7 +169,7 @@
       allocatedLists[node] = typeInformation.type;
     });
 
-    GlobalTypeInferenceResults results = new GlobalTypeInferenceResultsImpl(
+    GlobalTypeInferenceResults results = GlobalTypeInferenceResultsImpl(
         closedWorld,
         _globalLocalsMap,
         _inferredDataBuilder.close(closedWorld),
diff --git a/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart b/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
index b388116..02dbfd2 100644
--- a/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
+++ b/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
@@ -85,11 +85,11 @@
 
   TypeInformation(this.type, this.context)
       : _inputs = <TypeInformation>[],
-        users = new Setlet<TypeInformation>();
+        users = Setlet<TypeInformation>();
 
   TypeInformation.noInputs(this.type, this.context)
       : _inputs = const <TypeInformation>[],
-        users = new Setlet<TypeInformation>();
+        users = Setlet<TypeInformation>();
 
   TypeInformation.untracked(this.type)
       : _inputs = const <TypeInformation>[],
@@ -97,7 +97,7 @@
         context = null;
 
   TypeInformation.withInputs(this.type, this.context, this._inputs)
-      : users = new Setlet<TypeInformation>();
+      : users = Setlet<TypeInformation>();
 
   void addUser(TypeInformation user) {
     assert(!user.isConcrete);
@@ -116,7 +116,7 @@
   // The below is not a compile time constant to make it differentiable
   // from other empty lists of [TypeInformation].
   static final STOP_TRACKING_INPUTS_MARKER =
-      new List<TypeInformation>.filled(0, null);
+      List<TypeInformation>.filled(0, null);
 
   bool areInputsTracked() {
     return inputs != STOP_TRACKING_INPUTS_MARKER;
@@ -158,7 +158,7 @@
     return inferrer.types.dynamicType.type;
   }
 
-  void giveUp(InferrerEngine inferrer, {bool clearInputs: true}) {
+  void giveUp(InferrerEngine inferrer, {bool clearInputs = true}) {
     abandonInferencing = true;
     // Do not remove [this] as a user of nodes in [inputs],
     // because our tracing analysis could be interested in tracing
@@ -223,8 +223,8 @@
   }
 
   String toStructuredText(String indent) {
-    StringBuffer sb = new StringBuffer();
-    _toStructuredText(sb, indent, new Set<TypeInformation>());
+    StringBuffer sb = StringBuffer();
+    _toStructuredText(sb, indent, Set<TypeInformation>());
     return sb.toString();
   }
 
@@ -251,12 +251,12 @@
 
   @override
   void accept(TypeInformationVisitor visitor) {
-    throw new UnsupportedError("Cannot visit placeholder");
+    throw UnsupportedError("Cannot visit placeholder");
   }
 
   @override
   AbstractValue computeType(InferrerEngine inferrer) {
-    throw new UnsupportedError("Cannot refine placeholder");
+    throw UnsupportedError("Cannot refine placeholder");
   }
 
   @override
@@ -269,7 +269,7 @@
 /// to a type where we know more about which instance method is being
 /// called.
 class ParameterInputs extends IterableBase<TypeInformation> {
-  final Map<TypeInformation, int> _inputs = new Map<TypeInformation, int>();
+  final Map<TypeInformation, int> _inputs = Map<TypeInformation, int>();
 
   void remove(TypeInformation info) {
     int existing = _inputs[info];
@@ -400,7 +400,7 @@
 
   void addCall(MemberEntity caller, Object node) {
     _callers ??= <MemberEntity, Setlet<Object>>{};
-    _callers.putIfAbsent(caller, () => new Setlet()).add(node);
+    _callers.putIfAbsent(caller, () => Setlet()).add(node);
   }
 
   void removeCall(MemberEntity caller, Object node) {
@@ -725,7 +725,7 @@
 
   ParameterTypeInformation.static(AbstractValueDomain abstractValueDomain,
       MemberTypeInformation context, this._parameter, this._type, this._method,
-      {bool isInitializingFormal: false})
+      {bool isInitializingFormal = false})
       : _isInstanceMemberParameter = false,
         _isClosureParameter = false,
         _isInitializingFormal = isInitializingFormal,
@@ -882,7 +882,7 @@
 
   @override
   String getInferredSignature(TypeSystem types) {
-    throw new UnsupportedError('ParameterTypeInformation.getInferredSignature');
+    throw UnsupportedError('ParameterTypeInformation.getInferredSignature');
   }
 }
 
@@ -923,7 +923,7 @@
     case CallType.forIn:
       return call is ir.ForInStatement;
   }
-  throw new StateError('Unexpected call type $callType.');
+  throw StateError('Unexpected call type $callType.');
 }
 
 /// A [CallSiteTypeInformation] is a call found in the AST, or a
@@ -1121,7 +1121,7 @@
   }
 
   @override
-  void giveUp(InferrerEngine inferrer, {bool clearInputs: true}) {
+  void giveUp(InferrerEngine inferrer, {bool clearInputs = true}) {
     if (!abandonInferencing) {
       inferrer.updateSelectorInMember(
           caller, CallType.access, _call, selector, mask);
@@ -1451,7 +1451,7 @@
   }
 
   @override
-  void giveUp(InferrerEngine inferrer, {bool clearInputs: true}) {
+  void giveUp(InferrerEngine inferrer, {bool clearInputs = true}) {
     if (!abandonInferencing) {
       inferrer.updateSelectorInMember(caller, _callType, _call, selector, mask);
       Iterable<MemberEntity> oldTargets = _concreteTargets;
@@ -1541,7 +1541,7 @@
 
   @override
   Iterable<MemberEntity> get callees {
-    throw new UnsupportedError("Cannot compute callees of a closure call.");
+    throw UnsupportedError("Cannot compute callees of a closure call.");
   }
 
   @override
@@ -1631,7 +1631,7 @@
   StringLiteralTypeInformation(
       AbstractValueDomain abstractValueDomain, this.value, AbstractValue mask)
       : super(abstractValueDomain.createPrimitiveValue(
-            mask, new StringConstantValue(value)));
+            mask, StringConstantValue(value)));
 
   String asString() => value;
   @override
@@ -1649,7 +1649,7 @@
   BoolLiteralTypeInformation(
       AbstractValueDomain abstractValueDomain, this.value, AbstractValue mask)
       : super(abstractValueDomain.createPrimitiveValue(
-            mask, value ? new TrueConstantValue() : new FalseConstantValue()));
+            mask, value ? TrueConstantValue() : FalseConstantValue()));
 
   @override
   String toString() => 'Type $type value ${value}';
@@ -1921,7 +1921,7 @@
     if (_allKeysAreStrings && key is StringLiteralTypeInformation) {
       String keyString = key.asString();
       typeInfoMap.putIfAbsent(keyString, () {
-        newInfo = new ValueInMapTypeInformation(
+        newInfo = ValueInMapTypeInformation(
             abstractValueDomain, context, null, nonNull);
         return newInfo;
       });
@@ -1943,7 +1943,7 @@
     if (_allKeysAreStrings && other.inDictionaryMode) {
       other.typeInfoMap.forEach((keyString, value) {
         typeInfoMap.putIfAbsent(keyString, () {
-          TypeInformation newInfo = new ValueInMapTypeInformation(
+          TypeInformation newInfo = ValueInMapTypeInformation(
               abstractValueDomain, context, null, false);
           newInfos.add(newInfo);
           return newInfo;
@@ -1978,7 +1978,7 @@
   AbstractValue toTypeMask(InferrerEngine inferrer) {
     AbstractValueDomain abstractValueDomain = inferrer.abstractValueDomain;
     if (inDictionaryMode) {
-      Map<String, AbstractValue> mappings = new Map<String, AbstractValue>();
+      Map<String, AbstractValue> mappings = Map<String, AbstractValue>();
       for (var key in typeInfoMap.keys) {
         mappings[key] = typeInfoMap[key].type;
       }
@@ -2281,7 +2281,7 @@
 
 AbstractValue _narrowType(
     JClosedWorld closedWorld, AbstractValue type, DartType annotation,
-    {bool isNullable: true}) {
+    {bool isNullable = true}) {
   AbstractValueDomain abstractValueDomain = closedWorld.abstractValueDomain;
 
   AbstractValue _intersectionWith(AbstractValue otherType) {
diff --git a/pkg/compiler/lib/src/inferrer/type_system.dart b/pkg/compiler/lib/src/inferrer/type_system.dart
index 33bf709..d45f291 100644
--- a/pkg/compiler/lib/src/inferrer/type_system.dart
+++ b/pkg/compiler/lib/src/inferrer/type_system.dart
@@ -58,30 +58,30 @@
 
   /// [ParameterTypeInformation]s for parameters.
   final Map<Local, ParameterTypeInformation> parameterTypeInformations =
-      new Map<Local, ParameterTypeInformation>();
+      Map<Local, ParameterTypeInformation>();
 
   /// [MemberTypeInformation]s for members.
   final Map<MemberEntity, MemberTypeInformation> memberTypeInformations =
-      new Map<MemberEntity, MemberTypeInformation>();
+      Map<MemberEntity, MemberTypeInformation>();
 
   /// [ListTypeInformation] for allocated lists.
   final Map<ir.TreeNode, ListTypeInformation> allocatedLists =
-      new Map<ir.TreeNode, ListTypeInformation>();
+      Map<ir.TreeNode, ListTypeInformation>();
 
   /// [SetTypeInformation] for allocated Sets.
   final Map<ir.TreeNode, SetTypeInformation> allocatedSets =
-      new Map<ir.TreeNode, SetTypeInformation>();
+      Map<ir.TreeNode, SetTypeInformation>();
 
   /// [MapTypeInformation] for allocated Maps.
   final Map<ir.TreeNode, TypeInformation> allocatedMaps =
-      new Map<ir.TreeNode, TypeInformation>();
+      Map<ir.TreeNode, TypeInformation>();
 
   /// Closures found during the analysis.
-  final Set<TypeInformation> allocatedClosures = new Set<TypeInformation>();
+  final Set<TypeInformation> allocatedClosures = Set<TypeInformation>();
 
   /// Cache of [ConcreteTypeInformation].
   final Map<AbstractValue, TypeInformation> concreteTypes =
-      new Map<AbstractValue, TypeInformation>();
+      Map<AbstractValue, TypeInformation>();
 
   /// Cache of some primitive constant types.
   final Map<Object, TypeInformation> primitiveConstantTypes = {};
@@ -285,7 +285,7 @@
   TypeInformation nonNullEmptyType;
 
   TypeInformation stringLiteralType(String value) {
-    return new StringLiteralTypeInformation(
+    return StringLiteralTypeInformation(
         _abstractValueDomain, value, _abstractValueDomain.stringType);
   }
 
@@ -345,9 +345,9 @@
   /// [narrowType] will not exclude the late sentinel value by default, only if
   /// [excludeLateSentinel] is `true`.
   TypeInformation narrowType(TypeInformation type, DartType annotation,
-      {bool isCast: true,
-      bool excludeNull: false,
-      bool excludeLateSentinel: false}) {
+      {bool isCast = true,
+      bool excludeNull = false,
+      bool excludeLateSentinel = false}) {
     // Avoid refining an input with an exact type. It we are almost always
     // adding a narrowing to a subtype of the same class or a superclass.
     if (_abstractValueDomain.isExact(type.type).isDefinitelyTrue) return type;
@@ -417,7 +417,7 @@
   ConcreteTypeInformation getConcreteTypeFor(AbstractValue mask) {
     assert(mask != null);
     return concreteTypes.putIfAbsent(mask, () {
-      return new ConcreteTypeInformation(mask);
+      return ConcreteTypeInformation(mask);
     });
   }
 
@@ -477,12 +477,12 @@
     AbstractValue mask = _abstractValueDomain.createContainerValue(
         type.type, node, enclosing, elementTypeMask, inferredLength);
     ElementInContainerTypeInformation element =
-        new ElementInContainerTypeInformation(
+        ElementInContainerTypeInformation(
             _abstractValueDomain, currentMember, elementType);
     element.inferred = isElementInferred;
 
     allocatedTypes.add(element);
-    return allocatedLists[node] = new ListTypeInformation(
+    return allocatedLists[node] = ListTypeInformation(
         _abstractValueDomain, currentMember, mask, element, length);
   }
 
@@ -490,8 +490,8 @@
   /// static or top-level method [element] used as a function constant or for
   /// the synthesized 'call' method [element] created for a local function.
   TypeInformation allocateClosure(FunctionEntity element) {
-    TypeInformation result = new ClosureTypeInformation(
-        _abstractValueDomain, currentMember, element);
+    TypeInformation result =
+        ClosureTypeInformation(_abstractValueDomain, currentMember, element);
     allocatedClosures.add(result);
     return result;
   }
@@ -506,13 +506,13 @@
         isConst ? elementType.type : dynamicType.type;
     AbstractValue mask = _abstractValueDomain.createSetValue(
         type.type, node, enclosing, elementTypeMask);
-    ElementInSetTypeInformation element = new ElementInSetTypeInformation(
+    ElementInSetTypeInformation element = ElementInSetTypeInformation(
         _abstractValueDomain, currentMember, elementType);
     element.inferred = isConst;
 
     allocatedTypes.add(element);
     return allocatedSets[node] =
-        new SetTypeInformation(currentMember, mask, element);
+        SetTypeInformation(currentMember, mask, element);
   }
 
   TypeInformation allocateMap(
@@ -550,15 +550,15 @@
     AbstractValue mask = _abstractValueDomain.createMapValue(
         type.type, node, element, keyTypeMask, valueTypeMask);
 
-    TypeInformation keyTypeInfo = new KeyInMapTypeInformation(
-        _abstractValueDomain, currentMember, keyType);
-    TypeInformation valueTypeInfo = new ValueInMapTypeInformation(
+    TypeInformation keyTypeInfo =
+        KeyInMapTypeInformation(_abstractValueDomain, currentMember, keyType);
+    TypeInformation valueTypeInfo = ValueInMapTypeInformation(
         _abstractValueDomain, currentMember, valueType);
     allocatedTypes.add(keyTypeInfo);
     allocatedTypes.add(valueTypeInfo);
 
     MapTypeInformation map =
-        new MapTypeInformation(currentMember, mask, keyTypeInfo, valueTypeInfo);
+        MapTypeInformation(currentMember, mask, keyTypeInfo, valueTypeInfo);
 
     for (int i = 0; i < keyTypes.length; ++i) {
       TypeInformation newType = map.addEntryInput(
@@ -584,7 +584,7 @@
   /// Returns a new type that unions [firstInput] and [secondInput].
   TypeInformation allocateDiamondPhi(
       TypeInformation firstInput, TypeInformation secondInput) {
-    PhiElementTypeInformation result = new PhiElementTypeInformation(
+    PhiElementTypeInformation result = PhiElementTypeInformation(
         _abstractValueDomain, currentMember, null, null,
         isTry: false);
     result.addInput(firstInput);
@@ -595,7 +595,7 @@
 
   PhiElementTypeInformation _addPhi(
       ir.Node node, Local variable, TypeInformation inputType, bool isTry) {
-    PhiElementTypeInformation result = new PhiElementTypeInformation(
+    PhiElementTypeInformation result = PhiElementTypeInformation(
         _abstractValueDomain, currentMember, node, variable,
         isTry: isTry);
     allocatedTypes.add(result);
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/constants.dart b/pkg/compiler/lib/src/inferrer/typemasks/constants.dart
index 4c92f07..e46212b 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/constants.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/constants.dart
@@ -26,7 +26,7 @@
     if (closedWorld.interceptorData.isInterceptedClass(constant.type.element)) {
       return _abstractValueDomain.nonNullType;
     }
-    return new TypeMask.nonNullExact(constant.type.element, closedWorld);
+    return TypeMask.nonNullExact(constant.type.element, closedWorld);
   }
 
   @override
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/flat_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/flat_type_mask.dart
index 0aa5b30..321a8d7 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/flat_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/flat_type_mask.dart
@@ -26,7 +26,7 @@
   final int flags;
 
   static int _computeFlags(_FlatTypeMaskKind kind,
-      {bool isNullable: false, bool hasLateSentinel: false}) {
+      {bool isNullable = false, bool hasLateSentinel = false}) {
     int mask = _NONE_MASK;
     if (isNullable) mask |= _NULL_MASK;
     if (hasLateSentinel) mask |= _LATE_SENTINEL_MASK;
@@ -45,43 +45,43 @@
       flags & _LATE_SENTINEL_MASK != _NONE_MASK;
 
   factory FlatTypeMask.exact(ClassEntity base, JClosedWorld world,
-          {bool hasLateSentinel: false}) =>
+          {bool hasLateSentinel = false}) =>
       FlatTypeMask._canonicalize(base, _FlatTypeMaskKind.exact, world,
           isNullable: true, hasLateSentinel: hasLateSentinel);
   factory FlatTypeMask.subclass(ClassEntity base, JClosedWorld world,
-          {bool hasLateSentinel: false}) =>
+          {bool hasLateSentinel = false}) =>
       FlatTypeMask._canonicalize(base, _FlatTypeMaskKind.subclass, world,
           isNullable: true, hasLateSentinel: hasLateSentinel);
   factory FlatTypeMask.subtype(ClassEntity base, JClosedWorld world,
-          {bool hasLateSentinel: false}) =>
+          {bool hasLateSentinel = false}) =>
       FlatTypeMask._canonicalize(base, _FlatTypeMaskKind.subtype, world,
           isNullable: true, hasLateSentinel: hasLateSentinel);
 
-  factory FlatTypeMask.nonNullEmpty({bool hasLateSentinel: false}) =>
+  factory FlatTypeMask.nonNullEmpty({bool hasLateSentinel = false}) =>
       hasLateSentinel
           ? const FlatTypeMask._(null, _LATE_SENTINEL_MASK)
           : const FlatTypeMask._(null, _NONE_MASK);
 
-  factory FlatTypeMask.empty({bool hasLateSentinel: false}) => hasLateSentinel
+  factory FlatTypeMask.empty({bool hasLateSentinel = false}) => hasLateSentinel
       ? const FlatTypeMask._(null, _NULL_MASK | _LATE_SENTINEL_MASK)
       : const FlatTypeMask._(null, _NULL_MASK);
 
   factory FlatTypeMask.nonNullExact(ClassEntity base, JClosedWorld world,
-          {bool hasLateSentinel: false}) =>
+          {bool hasLateSentinel = false}) =>
       FlatTypeMask._canonicalize(base, _FlatTypeMaskKind.exact, world,
           hasLateSentinel: hasLateSentinel);
   factory FlatTypeMask.nonNullSubclass(ClassEntity base, JClosedWorld world,
-          {bool hasLateSentinel: false}) =>
+          {bool hasLateSentinel = false}) =>
       FlatTypeMask._canonicalize(base, _FlatTypeMaskKind.subclass, world,
           hasLateSentinel: hasLateSentinel);
   factory FlatTypeMask.nonNullSubtype(ClassEntity base, JClosedWorld world,
-          {bool hasLateSentinel: false}) =>
+          {bool hasLateSentinel = false}) =>
       FlatTypeMask._canonicalize(base, _FlatTypeMaskKind.subtype, world,
           hasLateSentinel: hasLateSentinel);
 
   factory FlatTypeMask._canonicalize(
       ClassEntity base, _FlatTypeMaskKind kind, JClosedWorld world,
-      {bool isNullable: false, bool hasLateSentinel: false}) {
+      {bool isNullable = false, bool hasLateSentinel = false}) {
     if (base == world.commonElements.nullClass) {
       return FlatTypeMask.empty(hasLateSentinel: hasLateSentinel);
     }
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart
index 7b62f9c..4702bdf 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart
@@ -110,11 +110,11 @@
 abstract class TypeMask implements AbstractValue {
   const TypeMask();
 
-  factory TypeMask.empty({bool hasLateSentinel: false}) =>
+  factory TypeMask.empty({bool hasLateSentinel = false}) =>
       FlatTypeMask.empty(hasLateSentinel: hasLateSentinel);
 
   factory TypeMask.exact(ClassEntity base, JClosedWorld closedWorld,
-      {bool hasLateSentinel: false}) {
+      {bool hasLateSentinel = false}) {
     assert(
         closedWorld.classHierarchy.isInstantiated(base),
         failedAt(
@@ -126,7 +126,7 @@
   }
 
   factory TypeMask.exactOrEmpty(ClassEntity base, JClosedWorld closedWorld,
-      {bool hasLateSentinel: false}) {
+      {bool hasLateSentinel = false}) {
     if (closedWorld.classHierarchy.isInstantiated(base)) {
       return FlatTypeMask.exact(base, closedWorld,
           hasLateSentinel: hasLateSentinel);
@@ -135,7 +135,7 @@
   }
 
   factory TypeMask.subclass(ClassEntity base, JClosedWorld closedWorld,
-      {bool hasLateSentinel: false}) {
+      {bool hasLateSentinel = false}) {
     assert(
         closedWorld.classHierarchy.isInstantiated(base),
         failedAt(
@@ -155,7 +155,7 @@
   }
 
   factory TypeMask.subtype(ClassEntity base, JClosedWorld closedWorld,
-      {bool hasLateSentinel: false}) {
+      {bool hasLateSentinel = false}) {
     ClassEntity topmost = closedWorld.getLubOfInstantiatedSubtypes(base);
     if (topmost == null) {
       return TypeMask.empty(hasLateSentinel: hasLateSentinel);
@@ -173,11 +173,11 @@
     }
   }
 
-  factory TypeMask.nonNullEmpty({bool hasLateSentinel: false}) =>
+  factory TypeMask.nonNullEmpty({bool hasLateSentinel = false}) =>
       FlatTypeMask.nonNullEmpty(hasLateSentinel: hasLateSentinel);
 
   factory TypeMask.nonNullExact(ClassEntity base, JClosedWorld closedWorld,
-      {bool hasLateSentinel: false}) {
+      {bool hasLateSentinel = false}) {
     assert(
         closedWorld.classHierarchy.isInstantiated(base),
         failedAt(
@@ -190,7 +190,7 @@
 
   factory TypeMask.nonNullExactOrEmpty(
       ClassEntity base, JClosedWorld closedWorld,
-      {bool hasLateSentinel: false}) {
+      {bool hasLateSentinel = false}) {
     if (closedWorld.classHierarchy.isInstantiated(base)) {
       return FlatTypeMask.nonNullExact(base, closedWorld,
           hasLateSentinel: hasLateSentinel);
@@ -199,7 +199,7 @@
   }
 
   factory TypeMask.nonNullSubclass(ClassEntity base, JClosedWorld closedWorld,
-      {bool hasLateSentinel: false}) {
+      {bool hasLateSentinel = false}) {
     assert(
         closedWorld.classHierarchy.isInstantiated(base),
         failedAt(
@@ -219,7 +219,7 @@
   }
 
   factory TypeMask.nonNullSubtype(ClassEntity base, JClosedWorld closedWorld,
-      {bool hasLateSentinel: false}) {
+      {bool hasLateSentinel = false}) {
     ClassEntity topmost = closedWorld.getLubOfInstantiatedSubtypes(base);
     if (topmost == null) {
       return TypeMask.nonNullEmpty(hasLateSentinel: hasLateSentinel);
diff --git a/pkg/compiler/lib/src/inferrer/types.dart b/pkg/compiler/lib/src/inferrer/types.dart
index 2345d53..c72c1f5 100644
--- a/pkg/compiler/lib/src/inferrer/types.dart
+++ b/pkg/compiler/lib/src/inferrer/types.dart
@@ -117,10 +117,9 @@
       InferredData inferredData) {
     bool isTrivial = source.readBool();
     if (isTrivial) {
-      return new TrivialGlobalTypeInferenceResults(
-          closedWorld, globalLocalsMap);
+      return TrivialGlobalTypeInferenceResults(closedWorld, globalLocalsMap);
     }
-    return new GlobalTypeInferenceResultsImpl.readFromDataSource(
+    return GlobalTypeInferenceResultsImpl.readFromDataSource(
         source, elementMap, closedWorld, globalLocalsMap, inferredData);
   }
 
@@ -186,7 +185,7 @@
       GlobalTypeInferenceResults results;
       if (compiler.disableTypeInference) {
         results =
-            new TrivialGlobalTypeInferenceResults(closedWorld, globalLocalsMap);
+            TrivialGlobalTypeInferenceResults(closedWorld, globalLocalsMap);
         _metrics = Metrics.none();
       } else {
         typesInferrerInternal ??= compiler.backendStrategy.createTypesInferrer(
@@ -233,9 +232,9 @@
       this.checkedForGrowableLists,
       this.returnsListElementTypeSet,
       this._allocatedLists)
-      : _deadFieldResult = new DeadFieldGlobalTypeInferenceResult(
-            closedWorld.abstractValueDomain),
-        _deadMethodResult = new DeadMethodGlobalTypeInferenceResult(
+      : _deadFieldResult =
+            DeadFieldGlobalTypeInferenceResult(closedWorld.abstractValueDomain),
+        _deadMethodResult = DeadMethodGlobalTypeInferenceResult(
             closedWorld.abstractValueDomain),
         _trivialParameterResult = closedWorld.abstractValueDomain.dynamicType;
 
@@ -245,12 +244,12 @@
       JClosedWorld closedWorld,
       GlobalLocalsMap globalLocalsMap,
       InferredData inferredData) {
-    source.registerLocalLookup(new LocalLookupImpl(globalLocalsMap));
+    source.registerLocalLookup(LocalLookupImpl(globalLocalsMap));
 
     source.begin(tag);
     Map<MemberEntity, GlobalTypeInferenceMemberResult> memberResults =
         source.readMemberMap((MemberEntity member) =>
-            new GlobalTypeInferenceMemberResult.readFromDataSource(
+            GlobalTypeInferenceMemberResult.readFromDataSource(
                 source,
                 elementMap.getMemberContextNode(member),
                 closedWorld.abstractValueDomain));
@@ -259,12 +258,12 @@
             .readAbstractValueFromDataSource(source));
     Set<ir.TreeNode> checkedForGrowableLists = source.readTreeNodes().toSet();
     Set<Selector> returnsListElementTypeSet =
-        source.readList(() => new Selector.readFromDataSource(source)).toSet();
+        source.readList(() => Selector.readFromDataSource(source)).toSet();
     Map<ir.TreeNode, AbstractValue> allocatedLists = source.readTreeNodeMap(
         () => closedWorld.abstractValueDomain
             .readAbstractValueFromDataSource(source));
     source.end(tag);
-    return new GlobalTypeInferenceResultsImpl(
+    return GlobalTypeInferenceResultsImpl(
         closedWorld,
         globalLocalsMap,
         inferredData,
@@ -442,7 +441,7 @@
       AbstractValueDomain abstractValueDomain) {
     source.begin(tag);
     GlobalTypeInferenceElementData data = source.readValueOrNull(() {
-      return new GlobalTypeInferenceElementData.readFromDataSource(
+      return GlobalTypeInferenceElementData.readFromDataSource(
           source, context, abstractValueDomain);
     });
     AbstractValue returnType =
@@ -452,7 +451,7 @@
     bool throwsAlways = source.readBool();
     bool isCalledOnce = source.readBool();
     source.end(tag);
-    return new GlobalTypeInferenceMemberResultImpl(data, returnType, type,
+    return GlobalTypeInferenceMemberResultImpl(data, returnType, type,
         throwsAlways: throwsAlways, isCalledOnce: isCalledOnce);
   }
 
@@ -488,12 +487,12 @@
   final TrivialGlobalTypeInferenceMemberResult _trivialMemberResult;
   final AbstractValue _trivialParameterResult;
   @override
-  final InferredData inferredData = new TrivialInferredData();
+  final InferredData inferredData = TrivialInferredData();
   @override
   final GlobalLocalsMap globalLocalsMap;
 
   TrivialGlobalTypeInferenceResults(this.closedWorld, this.globalLocalsMap)
-      : _trivialMemberResult = new TrivialGlobalTypeInferenceMemberResult(
+      : _trivialMemberResult = TrivialGlobalTypeInferenceMemberResult(
             closedWorld.abstractValueDomain.dynamicType),
         _trivialParameterResult = closedWorld.abstractValueDomain.dynamicType;
 
@@ -560,7 +559,7 @@
   @override
   void writeToDataSink(DataSink sink, ir.Member context,
       AbstractValueDomain abstractValueDomain) {
-    throw new UnsupportedError(
+    throw UnsupportedError(
         "TrivialGlobalTypeInferenceMemberResult.writeToDataSink");
   }
 }
@@ -601,7 +600,7 @@
   @override
   void writeToDataSink(DataSink sink, ir.Member context,
       AbstractValueDomain abstractValueDomain) {
-    throw new UnsupportedError(
+    throw UnsupportedError(
         "DeadFieldGlobalTypeInferenceResult.writeToDataSink");
   }
 }
@@ -642,7 +641,7 @@
   @override
   void writeToDataSink(DataSink sink, ir.Member context,
       AbstractValueDomain abstractValueDomain) {
-    throw new UnsupportedError(
+    throw UnsupportedError(
         "DeadFieldGlobalTypeInferenceResult.writeToDataSink");
   }
 }
diff --git a/pkg/compiler/lib/src/ir/annotations.dart b/pkg/compiler/lib/src/ir/annotations.dart
index fa04392..a1c84e4 100644
--- a/pkg/compiler/lib/src/ir/annotations.dart
+++ b/pkg/compiler/lib/src/ir/annotations.dart
@@ -123,10 +123,10 @@
 
 IrAnnotationData processAnnotations(ModularCore modularCore) {
   ir.Component component = modularCore.component;
-  IrAnnotationData data = new IrAnnotationData();
+  IrAnnotationData data = IrAnnotationData();
 
   void processMember(ir.Member member) {
-    ir.StaticTypeContext staticTypeContext = new ir.StaticTypeContext(
+    ir.StaticTypeContext staticTypeContext = ir.StaticTypeContext(
         member, modularCore.constantEvaluator.typeEnvironment);
     List<PragmaAnnotationData> pragmaAnnotations;
     List<String> createsAnnotations;
@@ -180,7 +180,7 @@
 
   for (ir.Library library in component.libraries) {
     ir.StaticTypeContext staticTypeContext =
-        new ir.StaticTypeContext.forAnnotations(
+        ir.StaticTypeContext.forAnnotations(
             library, modularCore.constantEvaluator.typeEnvironment);
     for (ir.Expression annotation in library.annotations) {
       if (annotation is ir.ConstantExpression) {
@@ -324,7 +324,7 @@
   // TODO(johnniwinther): Support options objects when necessary.
   final bool hasOptions;
 
-  const PragmaAnnotationData(this.suffix, {this.hasOptions: false});
+  const PragmaAnnotationData(this.suffix, {this.hasOptions = false});
 
   String get name => 'dart2js:$suffix';
 
@@ -360,7 +360,7 @@
     String prefix = 'dart2js:';
     if (!name.startsWith(prefix)) return null;
     String suffix = name.substring(prefix.length);
-    return new PragmaAnnotationData(suffix,
+    return PragmaAnnotationData(suffix,
         hasOptions: optionsValue is! ir.NullConstant);
   }
   return null;
diff --git a/pkg/compiler/lib/src/ir/closure.dart b/pkg/compiler/lib/src/ir/closure.dart
index 39ceeb5..8954f46 100644
--- a/pkg/compiler/lib/src/ir/closure.dart
+++ b/pkg/compiler/lib/src/ir/closure.dart
@@ -37,7 +37,7 @@
   /// this scope. The items in this set are either of type VariableDeclaration
   /// or TypeParameterTypeWithContext.
   Set<ir.Node /* VariableDeclaration | TypeParameterTypeWithContext */ >
-      freeVariables = new Set<ir.Node>();
+      freeVariables = Set<ir.Node>();
 
   /// A set of type parameters that are defined in another scope and are only
   /// used if runtime type information is checked. If runtime type information
@@ -57,11 +57,11 @@
   /// performing runtime type checks. It is stored
   /// separately from [thisUsedAsFreeVariable] because we don't know at this
   /// stage if we will be needing type checks for this scope.
-  Set<VariableUse> thisUsedAsFreeVariableIfNeedsRti = new Set<VariableUse>();
+  Set<VariableUse> thisUsedAsFreeVariableIfNeedsRti = Set<VariableUse>();
 
   KernelScopeInfo(this.hasThisLocal)
-      : localsUsedInTryOrSync = new Set<ir.VariableDeclaration>(),
-        boxedVariables = new Set<ir.VariableDeclaration>(),
+      : localsUsedInTryOrSync = Set<ir.VariableDeclaration>(),
+        boxedVariables = Set<ir.VariableDeclaration>(),
         capturedVariablesAccessor = null;
 
   KernelScopeInfo.from(this.hasThisLocal, KernelScopeInfo info)
@@ -81,7 +81,7 @@
 
   @override
   String toString() {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('KernelScopeInfo(this=$hasThisLocal,');
     sb.write('freeVriables=$freeVariables,');
     sb.write('localsUsedInTryOrSync={${localsUsedInTryOrSync.join(', ')}}');
@@ -132,7 +132,7 @@
             scope.hasThisLocal);
 
   // Silly hack because we don't have const sets.
-  static final Set<ir.VariableDeclaration> _empty = new Set();
+  static final Set<ir.VariableDeclaration> _empty = Set();
 
   bool get requiresContextBox => boxedVariables.isNotEmpty;
 }
@@ -293,25 +293,25 @@
         this.invocation = null;
 
   static const VariableUse explicit =
-      const VariableUse._simple(VariableUseKind.explicit);
+      VariableUse._simple(VariableUseKind.explicit);
 
   static const VariableUse localType =
-      const VariableUse._simple(VariableUseKind.localType);
+      VariableUse._simple(VariableUseKind.localType);
 
   static const VariableUse implicitCast =
-      const VariableUse._simple(VariableUseKind.implicitCast);
+      VariableUse._simple(VariableUseKind.implicitCast);
 
   static const VariableUse listLiteral =
-      const VariableUse._simple(VariableUseKind.listLiteral);
+      VariableUse._simple(VariableUseKind.listLiteral);
 
   static const VariableUse setLiteral =
-      const VariableUse._simple(VariableUseKind.setLiteral);
+      VariableUse._simple(VariableUseKind.setLiteral);
 
   static const VariableUse mapLiteral =
-      const VariableUse._simple(VariableUseKind.mapLiteral);
+      VariableUse._simple(VariableUseKind.mapLiteral);
 
   static const VariableUse fieldType =
-      const VariableUse._simple(VariableUseKind.fieldType);
+      VariableUse._simple(VariableUseKind.fieldType);
 
   @override
   int get hashCode =>
@@ -386,7 +386,7 @@
       typeDeclaration = typeDeclaration.parent;
       context = typeDeclaration;
     }
-    return new TypeVariableTypeWithContext.internal(
+    return TypeVariableTypeWithContext.internal(
         type, context, kind, typeDeclaration);
   }
 
@@ -395,17 +395,17 @@
 
   @override
   R accept<R>(ir.Visitor<R> v) {
-    throw new UnsupportedError('TypeVariableTypeWithContext.accept');
+    throw UnsupportedError('TypeVariableTypeWithContext.accept');
   }
 
   @override
   R accept1<R, A>(ir.Visitor1<R, A> v, A arg) {
-    throw new UnsupportedError('TypeVariableTypeWithContext.accept1');
+    throw UnsupportedError('TypeVariableTypeWithContext.accept1');
   }
 
   @override
   visitChildren(ir.Visitor v) {
-    throw new UnsupportedError('TypeVariableTypeWithContext.visitChildren');
+    throw UnsupportedError('TypeVariableTypeWithContext.visitChildren');
   }
 
   @override
diff --git a/pkg/compiler/lib/src/ir/constants.dart b/pkg/compiler/lib/src/ir/constants.dart
index 50cc0a6..6994046 100644
--- a/pkg/compiler/lib/src/ir/constants.dart
+++ b/pkg/compiler/lib/src/ir/constants.dart
@@ -20,8 +20,8 @@
 
   Dart2jsConstantEvaluator(
       ir.TypeEnvironment typeEnvironment, ReportErrorFunction reportError,
-      {Map<String, String> environment: const {},
-      bool supportReevaluationForTesting: false,
+      {Map<String, String> environment = const {},
+      bool supportReevaluationForTesting = false,
       ir.EvaluationMode evaluationMode})
       : _supportReevaluationForTesting = supportReevaluationForTesting,
         assert(evaluationMode != null),
@@ -29,7 +29,7 @@
             const Dart2jsConstantsBackend(supportsUnevaluatedConstants: false),
             environment,
             typeEnvironment,
-            new ErrorReporter(reportError),
+            ErrorReporter(reportError),
             enableTripleShift: true,
             evaluationMode: evaluationMode);
 
@@ -49,8 +49,8 @@
   ir.Constant evaluate(
       ir.StaticTypeContext staticTypeContext, ir.Expression node,
       {ir.TreeNode contextNode,
-      bool requireConstant: true,
-      bool replaceImplicitConstant: true}) {
+      bool requireConstant = true,
+      bool replaceImplicitConstant = true}) {
     errorReporter.requiresConstant = requireConstant;
     if (node is ir.ConstantExpression) {
       ir.Constant constant = node.constant;
@@ -189,27 +189,27 @@
 
   @override
   void visitChildren(ir.Visitor v) {
-    throw new UnsupportedError("ConstantReference.visitChildren");
+    throw UnsupportedError("ConstantReference.visitChildren");
   }
 
   @override
   R accept<R>(ir.TreeVisitor<R> v) {
-    throw new UnsupportedError("ConstantReference.accept");
+    throw UnsupportedError("ConstantReference.accept");
   }
 
   @override
   R accept1<R, A>(ir.TreeVisitor1<R, A> v, A arg) {
-    throw new UnsupportedError("ConstantReference.accept");
+    throw UnsupportedError("ConstantReference.accept");
   }
 
   @override
   transformChildren(ir.Transformer v) {
-    throw new UnsupportedError("ConstantReference.transformChildren");
+    throw UnsupportedError("ConstantReference.transformChildren");
   }
 
   @override
   transformOrRemoveChildren(ir.RemovingTransformer v) {
-    throw new UnsupportedError("ConstantReference.transformOrRemoveChildren");
+    throw UnsupportedError("ConstantReference.transformOrRemoveChildren");
   }
 
   @override
diff --git a/pkg/compiler/lib/src/ir/impact.dart b/pkg/compiler/lib/src/ir/impact.dart
index 703f19a..f3d8702 100644
--- a/pkg/compiler/lib/src/ir/impact.dart
+++ b/pkg/compiler/lib/src/ir/impact.dart
@@ -511,7 +511,7 @@
       // instantiated as int and String.
       registerNew(
           node.target,
-          new ir.InterfaceType(node.target.enclosingClass,
+          ir.InterfaceType(node.target.enclosingClass,
               node.target.enclosingLibrary.nonNullable, typeArguments),
           positionArguments,
           namedArguments,
@@ -679,7 +679,7 @@
   @override
   void handleConstantExpression(ir.ConstantExpression node) {
     ir.LibraryDependency import = getDeferredImport(node);
-    new ConstantImpactVisitor(this, import, node, staticTypeContext)
+    ConstantImpactVisitor(this, import, node, staticTypeContext)
         .visitConstant(node.constant);
   }
 }
@@ -697,8 +697,8 @@
       StaticTypeCacheImpl staticTypeCache,
       ir.ClassHierarchy classHierarchy,
       VariableScopeModel variableScopeModel,
-      {this.useAsserts: false,
-      this.inferEffectivelyFinalVariableTypes: true})
+      {this.useAsserts = false,
+      this.inferEffectivelyFinalVariableTypes = true})
       : super(staticTypeContext, staticTypeCache, classHierarchy,
             variableScopeModel);
 
@@ -707,7 +707,7 @@
       typeMapsForTesting = {};
     }
     node.accept(this);
-    return new ImpactBuilderData(
+    return ImpactBuilderData(
         node, impactData, typeMapsForTesting, getStaticTypeCache());
   }
 }
@@ -756,7 +756,7 @@
 
   @override
   void defaultConstant(ir.Constant node) {
-    throw new UnsupportedError(
+    throw UnsupportedError(
         "Unexpected constant ${node} (${node.runtimeType}).");
   }
 
@@ -795,7 +795,7 @@
     node.fieldValues.forEach((ir.Reference reference, ir.Constant value) {
       ir.Field field = reference.asField;
       registry.registerFieldConstantInitialization(
-          field, new ConstantReference(expression, value));
+          field, ConstantReference(expression, value));
       visitConstant(value);
     });
   }
diff --git a/pkg/compiler/lib/src/ir/impact_data.dart b/pkg/compiler/lib/src/ir/impact_data.dart
index c7ff190..f73b96a8f 100644
--- a/pkg/compiler/lib/src/ir/impact_data.dart
+++ b/pkg/compiler/lib/src/ir/impact_data.dart
@@ -13,18 +13,18 @@
 
 /// [ImpactRegistry] that stores registered impact in an [ImpactData] object.
 abstract class ImpactRegistryMixin implements ImpactRegistry {
-  final ImpactDataImpl _data = new ImpactDataImpl();
+  final ImpactDataImpl _data = ImpactDataImpl();
 
   ImpactData get impactData => _data;
 
   void _registerFeature(_Feature feature) {
-    _data._features ??= new EnumSet<_Feature>();
+    _data._features ??= EnumSet<_Feature>();
     _data._features.add(feature);
   }
 
   void _registerTypeUse(ir.DartType type, _TypeUseKind kind) {
     _data._typeUses ??= [];
-    _data._typeUses.add(new _TypeUse(type, kind));
+    _data._typeUses.add(_TypeUse(type, kind));
   }
 
   @override
@@ -35,11 +35,8 @@
       List<String> namedArguments,
       List<ir.DartType> typeArguments) {
     _data._superInitializers ??= [];
-    _data._superInitializers.add(new _SuperInitializer(
-        source,
-        target,
-        new _CallStructure(
-            positionalArguments, namedArguments, typeArguments)));
+    _data._superInitializers.add(_SuperInitializer(source, target,
+        _CallStructure(positionalArguments, namedArguments, typeArguments)));
   }
 
   @override
@@ -58,40 +55,36 @@
   void registerSuperInvocation(ir.Member target, int positionalArguments,
       List<String> namedArguments, List<ir.DartType> typeArguments) {
     _data._superInvocations ??= [];
-    _data._superInvocations.add(new _SuperInvocation(
-        target,
-        new _CallStructure(
-            positionalArguments, namedArguments, typeArguments)));
+    _data._superInvocations.add(_SuperInvocation(target,
+        _CallStructure(positionalArguments, namedArguments, typeArguments)));
   }
 
   @override
   void registerInstanceSet(
       ir.DartType receiverType, ClassRelation relation, ir.Member target) {
     _data._instanceSets ??= [];
-    _data._instanceSets
-        .add(new _InstanceAccess(receiverType, relation, target));
+    _data._instanceSets.add(_InstanceAccess(receiverType, relation, target));
   }
 
   @override
   void registerDynamicSet(
       ir.DartType receiverType, ClassRelation relation, ir.Name name) {
     _data._dynamicSets ??= [];
-    _data._dynamicSets.add(new _DynamicAccess(receiverType, relation, name));
+    _data._dynamicSets.add(_DynamicAccess(receiverType, relation, name));
   }
 
   @override
   void registerInstanceGet(
       ir.DartType receiverType, ClassRelation relation, ir.Member target) {
     _data._instanceGets ??= [];
-    _data._instanceGets
-        .add(new _InstanceAccess(receiverType, relation, target));
+    _data._instanceGets.add(_InstanceAccess(receiverType, relation, target));
   }
 
   @override
   void registerDynamicGet(
       ir.DartType receiverType, ClassRelation relation, ir.Name name) {
     _data._dynamicGets ??= [];
-    _data._dynamicGets.add(new _DynamicAccess(receiverType, relation, name));
+    _data._dynamicGets.add(_DynamicAccess(receiverType, relation, name));
   }
 
   @override
@@ -101,10 +94,8 @@
       List<String> namedArguments,
       List<ir.DartType> typeArguments) {
     _data._functionInvocations ??= [];
-    _data._functionInvocations.add(new _FunctionInvocation(
-        receiverType,
-        new _CallStructure(
-            positionalArguments, namedArguments, typeArguments)));
+    _data._functionInvocations.add(_FunctionInvocation(receiverType,
+        _CallStructure(positionalArguments, namedArguments, typeArguments)));
   }
 
   @override
@@ -116,12 +107,11 @@
       List<String> namedArguments,
       List<ir.DartType> typeArguments) {
     _data._instanceInvocations ??= [];
-    _data._instanceInvocations.add(new _InstanceInvocation(
+    _data._instanceInvocations.add(_InstanceInvocation(
         receiverType,
         relation,
         target,
-        new _CallStructure(
-            positionalArguments, namedArguments, typeArguments)));
+        _CallStructure(positionalArguments, namedArguments, typeArguments)));
   }
 
   @override
@@ -133,12 +123,11 @@
       List<String> namedArguments,
       List<ir.DartType> typeArguments) {
     _data._dynamicInvocations ??= [];
-    _data._dynamicInvocations.add(new _DynamicInvocation(
+    _data._dynamicInvocations.add(_DynamicInvocation(
         receiverType,
         relation,
         name,
-        new _CallStructure(
-            positionalArguments, namedArguments, typeArguments)));
+        _CallStructure(positionalArguments, namedArguments, typeArguments)));
   }
 
   @override
@@ -148,10 +137,8 @@
       List<String> namedArguments,
       List<ir.DartType> typeArguments) {
     _data._localFunctionInvocations ??= [];
-    _data._localFunctionInvocations.add(new _LocalFunctionInvocation(
-        localFunction,
-        new _CallStructure(
-            positionalArguments, namedArguments, typeArguments)));
+    _data._localFunctionInvocations.add(_LocalFunctionInvocation(localFunction,
+        _CallStructure(positionalArguments, namedArguments, typeArguments)));
   }
 
   @override
@@ -162,9 +149,9 @@
       List<ir.DartType> typeArguments,
       ir.LibraryDependency import) {
     _data._staticInvocations ??= [];
-    _data._staticInvocations.add(new _StaticInvocation(
+    _data._staticInvocations.add(_StaticInvocation(
         target,
-        new _CallStructure(positionalArguments, namedArguments, typeArguments),
+        _CallStructure(positionalArguments, namedArguments, typeArguments),
         import));
   }
 
@@ -178,10 +165,10 @@
       ir.LibraryDependency import,
       {bool isConst}) {
     _data._constructorInvocations ??= [];
-    _data._constructorInvocations.add(new _ConstructorInvocation(
+    _data._constructorInvocations.add(_ConstructorInvocation(
         constructor,
         type,
-        new _CallStructure(positionalArguments, namedArguments, typeArguments),
+        _CallStructure(positionalArguments, namedArguments, typeArguments),
         import,
         isConst: isConst));
   }
@@ -191,7 +178,7 @@
       ir.LibraryDependency import) {
     _data._constInstantiations ??= [];
     _data._constInstantiations
-        .add(new _ConstInstantiation(cls, typeArguments, import));
+        .add(_ConstInstantiation(cls, typeArguments, import));
   }
 
   @override
@@ -211,10 +198,8 @@
       List<String> namedArguments,
       List<ir.DartType> typeArguments) {
     _data._redirectingInitializers ??= [];
-    _data._redirectingInitializers.add(new _RedirectingInitializer(
-        constructor,
-        new _CallStructure(
-            positionalArguments, namedArguments, typeArguments)));
+    _data._redirectingInitializers.add(_RedirectingInitializer(constructor,
+        _CallStructure(positionalArguments, namedArguments, typeArguments)));
   }
 
   @override
@@ -238,7 +223,7 @@
   @override
   void registerTypeLiteral(ir.DartType type, ir.LibraryDependency import) {
     _data._typeLiterals ??= [];
-    _data._typeLiterals.add(new _TypeLiteral(type, import));
+    _data._typeLiterals.add(_TypeLiteral(type, import));
   }
 
   @override
@@ -260,7 +245,7 @@
   void registerAsyncForIn(ir.DartType iterableType, ir.DartType iteratorType,
       ClassRelation iteratorClassRelation) {
     _data._forInData ??= [];
-    _data._forInData.add(new _ForInData(
+    _data._forInData.add(_ForInData(
         iterableType, iteratorType, iteratorClassRelation,
         isAsync: true));
   }
@@ -269,7 +254,7 @@
   void registerSyncForIn(ir.DartType iterableType, ir.DartType iteratorType,
       ClassRelation iteratorClassRelation) {
     _data._forInData ??= [];
-    _data._forInData.add(new _ForInData(
+    _data._forInData.add(_ForInData(
         iterableType, iteratorType, iteratorClassRelation,
         isAsync: false));
   }
@@ -330,7 +315,7 @@
       ir.FunctionType expressionType, List<ir.DartType> typeArguments) {
     _data._genericInstantiations ??= [];
     _data._genericInstantiations
-        .add(new _GenericInstantiation(expressionType, typeArguments));
+        .add(_GenericInstantiation(expressionType, typeArguments));
   }
 
   @override
@@ -343,28 +328,28 @@
   @override
   void registerStaticSet(ir.Member member, ir.LibraryDependency import) {
     _data._staticSets ??= [];
-    _data._staticSets.add(new _StaticAccess(member, import));
+    _data._staticSets.add(_StaticAccess(member, import));
   }
 
   @override
   void registerStaticGet(ir.Member member, ir.LibraryDependency import) {
     _data._staticGets ??= [];
-    _data._staticGets.add(new _StaticAccess(member, import));
+    _data._staticGets.add(_StaticAccess(member, import));
   }
 
   @override
   void registerStaticTearOff(
       ir.Procedure procedure, ir.LibraryDependency import) {
     _data._staticTearOffs ??= [];
-    _data._staticTearOffs.add(new _StaticAccess(procedure, import));
+    _data._staticTearOffs.add(_StaticAccess(procedure, import));
   }
 
   @override
   void registerMapLiteral(ir.DartType keyType, ir.DartType valueType,
       {bool isConst, bool isEmpty}) {
     _data._mapLiterals ??= [];
-    _data._mapLiterals.add(new _MapLiteral(keyType, valueType,
-        isConst: isConst, isEmpty: isEmpty));
+    _data._mapLiterals.add(
+        _MapLiteral(keyType, valueType, isConst: isConst, isEmpty: isEmpty));
   }
 
   @override
@@ -372,7 +357,7 @@
       {bool isConst, bool isEmpty}) {
     _data._listLiterals ??= [];
     _data._listLiterals.add(
-        new _ContainerLiteral(elementType, isConst: isConst, isEmpty: isEmpty));
+        _ContainerLiteral(elementType, isConst: isConst, isEmpty: isEmpty));
   }
 
   @override
@@ -380,7 +365,7 @@
       {bool isConst, bool isEmpty}) {
     _data._setLiterals ??= [];
     _data._setLiterals.add(
-        new _ContainerLiteral(elementType, isConst: isConst, isEmpty: isEmpty));
+        _ContainerLiteral(elementType, isConst: isConst, isEmpty: isEmpty));
   }
 
   @override
@@ -425,7 +410,7 @@
       ir.DartType receiverType, ir.DartType argumentType) {
     _data._runtimeTypeUses ??= [];
     _data._runtimeTypeUses
-        .add(new _RuntimeTypeUse(node, kind, receiverType, argumentType));
+        .add(_RuntimeTypeUse(node, kind, receiverType, argumentType));
   }
 
   @override
@@ -529,77 +514,72 @@
   ImpactDataImpl.fromDataSource(DataSource source) {
     source.begin(tag);
     _superInitializers = source.readList(
-        () => new _SuperInitializer.fromDataSource(source),
+        () => _SuperInitializer.fromDataSource(source),
         emptyAsNull: true);
     _superSets =
         source.readList(() => source.readMemberNode(), emptyAsNull: true);
     _superGets =
         source.readList(() => source.readMemberNode(), emptyAsNull: true);
     _superInvocations = source.readList(
-        () => new _SuperInvocation.fromDataSource(source),
+        () => _SuperInvocation.fromDataSource(source),
         emptyAsNull: true);
     _instanceSets = source.readList(
-        () => new _InstanceAccess.fromDataSource(source),
+        () => _InstanceAccess.fromDataSource(source),
         emptyAsNull: true);
-    _dynamicSets = source.readList(
-        () => new _DynamicAccess.fromDataSource(source),
+    _dynamicSets = source.readList(() => _DynamicAccess.fromDataSource(source),
         emptyAsNull: true);
     _instanceGets = source.readList(
-        () => new _InstanceAccess.fromDataSource(source),
+        () => _InstanceAccess.fromDataSource(source),
         emptyAsNull: true);
-    _dynamicGets = source.readList(
-        () => new _DynamicAccess.fromDataSource(source),
+    _dynamicGets = source.readList(() => _DynamicAccess.fromDataSource(source),
         emptyAsNull: true);
     _functionInvocations = source.readList(
-        () => new _FunctionInvocation.fromDataSource(source),
+        () => _FunctionInvocation.fromDataSource(source),
         emptyAsNull: true);
     _instanceInvocations = source.readList(
-        () => new _InstanceInvocation.fromDataSource(source),
+        () => _InstanceInvocation.fromDataSource(source),
         emptyAsNull: true);
     _dynamicInvocations = source.readList(
-        () => new _DynamicInvocation.fromDataSource(source),
+        () => _DynamicInvocation.fromDataSource(source),
         emptyAsNull: true);
     _localFunctionInvocations = source.readList(
-        () => new _LocalFunctionInvocation.fromDataSource(source),
+        () => _LocalFunctionInvocation.fromDataSource(source),
         emptyAsNull: true);
     _staticInvocations = source.readList(
-        () => new _StaticInvocation.fromDataSource(source),
+        () => _StaticInvocation.fromDataSource(source),
         emptyAsNull: true);
     _constructorInvocations = source.readList(
-        () => new _ConstructorInvocation.fromDataSource(source),
+        () => _ConstructorInvocation.fromDataSource(source),
         emptyAsNull: true);
-    _features = new EnumSet<_Feature>.fromValue(source.readInt());
-    _typeUses = source.readList(() => new _TypeUse.fromDataSource(source),
+    _features = EnumSet<_Feature>.fromValue(source.readInt());
+    _typeUses = source.readList(() => _TypeUse.fromDataSource(source),
         emptyAsNull: true);
     _redirectingInitializers = source.readList(
-        () => new _RedirectingInitializer.fromDataSource(source),
+        () => _RedirectingInitializer.fromDataSource(source),
         emptyAsNull: true);
     _fieldInitializers = source.readMemberNodes<ir.Field>(emptyAsNull: true);
     _fieldConstantInitializers =
         source.readMemberNodeMap(source.readTreeNodes, emptyAsNull: true);
-    _typeLiterals = source.readList(
-        () => new _TypeLiteral.fromDataSource(source),
+    _typeLiterals = source.readList(() => _TypeLiteral.fromDataSource(source),
         emptyAsNull: true);
     _localFunctions = source.readTreeNodes(emptyAsNull: true);
     _genericInstantiations = source.readList(
-        () => new _GenericInstantiation.fromDataSource(source),
+        () => _GenericInstantiation.fromDataSource(source),
         emptyAsNull: true);
-    _staticSets = source.readList(
-        () => new _StaticAccess.fromDataSource(source),
+    _staticSets = source.readList(() => _StaticAccess.fromDataSource(source),
         emptyAsNull: true);
-    _staticGets = source.readList(
-        () => new _StaticAccess.fromDataSource(source),
+    _staticGets = source.readList(() => _StaticAccess.fromDataSource(source),
         emptyAsNull: true);
     _staticTearOffs = source.readList(
-        () => new _StaticAccess.fromDataSource(source),
+        () => _StaticAccess.fromDataSource(source),
         emptyAsNull: true);
-    _mapLiterals = source.readList(() => new _MapLiteral.fromDataSource(source),
+    _mapLiterals = source.readList(() => _MapLiteral.fromDataSource(source),
         emptyAsNull: true);
     _listLiterals = source.readList(
-        () => new _ContainerLiteral.fromDataSource(source),
+        () => _ContainerLiteral.fromDataSource(source),
         emptyAsNull: true);
     _setLiterals = source.readList(
-        () => new _ContainerLiteral.fromDataSource(source),
+        () => _ContainerLiteral.fromDataSource(source),
         emptyAsNull: true);
     _symbolLiterals = source.readStrings(emptyAsNull: true)?.toSet();
     _stringLiterals = source.readStrings(emptyAsNull: true)?.toSet();
@@ -612,7 +592,7 @@
         .readList(() => source.readIntegerValue(), emptyAsNull: true)
         ?.toSet();
     _runtimeTypeUses = source.readList(
-        () => new _RuntimeTypeUse.fromDataSource(source),
+        () => _RuntimeTypeUse.fromDataSource(source),
         emptyAsNull: true);
 
     // TODO(johnniwinther): Remove these when CFE provides constants.
@@ -1063,7 +1043,7 @@
 
   factory _CallStructure(int positionalArguments, List<String> namedArguments,
       List<ir.DartType> typeArguments) {
-    return new _CallStructure.internal(
+    return _CallStructure.internal(
         typeArguments, positionalArguments, namedArguments);
   }
 
@@ -1073,7 +1053,7 @@
     int positionalArguments = source.readInt();
     List<String> namedArguments = source.readStrings();
     source.end(tag);
-    return new _CallStructure.internal(
+    return _CallStructure.internal(
         typeArguments, positionalArguments, namedArguments);
   }
 
@@ -1099,9 +1079,9 @@
     source.begin(tag);
     ir.Constructor sourceConstructor = source.readMemberNode();
     ir.Constructor targetConstructor = source.readMemberNode();
-    _CallStructure callStructure = new _CallStructure.fromDataSource(source);
+    _CallStructure callStructure = _CallStructure.fromDataSource(source);
     source.end(tag);
-    return new _SuperInitializer(
+    return _SuperInitializer(
         sourceConstructor, targetConstructor, callStructure);
   }
 
@@ -1125,9 +1105,9 @@
   factory _SuperInvocation.fromDataSource(DataSource source) {
     source.begin(tag);
     ir.Member member = source.readMemberNode();
-    _CallStructure callStructure = new _CallStructure.fromDataSource(source);
+    _CallStructure callStructure = _CallStructure.fromDataSource(source);
     source.end(tag);
-    return new _SuperInvocation(member, callStructure);
+    return _SuperInvocation(member, callStructure);
   }
 
   void toDataSink(DataSink sink) {
@@ -1153,7 +1133,7 @@
     ClassRelation classRelation = source.readEnum(ClassRelation.values);
     ir.Member target = source.readMemberNode();
     source.end(tag);
-    return new _InstanceAccess(receiverType, classRelation, target);
+    return _InstanceAccess(receiverType, classRelation, target);
   }
 
   void toDataSink(DataSink sink) {
@@ -1180,7 +1160,7 @@
     ClassRelation classRelation = source.readEnum(ClassRelation.values);
     ir.Name name = source.readName();
     source.end(tag);
-    return new _DynamicAccess(receiverType, classRelation, name);
+    return _DynamicAccess(receiverType, classRelation, name);
   }
 
   void toDataSink(DataSink sink) {
@@ -1203,9 +1183,9 @@
   factory _FunctionInvocation.fromDataSource(DataSource source) {
     source.begin(tag);
     ir.DartType receiverType = source.readDartTypeNode();
-    _CallStructure callStructure = new _CallStructure.fromDataSource(source);
+    _CallStructure callStructure = _CallStructure.fromDataSource(source);
     source.end(tag);
-    return new _FunctionInvocation(receiverType, callStructure);
+    return _FunctionInvocation(receiverType, callStructure);
   }
 
   void toDataSink(DataSink sink) {
@@ -1232,9 +1212,9 @@
     ir.DartType receiverType = source.readDartTypeNode();
     ClassRelation classRelation = source.readEnum(ClassRelation.values);
     ir.Member target = source.readMemberNode();
-    _CallStructure callStructure = new _CallStructure.fromDataSource(source);
+    _CallStructure callStructure = _CallStructure.fromDataSource(source);
     source.end(tag);
-    return new _InstanceInvocation(
+    return _InstanceInvocation(
         receiverType, classRelation, target, callStructure);
   }
 
@@ -1264,10 +1244,9 @@
     ir.DartType receiverType = source.readDartTypeNode();
     ClassRelation classRelation = source.readEnum(ClassRelation.values);
     ir.Name name = source.readName();
-    _CallStructure callStructure = new _CallStructure.fromDataSource(source);
+    _CallStructure callStructure = _CallStructure.fromDataSource(source);
     source.end(tag);
-    return new _DynamicInvocation(
-        receiverType, classRelation, name, callStructure);
+    return _DynamicInvocation(receiverType, classRelation, name, callStructure);
   }
 
   void toDataSink(DataSink sink) {
@@ -1291,9 +1270,9 @@
   factory _LocalFunctionInvocation.fromDataSource(DataSource source) {
     source.begin(tag);
     ir.FunctionDeclaration localFunction = source.readTreeNode();
-    _CallStructure callStructure = new _CallStructure.fromDataSource(source);
+    _CallStructure callStructure = _CallStructure.fromDataSource(source);
     source.end(tag);
-    return new _LocalFunctionInvocation(localFunction, callStructure);
+    return _LocalFunctionInvocation(localFunction, callStructure);
   }
 
   void toDataSink(DataSink sink) {
@@ -1316,10 +1295,10 @@
   factory _StaticInvocation.fromDataSource(DataSource source) {
     source.begin(tag);
     ir.Procedure target = source.readMemberNode();
-    _CallStructure callStructure = new _CallStructure.fromDataSource(source);
+    _CallStructure callStructure = _CallStructure.fromDataSource(source);
     ir.LibraryDependency import = source.readLibraryDependencyNodeOrNull();
     source.end(tag);
-    return new _StaticInvocation(target, callStructure, import);
+    return _StaticInvocation(target, callStructure, import);
   }
 
   void toDataSink(DataSink sink) {
@@ -1348,11 +1327,11 @@
     source.begin(tag);
     ir.Member constructor = source.readMemberNode();
     ir.InterfaceType type = source.readDartTypeNode();
-    _CallStructure callStructure = new _CallStructure.fromDataSource(source);
+    _CallStructure callStructure = _CallStructure.fromDataSource(source);
     ir.LibraryDependency import = source.readLibraryDependencyNodeOrNull();
     bool isConst = source.readBool();
     source.end(tag);
-    return new _ConstructorInvocation(constructor, type, callStructure, import,
+    return _ConstructorInvocation(constructor, type, callStructure, import,
         isConst: isConst);
   }
 
@@ -1401,7 +1380,7 @@
     ir.DartType type = source.readDartTypeNode();
     _TypeUseKind kind = source.readEnum(_TypeUseKind.values);
     source.end(tag);
-    return new _TypeUse(type, kind);
+    return _TypeUse(type, kind);
   }
 
   void toDataSink(DataSink sink) {
@@ -1434,9 +1413,9 @@
   factory _RedirectingInitializer.fromDataSource(DataSource source) {
     source.begin(tag);
     ir.Constructor constructor = source.readMemberNode();
-    _CallStructure callStructure = new _CallStructure.fromDataSource(source);
+    _CallStructure callStructure = _CallStructure.fromDataSource(source);
     source.end(tag);
-    return new _RedirectingInitializer(constructor, callStructure);
+    return _RedirectingInitializer(constructor, callStructure);
   }
 
   void toDataSink(DataSink sink) {
@@ -1460,7 +1439,7 @@
     ir.DartType type = source.readDartTypeNode();
     ir.LibraryDependency import = source.readLibraryDependencyNodeOrNull();
     source.end(tag);
-    return new _TypeLiteral(type, import);
+    return _TypeLiteral(type, import);
   }
 
   void toDataSink(DataSink sink) {
@@ -1484,7 +1463,7 @@
     ir.FunctionType expressionType = source.readDartTypeNode();
     List<ir.DartType> typeArguments = source.readDartTypeNodes();
     source.end(tag);
-    return new _GenericInstantiation(expressionType, typeArguments);
+    return _GenericInstantiation(expressionType, typeArguments);
   }
 
   void toDataSink(DataSink sink) {
@@ -1508,7 +1487,7 @@
     ir.Member target = source.readMemberNode();
     ir.LibraryDependency import = source.readLibraryDependencyNodeOrNull();
     source.end(tag);
-    return new _StaticAccess(target, import);
+    return _StaticAccess(target, import);
   }
 
   void toDataSink(DataSink sink) {
@@ -1564,8 +1543,7 @@
     bool isConst = source.readBool();
     bool isEmpty = source.readBool();
     source.end(tag);
-    return new _ContainerLiteral(elementType,
-        isConst: isConst, isEmpty: isEmpty);
+    return _ContainerLiteral(elementType, isConst: isConst, isEmpty: isEmpty);
   }
 
   void toDataSink(DataSink sink) {
@@ -1596,7 +1574,7 @@
     ir.DartType receiverType = source.readDartTypeNode();
     ir.DartType argumentType = source.readDartTypeNode(allowNull: true);
     source.end(tag);
-    return new _RuntimeTypeUse(node, kind, receiverType, argumentType);
+    return _RuntimeTypeUse(node, kind, receiverType, argumentType);
   }
 
   void toDataSink(DataSink sink) {
diff --git a/pkg/compiler/lib/src/ir/modular.dart b/pkg/compiler/lib/src/ir/modular.dart
index 5c5d752..a924f16 100644
--- a/pkg/compiler/lib/src/ir/modular.dart
+++ b/pkg/compiler/lib/src/ir/modular.dart
@@ -14,7 +14,6 @@
 import '../diagnostics/source_span.dart';
 import '../kernel/element_map_impl.dart';
 import '../environment.dart';
-import '../ir/constants.dart';
 import '../ir/static_type.dart';
 import '../js_backend/annotations.dart';
 import '../options.dart';
diff --git a/pkg/compiler/lib/src/ir/runtime_type_analysis.dart b/pkg/compiler/lib/src/ir/runtime_type_analysis.dart
index 3286fc3..d46b622 100644
--- a/pkg/compiler/lib/src/ir/runtime_type_analysis.dart
+++ b/pkg/compiler/lib/src/ir/runtime_type_analysis.dart
@@ -64,7 +64,7 @@
       case RuntimeTypeUseKind.equals:
         return receiverType != null && argumentType != null;
     }
-    throw new UnsupportedError("Unexpected RuntimeTypeUseKind $kind.");
+    throw UnsupportedError("Unexpected RuntimeTypeUseKind $kind.");
   }
 
   @override
@@ -408,8 +408,8 @@
     receiverGet = node;
   }
 
-  RuntimeTypeUseData data = new RuntimeTypeUseData(
-      kind, receiverGet, receiver, argumentGet, argument);
+  RuntimeTypeUseData data =
+      RuntimeTypeUseData(kind, receiverGet, receiver, argumentGet, argument);
   cache[receiverGet] = data;
   if (argumentGet != null) {
     cache[argumentGet] = data;
diff --git a/pkg/compiler/lib/src/ir/scope.dart b/pkg/compiler/lib/src/ir/scope.dart
index 90bc23a..762be46 100644
--- a/pkg/compiler/lib/src/ir/scope.dart
+++ b/pkg/compiler/lib/src/ir/scope.dart
@@ -22,7 +22,7 @@
   /// be marked as free variables.
   factory ScopeModel.from(
       ir.Member node, ir.ConstantEvaluator constantEvaluator) {
-    ScopeModelBuilder builder = new ScopeModelBuilder(constantEvaluator);
+    ScopeModelBuilder builder = ScopeModelBuilder(constantEvaluator);
     return builder.computeModel(node);
   }
 }
@@ -38,11 +38,11 @@
   Set<ir.VariableDeclaration> _assignedVariables;
 
   VariableScope createScopeFor(ir.TreeNode node) {
-    return _scopeMap[node] ??= new VariableScopeImpl();
+    return _scopeMap[node] ??= VariableScopeImpl();
   }
 
   void registerAssignedVariable(ir.VariableDeclaration node) {
-    _assignedVariables ??= new Set<ir.VariableDeclaration>();
+    _assignedVariables ??= Set<ir.VariableDeclaration>();
     _assignedVariables.add(node);
   }
 
@@ -83,7 +83,7 @@
   }
 
   void registerAssignedVariable(ir.VariableDeclaration variable) {
-    _assignedVariables ??= new Set<ir.VariableDeclaration>();
+    _assignedVariables ??= Set<ir.VariableDeclaration>();
     _assignedVariables.add(variable);
   }
 
@@ -102,7 +102,7 @@
 
 abstract class VariableCollectorMixin {
   VariableScopeImpl currentVariableScope;
-  VariableScopeModelImpl variableScopeModel = new VariableScopeModelImpl();
+  VariableScopeModelImpl variableScopeModel = VariableScopeModelImpl();
 
   void visitInVariableScope(ir.TreeNode root, void f()) {
     VariableScopeImpl oldScope = currentVariableScope;
diff --git a/pkg/compiler/lib/src/ir/scope_visitor.dart b/pkg/compiler/lib/src/ir/scope_visitor.dart
index 7ea0790..a93bc05 100644
--- a/pkg/compiler/lib/src/ir/scope_visitor.dart
+++ b/pkg/compiler/lib/src/ir/scope_visitor.dart
@@ -23,7 +23,7 @@
   ir.TypeEnvironment get _typeEnvironment => _constantEvaluator.typeEnvironment;
   ir.CoreTypes get _coreTypes => _typeEnvironment.coreTypes;
 
-  final ClosureScopeModel _model = new ClosureScopeModel();
+  final ClosureScopeModel _model = ClosureScopeModel();
 
   /// A map of each visited call node with the associated information about what
   /// variables are captured/used. Each ir.Node key corresponds to a scope that
@@ -56,13 +56,12 @@
   /// Keep track of the mutated local variables so that we don't need to box
   /// non-mutated variables. We know these are only VariableDeclarations because
   /// type variable types and `this` types can't be mutated!
-  Set<ir.VariableDeclaration> _mutatedVariables =
-      new Set<ir.VariableDeclaration>();
+  Set<ir.VariableDeclaration> _mutatedVariables = Set<ir.VariableDeclaration>();
 
   /// The set of variables that are accessed in some form, whether they are
   /// mutated or not.
   Set<ir.Node /* ir.VariableDeclaration | TypeParameterTypeWithContext */ >
-      _capturedVariables = new Set<ir.Node>();
+      _capturedVariables = Set<ir.Node>();
 
   /// If true, the visitor is currently traversing some nodes that are inside a
   /// try block.
@@ -89,10 +88,10 @@
   ScopeModel computeModel(ir.Member node) {
     if (node.isAbstract && !node.isExternal) {
       return const ScopeModel(
-          initializerComplexity: const EvaluationComplexity.lazy());
+          initializerComplexity: EvaluationComplexity.lazy());
     }
 
-    _staticTypeContext = new ir.StaticTypeContext(node, _typeEnvironment);
+    _staticTypeContext = ir.StaticTypeContext(node, _typeEnvironment);
     if (node is ir.Constructor) {
       _hasThisLocal = true;
     } else if (node is ir.Procedure && node.kind == ir.ProcedureKind.Factory) {
@@ -110,7 +109,7 @@
         initializerComplexity = node.accept(this);
       } else {
         initializerComplexity = const EvaluationComplexity.constant();
-        _model.scopeInfo = new KernelScopeInfo(_hasThisLocal);
+        _model.scopeInfo = KernelScopeInfo(_hasThisLocal);
       }
     } else {
       assert(node is ir.Procedure || node is ir.Constructor);
@@ -120,7 +119,7 @@
         node.accept(this);
       }
     }
-    return new ScopeModel(
+    return ScopeModel(
         closureScopeModel: _model,
         variableScopeModel: variableScopeModel,
         initializerComplexity: initializerComplexity);
@@ -159,7 +158,7 @@
     ir.Constant constant = _constantEvaluator.evaluate(_staticTypeContext, node,
         requireConstant: false, replaceImplicitConstant: false);
     if (constant != null) {
-      return new EvaluationComplexity.constant(constant);
+      return EvaluationComplexity.constant(constant);
     }
     return const EvaluationComplexity.lazy();
   }
@@ -180,7 +179,7 @@
   ir.Expression _handleExpression(ir.Expression node) {
     _lastExpressionComplexity = visitNode(node);
     if (_lastExpressionComplexity.isFreshConstant) {
-      return new ir.ConstantExpression(_lastExpressionComplexity.constant,
+      return ir.ConstantExpression(_lastExpressionComplexity.constant,
           node.getStaticType(_staticTypeContext))
         ..fileOffset = node.fileOffset
         ..parent = node.parent;
@@ -216,7 +215,7 @@
   /// this node if any variables are captured.
   void attachCapturedScopeVariables(ir.TreeNode node) {
     Set<ir.VariableDeclaration> capturedVariablesForScope =
-        new Set<ir.VariableDeclaration>();
+        Set<ir.VariableDeclaration>();
 
     for (ir.Node variable in _scopeVariables) {
       // No need to box non-assignable elements.
@@ -233,12 +232,12 @@
       KernelScopeInfo from = _model.scopeInfo;
 
       KernelCapturedScope capturedScope;
-      var nodeBox = new NodeBox(getBoxName(), _executableContext);
+      var nodeBox = NodeBox(getBoxName(), _executableContext);
       if (node is ir.ForStatement ||
           node is ir.ForInStatement ||
           node is ir.WhileStatement ||
           node is ir.DoStatement) {
-        capturedScope = new KernelCapturedLoopScope(
+        capturedScope = KernelCapturedLoopScope(
             capturedVariablesForScope,
             nodeBox,
             [],
@@ -249,7 +248,7 @@
             from.thisUsedAsFreeVariableIfNeedsRti,
             _hasThisLocal);
       } else {
-        capturedScope = new KernelCapturedScope(
+        capturedScope = KernelCapturedScope(
             capturedVariablesForScope,
             nodeBox,
             from.localsUsedInTryOrSync,
@@ -375,7 +374,7 @@
         _currentScopeInfo.freeVariables.add(variable);
       } else {
         _currentScopeInfo.freeVariablesForRti
-            .putIfAbsent(variable, () => new Set<VariableUse>())
+            .putIfAbsent(variable, () => Set<VariableUse>())
             .add(usage);
       }
     }
@@ -395,7 +394,7 @@
   @override
   EvaluationComplexity visitTypeParameter(ir.TypeParameter typeParameter) {
     TypeVariableTypeWithContext typeVariable(ir.Library library) =>
-        new TypeVariableTypeWithContext(
+        TypeVariableTypeWithContext(
             ir.TypeParameterType.withDefaultNullabilityForLibrary(
                 typeParameter, library),
             // If this typeParameter is part of a typedef then its parent is
@@ -532,7 +531,7 @@
     });
     KernelCapturedScope scope = _scopesCapturedInClosureMap[node];
     if (scope != null) {
-      _scopesCapturedInClosureMap[node] = new KernelCapturedLoopScope(
+      _scopesCapturedInClosureMap[node] = KernelCapturedLoopScope(
           scope.boxedVariables,
           scope.capturedVariablesAccessor,
           boxedLoopVariables,
@@ -554,7 +553,7 @@
     }
     if (node.arguments.types.isNotEmpty) {
       visitNodesInContext(node.arguments.types,
-          new VariableUse.staticTypeArgument(node.interfaceTarget));
+          VariableUse.staticTypeArgument(node.interfaceTarget));
     }
     visitArguments(node.arguments);
     return const EvaluationComplexity.lazy();
@@ -588,7 +587,7 @@
     _isInsideClosure = _outermostNode != null;
     _executableContext = node;
 
-    _currentScopeInfo = new KernelScopeInfo(_hasThisLocal);
+    _currentScopeInfo = KernelScopeInfo(_hasThisLocal);
 
     if (_isInsideClosure) {
       _closuresToGenerate[node] = _currentScopeInfo;
@@ -825,8 +824,8 @@
   @override
   EvaluationComplexity visitFunctionNode(ir.FunctionNode node) {
     VariableUse parameterUsage = node.parent is ir.Member
-        ? new VariableUse.memberParameter(node.parent)
-        : new VariableUse.localParameter(node.parent);
+        ? VariableUse.memberParameter(node.parent)
+        : VariableUse.localParameter(node.parent);
     visitNodesInContext(node.typeParameters, parameterUsage);
     for (ir.VariableDeclaration declaration in node.positionalParameters) {
       _handleVariableDeclaration(declaration, parameterUsage);
@@ -837,8 +836,8 @@
     visitInContext(
         node.returnType,
         node.parent is ir.Member
-            ? new VariableUse.memberReturnType(node.parent)
-            : new VariableUse.localReturnType(node.parent));
+            ? VariableUse.memberReturnType(node.parent)
+            : VariableUse.localReturnType(node.parent));
     if (node.body != null) {
       visitNode(node.body);
     }
@@ -933,7 +932,7 @@
     if (target is ir.Field) {
       return target.isConst
           ? const EvaluationComplexity.constant()
-          : new EvaluationComplexity.eager(fields: <ir.Field>{target});
+          : EvaluationComplexity.eager(fields: <ir.Field>{target});
     } else if (target is ir.Procedure &&
         target.kind == ir.ProcedureKind.Method) {
       return _evaluateImplicitConstant(node);
@@ -957,9 +956,9 @@
     if (node.arguments.types.isNotEmpty) {
       VariableUse usage;
       if (node.target.kind == ir.ProcedureKind.Factory) {
-        usage = new VariableUse.constructorTypeArgument(node.target);
+        usage = VariableUse.constructorTypeArgument(node.target);
       } else {
-        usage = new VariableUse.staticTypeArgument(node.target);
+        usage = VariableUse.staticTypeArgument(node.target);
       }
 
       visitNodesInContext(node.arguments.types, usage);
@@ -1000,8 +999,8 @@
     }
 
     if (node.arguments.types.isNotEmpty) {
-      visitNodesInContext(node.arguments.types,
-          new VariableUse.constructorTypeArgument(target));
+      visitNodesInContext(
+          node.arguments.types, VariableUse.constructorTypeArgument(target));
     }
     visitArguments(node.arguments);
     return node.isConst
@@ -1041,7 +1040,7 @@
               receiver.variable.parent is ir.LocalFunction),
           "Unexpected local function invocation ${node} "
           "(${node.runtimeType}).");
-      VariableUse usage = new VariableUse.instanceTypeArgument(node);
+      VariableUse usage = VariableUse.instanceTypeArgument(node);
       visitNodesInContext(node.arguments.types, usage);
     }
     EvaluationComplexity complexity = visitArguments(node.arguments);
@@ -1068,7 +1067,7 @@
               receiver.variable.parent is ir.LocalFunction),
           "Unexpected local function invocation ${node} "
           "(${node.runtimeType}).");
-      VariableUse usage = new VariableUse.instanceTypeArgument(node);
+      VariableUse usage = VariableUse.instanceTypeArgument(node);
       visitNodesInContext(node.arguments.types, usage);
     }
     visitArguments(node.arguments);
@@ -1085,7 +1084,7 @@
               receiver.variable.parent is ir.LocalFunction),
           "Unexpected local function invocation ${node} "
           "(${node.runtimeType}).");
-      VariableUse usage = new VariableUse.instanceTypeArgument(node);
+      VariableUse usage = VariableUse.instanceTypeArgument(node);
       visitNodesInContext(node.arguments.types, usage);
     }
     visitArguments(node.arguments);
@@ -1102,7 +1101,7 @@
                   is ir.LocalFunction)),
           "Unexpected local function invocation ${node} "
           "(${node.runtimeType}).");
-      VariableUse usage = new VariableUse.instanceTypeArgument(node);
+      VariableUse usage = VariableUse.instanceTypeArgument(node);
       visitNodesInContext(node.arguments.types, usage);
     }
     visitArguments(node.arguments);
@@ -1115,7 +1114,7 @@
     _markVariableAsUsed(node.variable, VariableUse.explicit);
     if (node.arguments.types.isNotEmpty) {
       VariableUse usage =
-          new VariableUse.localTypeArgument(node.localFunction, node);
+          VariableUse.localTypeArgument(node.localFunction, node);
       visitNodesInContext(node.arguments.types, usage);
     }
     visitArguments(node.arguments);
@@ -1247,7 +1246,7 @@
   @override
   EvaluationComplexity visitInstantiation(ir.Instantiation node) {
     EvaluationComplexity typeArgumentsComplexity = visitNodesInContext(
-        node.typeArguments, new VariableUse.instantiationTypeArgument(node));
+        node.typeArguments, VariableUse.instantiationTypeArgument(node));
     node.expression = _handleExpression(node.expression);
     EvaluationComplexity expressionComplexity = _lastExpressionComplexity;
 
@@ -1354,7 +1353,7 @@
   EvaluationComplexity visitSuperInitializer(ir.SuperInitializer node) {
     if (node.arguments.types.isNotEmpty) {
       visitNodesInContext(node.arguments.types,
-          new VariableUse.constructorTypeArgument(node.target));
+          VariableUse.constructorTypeArgument(node.target));
     }
     visitArguments(node.arguments);
     return const EvaluationComplexity.lazy();
@@ -1365,7 +1364,7 @@
       ir.RedirectingInitializer node) {
     if (node.arguments.types.isNotEmpty) {
       visitNodesInContext(node.arguments.types,
-          new VariableUse.constructorTypeArgument(node.target));
+          VariableUse.constructorTypeArgument(node.target));
     }
     visitArguments(node.arguments);
     return const EvaluationComplexity.lazy();
@@ -1407,7 +1406,7 @@
     assert(usage != null);
     if (_outermostNode is ir.Member) {
       TypeVariableTypeWithContext typeVariable =
-          new TypeVariableTypeWithContext(type, _outermostNode);
+          TypeVariableTypeWithContext(type, _outermostNode);
       switch (typeVariable.kind) {
         case TypeVariableKind.cls:
           if (_isFieldOrConstructor(_outermostNode)) {
@@ -1496,7 +1495,7 @@
     if (isLazy || isEager) {
       return this;
     } else {
-      return new EvaluationComplexity.eager();
+      return EvaluationComplexity.eager();
     }
   }
 
@@ -1510,7 +1509,7 @@
 
   /// Returns a short textual representation used for testing.
   String get shortText {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     switch (level) {
       case ComplexityLevel.constant:
         sb.write('constant');
@@ -1528,7 +1527,7 @@
         sb.write('lazy');
         break;
       default:
-        throw new UnsupportedError("Unexpected complexity level $level");
+        throw UnsupportedError("Unexpected complexity level $level");
     }
     return sb.toString();
   }
diff --git a/pkg/compiler/lib/src/ir/static_type.dart b/pkg/compiler/lib/src/ir/static_type.dart
index 1baf922..21e975e 100644
--- a/pkg/compiler/lib/src/ir/static_type.dart
+++ b/pkg/compiler/lib/src/ir/static_type.dart
@@ -86,7 +86,7 @@
       : super(typeEnvironment);
 
   StaticTypeCache getStaticTypeCache() {
-    return new StaticTypeCache(_staticTypeCache._expressionTypes,
+    return StaticTypeCache(_staticTypeCache._expressionTypes,
         _staticTypeCache._forInIteratorTypes);
   }
 
@@ -125,7 +125,7 @@
 
   Set<ir.VariableDeclaration> _currentVariables;
   Set<ir.VariableDeclaration> _invalidatedVariables =
-      new Set<ir.VariableDeclaration>();
+      Set<ir.VariableDeclaration>();
 
   TypeMap _typeMapBase = const TypeMap();
   TypeMap _typeMapWhenTrue;
@@ -415,7 +415,7 @@
       // We need to insert an implicit cast to preserve the invariant that
       // a property set with a known interface target is also statically
       // checked.
-      return new ir.AsExpression(value, setterType)..isTypeError = true;
+      return ir.AsExpression(value, setterType)..isTypeError = true;
     }
     return null;
   }
@@ -613,11 +613,11 @@
     ir.Expression updateArgument(ir.Expression expression, ir.TreeNode parent,
         ir.DartType argumentType, ir.DartType checkedParameterType) {
       ir.VariableDeclaration variable =
-          new ir.VariableDeclaration.forValue(expression, type: argumentType);
+          ir.VariableDeclaration.forValue(expression, type: argumentType);
       // Visit the newly created variable declaration.
       handleVariableDeclaration(variable);
       letVariables.add(variable);
-      ir.VariableGet get = new ir.VariableGet(variable)..parent = parent;
+      ir.VariableGet get = ir.VariableGet(variable)..parent = parent;
       // Visit the newly created variable get.
       handleVariableGet(get, argumentType);
       _staticTypeCache._expressionTypes[get] = argumentType;
@@ -628,10 +628,9 @@
       // We need to insert an implicit cast to preserve the invariant that
       // a method invocation with a known interface target is also
       // statically checked.
-      ir.AsExpression implicitCast =
-          new ir.AsExpression(get, checkedParameterType)
-            ..isTypeError = true
-            ..parent = parent;
+      ir.AsExpression implicitCast = ir.AsExpression(get, checkedParameterType)
+        ..isTypeError = true
+        ..parent = parent;
       // Visit the newly created as expression; the original value has
       // already been visited.
       handleAsExpression(implicitCast, argumentType);
@@ -655,11 +654,11 @@
           argumentType, neededNamedChecks[argumentIndex]);
     }
 
-    ir.Expression dummy = new ir.NullLiteral();
+    ir.Expression dummy = ir.NullLiteral();
     node.replaceWith(dummy);
     ir.Expression body = node;
     for (ir.VariableDeclaration variable in letVariables.reversed) {
-      body = new ir.Let(variable, body);
+      body = ir.Let(variable, body);
     }
     dummy.replaceWith(body);
   }
@@ -738,7 +737,7 @@
       ir.DartType argumentType = argumentTypes.positional[0];
       ir.DartType resultType = typeEnvironment
           .getTypeOfSpecialCasedBinaryOperator(receiverType, argumentType);
-      return new ir.FunctionType(
+      return ir.FunctionType(
           <ir.DartType>[argumentType], resultType, currentLibrary.nonNullable);
     }
     return getterType;
@@ -777,8 +776,7 @@
     if (arguments.positional.isEmpty) {
       positional = const <ir.DartType>[];
     } else {
-      positional =
-          new List<ir.DartType>.filled(arguments.positional.length, null);
+      positional = List<ir.DartType>.filled(arguments.positional.length, null);
       int index = 0;
       for (ir.Expression argument in arguments.positional) {
         positional[index++] = visitNode(argument);
@@ -787,13 +785,13 @@
     if (arguments.named.isEmpty) {
       named = const <ir.DartType>[];
     } else {
-      named = new List<ir.DartType>.filled(arguments.named.length, null);
+      named = List<ir.DartType>.filled(arguments.named.length, null);
       int index = 0;
       for (ir.NamedExpression argument in arguments.named) {
         named[index++] = visitNode(argument);
       }
     }
-    return new ArgumentTypes(positional, named);
+    return ArgumentTypes(positional, named);
   }
 
   void handleDynamicInvocation(
@@ -1115,9 +1113,9 @@
   ir.DartType visitConstructorInvocation(ir.ConstructorInvocation node) {
     ArgumentTypes argumentTypes = _visitArguments(node.arguments);
     ir.DartType resultType = node.arguments.types.isEmpty
-        ? new ExactInterfaceType.from(typeEnvironment.coreTypes
+        ? ExactInterfaceType.from(typeEnvironment.coreTypes
             .nonNullableRawType(node.target.enclosingClass))
-        : new ExactInterfaceType(node.target.enclosingClass,
+        : ExactInterfaceType(node.target.enclosingClass,
             ir.Nullability.nonNullable, node.arguments.types);
     _staticTypeCache._expressionTypes[node] = resultType;
     handleConstructorInvocation(node, argumentTypes, resultType);
@@ -1566,7 +1564,7 @@
           currentLibrary,
           typeEnvironment.coreTypes);
       if (streamType != null) {
-        iteratorType = new ir.InterfaceType(
+        iteratorType = ir.InterfaceType(
             typeEnvironment.coreTypes.streamIteratorClass,
             ir.Nullability.nonNullable,
             streamType.typeArguments);
@@ -1574,7 +1572,7 @@
     } else {
       ir.InterfaceType iterableInterfaceType = getInterfaceTypeOf(iterableType);
       ir.Member member = hierarchy.getInterfaceMember(
-          iterableInterfaceType.classNode, new ir.Name(Identifiers.iterator));
+          iterableInterfaceType.classNode, ir.Name(Identifiers.iterator));
       if (member != null) {
         iteratorType = ir.Substitution.fromInterfaceType(
                 typeEnvironment.getTypeAsInstanceOf(
@@ -1729,7 +1727,7 @@
 
   @override
   Null visitProcedure(ir.Procedure node) {
-    thisType = new ThisInterfaceType.from(node.enclosingClass?.getThisType(
+    thisType = ThisInterfaceType.from(node.enclosingClass?.getThisType(
         typeEnvironment.coreTypes, node.enclosingLibrary.nonNullable));
     _currentVariables = {};
     currentLibrary = node.enclosingLibrary;
@@ -1746,7 +1744,7 @@
 
   @override
   Null visitConstructor(ir.Constructor node) {
-    thisType = new ThisInterfaceType.from(node.enclosingClass.getThisType(
+    thisType = ThisInterfaceType.from(node.enclosingClass.getThisType(
         typeEnvironment.coreTypes, node.enclosingLibrary.nonNullable));
     _currentVariables = {};
     currentLibrary = node.enclosingLibrary;
@@ -1764,7 +1762,7 @@
 
   @override
   Null visitField(ir.Field node) {
-    thisType = new ThisInterfaceType.from(node.enclosingClass?.getThisType(
+    thisType = ThisInterfaceType.from(node.enclosingClass?.getThisType(
         typeEnvironment.coreTypes, node.enclosingLibrary.nonNullable));
     _currentVariables = {};
     currentLibrary = node.enclosingLibrary;
@@ -1911,7 +1909,7 @@
 
   @override
   String toString() {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('TypeHolder(');
     sb.write('declared=$declaredType');
     if (trueTypes != null) {
@@ -1950,7 +1948,7 @@
   /// be an instance of [type]. If [isTrue] is `false`, the local variable is
   /// known _not_ to be an instance of [type].
   TargetInfo promote(ir.DartType type, {bool isTrue}) {
-    Set<TypeHolder> newTypeHolders = new Set<TypeHolder>();
+    Set<TypeHolder> newTypeHolders = Set<TypeHolder>();
 
     bool addTypeHolder(TypeHolder typeHolder) {
       bool changed = false;
@@ -1958,7 +1956,7 @@
       Set<ir.DartType> addAsCopy(Set<ir.DartType> set, ir.DartType type) {
         Set<ir.DartType> result;
         if (set == null) {
-          result = new Set<ir.DartType>();
+          result = Set<ir.DartType>();
         } else if (set.contains(type)) {
           return set;
         } else {
@@ -1995,12 +1993,11 @@
     if (typesOfInterest.contains(type)) {
       newTypesOfInterest = typesOfInterest;
     } else {
-      newTypesOfInterest = new Set<ir.DartType>.from(typesOfInterest)
-        ..add(type);
+      newTypesOfInterest = Set<ir.DartType>.from(typesOfInterest)..add(type);
       changed = true;
     }
     return changed
-        ? new TargetInfo(declaredType, newTypeHolders, newTypesOfInterest)
+        ? TargetInfo(declaredType, newTypeHolders, newTypesOfInterest)
         : this;
   }
 
@@ -2012,8 +2009,8 @@
     if (other == null) return null;
     if (identical(this, other)) return this;
 
-    Set<TypeHolder> newTypeHolders = new Set<TypeHolder>();
-    Set<ir.DartType> newTypesOfInterest = new Set<ir.DartType>();
+    Set<TypeHolder> newTypeHolders = Set<TypeHolder>();
+    Set<ir.DartType> newTypesOfInterest = Set<ir.DartType>();
 
     /// Adds the [typeHolders] to [newTypeHolders] for types in
     /// [otherTypesOfInterest] while removing the information
@@ -2026,7 +2023,7 @@
       for (TypeHolder typeHolder in typeHolders) {
         Set<ir.DartType> newTrueTypes;
         if (typeHolder.trueTypes != null) {
-          newTrueTypes = new Set<ir.DartType>.from(typeHolder.trueTypes);
+          newTrueTypes = Set<ir.DartType>.from(typeHolder.trueTypes);
 
           /// Only types in [otherTypesOfInterest] has information from all
           /// paths.
@@ -2044,7 +2041,7 @@
         }
         Set<ir.DartType> newFalseTypes;
         if (typeHolder.falseTypes != null) {
-          newFalseTypes = new Set<ir.DartType>.from(typeHolder.falseTypes);
+          newFalseTypes = Set<ir.DartType>.from(typeHolder.falseTypes);
 
           /// Only types in [otherTypesOfInterest] has information from all
           /// paths.
@@ -2063,13 +2060,13 @@
         if (newTrueTypes != null || newFalseTypes != null) {
           // Only include type holders with information.
           newTypeHolders
-              .add(new TypeHolder(declaredType, newTrueTypes, newFalseTypes));
+              .add(TypeHolder(declaredType, newTrueTypes, newFalseTypes));
         }
       }
     }
 
-    Set<ir.DartType> thisTrueTypes = new Set<ir.DartType>();
-    Set<ir.DartType> thisFalseTypes = new Set<ir.DartType>();
+    Set<ir.DartType> thisTrueTypes = Set<ir.DartType>();
+    Set<ir.DartType> thisFalseTypes = Set<ir.DartType>();
     for (TypeHolder typeHolder in typeHolders) {
       if (typeHolder.trueTypes != null) {
         thisTrueTypes.addAll(typeHolder.trueTypes);
@@ -2079,8 +2076,8 @@
       }
     }
 
-    Set<ir.DartType> otherTrueTypes = new Set<ir.DartType>();
-    Set<ir.DartType> otherFalseTypes = new Set<ir.DartType>();
+    Set<ir.DartType> otherTrueTypes = Set<ir.DartType>();
+    Set<ir.DartType> otherFalseTypes = Set<ir.DartType>();
     for (TypeHolder typeHolder in other.typeHolders) {
       if (typeHolder.trueTypes != null) {
         otherTrueTypes.addAll(typeHolder.trueTypes);
@@ -2100,7 +2097,7 @@
       return null;
     }
 
-    return new TargetInfo(declaredType, newTypeHolders, newTypesOfInterest);
+    return TargetInfo(declaredType, newTypeHolders, newTypesOfInterest);
   }
 
   /// Computes a single type that soundly represents the promoted type of the
@@ -2151,7 +2148,7 @@
 
   @override
   String toString() {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('TargetInfo(');
     sb.write('declaredType=$declaredType,');
     sb.write('typeHolders=$typeHolders,');
@@ -2180,7 +2177,7 @@
   TypeMap promote(ir.VariableDeclaration variable, ir.DartType type,
       {bool isTrue}) {
     Map<ir.VariableDeclaration, TargetInfo> newInfoMap =
-        new Map<ir.VariableDeclaration, TargetInfo>.from(_targetInfoMap);
+        Map<ir.VariableDeclaration, TargetInfo>.from(_targetInfoMap);
     TargetInfo targetInfo = newInfoMap[variable];
     bool changed = false;
     if (targetInfo != null) {
@@ -2190,16 +2187,15 @@
     } else {
       changed = true;
       Set<ir.DartType> trueTypes =
-          isTrue ? (new Set<ir.DartType>()..add(type)) : null;
+          isTrue ? (Set<ir.DartType>()..add(type)) : null;
       Set<ir.DartType> falseTypes =
-          isTrue ? null : (new Set<ir.DartType>()..add(type));
-      TypeHolder typeHolder =
-          new TypeHolder(variable.type, trueTypes, falseTypes);
-      targetInfo = new TargetInfo(
+          isTrue ? null : (Set<ir.DartType>()..add(type));
+      TypeHolder typeHolder = TypeHolder(variable.type, trueTypes, falseTypes);
+      targetInfo = TargetInfo(
           variable.type, <TypeHolder>[typeHolder], <ir.DartType>[type]);
     }
     newInfoMap[variable] = targetInfo;
-    return changed ? new TypeMap(newInfoMap) : this;
+    return changed ? TypeMap(newInfoMap) : this;
   }
 
   /// Returns the [TypeMap] that describes that the locals are either of [this]
@@ -2217,7 +2213,7 @@
         newInfoMap[variable] = result;
       }
     });
-    return changed ? new TypeMap(newInfoMap) : this;
+    return changed ? TypeMap(newInfoMap) : this;
   }
 
   /// Returns the [TypeMap] in which all type information for any of the
@@ -2232,7 +2228,7 @@
         changed = true;
       }
     });
-    return changed ? new TypeMap(newInfoMap) : this;
+    return changed ? TypeMap(newInfoMap) : this;
   }
 
   /// Returns the [TypeMap] where type information for `node.variable` is
@@ -2247,7 +2243,7 @@
         newInfoMap[variable] = info;
       } else if (type != null) {
         changed = true;
-        Set<ir.DartType> newTypesOfInterest = new Set<ir.DartType>();
+        Set<ir.DartType> newTypesOfInterest = Set<ir.DartType>();
         for (ir.DartType typeOfInterest in info.typesOfInterest) {
           if (typeEnvironment.isSubtypeOf(type, typeOfInterest,
               ir.SubtypeCheckMode.ignoringNullabilities)) {
@@ -2262,10 +2258,10 @@
           // declared type or null) and the canonical way to represent this is
           // to have _no_ target info.
           TypeHolder typeHolderIfNonNull =
-              new TypeHolder(info.declaredType, newTypesOfInterest, null);
-          TypeHolder typeHolderIfNull = new TypeHolder(info.declaredType, null,
-              new Set<ir.DartType>()..add(info.declaredType));
-          newInfoMap[variable] = new TargetInfo(
+              TypeHolder(info.declaredType, newTypesOfInterest, null);
+          TypeHolder typeHolderIfNull = TypeHolder(info.declaredType, null,
+              Set<ir.DartType>()..add(info.declaredType));
+          newInfoMap[variable] = TargetInfo(
               info.declaredType,
               <TypeHolder>[typeHolderIfNonNull, typeHolderIfNull],
               newTypesOfInterest);
@@ -2274,7 +2270,7 @@
         changed = true;
       }
     });
-    return changed ? new TypeMap(newInfoMap) : this;
+    return changed ? TypeMap(newInfoMap) : this;
   }
 
   /// Computes a single type that soundly represents the promoted type of
@@ -2289,7 +2285,7 @@
   }
 
   String getText(String Function(Iterable<ir.DartType>) typesToText) {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('{');
     String comma = '';
     _targetInfoMap.forEach((ir.VariableDeclaration variable, TargetInfo info) {
@@ -2303,7 +2299,7 @@
 
   @override
   String toString() {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('TypeMap(');
     String comma = '';
     _targetInfoMap.forEach((ir.VariableDeclaration variable, TargetInfo info) {
diff --git a/pkg/compiler/lib/src/ir/static_type_base.dart b/pkg/compiler/lib/src/ir/static_type_base.dart
index 05a45ee1..2bd9146 100644
--- a/pkg/compiler/lib/src/ir/static_type_base.dart
+++ b/pkg/compiler/lib/src/ir/static_type_base.dart
@@ -23,8 +23,7 @@
       : super(classNode, nullability, typeArguments);
 
   factory ThisInterfaceType.from(ir.InterfaceType type) => type != null
-      ? new ThisInterfaceType(
-          type.classNode, type.nullability, type.typeArguments)
+      ? ThisInterfaceType(type.classNode, type.nullability, type.typeArguments)
       : null;
 
   @override
@@ -39,8 +38,7 @@
       : super(classNode, nullability, typeArguments);
 
   factory ExactInterfaceType.from(ir.InterfaceType type) => type != null
-      ? new ExactInterfaceType(
-          type.classNode, type.nullability, type.typeArguments)
+      ? ExactInterfaceType(type.classNode, type.nullability, type.typeArguments)
       : null;
 
   @override
diff --git a/pkg/compiler/lib/src/ir/static_type_cache.dart b/pkg/compiler/lib/src/ir/static_type_cache.dart
index dc20d4b..59f2d66 100644
--- a/pkg/compiler/lib/src/ir/static_type_cache.dart
+++ b/pkg/compiler/lib/src/ir/static_type_cache.dart
@@ -24,7 +24,7 @@
       Map<ir.ForInStatement, ir.DartType> forInIteratorTypes = source
           .readTreeNodeMapInContext(source.readDartTypeNode, emptyAsNull: true);
       source.end(tag);
-      return new StaticTypeCache(expressionTypes, forInIteratorTypes);
+      return StaticTypeCache(expressionTypes, forInIteratorTypes);
     });
   }
 
diff --git a/pkg/compiler/lib/src/ir/util.dart b/pkg/compiler/lib/src/ir/util.dart
index 5c5021f..27b00cb 100644
--- a/pkg/compiler/lib/src/ir/util.dart
+++ b/pkg/compiler/lib/src/ir/util.dart
@@ -42,7 +42,7 @@
     node = node.parent;
   }
   if (uri != null) {
-    return new SourceSpan(uri, offset, offset + 1);
+    return SourceSpan(uri, offset, offset + 1);
   }
   return null;
 }
@@ -60,7 +60,7 @@
       return AsyncMarker.SYNC_STAR;
     case ir.AsyncMarker.SyncYielding:
     default:
-      throw new UnsupportedError(
+      throw UnsupportedError(
           "Async marker ${node.asyncMarker} is not supported.");
   }
 }
@@ -76,7 +76,7 @@
     case ir.Variance.invariant:
       return Variance.invariant;
     default:
-      throw new UnsupportedError("Variance ${node.variance} is not supported.");
+      throw UnsupportedError("Variance ${node.variance} is not supported.");
   }
 }
 
@@ -125,7 +125,7 @@
         if (receiver is ir.VariableGet && receiver.variable == node.variable) {
           // We have
           //   let #t1 = e0 in #t1 == null ? null : e1
-          return new NullAwareExpression(node.variable, body.otherwise);
+          return NullAwareExpression(node.variable, body.otherwise);
         }
       }
     }
@@ -238,7 +238,7 @@
 
   @override
   bool defaultDartType(ir.DartType node) {
-    throw new UnsupportedError("FreeVariableVisitor.defaultTypeNode");
+    throw UnsupportedError("FreeVariableVisitor.defaultTypeNode");
   }
 }
 
diff --git a/pkg/compiler/lib/src/ir/visitors.dart b/pkg/compiler/lib/src/ir/visitors.dart
index cbcfda9..8e014ab 100644
--- a/pkg/compiler/lib/src/ir/visitors.dart
+++ b/pkg/compiler/lib/src/ir/visitors.dart
@@ -18,7 +18,7 @@
 
   @override
   String visitStringConcatenation(ir.StringConcatenation node) {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     for (ir.Expression expression in node.expressions) {
       String value = expression.accept(this);
       if (value == null) return null;
@@ -78,7 +78,7 @@
 
   List<DartType> visitTypes(List<ir.DartType> types) {
     topLevel = false;
-    return new List.generate(
+    return List.generate(
         types.length, (int index) => types[index].accept(this));
   }
 
@@ -196,13 +196,12 @@
 
   @override
   ConstantValue defaultConstant(ir.Constant node) {
-    throw new UnsupportedError(
-        "Unexpected constant $node (${node.runtimeType}).");
+    throw UnsupportedError("Unexpected constant $node (${node.runtimeType}).");
   }
 
   @override
   ConstantValue visitUnevaluatedConstant(ir.UnevaluatedConstant node) {
-    throw new UnsupportedError("Unexpected unevaluated constant $node.");
+    throw UnsupportedError("Unexpected unevaluated constant $node.");
   }
 
   @override
@@ -216,7 +215,7 @@
     ir.Procedure member = node.target;
     FunctionEntity function = elementMap.getMethod(member);
     DartType type = elementMap.getFunctionType(member.function);
-    return new FunctionConstantValue(function, type);
+    return FunctionConstantValue(function, type);
   }
 
   @override
@@ -226,7 +225,7 @@
       typeArguments.add(elementMap.getDartType(type));
     }
     FunctionConstantValue function = visitConstant(node.tearOffConstant);
-    return new InstantiationConstantValue(typeArguments, function);
+    return InstantiationConstantValue(typeArguments, function);
   }
 
   @override
@@ -238,7 +237,7 @@
       FieldEntity field = elementMap.getField(reference.asField);
       fields[field] = visitConstant(value);
     });
-    return new ConstructedConstantValue(type, fields);
+    return ConstructedConstantValue(type, fields);
   }
 
   @override
diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart
index 699f97a..164d917 100644
--- a/pkg/compiler/lib/src/js_backend/backend.dart
+++ b/pkg/compiler/lib/src/js_backend/backend.dart
@@ -50,10 +50,10 @@
   static const int _canInlineInLoopMayInlineOutside = 3;
   static const int _canInline = 4;
 
-  final Map<FunctionEntity, int> _cachedDecisions = Map<FunctionEntity, int>();
+  final Map<FunctionEntity, int> _cachedDecisions = {};
 
-  final Set<FunctionEntity> _noInlineFunctions = Set<FunctionEntity>();
-  final Set<FunctionEntity> _tryInlineFunctions = Set<FunctionEntity>();
+  final Set<FunctionEntity> _noInlineFunctions = {};
+  final Set<FunctionEntity> _tryInlineFunctions = {};
 
   FunctionInlineCache(AnnotationsData annotationsData) {
     annotationsData.forEachNoInline((FunctionEntity function) {
diff --git a/pkg/compiler/lib/src/js_backend/backend_impact.dart b/pkg/compiler/lib/src/js_backend/backend_impact.dart
index 59a3310..fd4c2b8 100644
--- a/pkg/compiler/lib/src/js_backend/backend_impact.dart
+++ b/pkg/compiler/lib/src/js_backend/backend_impact.dart
@@ -33,15 +33,14 @@
   final EnumSet<BackendFeature> _features;
 
   const BackendImpact(
-      {this.staticUses = const <FunctionEntity>[],
-      this.globalUses = const <FunctionEntity>[],
-      this.dynamicUses = const <Selector>[],
-      this.instantiatedTypes = const <InterfaceType>[],
-      this.instantiatedClasses = const <ClassEntity>[],
-      this.globalClasses = const <ClassEntity>[],
-      this.otherImpacts = const <BackendImpact>[],
-      EnumSet<BackendFeature> features =
-          const EnumSet<BackendFeature>.fixed(0)})
+      {this.staticUses = const [],
+      this.globalUses = const [],
+      this.dynamicUses = const [],
+      this.instantiatedTypes = const [],
+      this.instantiatedClasses = const [],
+      this.globalClasses = const [],
+      this.otherImpacts = const [],
+      EnumSet<BackendFeature> features = const EnumSet.fixed(0)})
       : this._features = features;
 
   Iterable<BackendFeature> get features =>
@@ -738,7 +737,7 @@
         BackendImpact(globalClasses: [_commonElements.closureClass]);
   }
 
-  Map<int, BackendImpact> _genericInstantiation = <int, BackendImpact>{};
+  Map<int, BackendImpact> _genericInstantiation = {};
 
   BackendImpact getGenericInstantiation(int typeArgumentCount) =>
       _genericInstantiation[typeArgumentCount] ??= BackendImpact(staticUses: [
diff --git a/pkg/compiler/lib/src/js_backend/backend_usage.dart b/pkg/compiler/lib/src/js_backend/backend_usage.dart
index 0119259..c4968ce 100644
--- a/pkg/compiler/lib/src/js_backend/backend_usage.dart
+++ b/pkg/compiler/lib/src/js_backend/backend_usage.dart
@@ -110,12 +110,12 @@
   Setlet<ClassEntity> _globalClassDependencies;
 
   /// List of methods that the backend may use.
-  final Set<FunctionEntity> _helperFunctionsUsed = Set<FunctionEntity>();
+  final Set<FunctionEntity> _helperFunctionsUsed = {};
 
   /// List of classes that the backend may use.
-  final Set<ClassEntity> _helperClassesUsed = Set<ClassEntity>();
+  final Set<ClassEntity> _helperClassesUsed = {};
 
-  final Set<RuntimeTypeUse> _runtimeTypeUses = Set<RuntimeTypeUse>();
+  final Set<RuntimeTypeUse> _runtimeTypeUses = {};
 
   bool _needToInitializeIsolateAffinityTag = false;
   bool _needToInitializeDispatchProperty = false;
@@ -256,18 +256,14 @@
   @override
   void registerGlobalFunctionDependency(FunctionEntity element) {
     assert(element != null);
-    if (_globalFunctionDependencies == null) {
-      _globalFunctionDependencies = Setlet<FunctionEntity>();
-    }
+    _globalFunctionDependencies ??= Setlet();
     _globalFunctionDependencies.add(element);
   }
 
   @override
   void registerGlobalClassDependency(ClassEntity element) {
     assert(element != null);
-    if (_globalClassDependencies == null) {
-      _globalClassDependencies = Setlet<ClassEntity>();
-    }
+    _globalClassDependencies ??= Setlet();
     _globalClassDependencies.add(element);
   }
 
@@ -434,11 +430,11 @@
 
   @override
   Iterable<FunctionEntity> get globalFunctionDependencies =>
-      _globalFunctionDependencies ?? const <FunctionEntity>[];
+      _globalFunctionDependencies ?? const [];
 
   @override
   Iterable<ClassEntity> get globalClassDependencies =>
-      _globalClassDependencies ?? const <ClassEntity>[];
+      _globalClassDependencies ?? const [];
 
   Iterable<FunctionEntity> get helperFunctionsUsed => _helperFunctionsUsed;
 
diff --git a/pkg/compiler/lib/src/js_backend/checked_mode_helpers.dart b/pkg/compiler/lib/src/js_backend/checked_mode_helpers.dart
index 6bb4fc5..85d2323 100644
--- a/pkg/compiler/lib/src/js_backend/checked_mode_helpers.dart
+++ b/pkg/compiler/lib/src/js_backend/checked_mode_helpers.dart
@@ -28,7 +28,7 @@
   CheckedModeHelpers();
 
   /// All the checked mode helpers.
-  static const List<CheckedModeHelper> helpers = <CheckedModeHelper>[
+  static const List<CheckedModeHelper> helpers = [
     CheckedModeHelper('boolConversionCheck'),
   ];
 }
diff --git a/pkg/compiler/lib/src/js_backend/constant_emitter.dart b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
index 7c90ccd..d08b4a8 100644
--- a/pkg/compiler/lib/src/js_backend/constant_emitter.dart
+++ b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
@@ -265,7 +265,7 @@
           classElement, "Compiler encoutered unexpected set class $className");
     }
 
-    List<jsAst.Expression> arguments = <jsAst.Expression>[
+    List<jsAst.Expression> arguments = [
       _constantReferenceGenerator(constant.entries),
     ];
 
@@ -281,7 +281,7 @@
   jsAst.Expression visitMap(constant_system.JavaScriptMapConstant constant,
       [_]) {
     jsAst.Expression jsMap() {
-      List<jsAst.Property> properties = <jsAst.Property>[];
+      List<jsAst.Property> properties = [];
       for (int i = 0; i < constant.length; i++) {
         StringConstantValue key = constant.keys[i];
         if (key.stringValue ==
@@ -299,7 +299,7 @@
     }
 
     jsAst.Expression jsGeneralMap() {
-      List<jsAst.Expression> data = <jsAst.Expression>[];
+      List<jsAst.Expression> data = [];
       for (int i = 0; i < constant.keys.length; i++) {
         jsAst.Expression keyExpression =
             _constantReferenceGenerator(constant.keys[i]);
@@ -314,7 +314,7 @@
     ClassEntity classElement = constant.type.element;
     String className = classElement.name;
 
-    List<jsAst.Expression> arguments = <jsAst.Expression>[];
+    List<jsAst.Expression> arguments = [];
 
     // The arguments of the JavaScript constructor for any given Dart class
     // are in the same order as the members of the class element.
@@ -396,7 +396,7 @@
     }
     jsAst.Expression constructor =
         _emitter.constructorAccess(constant.type.element);
-    List<jsAst.Expression> fields = <jsAst.Expression>[];
+    List<jsAst.Expression> fields = [];
     _elementEnvironment.forEachInstanceField(element, (_, FieldEntity field) {
       FieldAnalysisData fieldData = _fieldAnalysis.getFieldData(field);
       if (fieldData.isElided) return;
@@ -415,7 +415,7 @@
       [_]) {
     ClassEntity cls =
         _commonElements.getInstantiationClass(constant.typeArguments.length);
-    List<jsAst.Expression> fields = <jsAst.Expression>[
+    List<jsAst.Expression> fields = [
       _constantReferenceGenerator(constant.function)
     ];
     fields.add(_reifiedTypeNewRti(
diff --git a/pkg/compiler/lib/src/js_backend/custom_elements_analysis.dart b/pkg/compiler/lib/src/js_backend/custom_elements_analysis.dart
index d84d9a5..efbc78d 100644
--- a/pkg/compiler/lib/src/js_backend/custom_elements_analysis.dart
+++ b/pkg/compiler/lib/src/js_backend/custom_elements_analysis.dart
@@ -158,10 +158,10 @@
 
   // Classes that are candidates for needing constructors.  Classes are moved to
   // [activeClasses] when we know they need constructors.
-  final Set<ClassEntity> instantiatedClasses = Set<ClassEntity>();
+  final Set<ClassEntity> instantiatedClasses = {};
 
   // Classes explicitly named.
-  final Set<ClassEntity> selectedClasses = Set<ClassEntity>();
+  final Set<ClassEntity> selectedClasses = {};
 
   // True if we must conservatively include all extension classes.
   bool allClassesSelected = false;
@@ -170,7 +170,7 @@
   bool demanded = false;
 
   // ClassesOutput: classes requiring metadata.
-  final Set<ClassEntity> activeClasses = Set<ClassEntity>();
+  final Set<ClassEntity> activeClasses = {};
 
   CustomElementsAnalysisJoin(
       this._elementEnvironment, this._commonElements, this._nativeData,
@@ -217,7 +217,7 @@
   }
 
   List<ConstructorEntity> computeEscapingConstructors(ClassEntity cls) {
-    List<ConstructorEntity> result = <ConstructorEntity>[];
+    List<ConstructorEntity> result = [];
     // Only classes that extend native classes have constructors in the table.
     // We could refine this to classes that extend Element, but that would break
     // the tests and there is no sane reason to subclass other native classes.
diff --git a/pkg/compiler/lib/src/js_backend/enqueuer.dart b/pkg/compiler/lib/src/js_backend/enqueuer.dart
index 7d5e4d7..2741824 100644
--- a/pkg/compiler/lib/src/js_backend/enqueuer.dart
+++ b/pkg/compiler/lib/src/js_backend/enqueuer.dart
@@ -32,7 +32,7 @@
 /// [Enqueuer] which is specific to code generation.
 class CodegenEnqueuer extends EnqueuerImpl {
   final String name;
-  Set<ClassEntity> _recentClasses = Setlet<ClassEntity>();
+  Set<ClassEntity> _recentClasses = Setlet();
   bool _recentConstants = false;
   final CodegenWorldBuilderImpl _worldBuilder;
   final WorkItemBuilder _workItemBuilder;
@@ -50,7 +50,7 @@
   final Queue<WorkItem> _queue = Queue<WorkItem>();
 
   /// All declaration elements that have been processed by codegen.
-  final Set<MemberEntity> _processedEntities = Set<MemberEntity>();
+  final Set<MemberEntity> _processedEntities = {};
 
   // If not `null` this is called when the queue has been emptied. It allows for
   // applying additional impacts before re-emptying the queue.
diff --git a/pkg/compiler/lib/src/js_backend/inferred_data.dart b/pkg/compiler/lib/src/js_backend/inferred_data.dart
index a432c15..3dc454a 100644
--- a/pkg/compiler/lib/src/js_backend/inferred_data.dart
+++ b/pkg/compiler/lib/src/js_backend/inferred_data.dart
@@ -205,17 +205,15 @@
 }
 
 class InferredDataBuilderImpl implements InferredDataBuilder {
-  final Set<MemberEntity> _functionsCalledInLoop = Set<MemberEntity>();
-  Map<MemberEntity, SideEffectsBuilder> _sideEffectsBuilders =
-      <MemberEntity, SideEffectsBuilder>{};
-  final Set<FunctionEntity> prematureSideEffectAccesses = Set<FunctionEntity>();
+  final Set<MemberEntity> _functionsCalledInLoop = {};
+  Map<MemberEntity, SideEffectsBuilder> _sideEffectsBuilders = {};
+  final Set<FunctionEntity> prematureSideEffectAccesses = {};
 
-  final Set<FunctionEntity> _sideEffectsFreeElements = Set<FunctionEntity>();
+  final Set<FunctionEntity> _sideEffectsFreeElements = {};
 
-  final Set<FunctionEntity> _elementsThatCannotThrow = Set<FunctionEntity>();
+  final Set<FunctionEntity> _elementsThatCannotThrow = {};
 
-  final Set<FunctionEntity> _functionsThatMightBePassedToApply =
-      Set<FunctionEntity>();
+  final Set<FunctionEntity> _functionsThatMightBePassedToApply = {};
 
   InferredDataBuilderImpl(AnnotationsData annotationsData) {
     annotationsData.forEachNoThrows(registerCannotThrow);
@@ -239,8 +237,7 @@
   InferredData close(JClosedWorld closedWorld) {
     assert(_sideEffectsBuilders != null,
         "Inferred data has already been computed.");
-    Map<FunctionEntity, SideEffects> _sideEffects =
-        <FunctionEntity, SideEffects>{};
+    Map<FunctionEntity, SideEffects> _sideEffects = {};
     Iterable<SideEffectsBuilder> sideEffectsBuilders =
         _sideEffectsBuilders.values;
     emptyWorkList(sideEffectsBuilders);
@@ -260,8 +257,8 @@
 
   static void emptyWorkList(Iterable<SideEffectsBuilder> sideEffectsBuilders) {
     // TODO(johnniwinther): Optimize this algorithm.
-    Queue<SideEffectsBuilder> queue = Queue<SideEffectsBuilder>();
-    Set<SideEffectsBuilder> inQueue = Set<SideEffectsBuilder>();
+    Queue<SideEffectsBuilder> queue = Queue();
+    Set<SideEffectsBuilder> inQueue = {};
 
     for (SideEffectsBuilder builder in sideEffectsBuilders) {
       queue.addLast(builder);
diff --git a/pkg/compiler/lib/src/js_backend/interceptor_data.dart b/pkg/compiler/lib/src/js_backend/interceptor_data.dart
index 11340cd..2665c82 100644
--- a/pkg/compiler/lib/src/js_backend/interceptor_data.dart
+++ b/pkg/compiler/lib/src/js_backend/interceptor_data.dart
@@ -97,13 +97,11 @@
   ///
   /// These members must be invoked with a correct explicit receiver even when
   /// the receiver is not an intercepted class.
-  final Map<String, Set<MemberEntity>> _interceptedMixinElements =
-      Map<String, Set<MemberEntity>>();
+  final Map<String, Set<MemberEntity>> _interceptedMixinElements = {};
 
-  final Map<String, Set<ClassEntity>> _interceptedClassesCache =
-      Map<String, Set<ClassEntity>>();
+  final Map<String, Set<ClassEntity>> _interceptedClassesCache = {};
 
-  final Set<ClassEntity> _noClasses = Set<ClassEntity>();
+  final Set<ClassEntity> _noClasses = {};
 
   InterceptorDataImpl(
       this._nativeData,
@@ -220,7 +218,7 @@
     return _interceptedClassesCache.putIfAbsent(name, () {
       // Populate the cache by running through all the elements and
       // determine if the given selector applies to them.
-      Set<ClassEntity> result = Set<ClassEntity>();
+      Set<ClassEntity> result = {};
       for (MemberEntity element in intercepted) {
         ClassEntity classElement = element.enclosingClass;
         if (_isCompileTimeOnlyClass(classElement)) continue;
@@ -246,7 +244,7 @@
       closedWorld.classHierarchy.forEachStrictSubclassOf(use,
           (ClassEntity subclass) {
         if (_nativeData.isNativeOrExtendsNative(subclass)) {
-          if (result == null) result = Set<ClassEntity>();
+          if (result == null) result = {};
           result.add(subclass);
         }
         return IterationStep.CONTINUE;
@@ -290,17 +288,15 @@
   /// The members of instantiated interceptor classes: maps a member name to the
   /// list of members that have that name. This map is used by the codegen to
   /// know whether a send must be intercepted or not.
-  final Map<String, Set<MemberEntity>> _interceptedElements =
-      <String, Set<MemberEntity>>{};
+  final Map<String, Set<MemberEntity>> _interceptedElements = {};
 
   /// Set of classes whose methods are intercepted.
-  final Set<ClassEntity> _interceptedClasses = Set<ClassEntity>();
+  final Set<ClassEntity> _interceptedClasses = {};
 
   /// Set of classes used as mixins on intercepted (native and primitive)
   /// classes. Methods on these classes might also be mixed in to regular Dart
   /// (unintercepted) classes.
-  final Set<ClassEntity> _classesMixedIntoInterceptedClasses =
-      Set<ClassEntity>();
+  final Set<ClassEntity> _classesMixedIntoInterceptedClasses = {};
 
   InterceptorDataBuilderImpl(
       this._nativeData, this._elementEnvironment, this._commonElements);
@@ -322,8 +318,7 @@
       if (member.name == Identifiers.call) return;
       // All methods on [Object] are shadowed by [Interceptor].
       if (cls == _commonElements.objectClass) return;
-      Set<MemberEntity> set =
-          _interceptedElements[member.name] ??= Set<MemberEntity>();
+      Set<MemberEntity> set = _interceptedElements[member.name] ??= {};
       set.add(member);
     });
 
@@ -340,8 +335,7 @@
           (ClassEntity cls, MemberEntity member) {
         // All methods on [Object] are shadowed by [Interceptor].
         if (cls == _commonElements.objectClass) return;
-        Set<MemberEntity> set =
-            _interceptedElements[member.name] ??= Set<MemberEntity>();
+        Set<MemberEntity> set = _interceptedElements[member.name] ??= {};
         set.add(member);
       });
     }
diff --git a/pkg/compiler/lib/src/js_backend/js_interop_analysis.dart b/pkg/compiler/lib/src/js_backend/js_interop_analysis.dart
index b74afb2..175290c 100644
--- a/pkg/compiler/lib/src/js_backend/js_interop_analysis.dart
+++ b/pkg/compiler/lib/src/js_backend/js_interop_analysis.dart
@@ -17,7 +17,7 @@
 jsAst.Statement buildJsInteropBootstrap(
     CodegenWorld codegenWorld, NativeBasicData nativeBasicData, Namer namer) {
   if (!nativeBasicData.isJsInteropUsed) return null;
-  List<jsAst.Statement> statements = <jsAst.Statement>[];
+  List<jsAst.Statement> statements = [];
   codegenWorld.forEachInvokedName(
       (String name, Map<Selector, SelectorConstraints> selectors) {
     selectors.forEach((Selector selector, SelectorConstraints constraints) {
diff --git a/pkg/compiler/lib/src/js_backend/minify_namer.dart b/pkg/compiler/lib/src/js_backend/minify_namer.dart
index 61d0628..b102340 100644
--- a/pkg/compiler/lib/src/js_backend/minify_namer.dart
+++ b/pkg/compiler/lib/src/js_backend/minify_namer.dart
@@ -48,7 +48,7 @@
   // variables) because they clash with names from the DOM. However, it is
   // OK to use them as fields, as we only access fields directly if we know
   // the receiver type.
-  static const List<String> _reservedNativeProperties = <String>[
+  static const List<String> _reservedNativeProperties = [
     'a', 'b', 'c', 'd', 'e', 'f', 'r', 'x', 'y', 'z', 'Q',
     // 2-letter:
     'ch', 'cx', 'cy', 'db', 'dx', 'dy', 'fr', 'fx', 'fy', 'go', 'id', 'k1',
@@ -95,7 +95,7 @@
     // individually per program, but that would mean that the output of the
     // minifier was less stable from version to version of the program being
     // minified.
-    _populateSuggestedNames(instanceScope, const <String>[
+    _populateSuggestedNames(instanceScope, const [
       r'$add',
       r'add$1',
       r'$and',
@@ -136,7 +136,7 @@
       r'toString$0'
     ]);
 
-    _populateSuggestedNames(globalScope, const <String>[
+    _populateSuggestedNames(globalScope, const [
       r'Object',
       'wrapException',
       r'$eq',
@@ -208,7 +208,7 @@
     for (int n = 1; n <= 3; n++) {
       int h = hash;
       while (h > 10) {
-        List<int> codes = <int>[_letterNumber(h)];
+        List<int> codes = [_letterNumber(h)];
         int h2 = h ~/ ALPHABET_CHARACTERS;
         for (int i = 1; i < n; i++) {
           codes.add(_alphaNumericNumber(h2));
@@ -251,7 +251,7 @@
 
   /// Remember bad hashes to avoid using a the same character with long numbers
   /// for frequent hashes. For example, `closure` is a very common name.
-  Map<int, int> _badNames = Map<int, int>();
+  Map<int, int> _badNames = {};
 
   /// If we can't find a hash based name in the three-letter space, then base
   /// the name on a letter and a counter.
@@ -360,8 +360,7 @@
 }
 
 abstract class _MinifyConstructorBodyNamer implements Namer {
-  Map<ClassEntity, _ConstructorBodyNamingScope> _constructorBodyScopes =
-      Map<ClassEntity, _ConstructorBodyNamingScope>();
+  Map<ClassEntity, _ConstructorBodyNamingScope> _constructorBodyScopes = {};
 
   @override
   jsAst.Name constructorBodyName(ConstructorBodyEntity method) {
diff --git a/pkg/compiler/lib/src/js_backend/namer.dart b/pkg/compiler/lib/src/js_backend/namer.dart
index 6d60ea5..11d3b51 100644
--- a/pkg/compiler/lib/src/js_backend/namer.dart
+++ b/pkg/compiler/lib/src/js_backend/namer.dart
@@ -135,7 +135,7 @@
 /// For local variables, the [Namer] only provides *proposed names*. These names
 /// must be disambiguated elsewhere.
 class Namer extends ModularNamer {
-  static const List<String> javaScriptKeywords = <String>[
+  static const List<String> javaScriptKeywords = [
     // ES5 7.6.1.1 Keywords.
     'break',
     'do',
@@ -238,7 +238,7 @@
     // Other words to avoid due to non-standard keyword-like behavior.
   ];
 
-  static const List<String> reservedPropertySymbols = <String>[
+  static const List<String> reservedPropertySymbols = [
     "__proto__", "prototype", "constructor", "call",
     // "use strict" disallows the use of "arguments" and "eval" as
     // variable names or property names. See ECMA-262, Edition 5.1,
@@ -304,7 +304,7 @@
 
   /// Symbols that we might be using in our JS snippets. Some of the symbols in
   /// these sections are in [reservedGlobalUpperCaseSymbols] above.
-  static const List<String> reservedGlobalSymbols = <String>[
+  static const List<String> reservedGlobalSymbols = [
     // Section references are from Ecma-262
     // (http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf)
 
@@ -394,7 +394,7 @@
 
   // TODO(joshualitt): Stop reserving these names after local naming is updated
   // to use frequencies.
-  static const List<String> reservedGlobalObjectNames = <String>[
+  static const List<String> reservedGlobalObjectNames = [
     "A",
     "B",
     "C", // Global object for *C*onstants.
@@ -423,7 +423,7 @@
     "Z",
   ];
 
-  static const List<String> reservedGlobalHelperFunctions = <String>[
+  static const List<String> reservedGlobalHelperFunctions = [
     "init",
   ];
 
@@ -1606,7 +1606,7 @@
 
   String root = null; // First word, usually a type name.
   bool failed = false; // Failed to generate something pretty.
-  List<String> fragments = <String>[];
+  List<String> fragments = [];
   int length = 0;
 
   ConstantNamingVisitor(this._namer, this._closedWorld, this._hasher);
diff --git a/pkg/compiler/lib/src/js_backend/namer_names.dart b/pkg/compiler/lib/src/js_backend/namer_names.dart
index fe43140..b549098 100644
--- a/pkg/compiler/lib/src/js_backend/namer_names.dart
+++ b/pkg/compiler/lib/src/js_backend/namer_names.dart
@@ -152,7 +152,7 @@
 
   CompoundName(this._parts);
 
-  CompoundName.from(List<jsAst.Name> parts) : this(<_NamerName>[...parts]);
+  CompoundName.from(List<jsAst.Name> parts) : this([...parts]);
 
   @override
   bool get isFinalized => _parts.every((name) => name.isFinalized);
diff --git a/pkg/compiler/lib/src/js_backend/native_data.dart b/pkg/compiler/lib/src/js_backend/native_data.dart
index 11c8e41..1ef691d 100644
--- a/pkg/compiler/lib/src/js_backend/native_data.dart
+++ b/pkg/compiler/lib/src/js_backend/native_data.dart
@@ -186,20 +186,19 @@
 
   /// Tag info for native JavaScript classes names. See
   /// [setNativeClassTagInfo].
-  Map<ClassEntity, NativeClassTag> nativeClassTagInfo =
-      <ClassEntity, NativeClassTag>{};
+  Map<ClassEntity, NativeClassTag> nativeClassTagInfo = {};
 
   /// The JavaScript libraries implemented via typed JavaScript interop.
-  Map<LibraryEntity, String> jsInteropLibraries = <LibraryEntity, String>{};
+  Map<LibraryEntity, String> jsInteropLibraries = {};
 
   /// The JavaScript classes implemented via typed JavaScript interop.
-  Map<ClassEntity, String> jsInteropClasses = <ClassEntity, String>{};
+  Map<ClassEntity, String> jsInteropClasses = {};
 
   /// JavaScript interop classes annotated with `@anonymous`
-  Set<ClassEntity> anonymousJsInteropClasses = Set<ClassEntity>();
+  Set<ClassEntity> anonymousJsInteropClasses = {};
 
   /// The JavaScript members implemented via typed JavaScript interop.
-  Map<MemberEntity, String> jsInteropMembers = <MemberEntity, String>{};
+  Map<MemberEntity, String> jsInteropMembers = {};
 
   @override
   void setNativeClassTagInfo(ClassEntity cls, String tagText) {
@@ -477,19 +476,16 @@
   final NativeBasicDataImpl _nativeBasicData;
 
   /// The JavaScript names for native JavaScript elements implemented.
-  Map<MemberEntity, String> nativeMemberName = <MemberEntity, String>{};
+  Map<MemberEntity, String> nativeMemberName = {};
 
   /// Cache for [NativeBehavior]s for calling native methods.
-  Map<FunctionEntity, NativeBehavior> nativeMethodBehavior =
-      <FunctionEntity, NativeBehavior>{};
+  Map<FunctionEntity, NativeBehavior> nativeMethodBehavior = {};
 
   /// Cache for [NativeBehavior]s for reading from native fields.
-  Map<MemberEntity, NativeBehavior> nativeFieldLoadBehavior =
-      <FieldEntity, NativeBehavior>{};
+  Map<MemberEntity, NativeBehavior> nativeFieldLoadBehavior = {};
 
   /// Cache for [NativeBehavior]s for writing to native fields.
-  Map<MemberEntity, NativeBehavior> nativeFieldStoreBehavior =
-      <FieldEntity, NativeBehavior>{};
+  Map<MemberEntity, NativeBehavior> nativeFieldStoreBehavior = {};
 
   NativeDataBuilderImpl(this._nativeBasicData);
 
diff --git a/pkg/compiler/lib/src/js_backend/no_such_method_registry.dart b/pkg/compiler/lib/src/js_backend/no_such_method_registry.dart
index ffca921..1ef96e6 100644
--- a/pkg/compiler/lib/src/js_backend/no_such_method_registry.dart
+++ b/pkg/compiler/lib/src/js_backend/no_such_method_registry.dart
@@ -67,25 +67,25 @@
 
 class NoSuchMethodRegistryImpl implements NoSuchMethodRegistry {
   /// The implementations that fall into category A, described above.
-  final Set<FunctionEntity> defaultImpls = Set<FunctionEntity>();
+  final Set<FunctionEntity> defaultImpls = {};
 
   /// The implementations that fall into category B, described above.
-  final Set<FunctionEntity> throwingImpls = Set<FunctionEntity>();
+  final Set<FunctionEntity> throwingImpls = {};
 
   /// The implementations that fall into category C, described above.
   // TODO(johnniwinther): Remove this category when Dart 1 is no longer
   // supported.
-  final Set<FunctionEntity> notApplicableImpls = Set<FunctionEntity>();
+  final Set<FunctionEntity> notApplicableImpls = {};
 
   /// The implementations that fall into category D, described above.
-  final Set<FunctionEntity> otherImpls = Set<FunctionEntity>();
+  final Set<FunctionEntity> otherImpls = {};
 
   /// The implementations that have not yet been categorized.
-  final Set<FunctionEntity> _uncategorizedImpls = Set<FunctionEntity>();
+  final Set<FunctionEntity> _uncategorizedImpls = {};
 
   /// The implementations that a forwarding syntax as defined by
   /// [NoSuchMethodResolver.hasForwardSyntax].
-  final Set<FunctionEntity> forwardingSyntaxImpls = Set<FunctionEntity>();
+  final Set<FunctionEntity> forwardingSyntaxImpls = {};
 
   final CommonElements _commonElements;
   final NoSuchMethodResolver _resolver;
@@ -210,10 +210,10 @@
   final Set<FunctionEntity> otherImpls;
 
   /// The implementations that fall into category D1
-  final Set<FunctionEntity> complexNoReturnImpls = Set<FunctionEntity>();
+  final Set<FunctionEntity> complexNoReturnImpls = {};
 
   /// The implementations that fall into category D2
-  final Set<FunctionEntity> complexReturningImpls = Set<FunctionEntity>();
+  final Set<FunctionEntity> complexReturningImpls = {};
 
   final Set<FunctionEntity> forwardingSyntaxImpls;
 
diff --git a/pkg/compiler/lib/src/js_backend/resolution_listener.dart b/pkg/compiler/lib/src/js_backend/resolution_listener.dart
index 3bccb68..02fc83a 100644
--- a/pkg/compiler/lib/src/js_backend/resolution_listener.dart
+++ b/pkg/compiler/lib/src/js_backend/resolution_listener.dart
@@ -265,10 +265,11 @@
         FunctionType functionType =
             _elementEnvironment.getFunctionType(function);
 
-        var allParameterTypes = <DartType>[]
-          ..addAll(functionType.parameterTypes)
-          ..addAll(functionType.optionalParameterTypes)
-          ..addAll(functionType.namedParameterTypes);
+        var allParameterTypes = <DartType>[
+          ...functionType.parameterTypes,
+          ...functionType.optionalParameterTypes,
+          ...functionType.namedParameterTypes
+        ];
         for (var type in allParameterTypes) {
           if (type.withoutNullability is FunctionType) {
             var closureConverter = _commonElements.closureConverter;
@@ -454,7 +455,7 @@
   void _registerCheckedModeHelpers(WorldImpactBuilder impactBuilder) {
     // We register all the _commonElements in the resolution queue.
     // TODO(13155): Find a way to register fewer _commonElements.
-    List<FunctionEntity> staticUses = <FunctionEntity>[];
+    List<FunctionEntity> staticUses = [];
     for (CheckedModeHelper helper in CheckedModeHelpers.helpers) {
       staticUses.add(helper.getStaticUse(_commonElements).element);
     }
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types.dart b/pkg/compiler/lib/src/js_backend/runtime_types.dart
index ef78879..01df853 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types.dart
@@ -81,7 +81,7 @@
       CodegenWorld codegenWorld, CompilerOptions options) {
     rtiChecksBuilderClosed = true;
 
-    Map<ClassEntity, ClassUse> classUseMap = <ClassEntity, ClassUse>{};
+    Map<ClassEntity, ClassUse> classUseMap = {};
     for (ClassEntity cls in _closedWorld.classHierarchy
         .getClassSet(_closedWorld.commonElements.objectClass)
         .subtypes()) {
@@ -109,7 +109,7 @@
 
   Set<FunctionType> computeCheckedFunctions(
       CodegenWorldBuilder codegenWorldBuilder, Set<DartType> implicitIsChecks) {
-    return Set<FunctionType>();
+    return {};
   }
 }
 
@@ -132,7 +132,7 @@
     // arguments and record all combination where the element of a checked
     // argument is a superclass of the element of an instantiated type.
     TypeCheckMapping result = TypeCheckMapping();
-    Set<ClassEntity> handled = Set<ClassEntity>();
+    Set<ClassEntity> handled = {};
 
     // Empty usage object for classes with no direct rti usage.
     final ClassUse emptyUse = ClassUse();
@@ -182,7 +182,7 @@
       //
       // This set reflects the emitted class hierarchy and therefore uses
       // `getEffectiveMixinClass` to find the inherited mixins.
-      Set<ClassEntity> inheritedClasses = Set<ClassEntity>();
+      Set<ClassEntity> inheritedClasses = {};
       ClassEntity other = cls;
       while (other != null) {
         inheritedClasses.add(other);
@@ -354,7 +354,7 @@
 
   @override
   Set<ClassEntity> getClassesUsedInSubstitutions(TypeChecks checks) {
-    Set<ClassEntity> instantiated = Set<ClassEntity>();
+    Set<ClassEntity> instantiated = {};
     ArgumentCollector collector = ArgumentCollector();
     for (ClassEntity target in checks.classes) {
       ClassChecks classChecks = checks[target];
@@ -474,12 +474,11 @@
 
   @override
   Iterable<ClassEntity> get requiredClasses {
-    Set<ClassEntity> required = Set<ClassEntity>();
-    required.addAll(_typeArguments);
-    required.addAll(_typeLiterals);
-    required
-        .addAll(_substitutions.getClassesUsedInSubstitutions(requiredChecks));
-    return required;
+    return {
+      ..._typeArguments,
+      ..._typeLiterals,
+      ..._substitutions.getClassesUsedInSubstitutions(requiredChecks)
+    };
   }
 }
 
@@ -490,9 +489,9 @@
   final JClosedWorld _closedWorld;
 
   // The set of type arguments tested against type variable bounds.
-  final Set<DartType> checkedTypeArguments = Set<DartType>();
+  final Set<DartType> checkedTypeArguments = {};
   // The set of tested type variable bounds.
-  final Set<DartType> checkedBounds = Set<DartType>();
+  final Set<DartType> checkedBounds = {};
 
   TypeChecks cachedRequiredChecks;
 
@@ -513,8 +512,7 @@
 
   Map<ClassEntity, ClassUse> classUseMapForTesting;
 
-  final Set<GenericInstantiation> _genericInstantiations =
-      Set<GenericInstantiation>();
+  final Set<GenericInstantiation> _genericInstantiations = {};
 
   @override
   void registerTypeVariableBoundsSubtypeCheck(
@@ -537,14 +535,14 @@
     Set<DartType> explicitIsChecks = typeVariableTests.explicitIsChecks;
     Set<DartType> implicitIsChecks = typeVariableTests.implicitIsChecks;
 
-    Map<ClassEntity, ClassUse> classUseMap = <ClassEntity, ClassUse>{};
+    Map<ClassEntity, ClassUse> classUseMap = {};
     if (retainDataForTesting) {
       classUseMapForTesting = classUseMap;
     }
 
-    Set<FunctionType> checkedFunctionTypes = Set<FunctionType>();
-    Set<ClassEntity> typeLiterals = Set<ClassEntity>();
-    Set<ClassEntity> typeArguments = Set<ClassEntity>();
+    Set<FunctionType> checkedFunctionTypes = {};
+    Set<ClassEntity> typeLiterals = {};
+    Set<ClassEntity> typeArguments = {};
 
     // The [liveTypeVisitor] is used to register class use in the type of
     // instantiated objects like `new T` and the function types of
@@ -711,7 +709,7 @@
 
     // Collect classes that are 'live' either through instantiation or use in
     // type arguments.
-    List<ClassEntity> liveClasses = <ClassEntity>[];
+    List<ClassEntity> liveClasses = [];
     classUseMap.forEach((ClassEntity cls, ClassUse classUse) {
       if (classUse.isLive) {
         liveClasses.add(cls);
@@ -774,7 +772,7 @@
 }
 
 class TypeCheckMapping implements TypeChecks {
-  final Map<ClassEntity, ClassChecks> map = Map<ClassEntity, ClassChecks>();
+  final Map<ClassEntity, ClassChecks> map = {};
 
   @override
   ClassChecks operator [](ClassEntity element) {
@@ -802,7 +800,7 @@
 }
 
 class ArgumentCollector extends DartTypeVisitor<void, void> {
-  final Set<ClassEntity> classes = Set<ClassEntity>();
+  final Set<ClassEntity> classes = {};
 
   void addClass(ClassEntity cls) {
     classes.add(cls);
@@ -875,8 +873,7 @@
 }
 
 class TypeVisitor extends DartTypeVisitor<void, TypeVisitorState> {
-  Set<FunctionTypeVariable> _visitedFunctionTypeVariables =
-      Set<FunctionTypeVariable>();
+  Set<FunctionTypeVariable> _visitedFunctionTypeVariables = {};
 
   final void Function(ClassEntity entity, {TypeVisitorState state}) onClass;
   final void Function(TypeVariableEntity entity, {TypeVisitorState state})
@@ -1061,7 +1058,7 @@
 
   @override
   String toString() {
-    List<String> properties = <String>[];
+    List<String> properties = [];
     if (instance) {
       properties.add('instance');
     }
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types_codegen.dart b/pkg/compiler/lib/src/js_backend/runtime_types_codegen.dart
index 5ccf8c3..f549a6a 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types_codegen.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types_codegen.dart
@@ -47,10 +47,10 @@
 
   final ClassFunctionType functionType;
 
-  ClassChecks(this.functionType) : _map = <ClassEntity, TypeCheck>{};
+  ClassChecks(this.functionType) : _map = {};
 
   const ClassChecks.empty()
-      : _map = const <ClassEntity, TypeCheck>{},
+      : _map = const {},
         functionType = null;
 
   void add(TypeCheck check) {
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart b/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart
index efc3f30..11e86e2 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart
@@ -27,7 +27,7 @@
   int _testState = 0;
   int _literalState = 0;
 
-  Iterable<RtiNode> get dependencies => _dependencies ?? const <RtiNode>[];
+  Iterable<RtiNode> get dependencies => _dependencies ?? const [];
 
   bool get hasDirectTest => _testState & 1 != 0;
   bool get hasIndirectTest => _testState & 2 != 0;
@@ -48,7 +48,7 @@
       // [entity]!
       return false;
     }
-    _dependencies ??= Set<RtiNode>();
+    _dependencies ??= {};
     return _dependencies.add(node);
   }
 
@@ -214,7 +214,7 @@
   final Set<DartType> explicitIsChecks;
 
   /// All implicit is-tests.
-  final Set<DartType> implicitIsChecks = Set<DartType>();
+  final Set<DartType> implicitIsChecks = {};
 
   TypeVariableTests(this._elementEnvironment, this._commonElements, this._world,
       this._genericInstantiations,
@@ -316,7 +316,7 @@
     } else {
       dependencies = _methods[entity]?.dependencies;
     }
-    if (dependencies == null) return const <Entity>[];
+    if (dependencies == null) return const [];
     return dependencies.map((n) => n.entity).toSet();
   }
 
@@ -701,7 +701,7 @@
     });
 
     if (forRtiNeeds) {
-      _appliedSelectorMap = <Selector, Set<Entity>>{};
+      _appliedSelectorMap = {};
     }
 
     _world.forEachDynamicTypeArgument(
@@ -1004,12 +1004,11 @@
 class RuntimeTypesNeedBuilderImpl implements RuntimeTypesNeedBuilder {
   final ElementEnvironment _elementEnvironment;
 
-  final Set<ClassEntity> classesUsingTypeVariableLiterals = Set<ClassEntity>();
+  final Set<ClassEntity> classesUsingTypeVariableLiterals = {};
 
-  final Set<FunctionEntity> methodsUsingTypeVariableLiterals =
-      Set<FunctionEntity>();
+  final Set<FunctionEntity> methodsUsingTypeVariableLiterals = {};
 
-  final Set<Local> localFunctionsUsingTypeVariableLiterals = Set<Local>();
+  final Set<Local> localFunctionsUsingTypeVariableLiterals = {};
 
   Map<Selector, Set<Entity>> selectorsNeedingTypeArgumentsForTesting;
 
@@ -1019,8 +1018,7 @@
       get instantiatedEntitiesNeedingTypeArgumentsForTesting =>
           _instantiatedEntitiesNeedingTypeArgumentsForTesting ?? const {};
 
-  final Set<GenericInstantiation> _genericInstantiations =
-      Set<GenericInstantiation>();
+  final Set<GenericInstantiation> _genericInstantiations = {};
 
   TypeVariableTests typeVariableTestsForTesting;
 
@@ -1054,12 +1052,12 @@
         closedWorld.commonElements,
         closedWorld,
         _genericInstantiations);
-    Set<ClassEntity> classesNeedingTypeArguments = Set<ClassEntity>();
-    Set<FunctionEntity> methodsNeedingSignature = Set<FunctionEntity>();
-    Set<FunctionEntity> methodsNeedingTypeArguments = Set<FunctionEntity>();
-    Set<Local> localFunctionsNeedingSignature = Set<Local>();
-    Set<Local> localFunctionsNeedingTypeArguments = Set<Local>();
-    Set<Entity> processedEntities = Set<Entity>();
+    Set<ClassEntity> classesNeedingTypeArguments = {};
+    Set<FunctionEntity> methodsNeedingSignature = {};
+    Set<FunctionEntity> methodsNeedingTypeArguments = {};
+    Set<Local> localFunctionsNeedingSignature = {};
+    Set<Local> localFunctionsNeedingTypeArguments = {};
+    Set<Entity> processedEntities = {};
 
     // Find the classes that need type arguments at runtime. Such
     // classes are:
@@ -1139,14 +1137,14 @@
             }
           });
           localFunctionsNeedingSignature.add(function);
-          localFunctionsToRemove ??= Set<Local>();
+          localFunctionsToRemove ??= {};
           localFunctionsToRemove.add(function);
         }
       }
       for (FunctionEntity function in closurizedMembers) {
         if (checkFunctionType(_elementEnvironment.getFunctionType(function))) {
           methodsNeedingSignature.add(function);
-          closurizedMembersToRemove ??= Set<FunctionEntity>();
+          closurizedMembersToRemove ??= {};
           closurizedMembersToRemove.add(function);
         }
       }
@@ -1247,7 +1245,7 @@
     /// Set to `true` if subclasses of `Function` need runtimeType.
     bool neededOnFunctions = false;
 
-    Set<ClassEntity> classesDirectlyNeedingRuntimeType = Set<ClassEntity>();
+    Set<ClassEntity> classesDirectlyNeedingRuntimeType = {};
 
     Iterable<ClassEntity> impliedClasses(DartType type) {
       type = type.withoutNullability;
@@ -1346,7 +1344,7 @@
           .subclassesOf(commonElements.objectClass)
           .toSet();
     } else {
-      allClassesNeedingRuntimeType = Set<ClassEntity>();
+      allClassesNeedingRuntimeType = {};
       // TODO(johnniwinther): Support this operation directly in
       // [ClosedWorld] using the [ClassSet]s.
       for (ClassEntity cls in classesDirectlyNeedingRuntimeType) {
@@ -1379,7 +1377,7 @@
       }
     }
 
-    Set<Selector> selectorsNeedingTypeArguments = Set<Selector>();
+    Set<Selector> selectorsNeedingTypeArguments = {};
     typeVariableTests
         .forEachAppliedSelector((Selector selector, Set<Entity> targets) {
       for (Entity target in targets) {
@@ -1388,10 +1386,9 @@
             localFunctionsNeedingTypeArguments.contains(target)) {
           selectorsNeedingTypeArguments.add(selector);
           if (retainDataForTesting) {
-            selectorsNeedingTypeArgumentsForTesting ??=
-                <Selector, Set<Entity>>{};
+            selectorsNeedingTypeArgumentsForTesting ??= {};
             selectorsNeedingTypeArgumentsForTesting
-                .putIfAbsent(selector, () => Set<Entity>())
+                .putIfAbsent(selector, () => {})
                 .add(target);
           } else {
             return;
@@ -1399,7 +1396,7 @@
         }
       }
     });
-    Set<int> instantiationsNeedingTypeArguments = Set<int>();
+    Set<int> instantiationsNeedingTypeArguments = {};
     typeVariableTests.forEachInstantiatedEntity(
         (Entity target, Set<GenericInstantiation> instantiations) {
       if (methodsNeedingTypeArguments.contains(target) ||
diff --git a/pkg/compiler/lib/src/js_emitter/class_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/class_stub_generator.dart
index 25cd71f..21e2959 100644
--- a/pkg/compiler/lib/src/js_emitter/class_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/class_stub_generator.dart
@@ -73,13 +73,12 @@
       }
     }
 
-    Map<jsAst.Name, jsAst.Expression> generatedStubs =
-        <jsAst.Name, jsAst.Expression>{};
+    Map<jsAst.Name, jsAst.Expression> generatedStubs = {};
 
     // Two selectors may match but differ only in type.  To avoid generating
     // identical stubs for each we track untyped selectors which already have
     // stubs.
-    Set<Selector> generatedSelectors = new Set<Selector>();
+    Set<Selector> generatedSelectors = {};
     for (Selector selector in selectors.keys) {
       if (generatedSelectors.contains(selector)) continue;
       if (!selector.appliesUnnamed(member)) continue;
@@ -88,13 +87,13 @@
         generatedSelectors.add(selector);
 
         jsAst.Name invocationName = _namer.invocationName(selector);
-        Selector callSelector = new Selector.callClosureFrom(selector);
+        Selector callSelector = Selector.callClosureFrom(selector);
         jsAst.Name closureCallName = _namer.invocationName(callSelector);
 
-        List<jsAst.Parameter> parameters = <jsAst.Parameter>[];
-        List<jsAst.Expression> arguments = <jsAst.Expression>[];
+        List<jsAst.Parameter> parameters = [];
+        List<jsAst.Expression> arguments = [];
         if (isInterceptedMethod) {
-          parameters.add(new jsAst.Parameter(receiverArgumentName));
+          parameters.add(jsAst.Parameter(receiverArgumentName));
         }
 
         for (int i = 0; i < selector.argumentCount; i++) {
@@ -120,7 +119,7 @@
   }
 
   Map<jsAst.Name, Selector> computeSelectorsForNsmHandlers() {
-    Map<jsAst.Name, Selector> jsNames = <jsAst.Name, Selector>{};
+    Map<jsAst.Name, Selector> jsNames = {};
 
     // Do not generate no such method handlers if there is no class.
     if (_codegenWorld.directlyInstantiatedClasses.isEmpty) {
@@ -158,8 +157,8 @@
     // Values match JSInvocationMirror in js-helper library.
     int type = selector.invocationMirrorKind;
     List<String> parameterNames =
-        new List.generate(selector.argumentCount, (i) => '\$$i') +
-            new List.generate(selector.typeArgumentCount, (i) => '\$T${i + 1}');
+        List.generate(selector.argumentCount, (i) => '\$$i') +
+            List.generate(selector.typeArgumentCount, (i) => '\$T${i + 1}');
 
     List<jsAst.Expression> argNames = selector.callStructure
         .getOrderedNamedArguments()
@@ -186,9 +185,9 @@
           js.quoteName(enableMinification ? internalName : methodName),
       'internalName': js.quoteName(internalName),
       'type': js.number(type),
-      'arguments': new jsAst.ArrayInitializer(
+      'arguments': jsAst.ArrayInitializer(
           parameterNames.map<jsAst.Expression>(js).toList()),
-      'namedArguments': new jsAst.ArrayInitializer(argNames),
+      'namedArguments': jsAst.ArrayInitializer(argNames),
       'typeArgumentCount': js.number(selector.typeArgumentCount)
     });
 
@@ -199,7 +198,7 @@
     } else {
       function = js(r'function(#) { return # }', [parameterNames, expression]);
     }
-    return new StubMethod(name, function);
+    return StubMethod(name, function);
   }
 
   /// Generates a getter for the given [field].
diff --git a/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart b/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart
index 2337b35..0beb130 100644
--- a/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart
+++ b/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart
@@ -15,8 +15,7 @@
 import '../js_backend/backend.dart' show CodegenInputs;
 import '../js_backend/inferred_data.dart';
 import '../js_backend/namer.dart' show Namer;
-import '../js_backend/runtime_types.dart'
-    show RuntimeTypesChecks;
+import '../js_backend/runtime_types.dart' show RuntimeTypesChecks;
 import '../js_model/js_strategy.dart';
 import '../options.dart';
 import '../universe/codegen_world_builder.dart';
@@ -78,16 +77,17 @@
   void _finalizeRti(CodegenInputs codegen, CodegenWorld codegenWorld) {
     // Compute the required type checks to know which classes need a
     // 'is$' method.
-    _rtiChecks = _backendStrategy.rtiChecksBuilder.computeRequiredChecks(codegenWorld, options);
+    _rtiChecks = _backendStrategy.rtiChecksBuilder
+        .computeRequiredChecks(codegenWorld, options);
   }
 
   /// Creates the [Emitter] for this task.
   void createEmitter(
       Namer namer, CodegenInputs codegen, JClosedWorld closedWorld) {
     measure(() {
-      _nativeEmitter = new NativeEmitter(
+      _nativeEmitter = NativeEmitter(
           this, closedWorld, _backendStrategy.nativeCodegenEnqueuer);
-      _emitter = new startup_js_emitter.EmitterImpl(
+      _emitter = startup_js_emitter.EmitterImpl(
           _compiler.options,
           _compiler.reporter,
           _compiler.outputProvider,
@@ -99,7 +99,7 @@
           _backendStrategy.sourceInformationStrategy,
           this,
           _generateSourceMap);
-      metadataCollector = new MetadataCollector(
+      metadataCollector = MetadataCollector(
           _compiler.reporter, _emitter, codegen.rtiRecipeEncoder);
     });
   }
diff --git a/pkg/compiler/lib/src/js_emitter/constant_ordering.dart b/pkg/compiler/lib/src/js_emitter/constant_ordering.dart
index 9d4c41a..31050bd 100644
--- a/pkg/compiler/lib/src/js_emitter/constant_ordering.dart
+++ b/pkg/compiler/lib/src/js_emitter/constant_ordering.dart
@@ -22,7 +22,7 @@
   final Sorter _sorter;
   _DartTypeOrdering _dartTypeOrdering;
   _ConstantOrdering(this._sorter) {
-    _dartTypeOrdering = new _DartTypeOrdering(this);
+    _dartTypeOrdering = _DartTypeOrdering(this);
   }
 
   @override
@@ -269,13 +269,13 @@
 
   @override
   int visitVoidType(covariant VoidType type, covariant VoidType other) {
-    throw new UnsupportedError('Unreachable');
+    throw UnsupportedError('Unreachable');
   }
 
   @override
   int visitTypeVariableType(
       covariant TypeVariableType type, covariant TypeVariableType other) {
-    throw new UnsupportedError(
+    throw UnsupportedError(
         "Type variables are not expected in constants: '$type' in '$_root'");
   }
 
@@ -330,7 +330,7 @@
   @override
   int visitDynamicType(
       covariant DynamicType type, covariant DynamicType other) {
-    throw new UnsupportedError('Unreachable');
+    throw UnsupportedError('Unreachable');
   }
 
   @override
diff --git a/pkg/compiler/lib/src/js_emitter/headers.dart b/pkg/compiler/lib/src/js_emitter/headers.dart
index 9953606..90e4098 100644
--- a/pkg/compiler/lib/src/js_emitter/headers.dart
+++ b/pkg/compiler/lib/src/js_emitter/headers.dart
@@ -6,7 +6,7 @@
 
 import '../options.dart';
 
-String generatedBy(CompilerOptions options, {String flavor: ""}) {
+String generatedBy(CompilerOptions options, {String flavor = ""}) {
   String suffix = '';
   if (options.hasBuildId) {
     suffix = ' version: ${options.buildId}';
diff --git a/pkg/compiler/lib/src/js_emitter/instantiation_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/instantiation_stub_generator.dart
index 8417cc4..627dbe5 100644
--- a/pkg/compiler/lib/src/js_emitter/instantiation_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/instantiation_stub_generator.dart
@@ -69,13 +69,13 @@
     // }
     // ```
 
-    List<jsAst.Parameter> parameters = <jsAst.Parameter>[];
-    List<jsAst.Expression> arguments = <jsAst.Expression>[];
+    List<jsAst.Parameter> parameters = [];
+    List<jsAst.Expression> arguments = [];
 
     for (int i = 0; i < callSelector.argumentCount; i++) {
       String jsName = 'a$i';
       arguments.add(js('#', jsName));
-      parameters.add(new jsAst.Parameter(jsName));
+      parameters.add(jsAst.Parameter(jsName));
     }
 
     for (int i = 0; i < targetSelector.typeArgumentCount; i++) {
@@ -95,7 +95,7 @@
     // TODO(sra): .withSourceInformation(sourceInformation);
 
     jsAst.Name name = _namer.invocationName(callSelector);
-    return new ParameterStubMethod(name, null, function);
+    return ParameterStubMethod(name, null, function);
   }
 
   /// Generates a stub for a 'signature' selector. The stub calls the underlying
@@ -118,7 +118,7 @@
     // TODO(sra): Generate source information for stub that has no member.
     // TODO(sra): .withSourceInformation(sourceInformation);
 
-    return new ParameterStubMethod(operatorSignature, null, function);
+    return ParameterStubMethod(operatorSignature, null, function);
   }
 
   jsAst.Fun _generateSignatureNewRti(FieldEntity functionField) =>
@@ -156,8 +156,7 @@
         _codegenWorld.invocationsByName(call);
 
     Set<ParameterStructure> computeLiveParameterStructures() {
-      Set<ParameterStructure> parameterStructures =
-          new Set<ParameterStructure>();
+      Set<ParameterStructure> parameterStructures = {};
 
       void process(FunctionEntity function) {
         if (function.parameterStructure.typeParameters == typeArgumentCount) {
@@ -172,7 +171,7 @@
       return parameterStructures;
     }
 
-    List<StubMethod> stubs = <StubMethod>[];
+    List<StubMethod> stubs = [];
 
     // For every call-selector generate a stub to the corresponding selector
     // with filled-in type arguments.
@@ -188,7 +187,7 @@
         for (ParameterStructure parameterStructure in parameterStructures) {
           if (genericCallStructure.signatureApplies(parameterStructure)) {
             Selector genericSelector =
-                new Selector.call(selector.memberName, genericCallStructure);
+                Selector.call(selector.memberName, genericCallStructure);
             stubs.add(_generateStub(
                 instantiationClass, functionField, selector, genericSelector));
             break;
diff --git a/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
index 13e4a5e..b96d0e8 100644
--- a/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
@@ -133,7 +133,7 @@
       hasNative = anyNativeClasses;
     }
 
-    List<jsAst.Statement> statements = <jsAst.Statement>[];
+    List<jsAst.Statement> statements = [];
 
     if (hasNumber) {
       jsAst.Statement whenNumber;
@@ -206,7 +206,7 @@
       statements.add(js.statement('return receiver'));
     }
 
-    return js('''function(receiver) { #; }''', new jsAst.Block(statements));
+    return js('''function(receiver) { #; }''', jsAst.Block(statements));
   }
 
   jsAst.Call _generateIsJsIndexableCall(
@@ -218,13 +218,12 @@
     // We pass the dispatch property record to the isJsIndexable
     // helper rather than reading it inside the helper to increase the
     // chance of making the dispatch record access monomorphic.
-    jsAst.PropertyAccess record =
-        new jsAst.PropertyAccess(use2, dispatchProperty);
+    jsAst.PropertyAccess record = jsAst.PropertyAccess(use2, dispatchProperty);
 
-    List<jsAst.Expression> arguments = <jsAst.Expression>[use1, record];
+    List<jsAst.Expression> arguments = [use1, record];
     FunctionEntity helper = _commonElements.isJsIndexable;
     jsAst.Expression helperExpression = _emitter.staticFunctionAccess(helper);
-    return new jsAst.Call(helperExpression, arguments);
+    return jsAst.Call(helperExpression, arguments);
   }
 
   // Returns a statement that takes care of performance critical
@@ -383,7 +382,7 @@
     Set<ClassEntity> classes = interceptor.classes;
     jsAst.Name getInterceptorName = _namer.nameForGetInterceptor(classes);
 
-    List<String> parameterNames = <String>[];
+    List<String> parameterNames = [];
     parameterNames.add('receiver');
 
     if (selector.isSetter) {
@@ -402,7 +401,7 @@
 
     jsAst.Statement optimizedPath =
         _fastPathForOneShotInterceptor(selector, classes);
-    if (optimizedPath == null) optimizedPath = js.statement(';');
+    optimizedPath ??= js.statement(';');
 
     return js('function(#) { #; return #.#(receiver).#(#) }', [
       parameterNames,
@@ -419,7 +418,7 @@
     CustomElementsCodegenAnalysis analysis = _customElementsCodegenAnalysis;
     if (!analysis.needsTable) return null;
 
-    List<jsAst.Expression> elements = <jsAst.Expression>[];
+    List<jsAst.Expression> elements = [];
     Iterable<ConstantValue> constants =
         _codegenWorld.getConstantsForEmission(_emitter.compareConstants);
     for (ConstantValue constant in constants) {
@@ -449,15 +448,15 @@
         // We expect most of the time the map will be a singleton.
         var properties = <jsAst.Property>[];
         for (ConstructorEntity member in analysis.constructors(classElement)) {
-          properties.add(new jsAst.Property(
+          properties.add(jsAst.Property(
               js.string(member.name), _emitter.staticFunctionAccess(member)));
         }
 
-        var map = new jsAst.ObjectInitializer(properties);
+        var map = jsAst.ObjectInitializer(properties);
         elements.add(map);
       }
     }
 
-    return new jsAst.ArrayInitializer(elements);
+    return jsAst.ArrayInitializer(elements);
   }
 }
diff --git a/pkg/compiler/lib/src/js_emitter/metadata_collector.dart b/pkg/compiler/lib/src/js_emitter/metadata_collector.dart
index fafbbc7..5023420 100644
--- a/pkg/compiler/lib/src/js_emitter/metadata_collector.dart
+++ b/pkg/compiler/lib/src/js_emitter/metadata_collector.dart
@@ -111,7 +111,7 @@
   MetadataCollector(this.reporter, this._emitter, this._rtiRecipeEncoder);
 
   jsAst.Expression getTypesForOutputUnit(OutputUnit outputUnit) {
-    return _typesTokens.putIfAbsent(outputUnit, () => new _MetadataList());
+    return _typesTokens.putIfAbsent(outputUnit, () => _MetadataList());
   }
 
   void mergeOutputUnitMetadata(OutputUnit target, OutputUnit source) {
@@ -120,8 +120,7 @@
     // Merge _metadataMap
     var sourceMetadataMap = _metadataMap[source];
     if (sourceMetadataMap != null) {
-      var targetMetadataMap =
-          _metadataMap[target] ??= Map<String, List<BoundMetadataEntry>>();
+      var targetMetadataMap = _metadataMap[target] ??= {};
       _metadataMap.remove(source);
       sourceMetadataMap.forEach((str, entries) {
         var targetMetadataMapList = targetMetadataMap[str] ??= [];
@@ -132,8 +131,7 @@
     // Merge _typesMap
     var sourceTypesMap = _typesMap[source];
     if (sourceTypesMap != null) {
-      var targetTypesMap =
-          _typesMap[target] ??= Map<DartType, List<BoundMetadataEntry>>();
+      var targetTypesMap = _typesMap[target] ??= {};
       _typesMap.remove(source);
       sourceTypesMap.forEach((type, entries) {
         var targetTypesMapList = targetTypesMap[type] ??= [];
@@ -152,7 +150,7 @@
   }
 
   jsAst.Expression _addTypeInOutputUnit(DartType type, OutputUnit outputUnit) {
-    _typesMap[outputUnit] ??= Map<DartType, List<BoundMetadataEntry>>();
+    _typesMap[outputUnit] ??= {};
     BoundMetadataEntry metadataEntry;
 
     if (_typesMap[outputUnit].containsKey(type)) {
@@ -170,7 +168,7 @@
   @override
   void finalizeTokens() {
     void countTokensInTypes(Iterable<BoundMetadataEntry> entries) {
-      jsAst.TokenCounter counter = new jsAst.TokenCounter();
+      jsAst.TokenCounter counter = jsAst.TokenCounter();
       entries
           .where((BoundMetadataEntry e) => e._rc > 0)
           .map((BoundMetadataEntry e) => e.entry)
@@ -196,7 +194,7 @@
       List<jsAst.Node> values =
           entries.map((BoundMetadataEntry e) => e.entry).toList();
 
-      return new jsAst.ArrayInitializer(values);
+      return jsAst.ArrayInitializer(values);
     }
 
     _typesTokens.forEach((OutputUnit outputUnit, _MetadataList token) {
@@ -205,7 +203,7 @@
         typesMap.values.forEach(countTokensInTypes);
         token.setExpression(finalizeMap(typesMap));
       } else {
-        token.setExpression(new jsAst.ArrayInitializer([]));
+        token.setExpression(jsAst.ArrayInitializer([]));
       }
     });
   }
diff --git a/pkg/compiler/lib/src/js_emitter/model.dart b/pkg/compiler/lib/src/js_emitter/model.dart
index 19617a0..706385f 100644
--- a/pkg/compiler/lib/src/js_emitter/model.dart
+++ b/pkg/compiler/lib/src/js_emitter/model.dart
@@ -187,8 +187,8 @@
   StaticField(this.element, this.name, this.getterName, this.code,
       {this.isFinal,
       this.isLazy,
-      this.isInitializedByConstant: false,
-      this.usesNonNullableInitialization: false});
+      this.isInitializedByConstant = false,
+      this.usesNonNullableInitialization = false});
 
   @override
   String toString() {
@@ -309,7 +309,7 @@
     _mixinClass = mixinClass;
   }
 
-  js.Name get superclassName => superclass == null ? null : superclass.name;
+  js.Name get superclassName => superclass?.name;
 
   @override
   String toString() => 'Class(name=${name.key},element=$element)';
diff --git a/pkg/compiler/lib/src/js_emitter/native_emitter.dart b/pkg/compiler/lib/src/js_emitter/native_emitter.dart
index 9223c96..a3137e7 100644
--- a/pkg/compiler/lib/src/js_emitter/native_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/native_emitter.dart
@@ -27,15 +27,13 @@
   bool hasNativeClasses = false;
 
   // Caches the native subtypes of a native class.
-  Map<ClassEntity, List<ClassEntity>> subtypes =
-      <ClassEntity, List<ClassEntity>>{};
+  Map<ClassEntity, List<ClassEntity>> subtypes = {};
 
   // Caches the direct native subtypes of a native class.
-  Map<ClassEntity, List<ClassEntity>> directSubtypes =
-      <ClassEntity, List<ClassEntity>>{};
+  Map<ClassEntity, List<ClassEntity>> directSubtypes = {};
 
   // Caches the methods that have a native body.
-  Set<FunctionEntity> nativeMethods = new Set<FunctionEntity>();
+  Set<FunctionEntity> nativeMethods = {};
 
   // Type metadata redirections, where the key is the class type data being
   // redirected to and the value is the list of class type data being
@@ -91,8 +89,8 @@
     // Compute a pre-order traversal of the subclass forest.  We actually want a
     // post-order traversal but it is easier to compute the pre-order and use it
     // in reverse.
-    List<Class> preOrder = <Class>[];
-    Set<Class> seen = new Set<Class>();
+    List<Class> preOrder = [];
+    Set<Class> seen = {};
 
     Class objectClass = null;
     Class jsInterceptorClass = null;
@@ -119,8 +117,8 @@
     // needed class.
     // We may still need to include type metadata for some unneeded classes.
 
-    Set<Class> neededClasses = new Set<Class>();
-    Set<Class> nonLeafClasses = new Set<Class>();
+    Set<Class> neededClasses = {};
+    Set<Class> nonLeafClasses = {};
 
     Map<Class, List<Class>> extensionPoints = computeExtensionPoints(preOrder);
 
@@ -177,8 +175,8 @@
 
     // Collect all the tags that map to each native class.
 
-    Map<Class, Set<String>> leafTags = new Map<Class, Set<String>>();
-    Map<Class, Set<String>> nonleafTags = new Map<Class, Set<String>>();
+    Map<Class, Set<String>> leafTags = {};
+    Map<Class, Set<String>> nonleafTags = {};
 
     for (Class cls in classes) {
       if (!cls.isNative) continue;
@@ -187,9 +185,7 @@
       List<String> nativeTags = _nativeData.getNativeTagsOfClass(cls.element);
 
       if (nonLeafClasses.contains(cls) || extensionPoints.containsKey(cls)) {
-        nonleafTags
-            .putIfAbsent(cls, () => new Set<String>())
-            .addAll(nativeTags);
+        nonleafTags.putIfAbsent(cls, () => {}).addAll(nativeTags);
       } else {
         Class sufficingInterceptor = cls;
         while (!neededClasses.contains(sufficingInterceptor)) {
@@ -198,9 +194,7 @@
         if (sufficingInterceptor == objectClass) {
           sufficingInterceptor = jsInterceptorClass;
         }
-        leafTags
-            .putIfAbsent(sufficingInterceptor, () => new Set<String>())
-            .addAll(nativeTags);
+        leafTags.putIfAbsent(sufficingInterceptor, () => {}).addAll(nativeTags);
       }
     }
 
@@ -252,13 +246,13 @@
       return nativeSuperclassOf(cls.superclass);
     }
 
-    Map<Class, List<Class>> map = new Map<Class, List<Class>>();
+    Map<Class, List<Class>> map = {};
 
     for (Class cls in classes) {
       if (cls.isNative) continue;
       Class nativeAncestor = nativeAncestorOf(cls);
       if (nativeAncestor != null) {
-        map.putIfAbsent(nativeAncestor, () => <Class>[]).add(cls);
+        map.putIfAbsent(nativeAncestor, () => []).add(cls);
       }
     }
     return map;
@@ -321,7 +315,7 @@
     // must be turned into a JS call to:
     //   foo(null, y).
 
-    List<jsAst.Statement> statements = <jsAst.Statement>[];
+    List<jsAst.Statement> statements = [];
     potentiallyConvertDartClosuresToJs(statements, member, stubParameters);
 
     String target;
diff --git a/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart
index 819b321..022cd5a 100644
--- a/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart
@@ -28,7 +28,7 @@
 import 'native_emitter.dart';
 
 class ParameterStubGenerator {
-  static final Set<Selector> emptySelectorSet = new Set<Selector>();
+  static final Set<Selector> emptySelectorSet = {};
 
   final Emitter _emitter;
   final NativeEmitter _nativeEmitter;
@@ -112,13 +112,13 @@
     String receiverArgumentName = r'$receiver';
 
     // The parameters that this stub takes.
-    List<jsAst.Parameter> stubParameters = new List<jsAst.Parameter>.filled(
+    List<jsAst.Parameter> stubParameters = List<jsAst.Parameter>.filled(
         extraArgumentCount +
             selector.argumentCount +
             selector.typeArgumentCount,
         null);
     // The arguments that will be passed to the real method.
-    List<jsAst.Expression> targetArguments = new List<jsAst.Expression>.filled(
+    List<jsAst.Expression> targetArguments = List<jsAst.Expression>.filled(
         extraArgumentCount +
             parameterStructure.totalParameters +
             parameterStructure.typeParameters,
@@ -127,7 +127,7 @@
     int count = 0;
     if (isInterceptedMethod) {
       count++;
-      stubParameters[0] = new jsAst.Parameter(receiverArgumentName);
+      stubParameters[0] = jsAst.Parameter(receiverArgumentName);
       targetArguments[0] = js('#', receiverArgumentName);
     }
 
@@ -140,7 +140,7 @@
       String jsName = _namer.safeVariableName(name);
       assert(jsName != receiverArgumentName);
       if (count < optionalParameterStart) {
-        stubParameters[count] = new jsAst.Parameter(jsName);
+        stubParameters[count] = jsAst.Parameter(jsName);
         targetArguments[count] = js('#', jsName);
       } else {
         int index = names.indexOf(name);
@@ -150,11 +150,11 @@
           // one in the real method (which is in Dart source order).
           targetArguments[count] = js('#', jsName);
           stubParameters[optionalParameterStart + index] =
-              new jsAst.Parameter(jsName);
+              jsAst.Parameter(jsName);
         } else {
           if (value == null) {
             targetArguments[count] =
-                _emitter.constantReference(new NullConstantValue());
+                _emitter.constantReference(NullConstantValue());
           } else {
             if (!value.isNull) {
               // If the value is the null constant, we should not pass it
@@ -181,7 +181,7 @@
               TypeReference(TypeExpressionRecipe(defaultType));
         } else {
           String jsName = '\$${typeVariable.element.name}';
-          stubParameters[parameterIndex++] = new jsAst.Parameter(jsName);
+          stubParameters[parameterIndex++] = jsAst.Parameter(jsName);
           targetArguments[count++] = js('#', jsName);
         }
       }
@@ -229,7 +229,7 @@
     jsAst.Name name = member.isStatic ? null : _namer.invocationName(selector);
     jsAst.Name callName =
         (callSelector != null) ? _namer.invocationName(callSelector) : null;
-    return new ParameterStubMethod(name, callName, function, element: member);
+    return ParameterStubMethod(name, callName, function, element: member);
   }
 
   DartType _eraseTypeVariablesToAny(DartType type) {
@@ -301,10 +301,10 @@
     }
 
     assert(emptySelectorSet.isEmpty);
-    liveSelectors ??= const <Selector, SelectorConstraints>{};
-    callSelectors ??= const <Selector, SelectorConstraints>{};
+    liveSelectors ??= const {};
+    callSelectors ??= const {};
 
-    List<ParameterStubMethod> stubs = <ParameterStubMethod>[];
+    List<ParameterStubMethod> stubs = [];
 
     if (liveSelectors.isEmpty &&
         callSelectors.isEmpty &&
@@ -318,9 +318,9 @@
     //
     // For example, for the call-selector `call(x, y)` the renamed selector
     // for member `foo` would be `foo(x, y)`.
-    Set<Selector> renamedCallSelectors = new Set<Selector>();
+    Set<Selector> renamedCallSelectors = {};
 
-    Set<Selector> stubSelectors = new Set<Selector>();
+    Set<Selector> stubSelectors = {};
 
     // Start with closure-call selectors, since since they imply the generation
     // of the non-call version.
@@ -341,7 +341,7 @@
 
     for (Selector selector in callSelectors.keys) {
       Selector renamedSelector =
-          new Selector.call(member.memberName, selector.callStructure);
+          Selector.call(member.memberName, selector.callStructure);
       renamedCallSelectors.add(renamedSelector);
 
       if (!renamedSelector.appliesUnnamed(member)) {
@@ -364,7 +364,7 @@
       // This is basically the same logic as above, but with type arguments.
       if (selector.callStructure.typeArgumentCount == 0) {
         if (memberTypeParameters > 0) {
-          Selector renamedSelectorWithTypeArguments = new Selector.call(
+          Selector renamedSelectorWithTypeArguments = Selector.call(
               member.memberName,
               selector.callStructure
                   .withTypeArgumentCount(memberTypeParameters));
@@ -372,7 +372,7 @@
 
           if (stubSelectors.add(renamedSelectorWithTypeArguments)) {
             Selector closureSelector =
-                new Selector.callClosureFrom(renamedSelectorWithTypeArguments);
+                Selector.callClosureFrom(renamedSelectorWithTypeArguments);
             ParameterStubMethod stub = generateParameterStub(
                 member, renamedSelectorWithTypeArguments, closureSelector);
             if (stub != null) {
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart b/pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart
index a3ad826..af94f35 100644
--- a/pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart
+++ b/pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart
@@ -16,8 +16,8 @@
 /// [needsCheckedSetter] indicates that a checked getter is needed, and in this
 /// case, [needsSetter] is always false. [needsCheckedSetter] is only true when
 /// type assertions are enabled (checked mode).
-typedef void AcceptField(FieldEntity member, js.Name name, bool needsGetter,
-    bool needsSetter, bool needsCheckedSetter);
+typedef AcceptField = void Function(FieldEntity member, js.Name name,
+    bool needsGetter, bool needsSetter, bool needsCheckedSetter);
 
 class FieldVisitor {
   final JElementEnvironment _elementEnvironment;
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
index d993bf2..7e64084 100644
--- a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
+++ b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
@@ -130,7 +130,7 @@
       this._sorter,
       this._rtiNeededClasses,
       this._mainFunction)
-      : this.collector = new Collector(
+      : this.collector = Collector(
             _commonElements,
             _elementEnvironment,
             _outputUnitData,
@@ -143,11 +143,11 @@
             _rtiNeededClasses,
             _generatedCode,
             _sorter),
-        this._registry = new Registry(_outputUnitData.mainOutputUnit, _sorter);
+        this._registry = Registry(_outputUnitData.mainOutputUnit, _sorter);
 
   /// Mapping from [ClassEntity] to constructed [Class]. We need this to
   /// update the superclass in the [Class].
-  final Map<ClassEntity, Class> _classes = <ClassEntity, Class>{};
+  final Map<ClassEntity, Class> _classes = {};
 
   /// Mapping from [ClassEntity] to constructed [ClassTypeData] object. Used to build
   /// libraries.
@@ -155,11 +155,11 @@
 
   /// Mapping from [OutputUnit] to constructed [Fragment]. We need this to
   /// generate the deferredLoadingMap (to know which hunks to load).
-  final Map<OutputUnit, Fragment> _outputs = <OutputUnit, Fragment>{};
+  final Map<OutputUnit, Fragment> _outputs = {};
 
   /// Mapping from [ConstantValue] to constructed [Constant]. We need this to
   /// update field-initializers to point to the ConstantModel.
-  final Map<ConstantValue, Constant> _constants = <ConstantValue, Constant>{};
+  final Map<ConstantValue, Constant> _constants = {};
 
   Set<Class> _unneededNativeClasses;
 
@@ -168,7 +168,7 @@
   List<StubMethod> _jsInteropIsChecks = [];
   final Set<TypeCheck> _jsInteropTypeChecks = {};
 
-  Program buildProgram({bool storeFunctionTypesInMetadata: false}) {
+  Program buildProgram({bool storeFunctionTypesInMetadata = false}) {
     collector.collect();
 
     this._storeFunctionTypesInMetadata = storeFunctionTypesInMetadata;
@@ -237,7 +237,7 @@
         _registry.deferredLibrariesMap.map(_buildDeferredFragment);
 
     List<Fragment> fragments =
-        new List<Fragment>.filled(_registry.librariesMapCount, null);
+        List<Fragment>.filled(_registry.librariesMapCount, null);
     fragments[0] = mainFragment;
     fragments.setAll(1, deferredFragments);
 
@@ -257,7 +257,7 @@
       finalizers.add(namingFinalizer as js.TokenFinalizer);
     }
 
-    return new Program(fragments, _buildTypeToInterceptorMap(),
+    return Program(fragments, _buildTypeToInterceptorMap(),
         _task.metadataCollector, finalizers,
         needsNativeSupport: needsNativeSupport,
         outputContainsConstantList: collector.outputContainsConstantList);
@@ -268,7 +268,7 @@
   }
 
   js.Expression _buildTypeToInterceptorMap() {
-    InterceptorStubGenerator stubGenerator = new InterceptorStubGenerator(
+    InterceptorStubGenerator stubGenerator = InterceptorStubGenerator(
         _commonElements,
         _task.emitter,
         _nativeCodegenEnqueuer,
@@ -281,7 +281,7 @@
 
   MainFragment _buildMainFragment(LibrariesMap librariesMap) {
     // Construct the main output from the libraries and the registered holders.
-    MainFragment result = new MainFragment(
+    MainFragment result = MainFragment(
         librariesMap.outputUnit,
         "", // The empty string is the name for the main output file.
         _buildInvokeMain(),
@@ -299,7 +299,7 @@
   }
 
   DeferredFragment _buildDeferredFragment(LibrariesMap librariesMap) {
-    DeferredFragment result = new DeferredFragment(
+    DeferredFragment result = DeferredFragment(
         librariesMap.outputUnit,
         deferredPartFileName(_options, librariesMap.name, addExtension: false),
         librariesMap.name,
@@ -314,7 +314,7 @@
   List<Constant> _buildConstants(LibrariesMap librariesMap) {
     List<ConstantValue> constantValues =
         collector.outputConstantLists[librariesMap.outputUnit];
-    if (constantValues == null) return const <Constant>[];
+    if (constantValues == null) return const [];
     return constantValues
         .map((ConstantValue value) => _constants[value])
         .toList(growable: false);
@@ -323,7 +323,7 @@
   List<StaticField> _buildStaticNonFinalFields(LibrariesMap librariesMap) {
     List<FieldEntity> staticNonFinalFields =
         collector.outputStaticNonFinalFieldLists[librariesMap.outputUnit];
-    if (staticNonFinalFields == null) return const <StaticField>[];
+    if (staticNonFinalFields == null) return const [];
 
     return staticNonFinalFields.map(_buildStaticField).toList(growable: false);
   }
@@ -344,7 +344,7 @@
     // building a static field. (Note that the static-state holder was
     // already registered earlier, and that we just call the register to get
     // the holder-instance.
-    return new StaticField(element, name, null, code,
+    return StaticField(element, name, null, code,
         isFinal: false,
         isLazy: false,
         isInitializedByConstant: initialValue != null,
@@ -375,15 +375,14 @@
     // building a static field. (Note that the static-state holder was
     // already registered earlier, and that we just call the register to get
     // the holder-instance.
-    return new StaticField(element, name, getterName, code,
+    return StaticField(element, name, getterName, code,
         isFinal: !element.isAssignable,
         isLazy: true,
         usesNonNullableInitialization: element.library.isNonNullableByDefault);
   }
 
   List<Library> _buildLibraries(LibrariesMap librariesMap) {
-    List<Library> libraries =
-        new List<Library>.filled(librariesMap.length, null);
+    List<Library> libraries = List<Library>.filled(librariesMap.length, null);
     int count = 0;
     librariesMap.forEach((LibraryEntity library, List<ClassEntity> classes,
         List<MemberEntity> members, List<ClassEntity> classTypeElements) {
@@ -399,7 +398,7 @@
       // TODO(jacobr): register toString as used so that it is always accessible
       // from JavaScript.
       _classes[_commonElements.objectClass].callStubs.add(_buildStubMethod(
-          new StringBackedName("toString"),
+          StringBackedName("toString"),
           js.js('function() { return this.#(this) }', toStringInvocation)));
     }
 
@@ -491,7 +490,7 @@
                   var stubName = _namer.invocationName(selector);
                   if (!stubNames.add(stubName.key)) continue;
                   var parameters =
-                      new List<String>.generate(argumentCount, (i) => 'p$i');
+                      List<String>.generate(argumentCount, (i) => 'p$i');
 
                   // We intentionally generate the same stub method for direct
                   // calls and call-throughs of getters so that calling a
@@ -573,10 +572,10 @@
     List<Method> methods = [];
     List<StubMethod> callStubs = [];
 
-    ClassStubGenerator classStubGenerator = new ClassStubGenerator(
+    ClassStubGenerator classStubGenerator = ClassStubGenerator(
         _task.emitter, _commonElements, _namer, _codegenWorld, _closedWorld,
         enableMinification: _options.enableMinification);
-    RuntimeTypeGenerator runtimeTypeGenerator = new RuntimeTypeGenerator(
+    RuntimeTypeGenerator runtimeTypeGenerator = RuntimeTypeGenerator(
         _commonElements, _outputUnitData, _task, _namer, _rtiChecks);
 
     void visitInstanceMember(MemberEntity member) {
@@ -605,7 +604,7 @@
       }
     }
 
-    List<StubMethod> noSuchMethodStubs = <StubMethod>[];
+    List<StubMethod> noSuchMethodStubs = [];
 
     if (_backendUsage.isNoSuchMethodUsed &&
         cls == _commonElements.objectClass) {
@@ -636,7 +635,7 @@
     bool isMixinApplicationWithMembers = false;
     if (!onlyForConstructorOrRti) {
       if (_elementEnvironment.isMixinApplicationWithMembers(cls)) {
-        List<MemberEntity> members = <MemberEntity>[];
+        List<MemberEntity> members = [];
         void add(MemberEntity member) {
           if (member.enclosingClass == cls) {
             members.add(member);
@@ -651,7 +650,7 @@
           _sorter.sortMembers(members).forEach(visitMember);
         }
       } else if (!_elementEnvironment.isMixinApplication(cls)) {
-        List<MemberEntity> members = <MemberEntity>[];
+        List<MemberEntity> members = [];
         _elementEnvironment.forEachLocalClassMember(cls, members.add);
         _elementEnvironment.forEachInjectedClassMember(cls, members.add);
         _elementEnvironment.forEachConstructorBody(cls, members.add);
@@ -677,8 +676,8 @@
         cls, _generatedCode,
         storeFunctionTypeInMetadata: _storeFunctionTypesInMetadata);
 
-    List<StubMethod> checkedSetters = <StubMethod>[];
-    List<StubMethod> isChecks = <StubMethod>[];
+    List<StubMethod> checkedSetters = [];
+    List<StubMethod> isChecks = [];
     if (_nativeData.isJsInteropClass(cls)) {
       // TODO(johnniwinther): Instead of generating all stubs for each
       // js-interop class we should generate a stub for each implemented class.
@@ -794,7 +793,7 @@
     var /* Map | List */ optionalParameterDefaultValues;
     ParameterStructure parameterStructure = method.parameterStructure;
     if (parameterStructure.namedParameters.isNotEmpty) {
-      optionalParameterDefaultValues = new Map<String, ConstantValue>();
+      optionalParameterDefaultValues = Map<String, ConstantValue>();
       _elementEnvironment.forEachParameter(method,
           (DartType type, String name, ConstantValue defaultValue) {
         if (parameterStructure.namedParameters.contains(name)) {
@@ -874,8 +873,7 @@
 
     js.Name callName = null;
     if (canTearOff) {
-      Selector callSelector =
-          new Selector.fromElement(element).toCallSelector();
+      Selector callSelector = Selector.fromElement(element).toCallSelector();
       callName = _namer.invocationName(callSelector);
     }
 
@@ -900,7 +898,7 @@
       }
     }
 
-    return new InstanceMethod(element, name, code,
+    return InstanceMethod(element, name, code,
         _generateParameterStubs(element, canTearOff, canBeApplied), callName,
         needsTearOff: canTearOff,
         tearOffName: tearOffName,
@@ -950,7 +948,7 @@
 
   List<ParameterStubMethod> _generateParameterStubs(
       FunctionEntity element, bool canTearOff, bool canBeApplied) {
-    if (!_methodNeedsStubs(element)) return const <ParameterStubMethod>[];
+    if (!_methodNeedsStubs(element)) return const [];
 
     ParameterStubGenerator generator = ParameterStubGenerator(
         _task.emitter,
@@ -966,7 +964,7 @@
   }
 
   List<StubMethod> _generateInstantiationStubs(ClassEntity instantiationClass) {
-    InstantiationStubGenerator generator = new InstantiationStubGenerator(
+    InstantiationStubGenerator generator = InstantiationStubGenerator(
         _task, _namer, _closedWorld, _codegenWorld, _sourceInformationStrategy);
     return generator.generateStubs(instantiationClass, null);
   }
@@ -977,7 +975,7 @@
   /// attribution.
   Method _buildStubMethod(js.Name name, js.Expression code,
       {MemberEntity element}) {
-    return new StubMethod(name, code, element: element);
+    return StubMethod(name, code, element: element);
   }
 
   // The getInterceptor methods directly access the prototype of classes.
@@ -995,7 +993,7 @@
   }
 
   Iterable<StaticStubMethod> _generateGetInterceptorMethods() {
-    InterceptorStubGenerator stubGenerator = new InterceptorStubGenerator(
+    InterceptorStubGenerator stubGenerator = InterceptorStubGenerator(
         _commonElements,
         _task.emitter,
         _nativeCodegenEnqueuer,
@@ -1021,14 +1019,13 @@
       SpecializedGetInterceptor interceptor = interceptorMap[name];
       js.Expression code =
           stubGenerator.generateGetInterceptorMethod(interceptor);
-      return new StaticStubMethod(
-          _commonElements.interceptorsLibrary, name, code);
+      return StaticStubMethod(_commonElements.interceptorsLibrary, name, code);
     });
   }
 
   List<Field> _buildFields(
-      {bool isHolderInterceptedClass: false, ClassEntity cls}) {
-    List<Field> fields = <Field>[];
+      {bool isHolderInterceptedClass = false, ClassEntity cls}) {
+    List<Field> fields = [];
 
     void visitField(FieldEntity field, js.Name name, bool needsGetter,
         bool needsSetter, bool needsCheckedSetter) {
@@ -1091,7 +1088,7 @@
   }
 
   Iterable<StaticStubMethod> _generateOneShotInterceptors() {
-    InterceptorStubGenerator stubGenerator = new InterceptorStubGenerator(
+    InterceptorStubGenerator stubGenerator = InterceptorStubGenerator(
         _commonElements,
         _task.emitter,
         _nativeCodegenEnqueuer,
@@ -1118,8 +1115,7 @@
       OneShotInterceptor interceptor = interceptorMap[name];
       js.Expression code =
           stubGenerator.generateOneShotInterceptor(interceptor);
-      return new StaticStubMethod(
-          _commonElements.interceptorsLibrary, name, code);
+      return StaticStubMethod(_commonElements.interceptorsLibrary, name, code);
     });
   }
 
@@ -1139,8 +1135,7 @@
 
     js.Name callName = null;
     if (needsTearOff) {
-      Selector callSelector =
-          new Selector.fromElement(element).toCallSelector();
+      Selector callSelector = Selector.fromElement(element).toCallSelector();
       callName = _namer.invocationName(callSelector);
     }
     js.Expression functionType;
@@ -1163,7 +1158,7 @@
       }
     }
 
-    return new StaticDartMethod(element, name, code,
+    return StaticDartMethod(element, name, code,
         _generateParameterStubs(element, needsTearOff, canBeApplied), callName,
         needsTearOff: needsTearOff,
         tearOffName: tearOffName,
@@ -1182,7 +1177,7 @@
       _registry.registerConstant(outputUnit, constantValue);
       assert(!_constants.containsKey(constantValue));
       js.Name name = _namer.constantName(constantValue);
-      Constant constant = new Constant(name, constantValue);
+      Constant constant = Constant(name, constantValue);
       _constants[constantValue] = constant;
     }
   }
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/registry.dart b/pkg/compiler/lib/src/js_emitter/program_builder/registry.dart
index 2e28a01..78e6cd2 100644
--- a/pkg/compiler/lib/src/js_emitter/program_builder/registry.dart
+++ b/pkg/compiler/lib/src/js_emitter/program_builder/registry.dart
@@ -20,8 +20,7 @@
 ///
 /// There exists exactly one instance per [OutputUnit].
 class LibrariesMap {
-  final Map<LibraryEntity, LibraryContents> _mapping =
-      <LibraryEntity, LibraryContents>{};
+  final Map<LibraryEntity, LibraryContents> _mapping = {};
 
   // It is very common to access the same library multiple times in a row, so
   // we cache the last access.
@@ -41,7 +40,7 @@
   LibraryContents _getMapping(LibraryEntity library) {
     if (_lastLibrary != library) {
       _lastLibrary = library;
-      _lastMapping = _mapping.putIfAbsent(library, () => new LibraryContents());
+      _lastMapping = _mapping.putIfAbsent(library, () => LibraryContents());
     }
     return _lastMapping;
   }
@@ -78,8 +77,7 @@
 class Registry {
   final OutputUnit _mainOutputUnit;
   final Sorter _sorter;
-  final Map<OutputUnit, LibrariesMap> _deferredLibrariesMap =
-      <OutputUnit, LibrariesMap>{};
+  final Map<OutputUnit, LibrariesMap> _deferredLibrariesMap = {};
 
   /// Cache for the last seen output unit.
   OutputUnit _lastOutputUnit;
@@ -111,12 +109,12 @@
   void registerOutputUnit(OutputUnit outputUnit) {
     if (outputUnit == _mainOutputUnit) {
       assert(mainLibrariesMap == null);
-      mainLibrariesMap = new LibrariesMap.main(_mainOutputUnit);
+      mainLibrariesMap = LibrariesMap.main(_mainOutputUnit);
     } else {
       assert(!_deferredLibrariesMap.containsKey(outputUnit));
       String name = outputUnit.name;
       _deferredLibrariesMap[outputUnit] =
-          new LibrariesMap.deferred(outputUnit, name);
+          LibrariesMap.deferred(outputUnit, name);
     }
   }
 
diff --git a/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart b/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
index d8a9417..ca7d511 100644
--- a/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
@@ -20,7 +20,8 @@
 import 'code_emitter_task.dart' show CodeEmitterTask;
 
 // Function signatures used in the generation of runtime type information.
-typedef void FunctionTypeSignatureEmitter(ClassFunctionType classFunctionType);
+typedef FunctionTypeSignatureEmitter = void Function(
+    ClassFunctionType classFunctionType);
 
 class TypeTest {
   final jsAst.Name name;
@@ -48,22 +49,22 @@
   /// The properties that must be installed on the prototype of the
   /// JS constructor of the [ClassEntity] for which the is checks were
   /// generated.
-  final Map<ClassEntity, TypeTests> _properties = <ClassEntity, TypeTests>{};
+  final Map<ClassEntity, TypeTests> _properties = {};
 
   void addIsTest(ClassEntity cls, jsAst.Name name, jsAst.Node expression) {
-    TypeTests typeTests = _properties.putIfAbsent(cls, () => new TypeTests());
-    typeTests.isTest = new TypeTest(name, expression);
+    TypeTests typeTests = _properties.putIfAbsent(cls, () => TypeTests());
+    typeTests.isTest = TypeTest(name, expression);
   }
 
   void addSubstitution(
       ClassEntity cls, jsAst.Name name, jsAst.Node expression) {
-    TypeTests typeTests = _properties.putIfAbsent(cls, () => new TypeTests());
-    typeTests.substitution = new TypeTest(name, expression);
+    TypeTests typeTests = _properties.putIfAbsent(cls, () => TypeTests());
+    typeTests.substitution = TypeTest(name, expression);
   }
 
   void addSignature(ClassEntity cls, jsAst.Name name, jsAst.Node expression) {
-    TypeTests typeTests = _properties.putIfAbsent(cls, () => new TypeTests());
-    typeTests.signature = new TypeTest(name, expression);
+    TypeTests typeTests = _properties.putIfAbsent(cls, () => TypeTests());
+    typeTests.signature = TypeTest(name, expression);
   }
 
   void forEachProperty(
@@ -91,8 +92,8 @@
 
   RuntimeTypeGenerator(CommonElements _commonElements, this._outputUnitData,
       this.emitterTask, this._namer, this._rtiChecks)
-      : _outputUnitVisitor = new _TypeContainedInOutputUnitVisitor(
-            _commonElements, _outputUnitData);
+      : _outputUnitVisitor =
+            _TypeContainedInOutputUnitVisitor(_commonElements, _outputUnitData);
 
   /// Generate "is tests" for [cls] itself, and the "is tests" for the
   /// classes it implements and type argument substitution functions for these
@@ -112,8 +113,8 @@
   /// type variables.
   TypeTestProperties generateIsTests(ClassEntity classElement,
       Map<MemberEntity, jsAst.Expression> generatedCode,
-      {bool storeFunctionTypeInMetadata: true}) {
-    TypeTestProperties result = new TypeTestProperties();
+      {bool storeFunctionTypeInMetadata = true}) {
+    TypeTestProperties result = TypeTestProperties();
 
     // TODO(johnniwinther): Include function signatures in [ClassChecks].
     void generateFunctionTypeSignature(ClassFunctionType classFunctionType) {
@@ -154,10 +155,8 @@
           if (isDeferred) {
             // The function type index must be offset by the number of types
             // already loaded.
-            encoding = new jsAst.Binary(
-                '+',
-                new jsAst.VariableUse(_namer.typesOffsetName),
-                functionTypeIndex);
+            encoding = jsAst.Binary('+',
+                jsAst.VariableUse(_namer.typesOffsetName), functionTypeIndex);
           } else {
             encoding = functionTypeIndex;
           }
@@ -188,7 +187,7 @@
       ClassEntity cls,
       FunctionTypeSignatureEmitter generateFunctionTypeSignature,
       void emitTypeCheck(TypeCheck check)) {
-    Setlet<ClassEntity> generated = new Setlet<ClassEntity>();
+    Setlet<ClassEntity> generated = Setlet();
 
     // Precomputed is checks.
     ClassChecks classChecks = _rtiChecks.requiredChecks[cls];
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/emitter.dart
index 841e2a1..1f60860 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/emitter.dart
@@ -34,14 +34,14 @@
   js.PropertyAccess globalPropertyAccessForClass(ClassEntity element) {
     js.Name name = _namer.globalPropertyNameForClass(element);
     js.PropertyAccess pa =
-        new js.PropertyAccess(_namer.readGlobalObjectForClass(element), name);
+        js.PropertyAccess(_namer.readGlobalObjectForClass(element), name);
     return pa;
   }
 
   js.PropertyAccess globalPropertyAccessForMember(MemberEntity element) {
     js.Name name = _namer.globalPropertyNameForMember(element);
     js.PropertyAccess pa =
-        new js.PropertyAccess(_namer.readGlobalObjectForMember(element), name);
+        js.PropertyAccess(_namer.readGlobalObjectForMember(element), name);
     return pa;
   }
 
@@ -52,7 +52,7 @@
 
   @override
   js.Expression isolateLazyInitializerAccess(FieldEntity element) {
-    return new js.PropertyAccess(_namer.readGlobalObjectForMember(element),
+    return js.PropertyAccess(_namer.readGlobalObjectForMember(element),
         _namer.lazyInitializerName(element));
   }
 
@@ -84,8 +84,8 @@
 
   @override
   js.Expression staticClosureAccess(FunctionEntity element) {
-    return new js.Call(
-        new js.PropertyAccess(_namer.readGlobalObjectForMember(element),
+    return js.Call(
+        js.PropertyAccess(_namer.readGlobalObjectForMember(element),
             _namer.staticClosureName(element)),
         const []);
   }
@@ -103,7 +103,7 @@
 
   ModularEmitterImpl(
       ModularNamer namer, this._registry, CompilerOptions options)
-      : _constantEmitter = new ModularConstantEmitter(options, namer),
+      : _constantEmitter = ModularConstantEmitter(options, namer),
         super(namer);
 
   @override
@@ -116,16 +116,15 @@
     if (expression != null) {
       return expression;
     }
-    expression =
-        new ModularExpression(ModularExpressionKind.constant, constant);
+    expression = ModularExpression(ModularExpressionKind.constant, constant);
     _registry.registerModularExpression(expression);
     return expression;
   }
 
   @override
   js.Expression generateEmbeddedGlobalAccess(String global) {
-    js.Expression expression = new ModularExpression(
-        ModularExpressionKind.embeddedGlobalAccess, global);
+    js.Expression expression =
+        ModularExpression(ModularExpressionKind.embeddedGlobalAccess, global);
     _registry.registerModularExpression(expression);
     return expression;
   }
@@ -167,7 +166,7 @@
       this._task,
       bool shouldGenerateSourceMap)
       : super(namer) {
-    _emitter = new ModelEmitter(
+    _emitter = ModelEmitter(
         options,
         _reporter,
         outputProvider,
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
index 66717cc..6bf7046 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
@@ -719,7 +719,7 @@
       'throwLateFieldADI': _emitter
           .staticFunctionAccess(_closedWorld.commonElements.throwLateFieldADI),
       'operatorIsPrefix': js.string(_namer.fixedNames.operatorIsPrefix),
-      'tearOffCode': new js.Block(
+      'tearOffCode': js.Block(
           buildTearOffCode(_options, _emitter, _closedWorld.commonElements)),
       'embeddedTypes': generateEmbeddedGlobalAccess(TYPES),
       'embeddedInterceptorTags':
@@ -772,7 +772,7 @@
       'nativeSupport': emitNativeSupport(fragment),
       'jsInteropSupport': jsInteropAnalysis.buildJsInteropBootstrap(
               _codegenWorld, _closedWorld.nativeData, _namer) ??
-          new js.EmptyStatement(),
+          js.EmptyStatement(),
       'invokeMain': fragment.invokeMain,
 
       'call0selector': js.quoteName(call0Name),
@@ -808,7 +808,7 @@
         holderCode);
     js.Expression code = js.js(_deferredBoilerplate, {
       // TODO(floitsch): don't just reference 'init'.
-      'embeddedGlobalsObject': new js.Parameter('init'),
+      'embeddedGlobalsObject': js.Parameter('init'),
       'staticState': DeferredHolderParameter(),
       'updateHolders': updateHolders,
       'prototypes': fragment.classPrototypes,
@@ -850,7 +850,7 @@
   /// Finalizing holders must be the last step of the emitter.
   void finalizeCode(String resourceName, js.Node code,
       Map<Entity, List<js.Property>> holderCode,
-      {bool finalizeHolders: false}) {
+      {bool finalizeHolders = false}) {
     StringReferenceFinalizer stringFinalizer =
         StringReferenceFinalizerImpl(_options.enableMinification);
     addCodeToFinalizer(stringFinalizer.addCode, code, holderCode);
@@ -904,7 +904,7 @@
       }
       for (Class cls in library.classes) {
         js.Expression constructor = emitConstructor(cls);
-        var property = new js.Property(js.quoteName(cls.name), constructor);
+        var property = js.Property(js.quoteName(cls.name), constructor);
         (holderCode[cls.element] ??= []).add(property);
         registerEntityAst(cls.element, property, library: library.element);
       }
@@ -961,7 +961,7 @@
       // Parameters are named t0, t1, etc, so '_' will not conflict. Forcing '_'
       // in minified mode works because no parameter or local also minifies to
       // '_' (the minifier doesn't know '_' is available).
-      js.Name underscore = new StringBackedName('_');
+      js.Name underscore = StringBackedName('_');
       statements.add(js.js.statement('var # = this;', underscore));
       thisRef = underscore;
     } else {
@@ -1000,7 +1000,7 @@
         previousConstant = constant;
       } else {
         flushAssignment();
-        js.Parameter parameter = new js.Parameter('t${parameters.length}');
+        js.Parameter parameter = js.Parameter('t${parameters.length}');
         parameters.add(parameter);
         statements.add(
             js.js.statement('#.# = #', [thisRef, field.name, parameter.name]));
@@ -1009,7 +1009,7 @@
     flushAssignment();
 
     if (cls.hasRtiField) {
-      js.Parameter parameter = new js.Parameter('t${parameters.length}');
+      js.Parameter parameter = js.Parameter('t${parameters.length}');
       parameters.add(parameter);
       statements.add(js.js.statement(
           '#.# = #', [thisRef, _namer.rtiFieldJsName, parameter.name]));
@@ -1044,7 +1044,7 @@
       return proto;
     }).toList(growable: false);
 
-    return new js.Block(assignments);
+    return js.Block(assignments);
   }
 
   /// Emits the prototype of the given class [cls].
@@ -1125,7 +1125,7 @@
           js.string(_namer.fixedNames.defaultValuesField), js.LiteralNull()));
     }
 
-    return new js.ObjectInitializer(properties);
+    return js.ObjectInitializer(properties);
   }
 
   /// Emits the given instance [method].
@@ -1201,7 +1201,7 @@
         collect(superclass);
       }
 
-      subclasses.putIfAbsent(superclass, () => <Class>[]).add(cls);
+      subclasses.putIfAbsent(superclass, () => []).add(cls);
 
       seen.add(cls);
     }
@@ -1223,9 +1223,8 @@
 
     for (Class superclass in subclasses.keys) {
       List<Class> list = subclasses[superclass];
-      js.Expression superclassReference = (superclass == null)
-          ? new js.LiteralNull()
-          : classReference(superclass);
+      js.Expression superclassReference =
+          (superclass == null) ? js.LiteralNull() : classReference(superclass);
       if (list.length == 1) {
         Class cls = list.single;
         var statement = js.js.statement('#(#, #)', [
@@ -1305,12 +1304,12 @@
     if (method.optionalParameterDefaultValues is List) {
       List<ConstantValue> defaultValues = method.optionalParameterDefaultValues;
       if (defaultValues.isEmpty) {
-        return new js.LiteralNull();
+        return js.LiteralNull();
       }
       Iterable<js.Expression> elements =
           defaultValues.map(generateConstantReference);
-      return js.js('function() { return #; }',
-          new js.ArrayInitializer(elements.toList()));
+      return js.js(
+          'function() { return #; }', js.ArrayInitializer(elements.toList()));
     } else {
       Map<String, ConstantValue> defaultValues =
           method.optionalParameterDefaultValues;
@@ -1323,10 +1322,10 @@
       for (String name in names) {
         ConstantValue value = defaultValues[name];
         properties.add(
-            new js.Property(js.string(name), generateConstantReference(value)));
+            js.Property(js.string(name), generateConstantReference(value)));
       }
       return js.js(
-          'function() { return #; }', new js.ObjectInitializer(properties));
+          'function() { return #; }', js.ObjectInitializer(properties));
     }
   }
 
@@ -1334,7 +1333,7 @@
   /// profiles.
   // TODO(sra): Should this be conditional?
   js.Statement wrapPhase(String name, List<js.Statement> statements) {
-    js.Block block = new js.Block(statements);
+    js.Block block = js.Block(statements);
     if (statements.isEmpty) return block;
     return js.js.statement('(function #(){#})();', [name, block]);
   }
@@ -1668,21 +1667,20 @@
       DeferredLoadingState deferredLoadingState) {
     List<js.Property> globals = [];
 
-    globals.add(new js.Property(
+    globals.add(js.Property(
         js.string(DEFERRED_INITIALIZED), js.js("Object.create(null)")));
 
     String deferredGlobal = ModelEmitter.deferredInitializersGlobal;
     js.Expression isHunkLoadedFunction =
         js.js("function(hash) { return !!$deferredGlobal[hash]; }");
-    globals
-        .add(new js.Property(js.string(IS_HUNK_LOADED), isHunkLoadedFunction));
+    globals.add(js.Property(js.string(IS_HUNK_LOADED), isHunkLoadedFunction));
 
     js.Expression isHunkInitializedFunction = js.js(
         "function(hash) { return !!#deferredInitialized[hash]; }", {
       'deferredInitialized': generateEmbeddedGlobalAccess(DEFERRED_INITIALIZED)
     });
-    globals.add(new js.Property(
-        js.string(IS_HUNK_INITIALIZED), isHunkInitializedFunction));
+    globals.add(
+        js.Property(js.string(IS_HUNK_INITIALIZED), isHunkInitializedFunction));
 
     /// See [finalizeDeferredLoadingData] for the format of the deferred hunk.
     js.Expression initializeLoadedHunkFunction = js.js("""
@@ -1698,14 +1696,14 @@
       'deferredInitialized': generateEmbeddedGlobalAccess(DEFERRED_INITIALIZED)
     });
 
-    globals.add(new js.Property(
+    globals.add(js.Property(
         js.string(INITIALIZE_LOADED_HUNK), initializeLoadedHunkFunction));
 
-    globals.add(new js.Property(js.string(DEFERRED_LIBRARY_PARTS),
+    globals.add(js.Property(js.string(DEFERRED_LIBRARY_PARTS),
         deferredLoadingState.deferredLibraryParts));
-    globals.add(new js.Property(
+    globals.add(js.Property(
         js.string(DEFERRED_PART_URIS), deferredLoadingState.deferredPartUris));
-    globals.add(new js.Property(js.string(DEFERRED_PART_HASHES),
+    globals.add(js.Property(js.string(DEFERRED_PART_HASHES),
         deferredLoadingState.deferredPartHashes));
 
     return globals;
@@ -1783,12 +1781,12 @@
     ];
     // TODO(floitsch): this should probably be on a per-fragment basis.
     nativeClassesNeedingUnmangledName.forEach((element) {
-      names.add(new js.Property(
+      names.add(js.Property(
           js.quoteName(_namer.className(element)), js.string(element.name)));
     });
 
-    return new js.Property(
-        js.string(MANGLED_GLOBAL_NAMES), new js.ObjectInitializer(names));
+    return js.Property(
+        js.string(MANGLED_GLOBAL_NAMES), js.ObjectInitializer(names));
   }
 
   /// Emits the [METADATA] embedded global.
@@ -1799,7 +1797,7 @@
     List<js.Property> metadataGlobals = [];
 
     js.Property createGlobal(js.Expression metadata, String global) {
-      return new js.Property(js.string(global), metadata);
+      return js.Property(js.string(global), metadata);
     }
 
     var mainUnit = program.mainFragment.outputUnit;
@@ -1837,8 +1835,8 @@
     // therefore unused in this emitter.
     // TODO(johnniwinther): Remove the need for adding an empty list of
     // mangled names.
-    globals.add(js.Property(
-        js.string(MANGLED_NAMES), js.ObjectInitializer(<js.Property>[])));
+    globals
+        .add(js.Property(js.string(MANGLED_NAMES), js.ObjectInitializer([])));
 
     globals.addAll(emitMetadata(program));
 
@@ -2045,13 +2043,13 @@
         if (cls.nativeLeafTags != null) {
           for (String tag in cls.nativeLeafTags) {
             interceptorsByTag[tag] = classReference(cls);
-            leafTags[tag] = new js.LiteralBool(true);
+            leafTags[tag] = js.LiteralBool(true);
           }
         }
         if (cls.nativeNonLeafTags != null) {
           for (String tag in cls.nativeNonLeafTags) {
             interceptorsByTag[tag] = classReference(cls);
-            leafTags[tag] = new js.LiteralBool(false);
+            leafTags[tag] = js.LiteralBool(false);
           }
           if (cls.nativeExtensions != null) {
             List<Class> subclasses = cls.nativeExtensions;
@@ -2110,9 +2108,9 @@
 }
 
 class DeferredLoadingState {
-  final deferredLibraryParts = new DeferredPrimaryExpression();
-  final deferredPartUris = new DeferredPrimaryExpression();
-  final deferredPartHashes = new DeferredPrimaryExpression();
+  final deferredLibraryParts = DeferredPrimaryExpression();
+  final deferredPartUris = DeferredPrimaryExpression();
+  final deferredPartHashes = DeferredPrimaryExpression();
 }
 
 class DeferredPrimaryExpression extends js.DeferredExpression {
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 9f05395..009853e 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
@@ -157,10 +157,10 @@
       this._sourceInformationStrategy,
       RecipeEncoder rtiRecipeEncoder,
       this._shouldGenerateSourceMap)
-      : _constantOrdering = new ConstantOrdering(_closedWorld.sorter),
+      : _constantOrdering = ConstantOrdering(_closedWorld.sorter),
         fragmentMerger = FragmentMerger(_options,
             _closedWorld.elementEnvironment, _closedWorld.outputUnitData) {
-    this.constantEmitter = new ConstantEmitter(
+    this.constantEmitter = ConstantEmitter(
         _options,
         _namer,
         _closedWorld.commonElements,
@@ -229,9 +229,9 @@
   int emitProgram(Program program, CodegenWorld codegenWorld) {
     MainFragment mainFragment = program.fragments.first;
     List<DeferredFragment> deferredFragments =
-        new List<DeferredFragment>.from(program.deferredFragments);
+        List<DeferredFragment>.from(program.deferredFragments);
 
-    FragmentEmitter fragmentEmitter = new FragmentEmitter(
+    FragmentEmitter fragmentEmitter = FragmentEmitter(
         _options,
         _dumpInfoTask,
         _namer,
@@ -305,12 +305,12 @@
         finalizedFragmentsToLoad);
 
     // Emit main Fragment.
-    var deferredLoadingState = new DeferredLoadingState();
+    var deferredLoadingState = DeferredLoadingState();
     js.Statement mainCode = fragmentEmitter.emitMainFragment(
         program, finalizedFragmentsToLoad, deferredLoadingState);
 
     // Count tokens and run finalizers.
-    js.TokenCounter counter = new js.TokenCounter();
+    js.TokenCounter counter = js.TokenCounter();
     for (var emittedFragments in deferredFragmentsCode.values) {
       for (var emittedFragment in emittedFragments) {
         counter.countTokens(emittedFragment.code);
@@ -411,7 +411,7 @@
     if (_shouldGenerateSourceMap) {
       _task.measureSubtask('source-maps', () {
         locationCollector = LocationCollector();
-        codeOutputListeners = <CodeOutputListener>[locationCollector];
+        codeOutputListeners = [locationCollector];
       });
     }
 
@@ -481,7 +481,7 @@
     LocationCollector locationCollector;
     if (_shouldGenerateSourceMap) {
       _task.measureSubtask('source-maps', () {
-        locationCollector = new LocationCollector();
+        locationCollector = LocationCollector();
         outputListeners.add(locationCollector);
       });
     }
@@ -556,13 +556,13 @@
     //   deferredInitializer.current = <pretty-printed code>;
     //   deferredInitializer[<hash>] = deferredInitializer.current;
 
-    js.Program program = new js.Program([
+    js.Program program = js.Program([
       if (isFirst) buildGeneratedBy(),
       if (isFirst) buildDeferredInitializerGlobal(),
       js.js.statement('$deferredInitializersGlobal.current = #', code)
     ]);
 
-    Hasher hasher = new Hasher();
+    Hasher hasher = Hasher();
     CodeBuffer buffer = js.createCodeBuffer(
         program, _options, _sourceInformationStrategy,
         monitor: _dumpInfoTask, listeners: [hasher]);
diff --git a/pkg/compiler/lib/src/js_model/closure.dart b/pkg/compiler/lib/src/js_model/closure.dart
index 216f25e..353d586 100644
--- a/pkg/compiler/lib/src/js_model/closure.dart
+++ b/pkg/compiler/lib/src/js_model/closure.dart
@@ -55,19 +55,19 @@
     source.begin(tag);
     // TODO(johnniwinther): Support shared [ScopeInfo].
     Map<MemberEntity, ScopeInfo> scopeMap = source.readMemberMap(
-        (MemberEntity member) => new ScopeInfo.readFromDataSource(source));
-    Map<ir.TreeNode, CapturedScope> capturedScopesMap = source
-        .readTreeNodeMap(() => new CapturedScope.readFromDataSource(source));
+        (MemberEntity member) => ScopeInfo.readFromDataSource(source));
+    Map<ir.TreeNode, CapturedScope> capturedScopesMap =
+        source.readTreeNodeMap(() => CapturedScope.readFromDataSource(source));
     Map<MemberEntity, CapturedScope> capturedScopeForSignatureMap =
-        source.readMemberMap((MemberEntity member) =>
-            new CapturedScope.readFromDataSource(source));
+        source.readMemberMap(
+            (MemberEntity member) => CapturedScope.readFromDataSource(source));
     Map<ir.LocalFunction, ClosureRepresentationInfo>
         localClosureRepresentationMap = source.readTreeNodeMap(
-            () => new ClosureRepresentationInfo.readFromDataSource(source));
+            () => ClosureRepresentationInfo.readFromDataSource(source));
     Map<MemberEntity, MemberEntity> enclosingMembers =
         source.readMemberMap((member) => source.readMember());
     source.end(tag);
-    return new ClosureDataImpl(
+    return ClosureDataImpl(
         elementMap,
         scopeMap,
         capturedScopesMap,
@@ -326,7 +326,7 @@
     closureModels.forEach((MemberEntity member, ClosureScopeModel model) {
       Map<ir.VariableDeclaration, JRecordField> allBoxedVariables =
           _elementMap.makeRecordContainer(model.scopeInfo, member);
-      _scopeMap[member] = new JsScopeInfo.from(
+      _scopeMap[member] = JsScopeInfo.from(
           allBoxedVariables, model.scopeInfo, member.enclosingClass);
 
       model.capturedScopesMap
@@ -336,10 +336,10 @@
         _updateScopeBasedOnRtiNeed(scope, rtiNeed, member);
 
         if (scope is KernelCapturedLoopScope) {
-          _capturedScopesMap[node] = new JsCapturedLoopScope.from(
+          _capturedScopesMap[node] = JsCapturedLoopScope.from(
               boxedVariables, scope, member.enclosingClass);
         } else {
-          _capturedScopesMap[node] = new JsCapturedScope.from(
+          _capturedScopesMap[node] = JsCapturedScope.from(
               boxedVariables, scope, member.enclosingClass);
         }
         allBoxedVariables.addAll(boxedVariables);
@@ -372,17 +372,17 @@
                 model.capturedScopesMap[functionNode];
             assert(capturedScope is! KernelCapturedLoopScope);
             KernelCapturedScope signatureCapturedScope =
-                new KernelCapturedScope.forSignature(capturedScope);
+                KernelCapturedScope.forSignature(capturedScope);
             _updateScopeBasedOnRtiNeed(signatureCapturedScope, rtiNeed, member);
             _capturedScopeForSignatureMap[closureClassInfo.signatureMethod] =
-                new JsCapturedScope.from(
+                JsCapturedScope.from(
                     {}, signatureCapturedScope, member.enclosingClass);
           }
         }
         callMethods.add(closureClassInfo.callMethod);
       }
     });
-    return new ClosureDataImpl(
+    return ClosureDataImpl(
         _elementMap,
         _scopeMap,
         _capturedScopesMap,
@@ -447,8 +447,7 @@
 
   JsScopeInfo.from(
       this._boxedVariables, KernelScopeInfo info, ClassEntity enclosingClass)
-      : this.thisLocal =
-            info.hasThisLocal ? new ThisLocal(enclosingClass) : null,
+      : this.thisLocal = info.hasThisLocal ? ThisLocal(enclosingClass) : null,
         this._localsUsedInTryOrSync = info.localsUsedInTryOrSync;
 
   void _ensureBoxedVariableCache(KernelToLocalsMap localsMap) {
@@ -489,7 +488,7 @@
 
   @override
   String toString() {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('this=$thisLocal,');
     sb.write('localsUsedInTryOrSync={${_localsUsedInTryOrSync.join(', ')}}');
     return sb.toString();
@@ -560,7 +559,7 @@
             () => source.readMember());
     Local context = source.readLocalOrNull();
     source.end(tag);
-    return new JsCapturedScope.internal(
+    return JsCapturedScope.internal(
         localsUsedInTryOrSync, thisLocal, boxedVariables, context);
   }
 
@@ -614,7 +613,7 @@
     List<ir.VariableDeclaration> boxedLoopVariables =
         source.readTreeNodes<ir.VariableDeclaration>();
     source.end(tag);
-    return new JsCapturedLoopScope.internal(localsUsedInTryOrSync, thisLocal,
+    return JsCapturedLoopScope.internal(localsUsedInTryOrSync, thisLocal,
         boxedVariables, context, boxedLoopVariables);
   }
 
@@ -854,7 +853,7 @@
     JLibrary library = source.readLibrary();
     String name = source.readString();
     source.end(tag);
-    return new JClosureClass(library, name);
+    return JClosureClass(library, name);
   }
 
   @override
@@ -910,7 +909,7 @@
       : this.internal(
             containingClass.closureClassEntity.library,
             containingClass.closureClassEntity,
-            new Name(name, containingClass.closureClassEntity.library),
+            Name(name, containingClass.closureClassEntity.library),
             declaredName,
             isAssignable: isAssignable,
             isConst: isConst);
@@ -928,8 +927,8 @@
     bool isConst = source.readBool();
     bool isAssignable = source.readBool();
     source.end(tag);
-    return new JClosureField.internal(
-        cls.library, cls, new Name(name, cls.library), declaredName,
+    return JClosureField.internal(
+        cls.library, cls, Name(name, cls.library), declaredName,
         isAssignable: isAssignable, isConst: isConst);
   }
 
@@ -971,13 +970,12 @@
 
   factory RecordClassData.readFromDataSource(DataSource source) {
     source.begin(tag);
-    ClassDefinition definition = new ClassDefinition.readFromDataSource(source);
+    ClassDefinition definition = ClassDefinition.readFromDataSource(source);
     InterfaceType thisType = source.readDartType();
     InterfaceType supertype = source.readDartType();
-    OrderedTypeSet orderedTypeSet =
-        new OrderedTypeSet.readFromDataSource(source);
+    OrderedTypeSet orderedTypeSet = OrderedTypeSet.readFromDataSource(source);
     source.end(tag);
-    return new RecordClassData(definition, thisType, supertype, orderedTypeSet);
+    return RecordClassData(definition, thisType, supertype, orderedTypeSet);
   }
 
   @override
@@ -1036,7 +1034,7 @@
     JLibrary library = source.readLibrary();
     String name = source.readString();
     source.end(tag);
-    return new JRecord(library, name);
+    return JRecord(library, name);
   }
 
   @override
@@ -1067,7 +1065,7 @@
 
   JRecordField(String name, this.box, {bool isConst})
       : super(box.container.library, box.container,
-            new Name(name, box.container.library),
+            Name(name, box.container.library),
             isStatic: false, isAssignable: true, isConst: isConst);
 
   factory JRecordField.readFromDataSource(DataSource source) {
@@ -1076,8 +1074,7 @@
     JClass enclosingClass = source.readClass();
     bool isConst = source.readBool();
     source.end(tag);
-    return new JRecordField(name, new BoxLocal(enclosingClass),
-        isConst: isConst);
+    return JRecordField(name, BoxLocal(enclosingClass), isConst: isConst);
   }
 
   @override
@@ -1116,14 +1113,13 @@
 
   factory ClosureClassData.readFromDataSource(DataSource source) {
     source.begin(tag);
-    ClassDefinition definition = new ClassDefinition.readFromDataSource(source);
+    ClassDefinition definition = ClassDefinition.readFromDataSource(source);
     InterfaceType thisType = source.readDartType();
     InterfaceType supertype = source.readDartType();
-    OrderedTypeSet orderedTypeSet =
-        new OrderedTypeSet.readFromDataSource(source);
+    OrderedTypeSet orderedTypeSet = OrderedTypeSet.readFromDataSource(source);
     FunctionType callType = source.readDartType();
     source.end(tag);
-    return new ClosureClassData(definition, thisType, supertype, orderedTypeSet)
+    return ClosureClassData(definition, thisType, supertype, orderedTypeSet)
       ..callType = callType;
   }
 
@@ -1154,7 +1150,7 @@
     source.begin(tag);
     SourceSpan location = source.readSourceSpan();
     source.end(tag);
-    return new ClosureClassDefinition(location);
+    return ClosureClassDefinition(location);
   }
 
   @override
@@ -1170,7 +1166,7 @@
 
   @override
   ir.Node get node =>
-      throw new UnsupportedError('ClosureClassDefinition.node for $location');
+      throw UnsupportedError('ClosureClassDefinition.node for $location');
 
   @override
   String toString() => 'ClosureClassDefinition(kind:$kind,location:$location)';
@@ -1186,7 +1182,7 @@
   @override
   StaticTypeCache get staticTypes {
     // The cached types are stored in the data for enclosing member.
-    throw new UnsupportedError("ClosureMemberData.staticTypes");
+    throw UnsupportedError("ClosureMemberData.staticTypes");
   }
 
   @override
@@ -1221,14 +1217,14 @@
   factory ClosureFunctionData.readFromDataSource(DataSource source) {
     source.begin(tag);
     ClosureMemberDefinition definition =
-        new MemberDefinition.readFromDataSource(source);
+        MemberDefinition.readFromDataSource(source);
     InterfaceType memberThisType = source.readDartType(allowNull: true);
     FunctionType functionType = source.readDartType();
     ir.FunctionNode functionNode = source.readTreeNode();
     ClassTypeVariableAccess classTypeVariableAccess =
         source.readEnum(ClassTypeVariableAccess.values);
     source.end(tag);
-    return new ClosureFunctionData(definition, memberThisType, functionType,
+    return ClosureFunctionData(definition, memberThisType, functionType,
         functionNode, classTypeVariableAccess);
   }
 
@@ -1274,11 +1270,10 @@
 
   factory ClosureFieldData.readFromDataSource(DataSource source) {
     source.begin(tag);
-    MemberDefinition definition =
-        new MemberDefinition.readFromDataSource(source);
+    MemberDefinition definition = MemberDefinition.readFromDataSource(source);
     InterfaceType memberThisType = source.readDartType(allowNull: true);
     source.end(tag);
-    return new ClosureFieldData(definition, memberThisType);
+    return ClosureFieldData(definition, memberThisType);
   }
 
   @override
@@ -1344,7 +1339,7 @@
     SourceSpan location = source.readSourceSpan();
     ir.TreeNode node = source.readTreeNode();
     source.end(tag);
-    return new ClosureMemberDefinition(location, kind, node);
+    return ClosureMemberDefinition(location, kind, node);
   }
 
   @override
@@ -1374,7 +1369,7 @@
     source.begin(tag);
     SourceSpan location = source.readSourceSpan();
     source.end(tag);
-    return new RecordContainerDefinition(location);
+    return RecordContainerDefinition(location);
   }
 
   @override
@@ -1389,8 +1384,8 @@
   ClassKind get kind => ClassKind.record;
 
   @override
-  ir.Node get node => throw new UnsupportedError(
-      'RecordContainerDefinition.node for $location');
+  ir.Node get node =>
+      throw UnsupportedError('RecordContainerDefinition.node for $location');
 
   @override
   String toString() =>
diff --git a/pkg/compiler/lib/src/js_model/element_map.dart b/pkg/compiler/lib/src/js_model/element_map.dart
index d63ee32..a7526f4 100644
--- a/pkg/compiler/lib/src/js_model/element_map.dart
+++ b/pkg/compiler/lib/src/js_model/element_map.dart
@@ -98,7 +98,7 @@
   //  constant expressions during resolution.
   ConstantValue getConstantValue(
       ir.Member memberContext, ir.Expression expression,
-      {bool requireConstant: true, bool implicitNull: false});
+      {bool requireConstant = true, bool implicitNull = false});
 
   /// Returns the [ConstantValue] for the sentinel used to indicate that a
   /// parameter is required.
@@ -342,17 +342,17 @@
     MemberKind kind = source.readEnum(MemberKind.values);
     switch (kind) {
       case MemberKind.regular:
-        return new RegularMemberDefinition.readFromDataSource(source);
+        return RegularMemberDefinition.readFromDataSource(source);
       case MemberKind.constructor:
       case MemberKind.constructorBody:
       case MemberKind.signature:
       case MemberKind.generatorBody:
-        return new SpecialMemberDefinition.readFromDataSource(source, kind);
+        return SpecialMemberDefinition.readFromDataSource(source, kind);
       case MemberKind.closureCall:
       case MemberKind.closureField:
-        return new ClosureMemberDefinition.readFromDataSource(source, kind);
+        return ClosureMemberDefinition.readFromDataSource(source, kind);
     }
-    throw new UnsupportedError("Unexpected MemberKind $kind");
+    throw UnsupportedError("Unexpected MemberKind $kind");
   }
 
   /// Serializes this [MemberDefinition] to [sink].
@@ -382,7 +382,7 @@
     source.begin(tag);
     ir.Member node = source.readMemberNode();
     source.end(tag);
-    return new RegularMemberDefinition(node);
+    return RegularMemberDefinition(node);
   }
 
   @override
@@ -422,7 +422,7 @@
     source.begin(tag);
     ir.TreeNode node = source.readTreeNode();
     source.end(tag);
-    return new SpecialMemberDefinition(node, kind);
+    return SpecialMemberDefinition(node, kind);
   }
 
   @override
@@ -458,13 +458,13 @@
     ClassKind kind = source.readEnum(ClassKind.values);
     switch (kind) {
       case ClassKind.regular:
-        return new RegularClassDefinition.readFromDataSource(source);
+        return RegularClassDefinition.readFromDataSource(source);
       case ClassKind.closure:
-        return new ClosureClassDefinition.readFromDataSource(source);
+        return ClosureClassDefinition.readFromDataSource(source);
       case ClassKind.record:
-        return new RecordContainerDefinition.readFromDataSource(source);
+        return RecordContainerDefinition.readFromDataSource(source);
     }
-    throw new UnsupportedError("Unexpected ClassKind $kind");
+    throw UnsupportedError("Unexpected ClassKind $kind");
   }
 
   /// Serializes this [ClassDefinition] to [sink].
@@ -486,7 +486,7 @@
     source.begin(tag);
     ir.Class node = source.readClassNode();
     source.end(tag);
-    return new RegularClassDefinition(node);
+    return RegularClassDefinition(node);
   }
 
   @override
@@ -527,7 +527,7 @@
     ir.FunctionNode node,
     ParameterStructure parameterStructure,
     void f(ir.VariableDeclaration parameter, {bool isOptional, bool isElided}),
-    {bool useNativeOrdering: false}) {
+    {bool useNativeOrdering = false}) {
   for (int position = 0;
       position < node.positionalParameters.length;
       position++) {
diff --git a/pkg/compiler/lib/src/js_model/element_map_impl.dart b/pkg/compiler/lib/src/js_model/element_map_impl.dart
index 364ce65..7a87248 100644
--- a/pkg/compiler/lib/src/js_model/element_map_impl.dart
+++ b/pkg/compiler/lib/src/js_model/element_map_impl.dart
@@ -90,13 +90,13 @@
   JProgramEnv programEnv;
 
   final EntityDataEnvMap<IndexedLibrary, JLibraryData, JLibraryEnv> libraries =
-      new EntityDataEnvMap<IndexedLibrary, JLibraryData, JLibraryEnv>();
+      EntityDataEnvMap<IndexedLibrary, JLibraryData, JLibraryEnv>();
   final EntityDataEnvMap<IndexedClass, JClassData, JClassEnv> classes =
-      new EntityDataEnvMap<IndexedClass, JClassData, JClassEnv>();
+      EntityDataEnvMap<IndexedClass, JClassData, JClassEnv>();
   final EntityDataMap<IndexedMember, JMemberData> members =
-      new EntityDataMap<IndexedMember, JMemberData>();
+      EntityDataMap<IndexedMember, JMemberData>();
   final EntityDataMap<IndexedTypeVariable, JTypeVariableData> typeVariables =
-      new EntityDataMap<IndexedTypeVariable, JTypeVariableData>();
+      EntityDataMap<IndexedTypeVariable, JTypeVariableData>();
 
   final Map<ir.Library, IndexedLibrary> libraryMap = {};
   final Map<ir.Class, IndexedClass> classMap = {};
@@ -134,11 +134,11 @@
       Map<MemberEntity, MemberUsage> liveMemberUsage,
       AnnotationsData annotations)
       : this.options = _elementMap.options {
-    _elementEnvironment = new JsElementEnvironment(this);
-    _typeConverter = new DartTypeConverter(this);
-    _types = new KernelDartTypes(this, options);
-    _commonElements = new CommonElementsImpl(_types, _elementEnvironment);
-    _constantValuefier = new ConstantValuefier(this);
+    _elementEnvironment = JsElementEnvironment(this);
+    _typeConverter = DartTypeConverter(this);
+    _types = KernelDartTypes(this, options);
+    _commonElements = CommonElementsImpl(_types, _elementEnvironment);
+    _constantValuefier = ConstantValuefier(this);
 
     programEnv = _elementMap.env.convert();
     for (int libraryIndex = 0;
@@ -147,7 +147,7 @@
       IndexedLibrary oldLibrary = _elementMap.libraries.getEntity(libraryIndex);
       KLibraryEnv oldEnv = _elementMap.libraries.getEnv(oldLibrary);
       KLibraryData data = _elementMap.libraries.getData(oldLibrary);
-      IndexedLibrary newLibrary = new JLibrary(oldLibrary.name,
+      IndexedLibrary newLibrary = JLibrary(oldLibrary.name,
           oldLibrary.canonicalUri, oldLibrary.isNonNullableByDefault);
       JLibraryEnv newEnv = oldEnv.convert(_elementMap, liveMemberUsage);
       libraryMap[oldEnv.library] =
@@ -165,8 +165,8 @@
       KClassData data = _elementMap.classes.getData(oldClass);
       IndexedLibrary oldLibrary = oldClass.library;
       LibraryEntity newLibrary = libraries.getEntity(oldLibrary.libraryIndex);
-      IndexedClass newClass = new JClass(newLibrary, oldClass.name,
-          isAbstract: oldClass.isAbstract);
+      IndexedClass newClass =
+          JClass(newLibrary, oldClass.name, isAbstract: oldClass.isAbstract);
       JClassEnv newEnv = env.convert(_elementMap, liveMemberUsage);
       classMap[env.cls] = classes.register(newClass, data.convert(), newEnv);
       assert(newClass.classIndex == oldClass.classIndex);
@@ -189,11 +189,11 @@
       ClassEntity newClass =
           oldClass != null ? classes.getEntity(oldClass.classIndex) : null;
       IndexedMember newMember;
-      Name memberName = new Name(oldMember.memberName.text, newLibrary,
+      Name memberName = Name(oldMember.memberName.text, newLibrary,
           isSetter: oldMember.memberName.isSetter);
       if (oldMember.isField) {
         IndexedField field = oldMember;
-        newMember = new JField(newLibrary, newClass, memberName,
+        newMember = JField(newLibrary, newClass, memberName,
             isStatic: field.isStatic,
             isAssignable: field.isAssignable,
             isConst: field.isConst);
@@ -205,27 +205,27 @@
                 : memberUsage.invokedParameters;
         if (constructor.isFactoryConstructor) {
           // TODO(redemption): This should be a JFunction.
-          newMember = new JFactoryConstructor(
+          newMember = JFactoryConstructor(
               newClass, memberName, parameterStructure,
               isExternal: constructor.isExternal,
               isConst: constructor.isConst,
               isFromEnvironmentConstructor:
                   constructor.isFromEnvironmentConstructor);
         } else {
-          newMember = new JGenerativeConstructor(
+          newMember = JGenerativeConstructor(
               newClass, memberName, parameterStructure,
               isExternal: constructor.isExternal, isConst: constructor.isConst);
         }
       } else if (oldMember.isGetter) {
         IndexedFunction getter = oldMember;
-        newMember = new JGetter(
+        newMember = JGetter(
             newLibrary, newClass, memberName, getter.asyncMarker,
             isStatic: getter.isStatic,
             isExternal: getter.isExternal,
             isAbstract: getter.isAbstract);
       } else if (oldMember.isSetter) {
         IndexedFunction setter = oldMember;
-        newMember = new JSetter(newLibrary, newClass, memberName,
+        newMember = JSetter(newLibrary, newClass, memberName,
             isStatic: setter.isStatic,
             isExternal: setter.isExternal,
             isAbstract: setter.isAbstract);
@@ -235,7 +235,7 @@
             annotations.hasNoElision(function)
                 ? function.parameterStructure
                 : memberUsage.invokedParameters;
-        newMember = new JMethod(newLibrary, newClass, memberName,
+        newMember = JMethod(newLibrary, newClass, memberName,
             parameterStructure, function.asyncMarker,
             isStatic: function.isStatic,
             isExternal: function.isExternal,
@@ -294,14 +294,14 @@
 
   JsKernelToElementMap.readFromDataSource(this.options, this.reporter,
       this._environment, ir.Component component, DataSource source) {
-    _elementEnvironment = new JsElementEnvironment(this);
-    _typeConverter = new DartTypeConverter(this);
-    _types = new KernelDartTypes(this, options);
-    _commonElements = new CommonElementsImpl(_types, _elementEnvironment);
-    _constantValuefier = new ConstantValuefier(this);
+    _elementEnvironment = JsElementEnvironment(this);
+    _typeConverter = DartTypeConverter(this);
+    _types = KernelDartTypes(this, options);
+    _commonElements = CommonElementsImpl(_types, _elementEnvironment);
+    _constantValuefier = ConstantValuefier(this);
 
-    source.registerComponentLookup(new ComponentLookup(component));
-    _EntityLookup entityLookup = new _EntityLookup();
+    source.registerComponentLookup(ComponentLookup(component));
+    _EntityLookup entityLookup = _EntityLookup();
     source.registerEntityLookup(entityLookup);
 
     source.begin(tag);
@@ -309,7 +309,7 @@
     int libraryCount = source.readInt();
     for (int i = 0; i < libraryCount; i++) {
       int index = source.readInt();
-      JLibrary library = new JLibrary.readFromDataSource(source);
+      JLibrary library = JLibrary.readFromDataSource(source);
       entityLookup.registerLibrary(index, library);
     }
     source.end(libraryTag);
@@ -318,7 +318,7 @@
     int classCount = source.readInt();
     for (int i = 0; i < classCount; i++) {
       int index = source.readInt();
-      JClass cls = new JClass.readFromDataSource(source);
+      JClass cls = JClass.readFromDataSource(source);
       entityLookup.registerClass(index, cls);
     }
     source.end(classTag);
@@ -327,7 +327,7 @@
     int memberCount = source.readInt();
     for (int i = 0; i < memberCount; i++) {
       int index = source.readInt();
-      JMember member = new JMember.readFromDataSource(source);
+      JMember member = JMember.readFromDataSource(source);
       entityLookup.registerMember(index, member);
     }
     source.end(memberTag);
@@ -336,16 +336,16 @@
     int typeVariableCount = source.readInt();
     for (int i = 0; i < typeVariableCount; i++) {
       int index = source.readInt();
-      JTypeVariable typeVariable = new JTypeVariable.readFromDataSource(source);
+      JTypeVariable typeVariable = JTypeVariable.readFromDataSource(source);
       entityLookup.registerTypeVariable(index, typeVariable);
     }
     source.end(typeVariableTag);
 
-    programEnv = new JProgramEnv([component]);
+    programEnv = JProgramEnv([component]);
     source.begin(libraryDataTag);
     entityLookup.forEachLibrary((int index, JLibrary library) {
-      JLibraryEnv env = new JLibraryEnv.readFromDataSource(source);
-      JLibraryData data = new JLibraryData.readFromDataSource(source);
+      JLibraryEnv env = JLibraryEnv.readFromDataSource(source);
+      JLibraryData data = JLibraryData.readFromDataSource(source);
       libraryMap[env.library] =
           libraries.registerByIndex(index, library, data, env);
       programEnv.registerLibrary(env);
@@ -355,8 +355,8 @@
 
     source.begin(classDataTag);
     entityLookup.forEachClass((int index, JClass cls) {
-      JClassEnv env = new JClassEnv.readFromDataSource(source);
-      JClassData data = new JClassData.readFromDataSource(source);
+      JClassEnv env = JClassEnv.readFromDataSource(source);
+      JClassData data = JClassData.readFromDataSource(source);
       classMap[env.cls] = classes.registerByIndex(index, cls, data, env);
       if (cls is! JRecord && cls is! JClosureClass) {
         // Synthesized classes are not part of the library environment.
@@ -368,7 +368,7 @@
 
     source.begin(memberDataTag);
     entityLookup.forEachMember((int index, IndexedMember member) {
-      JMemberData data = new JMemberData.readFromDataSource(source);
+      JMemberData data = JMemberData.readFromDataSource(source);
       members.registerByIndex(index, member, data);
       switch (data.definition.kind) {
         case MemberKind.regular:
@@ -390,7 +390,7 @@
 
     source.begin(typeVariableDataTag);
     entityLookup.forEachTypeVariable((int index, JTypeVariable typeVariable) {
-      JTypeVariableData data = new JTypeVariableData.readFromDataSource(source);
+      JTypeVariableData data = JTypeVariableData.readFromDataSource(source);
       typeVariableMap[data.node] =
           typeVariables.registerByIndex(index, typeVariable, data);
       assert(index == typeVariable.typeVariableIndex);
@@ -564,7 +564,7 @@
   }
 
   MemberEntity lookupLibraryMember(IndexedLibrary library, String name,
-      {bool setter: false}) {
+      {bool setter = false}) {
     assert(checkFamily(library));
     JLibraryEnv libraryEnv = libraries.getEnv(library);
     ir.Member member = libraryEnv.lookupMember(name, setter: setter);
@@ -601,7 +601,7 @@
   }
 
   MemberEntity lookupClassMember(IndexedClass cls, String name,
-      {bool setter: false}) {
+      {bool setter = false}) {
     assert(checkFamily(cls));
     JClassEnv classEnv = classes.getEnv(cls);
     return classEnv.lookupMember(this, name, setter: setter);
@@ -657,14 +657,13 @@
       } else {
         data.thisType = types.interfaceType(
             cls,
-            new List<DartType>.generate(node.typeParameters.length,
-                (int index) {
+            List<DartType>.generate(node.typeParameters.length, (int index) {
               return types.typeVariableType(
                   getTypeVariableInternal(node.typeParameters[index]));
             }));
         data.rawType = types.interfaceType(
             cls,
-            new List<DartType>.filled(
+            List<DartType>.filled(
                 node.typeParameters.length, types.dynamicType()));
       }
     }
@@ -712,7 +711,7 @@
       ir.Class node = data.cls;
 
       if (node.supertype == null) {
-        data.orderedTypeSet = new OrderedTypeSet.singleton(data.thisType);
+        data.orderedTypeSet = OrderedTypeSet.singleton(data.thisType);
         data.isMixinApplication = false;
         data.interfaces = const <InterfaceType>[];
       } else {
@@ -721,7 +720,7 @@
         // This is necessary to support when a class implements the same
         // supertype in multiple non-conflicting ways, like implementing A<int*>
         // and A<int?> or B<Object?> and B<dynamic>.
-        Set<InterfaceType> canonicalSupertypes = <InterfaceType>{};
+        Set<InterfaceType> canonicalSupertypes = {};
 
         InterfaceType processSupertype(ir.Supertype supertypeNode) {
           supertypeNode = classHierarchy.getClassAsInstanceOf(
@@ -795,7 +794,7 @@
           interfaces.add(processSupertype(supertype));
         });
         OrderedTypeSetBuilder setBuilder =
-            new KernelOrderedTypeSetBuilder(this, cls);
+            KernelOrderedTypeSetBuilder(this, cls);
         data.orderedTypeSet =
             setBuilder.createOrderedTypeSet(canonicalSupertypes);
         data.interfaces = interfaces;
@@ -816,7 +815,7 @@
         return getMethodInternal(node);
       }
     }
-    throw new UnsupportedError("Unexpected member: $node");
+    throw UnsupportedError("Unexpected member: $node");
   }
 
   @override
@@ -899,7 +898,7 @@
     }
     var namedParameters = <String>[];
     var requiredNamedParameters = <String>{};
-    List<DartType> namedParameterTypes = <DartType>[];
+    List<DartType> namedParameterTypes = [];
     List<ir.VariableDeclaration> sortedNamedParameters =
         node.namedParameters.toList()..sort((a, b) => a.name.compareTo(b.name));
     for (ir.VariableDeclaration variable in sortedNamedParameters) {
@@ -913,10 +912,10 @@
     if (node.typeParameters.isNotEmpty) {
       List<DartType> typeParameters = <DartType>[];
       for (ir.TypeParameter typeParameter in node.typeParameters) {
-        typeParameters.add(getDartType(new ir.TypeParameterType(
-            typeParameter, ir.Nullability.nonNullable)));
+        typeParameters.add(getDartType(
+            ir.TypeParameterType(typeParameter, ir.Nullability.nonNullable)));
       }
-      typeVariables = new List<FunctionTypeVariable>.generate(
+      typeVariables = List<FunctionTypeVariable>.generate(
           node.typeParameters.length,
           (int index) => types.functionTypeVariable(index));
 
@@ -1161,11 +1160,11 @@
 
   ir.StaticTypeContext getStaticTypeContext(ir.Member node) {
     // TODO(johnniwinther): Cache the static type context.
-    return new ir.StaticTypeContext(node, typeEnvironment);
+    return ir.StaticTypeContext(node, typeEnvironment);
   }
 
   Dart2jsConstantEvaluator get constantEvaluator {
-    return _constantEvaluator ??= new Dart2jsConstantEvaluator(typeEnvironment,
+    return _constantEvaluator ??= Dart2jsConstantEvaluator(typeEnvironment,
         (ir.LocatedMessage message, List<ir.LocatedMessage> context) {
       reportLocatedMessage(reporter, message, context);
     },
@@ -1214,7 +1213,7 @@
             // Closure field may use class nodes or type parameter nodes as
             // the definition node.
             staticTypeContext =
-                new ir.StaticTypeContext.forAnnotations(node, typeEnvironment);
+                ir.StaticTypeContext.forAnnotations(node, typeEnvironment);
           }
           node = node.parent;
         }
@@ -1222,22 +1221,20 @@
     }
     assert(cachedStaticTypes != null, "No static types cached for $member.");
     assert(staticTypeContext != null, "No static types context for $member.");
-    return new CachedStaticType(staticTypeContext, cachedStaticTypes,
-        new ThisInterfaceType.from(staticTypeContext.thisType));
+    return CachedStaticType(staticTypeContext, cachedStaticTypes,
+        ThisInterfaceType.from(staticTypeContext.thisType));
   }
 
   @override
   Name getName(ir.Name name) {
-    return new Name(
-        name.text, name.isPrivate ? getLibrary(name.library) : null);
+    return Name(name.text, name.isPrivate ? getLibrary(name.library) : null);
   }
 
   @override
   CallStructure getCallStructure(ir.Arguments arguments) {
     int argumentCount = arguments.positional.length + arguments.named.length;
     List<String> namedArguments = arguments.named.map((e) => e.name).toList();
-    return new CallStructure(
-        argumentCount, namedArguments, arguments.types.length);
+    return CallStructure(argumentCount, namedArguments, arguments.types.length);
   }
 
   @override
@@ -1292,25 +1289,25 @@
     }
 
     CallStructure callStructure = getCallStructure(invocation.arguments);
-    return new Selector(kind, name, callStructure);
+    return Selector(kind, name, callStructure);
   }
 
   Selector getGetterSelector(ir.Name irName) {
-    Name name = new Name(
-        irName.text, irName.isPrivate ? getLibrary(irName.library) : null);
-    return new Selector.getter(name);
+    Name name =
+        Name(irName.text, irName.isPrivate ? getLibrary(irName.library) : null);
+    return Selector.getter(name);
   }
 
   Selector getSetterSelector(ir.Name irName) {
-    Name name = new Name(
-        irName.text, irName.isPrivate ? getLibrary(irName.library) : null);
-    return new Selector.setter(name);
+    Name name =
+        Name(irName.text, irName.isPrivate ? getLibrary(irName.library) : null);
+    return Selector.setter(name);
   }
 
   /// Looks up [typeName] for use in the spec-string of a `JS` call.
   // TODO(johnniwinther): Use this in [native.NativeBehavior] instead of calling
   // the `ForeignResolver`.
-  TypeLookup typeLookup({bool resolveAsRaw: true}) {
+  TypeLookup typeLookup({bool resolveAsRaw = true}) {
     return resolveAsRaw
         ? (_cachedTypeLookupRaw ??= _typeLookup(resolveAsRaw: true))
         : (_cachedTypeLookupFull ??= _typeLookup(resolveAsRaw: false));
@@ -1319,7 +1316,7 @@
   TypeLookup _cachedTypeLookupRaw;
   TypeLookup _cachedTypeLookupFull;
 
-  TypeLookup _typeLookup({bool resolveAsRaw: true}) {
+  TypeLookup _typeLookup({bool resolveAsRaw = true}) {
     bool cachedMayLookupInMain;
 
     DartType lookup(String typeName, {bool required}) {
@@ -1378,7 +1375,7 @@
   }
 
   String _getStringArgument(ir.StaticInvocation node, int index) {
-    return node.arguments.positional[index].accept(new Stringifier());
+    return node.arguments.positional[index].accept(Stringifier());
   }
 
   // TODO(johnniwinther): Cache this for later use.
@@ -1388,20 +1385,20 @@
         node.arguments.named.isNotEmpty) {
       reporter.reportErrorMessage(
           CURRENT_ELEMENT_SPANNABLE, MessageKind.WRONG_ARGUMENT_FOR_JS);
-      return new NativeBehavior();
+      return NativeBehavior();
     }
     String specString = _getStringArgument(node, 0);
     if (specString == null) {
       reporter.reportErrorMessage(
           CURRENT_ELEMENT_SPANNABLE, MessageKind.WRONG_ARGUMENT_FOR_JS_FIRST);
-      return new NativeBehavior();
+      return NativeBehavior();
     }
 
     String codeString = _getStringArgument(node, 1);
     if (codeString == null) {
       reporter.reportErrorMessage(
           CURRENT_ELEMENT_SPANNABLE, MessageKind.WRONG_ARGUMENT_FOR_JS_SECOND);
-      return new NativeBehavior();
+      return NativeBehavior();
     }
 
     return NativeBehavior.ofJsCall(
@@ -1419,18 +1416,18 @@
     if (node.arguments.positional.length < 1) {
       reporter.internalError(
           CURRENT_ELEMENT_SPANNABLE, "JS builtin expression has no type.");
-      return new NativeBehavior();
+      return NativeBehavior();
     }
     if (node.arguments.positional.length < 2) {
       reporter.internalError(
           CURRENT_ELEMENT_SPANNABLE, "JS builtin is missing name.");
-      return new NativeBehavior();
+      return NativeBehavior();
     }
     String specString = _getStringArgument(node, 0);
     if (specString == null) {
       reporter.internalError(
           CURRENT_ELEMENT_SPANNABLE, "Unexpected first argument.");
-      return new NativeBehavior();
+      return NativeBehavior();
     }
     return NativeBehavior.ofJsBuiltinCall(
         specString,
@@ -1447,24 +1444,24 @@
     if (node.arguments.positional.length < 1) {
       reporter.internalError(CURRENT_ELEMENT_SPANNABLE,
           "JS embedded global expression has no type.");
-      return new NativeBehavior();
+      return NativeBehavior();
     }
     if (node.arguments.positional.length < 2) {
       reporter.internalError(
           CURRENT_ELEMENT_SPANNABLE, "JS embedded global is missing name.");
-      return new NativeBehavior();
+      return NativeBehavior();
     }
     if (node.arguments.positional.length > 2 ||
         node.arguments.named.isNotEmpty) {
       reporter.internalError(CURRENT_ELEMENT_SPANNABLE,
           "JS embedded global has more than 2 arguments.");
-      return new NativeBehavior();
+      return NativeBehavior();
     }
     String specString = _getStringArgument(node, 0);
     if (specString == null) {
       reporter.internalError(
           CURRENT_ELEMENT_SPANNABLE, "Unexpected first argument.");
-      return new NativeBehavior();
+      return NativeBehavior();
     }
     return NativeBehavior.ofJsEmbeddedGlobalCall(
         specString,
@@ -1476,13 +1473,13 @@
 
   @override
   ConstantValue getConstantValue(ir.Member memberContext, ir.Expression node,
-      {bool requireConstant: true, bool implicitNull: false}) {
+      {bool requireConstant = true, bool implicitNull = false}) {
     if (node == null) {
       if (!implicitNull) {
         throw failedAt(
             CURRENT_ELEMENT_SPANNABLE, 'No expression for constant.');
       }
-      return new NullConstantValue();
+      return NullConstantValue();
     } else if (node is ir.ConstantExpression) {
       return _constantValuefier.visitConstant(node.constant);
     } else {
@@ -1495,7 +1492,7 @@
           requireConstant: requireConstant);
       if (constant == null) {
         if (requireConstant) {
-          throw new UnsupportedError(
+          throw UnsupportedError(
               'No constant for ${DebugPrinter.prettyPrint(node)}');
         }
       } else {
@@ -1511,8 +1508,7 @@
 
   @override
   ConstantValue getRequiredSentinelConstantValue() {
-    return new ConstructedConstantValue(
-        _commonElements.requiredSentinelType, <FieldEntity, ConstantValue>{});
+    return ConstructedConstantValue(_commonElements.requiredSentinelType, {});
   }
 
   @override
@@ -1542,17 +1538,17 @@
 
   TypeVariableEntity createTypeVariable(
       Entity typeDeclaration, String name, int index) {
-    return new JTypeVariable(typeDeclaration, name, index);
+    return JTypeVariable(typeDeclaration, name, index);
   }
 
   JConstructorBody createConstructorBody(
       ConstructorEntity constructor, ParameterStructure parameterStructure) {
-    return new JConstructorBody(constructor, parameterStructure);
+    return JConstructorBody(constructor, parameterStructure);
   }
 
   JGeneratorBody createGeneratorBody(
       FunctionEntity function, DartType elementType) {
-    return new JGeneratorBody(function, elementType);
+    return JGeneratorBody(function, elementType);
   }
 
   void forEachNestedClosure(
@@ -1671,11 +1667,10 @@
           createConstructorBody(constructor, parameterStructure);
       members.register<IndexedFunction, FunctionData>(
           constructorBody,
-          new ConstructorBodyDataImpl(
+          ConstructorBodyDataImpl(
               data.node,
               data.node.function,
-              new SpecialMemberDefinition(
-                  data.node, MemberKind.constructorBody),
+              SpecialMemberDefinition(data.node, MemberKind.constructorBody),
               data.staticTypes));
       IndexedClass cls = constructor.enclosingClass;
       JClassEnvImpl classEnv = classes.getEnv(cls);
@@ -1718,7 +1713,7 @@
       case MemberKind.generatorBody:
         return getParentMember(definition.node);
     }
-    throw new UnsupportedError('Unexpected member kind ${definition}');
+    throw UnsupportedError('Unexpected member kind ${definition}');
   }
 
   @override
@@ -1730,7 +1725,7 @@
   /// the parameter and the [defaultValue] if the parameter is optional.
   void forEachParameter(covariant IndexedFunction function,
       void f(DartType type, String name, ConstantValue defaultValue),
-      {bool isNative: false}) {
+      {bool isNative = false}) {
     FunctionData data = members.getData(function);
     data.forEachParameter(this, function.parameterStructure, f,
         isNative: isNative);
@@ -1753,11 +1748,11 @@
       BoxLocal boxLocal,
       Map<String, MemberEntity> memberMap) {
     JRecordField boxedField =
-        new JRecordField(variable.name, boxLocal, isConst: variable.isConst);
+        JRecordField(variable.name, boxLocal, isConst: variable.isConst);
     members.register(
         boxedField,
-        new ClosureFieldData(
-            new ClosureMemberDefinition(computeSourceSpanFromTreeNode(variable),
+        ClosureFieldData(
+            ClosureMemberDefinition(computeSourceSpanFromTreeNode(variable),
                 MemberKind.closureField, variable),
             memberThisType));
     memberMap[boxedField.name] = boxedField;
@@ -1775,18 +1770,18 @@
     if (info.boxedVariables.isNotEmpty) {
       NodeBox box = info.capturedVariablesAccessor;
 
-      Map<String, IndexedMember> memberMap = <String, IndexedMember>{};
-      JRecord container = new JRecord(member.library, box.name);
-      BoxLocal boxLocal = new BoxLocal(container);
+      Map<String, IndexedMember> memberMap = {};
+      JRecord container = JRecord(member.library, box.name);
+      BoxLocal boxLocal = BoxLocal(container);
       InterfaceType thisType =
           types.interfaceType(container, const <DartType>[]);
       InterfaceType supertype = commonElements.objectType;
-      JClassData containerData = new RecordClassData(
-          new RecordContainerDefinition(getMemberDefinition(member).location),
+      JClassData containerData = RecordClassData(
+          RecordContainerDefinition(getMemberDefinition(member).location),
           thisType,
           supertype,
           getOrderedTypeSet(supertype.element).extendClass(types, thisType));
-      classes.register(container, containerData, new RecordEnv(memberMap));
+      classes.register(container, containerData, RecordEnv(memberMap));
 
       InterfaceType memberThisType = member.enclosingClass != null
           ? elementEnvironment.getThisType(member.enclosingClass)
@@ -1813,7 +1808,7 @@
         requiredNamedParameters.add(p.name);
       }
     }
-    return new ParameterStructure(
+    return ParameterStructure(
         requiredPositionalParameters,
         positionalParameters,
         namedParameters,
@@ -1842,19 +1837,19 @@
     }
     String name = _computeClosureName(node);
     SourceSpan location = computeSourceSpanFromTreeNode(node);
-    Map<String, IndexedMember> memberMap = <String, IndexedMember>{};
+    Map<String, IndexedMember> memberMap = {};
 
-    JClass classEntity = new JClosureClass(enclosingLibrary, name);
+    JClass classEntity = JClosureClass(enclosingLibrary, name);
     // Create a classData and set up the interfaces and subclass
     // relationships that _ensureSupertypes and _ensureThisAndRawType are doing
     InterfaceType thisType =
         types.interfaceType(classEntity, const <DartType>[]);
-    ClosureClassData closureData = new ClosureClassData(
-        new ClosureClassDefinition(location),
+    ClosureClassData closureData = ClosureClassData(
+        ClosureClassDefinition(location),
         thisType,
         supertype,
         getOrderedTypeSet(supertype.element).extendClass(types, thisType));
-    classes.register(classEntity, closureData, new ClosureClassEnv(memberMap));
+    classes.register(classEntity, closureData, ClosureClassEnv(memberMap));
 
     Local closureEntity;
     ir.VariableDeclaration closureEntityNode;
@@ -1862,10 +1857,10 @@
       ir.FunctionDeclaration parent = node.parent;
       closureEntityNode = parent.variable;
     } else if (node.parent is ir.FunctionExpression) {
-      closureEntity = new AnonymousClosureLocal(classEntity);
+      closureEntity = AnonymousClosureLocal(classEntity);
     }
 
-    IndexedFunction callMethod = new JClosureCallMethod(classEntity,
+    IndexedFunction callMethod = JClosureCallMethod(classEntity,
         _getParameterStructureFromFunctionNode(node), getAsyncMarker(node));
     _nestedClosureMap
         .putIfAbsent(member, () => <IndexedFunction>[])
@@ -1877,11 +1872,11 @@
     for (ir.TypeParameter typeParameter in node.typeParameters) {
       typeVariableMap[typeParameter] = typeVariables.register(
           createTypeVariable(callMethod, typeParameter.name, index),
-          new JTypeVariableData(typeParameter));
+          JTypeVariableData(typeParameter));
       index++;
     }
 
-    JsClosureClassInfo closureClassInfo = new JsClosureClassInfo.fromScopeInfo(
+    JsClosureClassInfo closureClassInfo = JsClosureClassInfo.fromScopeInfo(
         classEntity,
         node,
         <ir.VariableDeclaration, JRecordField>{},
@@ -1889,7 +1884,7 @@
         member.enclosingClass,
         closureEntity,
         closureEntityNode,
-        info.hasThisLocal ? new ThisLocal(member.enclosingClass) : null);
+        info.hasThisLocal ? ThisLocal(member.enclosingClass) : null);
     _buildClosureClassFields(closureClassInfo, member, memberThisType, info,
         recordFieldsVisibleInScope, memberMap);
 
@@ -1902,8 +1897,8 @@
 
     members.register<IndexedFunction, FunctionData>(
         callMethod,
-        new ClosureFunctionData(
-            new ClosureMemberDefinition(
+        ClosureFunctionData(
+            ClosureMemberDefinition(
                 location, MemberKind.closureCall, node.parent),
             memberThisType,
             closureData.callType,
@@ -2002,7 +1997,7 @@
                 fieldNumber));
         fieldNumber++;
       } else {
-        throw new UnsupportedError("Unexpected field node type: $variable");
+        throw UnsupportedError("Unexpected field node type: $variable");
       }
     }
   }
@@ -2032,17 +2027,15 @@
       return false;
     }
 
-    FieldEntity closureField = new JClosureField(
+    FieldEntity closureField = JClosureField(
         '_box_$fieldNumber', closureClassInfo, recordField.box.name,
         isConst: true, isAssignable: false);
 
     members.register<IndexedField, JFieldData>(
         closureField,
-        new ClosureFieldData(
-            new ClosureMemberDefinition(
-                computeSourceSpanFromTreeNode(sourceNode),
-                MemberKind.closureField,
-                sourceNode),
+        ClosureFieldData(
+            ClosureMemberDefinition(computeSourceSpanFromTreeNode(sourceNode),
+                MemberKind.closureField, sourceNode),
             memberThisType));
     memberMap[closureField.name] = closureField;
     closureClassInfo.registerFieldForLocal(recordField.box, closureField);
@@ -2058,11 +2051,11 @@
       SourceSpan location,
       ClassTypeVariableAccess typeVariableAccess) {
     FunctionEntity signatureMethod =
-        new JSignatureMethod(closureClassInfo.closureClassEntity);
+        JSignatureMethod(closureClassInfo.closureClassEntity);
     members.register<IndexedFunction, FunctionData>(
         signatureMethod,
-        new SignatureFunctionData(
-            new SpecialMemberDefinition(
+        SignatureFunctionData(
+            SpecialMemberDefinition(
                 closureSourceNode.parent, MemberKind.signature),
             memberThisType,
             closureSourceNode.typeParameters,
@@ -2080,17 +2073,15 @@
       bool isConst,
       bool isAssignable,
       int fieldNumber) {
-    JField closureField = new JClosureField(
+    JField closureField = JClosureField(
         _getClosureVariableName(name, fieldNumber), closureClassInfo, name,
         isConst: isConst, isAssignable: isAssignable);
 
     members.register<IndexedField, JFieldData>(
         closureField,
-        new ClosureFieldData(
-            new ClosureMemberDefinition(
-                computeSourceSpanFromTreeNode(sourceNode),
-                MemberKind.closureField,
-                sourceNode),
+        ClosureFieldData(
+            ClosureMemberDefinition(computeSourceSpanFromTreeNode(sourceNode),
+                MemberKind.closureField, sourceNode),
             memberThisType));
     memberMap[closureField.name] = closureField;
     return closureField;
@@ -2167,8 +2158,8 @@
       generatorBody = createGeneratorBody(function, elementType);
       members.register<IndexedFunction, FunctionData>(
           generatorBody,
-          new GeneratorBodyFunctionData(functionData,
-              new SpecialMemberDefinition(node, MemberKind.generatorBody)));
+          GeneratorBodyFunctionData(functionData,
+              SpecialMemberDefinition(node, MemberKind.generatorBody)));
 
       if (function.enclosingClass != null) {
         // TODO(sra): Integrate this with ClassEnvImpl.addConstructorBody ?
@@ -2343,7 +2334,7 @@
 
   @override
   ConstructorEntity lookupConstructor(ClassEntity cls, String name,
-      {bool required: false}) {
+      {bool required = false}) {
     ConstructorEntity constructor = elementMap.lookupConstructor(cls, name);
     if (constructor == null && required) {
       throw failedAt(
@@ -2356,7 +2347,7 @@
 
   @override
   MemberEntity lookupLocalClassMember(ClassEntity cls, String name,
-      {bool setter: false, bool required: false}) {
+      {bool setter = false, bool required = false}) {
     MemberEntity member =
         elementMap.lookupClassMember(cls, name, setter: setter);
     if (member == null && required) {
@@ -2368,7 +2359,7 @@
 
   @override
   ClassEntity getSuperClass(ClassEntity cls,
-      {bool skipUnnamedMixinApplications: false}) {
+      {bool skipUnnamedMixinApplications = false}) {
     assert(elementMap.checkFamily(cls));
     ClassEntity superclass = elementMap.getSuperType(cls)?.element;
     if (skipUnnamedMixinApplications) {
@@ -2428,7 +2419,7 @@
 
   @override
   MemberEntity lookupLibraryMember(LibraryEntity library, String name,
-      {bool setter: false, bool required: false}) {
+      {bool setter = false, bool required = false}) {
     MemberEntity member =
         elementMap.lookupLibraryMember(library, name, setter: setter);
     if (member == null && required) {
@@ -2440,7 +2431,7 @@
 
   @override
   ClassEntity lookupClass(LibraryEntity library, String name,
-      {bool required: false}) {
+      {bool required = false}) {
     ClassEntity cls = elementMap.lookupClass(library, name);
     if (cls == null && required) {
       failedAt(CURRENT_ELEMENT_SPANNABLE,
@@ -2455,7 +2446,7 @@
   }
 
   @override
-  LibraryEntity lookupLibrary(Uri uri, {bool required: false}) {
+  LibraryEntity lookupLibrary(Uri uri, {bool required = false}) {
     LibraryEntity library = elementMap.lookupLibrary(uri);
     if (library == null && required) {
       failedAt(CURRENT_ELEMENT_SPANNABLE, "The library '$uri' was not found.");
@@ -2658,7 +2649,7 @@
         IndexedFunction function = source.readMember();
         return _elementMap.getGeneratorBody(function);
     }
-    throw new UnsupportedError("Unexpected late member kind: $kind.");
+    throw UnsupportedError("Unexpected late member kind: $kind.");
   }
 }
 
@@ -2690,7 +2681,7 @@
       sink.writeEnum(LateMemberKind.generatorBody);
       sink.writeMember(value.function);
     } else {
-      throw new UnsupportedError("Unexpected late member $value.");
+      throw UnsupportedError("Unexpected late member $value.");
     }
   }
 }
diff --git a/pkg/compiler/lib/src/js_model/elements.dart b/pkg/compiler/lib/src/js_model/elements.dart
index 38337b4..62b7315 100644
--- a/pkg/compiler/lib/src/js_model/elements.dart
+++ b/pkg/compiler/lib/src/js_model/elements.dart
@@ -36,7 +36,7 @@
     Uri canonicalUri = source.readUri();
     bool isNonNullableByDefault = source.readBool();
     source.end(tag);
-    return new JLibrary(name, canonicalUri, isNonNullableByDefault);
+    return JLibrary(name, canonicalUri, isNonNullableByDefault);
   }
 
   /// Serializes this [JLibrary] to [sink].
@@ -80,13 +80,13 @@
         String name = source.readString();
         bool isAbstract = source.readBool();
         source.end(tag);
-        return new JClass(library, name, isAbstract: isAbstract);
+        return JClass(library, name, isAbstract: isAbstract);
       case JClassKind.closure:
-        return new JClosureClass.readFromDataSource(source);
+        return JClosureClass.readFromDataSource(source);
       case JClassKind.record:
-        return new JRecord.readFromDataSource(source);
+        return JRecord.readFromDataSource(source);
     }
-    throw new UnsupportedError("Unexpected ClassKind $kind");
+    throw UnsupportedError("Unexpected ClassKind $kind");
   }
 
   /// Serializes this [JClass] to [sink].
@@ -130,7 +130,8 @@
   final Name _name;
   final bool _isStatic;
 
-  JMember(this.library, this.enclosingClass, this._name, {bool isStatic: false})
+  JMember(this.library, this.enclosingClass, this._name,
+      {bool isStatic = false})
       : _isStatic = isStatic;
 
   /// Deserializes a [JMember] object from [source].
@@ -138,31 +139,31 @@
     JMemberKind kind = source.readEnum(JMemberKind.values);
     switch (kind) {
       case JMemberKind.generativeConstructor:
-        return new JGenerativeConstructor.readFromDataSource(source);
+        return JGenerativeConstructor.readFromDataSource(source);
       case JMemberKind.factoryConstructor:
-        return new JFactoryConstructor.readFromDataSource(source);
+        return JFactoryConstructor.readFromDataSource(source);
       case JMemberKind.constructorBody:
-        return new JConstructorBody.readFromDataSource(source);
+        return JConstructorBody.readFromDataSource(source);
       case JMemberKind.field:
-        return new JField.readFromDataSource(source);
+        return JField.readFromDataSource(source);
       case JMemberKind.getter:
-        return new JGetter.readFromDataSource(source);
+        return JGetter.readFromDataSource(source);
       case JMemberKind.setter:
-        return new JSetter.readFromDataSource(source);
+        return JSetter.readFromDataSource(source);
       case JMemberKind.method:
-        return new JMethod.readFromDataSource(source);
+        return JMethod.readFromDataSource(source);
       case JMemberKind.closureField:
-        return new JClosureField.readFromDataSource(source);
+        return JClosureField.readFromDataSource(source);
       case JMemberKind.closureCallMethod:
-        return new JClosureCallMethod.readFromDataSource(source);
+        return JClosureCallMethod.readFromDataSource(source);
       case JMemberKind.generatorBody:
-        return new JGeneratorBody.readFromDataSource(source);
+        return JGeneratorBody.readFromDataSource(source);
       case JMemberKind.signatureMethod:
-        return new JSignatureMethod.readFromDataSource(source);
+        return JSignatureMethod.readFromDataSource(source);
       case JMemberKind.recordField:
-        return new JRecordField.readFromDataSource(source);
+        return JRecordField.readFromDataSource(source);
     }
-    throw new UnsupportedError("Unexpected JMemberKind $kind");
+    throw UnsupportedError("Unexpected JMemberKind $kind");
   }
 
   /// Serializes this [JMember] to [sink].
@@ -225,7 +226,7 @@
 
   JFunction(JLibrary library, JClass enclosingClass, Name name,
       this.parameterStructure, this.asyncMarker,
-      {bool isStatic: false, this.isExternal: false})
+      {bool isStatic = false, this.isExternal = false})
       : super(library, enclosingClass, name, isStatic: isStatic);
 }
 
@@ -276,12 +277,12 @@
     JClass enclosingClass = source.readClass();
     String name = source.readString();
     ParameterStructure parameterStructure =
-        new ParameterStructure.readFromDataSource(source);
+        ParameterStructure.readFromDataSource(source);
     bool isExternal = source.readBool();
     bool isConst = source.readBool();
     source.end(tag);
-    return new JGenerativeConstructor(enclosingClass,
-        new Name(name, enclosingClass.library), parameterStructure,
+    return JGenerativeConstructor(
+        enclosingClass, Name(name, enclosingClass.library), parameterStructure,
         isExternal: isExternal, isConst: isConst);
   }
 
@@ -323,13 +324,13 @@
     JClass enclosingClass = source.readClass();
     String name = source.readString();
     ParameterStructure parameterStructure =
-        new ParameterStructure.readFromDataSource(source);
+        ParameterStructure.readFromDataSource(source);
     bool isExternal = source.readBool();
     bool isConst = source.readBool();
     bool isFromEnvironmentConstructor = source.readBool();
     source.end(tag);
-    return new JFactoryConstructor(enclosingClass,
-        new Name(name, enclosingClass.library), parameterStructure,
+    return JFactoryConstructor(
+        enclosingClass, Name(name, enclosingClass.library), parameterStructure,
         isExternal: isExternal,
         isConst: isConst,
         isFromEnvironmentConstructor: isFromEnvironmentConstructor);
@@ -372,9 +373,9 @@
     source.begin(tag);
     JConstructor constructor = source.readMember();
     ParameterStructure parameterStructure =
-        new ParameterStructure.readFromDataSource(source);
+        ParameterStructure.readFromDataSource(source);
     source.end(tag);
-    return new JConstructorBody(constructor, parameterStructure);
+    return JConstructorBody(constructor, parameterStructure);
   }
 
   @override
@@ -420,13 +421,13 @@
     }
     String name = source.readString();
     ParameterStructure parameterStructure =
-        new ParameterStructure.readFromDataSource(source);
+        ParameterStructure.readFromDataSource(source);
     AsyncMarker asyncMarker = source.readEnum(AsyncMarker.values);
     bool isStatic = source.readBool();
     bool isExternal = source.readBool();
     bool isAbstract = source.readBool();
     source.end(tag);
-    return new JMethod(library, enclosingClass, new Name(name, library),
+    return JMethod(library, enclosingClass, Name(name, library),
         parameterStructure, asyncMarker,
         isStatic: isStatic, isExternal: isExternal, isAbstract: isAbstract);
   }
@@ -479,7 +480,7 @@
     JFunction function = source.readMember();
     DartType elementType = source.readDartType();
     source.end(tag);
-    return new JGeneratorBody(function, elementType);
+    return JGeneratorBody(function, elementType);
   }
 
   @override
@@ -530,8 +531,7 @@
     bool isExternal = source.readBool();
     bool isAbstract = source.readBool();
     source.end(tag);
-    return new JGetter(
-        library, enclosingClass, new Name(name, library), asyncMarker,
+    return JGetter(library, enclosingClass, Name(name, library), asyncMarker,
         isStatic: isStatic, isExternal: isExternal, isAbstract: isAbstract);
   }
 
@@ -594,8 +594,7 @@
     bool isExternal = source.readBool();
     bool isAbstract = source.readBool();
     source.end(tag);
-    return new JSetter(
-        library, enclosingClass, new Name(name, library, isSetter: true),
+    return JSetter(library, enclosingClass, Name(name, library, isSetter: true),
         isStatic: isStatic, isExternal: isExternal, isAbstract: isAbstract);
   }
 
@@ -660,7 +659,7 @@
     bool isAssignable = source.readBool();
     bool isConst = source.readBool();
     source.end(tag);
-    return new JField(library, enclosingClass, new Name(name, library),
+    return JField(library, enclosingClass, Name(name, library),
         isStatic: isStatic, isAssignable: isAssignable, isConst: isConst);
   }
 
@@ -704,11 +703,10 @@
     source.begin(tag);
     JClass enclosingClass = source.readClass();
     ParameterStructure parameterStructure =
-        new ParameterStructure.readFromDataSource(source);
+        ParameterStructure.readFromDataSource(source);
     AsyncMarker asyncMarker = source.readEnum(AsyncMarker.values);
     source.end(tag);
-    return new JClosureCallMethod(
-        enclosingClass, parameterStructure, asyncMarker);
+    return JClosureCallMethod(enclosingClass, parameterStructure, asyncMarker);
   }
 
   @override
@@ -741,7 +739,7 @@
     source.begin(tag);
     JClass cls = source.readClass();
     source.end(tag);
-    return new JSignatureMethod(cls);
+    return JSignatureMethod(cls);
   }
 
   @override
@@ -795,7 +793,7 @@
     String name = source.readString();
     int index = source.readInt();
     source.end(tag);
-    return new JTypeVariable(typeDeclaration, name, index);
+    return JTypeVariable(typeDeclaration, name, index);
   }
 
   /// Serializes this [JTypeVariable] to [sink].
@@ -812,7 +810,7 @@
     } else if (typeDeclaration == null) {
       sink.writeEnum(JTypeVariableKind.local);
     } else {
-      throw new UnsupportedError(
+      throw UnsupportedError(
           "Unexpected type variable declarer $typeDeclaration.");
     }
     sink.writeString(name);
diff --git a/pkg/compiler/lib/src/js_model/env.dart b/pkg/compiler/lib/src/js_model/env.dart
index 2dd5c12..c0bcc93 100644
--- a/pkg/compiler/lib/src/js_model/env.dart
+++ b/pkg/compiler/lib/src/js_model/env.dart
@@ -13,7 +13,6 @@
 import '../ir/element_map.dart';
 import '../ir/static_type_cache.dart';
 import '../ir/util.dart';
-import '../js_model/element_map.dart';
 import '../ordered_typeset.dart';
 import '../serialization/serialization.dart';
 import '../ssa/type_builder.dart';
@@ -76,7 +75,7 @@
     Map<String, ir.Member> setterMap =
         source.readStringMap(source.readMemberNode);
     source.end(tag);
-    return new JLibraryEnv(library, memberMap, setterMap);
+    return JLibraryEnv(library, memberMap, setterMap);
   }
 
   /// Serializes this [JLibraryEnv] to [sink].
@@ -103,7 +102,7 @@
   }
 
   /// Return the [ir.Member] for the member [name] in [library].
-  ir.Member lookupMember(String name, {bool setter: false}) {
+  ir.Member lookupMember(String name, {bool setter = false}) {
     return setter ? _setterMap[name] : _memberMap[name];
   }
 
@@ -145,7 +144,7 @@
       }
     }
     source.end(tag);
-    return new JLibraryData(library, imports);
+    return JLibraryData(library, imports);
   }
 
   void writeToDataSink(DataSink sink) {
@@ -179,13 +178,13 @@
     JClassEnvKind kind = source.readEnum(JClassEnvKind.values);
     switch (kind) {
       case JClassEnvKind.node:
-        return new JClassEnvImpl.readFromDataSource(source);
+        return JClassEnvImpl.readFromDataSource(source);
       case JClassEnvKind.closure:
-        return new ClosureClassEnv.readFromDataSource(source);
+        return ClosureClassEnv.readFromDataSource(source);
       case JClassEnvKind.record:
-        return new RecordEnv.readFromDataSource(source);
+        return RecordEnv.readFromDataSource(source);
     }
-    throw new UnsupportedError("Unsupported JClassEnvKind $kind");
+    throw UnsupportedError("Unsupported JClassEnvKind $kind");
   }
 
   /// Serializes this [JClassEnv] to [sink].
@@ -207,7 +206,7 @@
   /// is `true`, the setter or assignable field corresponding to [name] is
   /// returned.
   MemberEntity lookupMember(IrToElementMap elementMap, String name,
-      {bool setter: false});
+      {bool setter = false});
 
   /// Calls [f] for each member of [cls].
   void forEachMember(IrToElementMap elementMap, void f(MemberEntity member));
@@ -257,7 +256,7 @@
     List<ir.Member> members = source.readMemberNodes();
     bool isSuperMixinApplication = source.readBool();
     source.end(tag);
-    return new JClassEnvImpl(cls, constructorMap, memberMap, setterMap, members,
+    return JClassEnvImpl(cls, constructorMap, memberMap, setterMap, members,
         isSuperMixinApplication);
   }
 
@@ -279,7 +278,7 @@
 
   @override
   MemberEntity lookupMember(IrToElementMap elementMap, String name,
-      {bool setter: false}) {
+      {bool setter = false}) {
     ir.Member member = setter ? _setterMap[name] : _memberMap[name];
     return member != null ? elementMap.getMember(member) : null;
   }
@@ -330,7 +329,7 @@
     Map<String, IndexedMember> _memberMap =
         source.readStringMap(() => source.readMember());
     source.end(tag);
-    return new RecordEnv(_memberMap);
+    return RecordEnv(_memberMap);
   }
 
   @override
@@ -366,7 +365,7 @@
 
   @override
   MemberEntity lookupMember(IrToElementMap elementMap, String name,
-      {bool setter: false}) {
+      {bool setter = false}) {
     return _memberMap[name];
   }
 
@@ -392,7 +391,7 @@
     Map<String, IndexedMember> _memberMap =
         source.readStringMap(() => source.readMember());
     source.end(tag);
-    return new ClosureClassEnv(_memberMap);
+    return ClosureClassEnv(_memberMap);
   }
 
   @override
@@ -406,7 +405,7 @@
 
   @override
   MemberEntity lookupMember(IrToElementMap elementMap, String name,
-      {bool setter: false}) {
+      {bool setter = false}) {
     if (setter) {
       // All closure fields are final.
       return null;
@@ -424,13 +423,13 @@
     JClassDataKind kind = source.readEnum(JClassDataKind.values);
     switch (kind) {
       case JClassDataKind.node:
-        return new JClassDataImpl.readFromDataSource(source);
+        return JClassDataImpl.readFromDataSource(source);
       case JClassDataKind.closure:
-        return new ClosureClassData.readFromDataSource(source);
+        return ClosureClassData.readFromDataSource(source);
       case JClassDataKind.record:
-        return new RecordClassData.readFromDataSource(source);
+        return RecordClassData.readFromDataSource(source);
     }
-    throw new UnsupportedError("Unexpected JClassDataKind $kind");
+    throw UnsupportedError("Unexpected JClassDataKind $kind");
   }
 
   /// Serializes this [JClassData] to [sink].
@@ -489,9 +488,9 @@
   factory JClassDataImpl.readFromDataSource(DataSource source) {
     source.begin(tag);
     ir.Class cls = source.readClassNode();
-    ClassDefinition definition = new ClassDefinition.readFromDataSource(source);
+    ClassDefinition definition = ClassDefinition.readFromDataSource(source);
     source.end(tag);
-    return new JClassDataImpl(cls, definition);
+    return JClassDataImpl(cls, definition);
   }
 
   @override
@@ -543,23 +542,23 @@
     JMemberDataKind kind = source.readEnum(JMemberDataKind.values);
     switch (kind) {
       case JMemberDataKind.function:
-        return new FunctionDataImpl.readFromDataSource(source);
+        return FunctionDataImpl.readFromDataSource(source);
       case JMemberDataKind.field:
-        return new JFieldDataImpl.readFromDataSource(source);
+        return JFieldDataImpl.readFromDataSource(source);
       case JMemberDataKind.constructor:
-        return new JConstructorDataImpl.readFromDataSource(source);
+        return JConstructorDataImpl.readFromDataSource(source);
       case JMemberDataKind.constructorBody:
-        return new ConstructorBodyDataImpl.readFromDataSource(source);
+        return ConstructorBodyDataImpl.readFromDataSource(source);
       case JMemberDataKind.signature:
-        return new SignatureFunctionData.readFromDataSource(source);
+        return SignatureFunctionData.readFromDataSource(source);
       case JMemberDataKind.generatorBody:
-        return new GeneratorBodyFunctionData.readFromDataSource(source);
+        return GeneratorBodyFunctionData.readFromDataSource(source);
       case JMemberDataKind.closureFunction:
-        return new ClosureFunctionData.readFromDataSource(source);
+        return ClosureFunctionData.readFromDataSource(source);
       case JMemberDataKind.closureField:
-        return new ClosureFieldData.readFromDataSource(source);
+        return ClosureFieldData.readFromDataSource(source);
     }
-    throw new UnsupportedError("Unexpected JMemberDataKind $kind");
+    throw UnsupportedError("Unexpected JMemberDataKind $kind");
   }
 
   /// Serializes this [JMemberData] to [sink].
@@ -597,7 +596,7 @@
       JsToElementMap elementMap,
       ParameterStructure parameterStructure,
       void f(DartType type, String name, ConstantValue defaultValue),
-      {bool isNative: false});
+      {bool isNative = false});
 }
 
 abstract class FunctionDataTypeVariablesMixin implements FunctionData {
@@ -620,7 +619,7 @@
           _typeVariables = functionNode.typeParameters
               .map<TypeVariableType>((ir.TypeParameter typeParameter) {
             return elementMap
-                .getDartType(new ir.TypeParameterType(
+                .getDartType(ir.TypeParameterType(
                     typeParameter, ir.Nullability.nonNullable))
                 .withoutNullability;
           }).toList();
@@ -643,9 +642,9 @@
       JsToElementMap elementMap,
       ParameterStructure parameterStructure,
       void f(DartType type, String name, ConstantValue defaultValue),
-      {bool isNative: false}) {
+      {bool isNative = false}) {
     void handleParameter(ir.VariableDeclaration parameter,
-        {bool isOptional: true}) {
+        {bool isOptional = true}) {
       DartType type = elementMap.getDartType(parameter.type);
       String name = parameter.name;
       ConstantValue defaultValue;
@@ -699,15 +698,14 @@
     } else if (node is ir.Constructor) {
       functionNode = node.function;
     } else {
-      throw new UnsupportedError(
+      throw UnsupportedError(
           "Unexpected member node $node (${node.runtimeType}).");
     }
-    MemberDefinition definition =
-        new MemberDefinition.readFromDataSource(source);
+    MemberDefinition definition = MemberDefinition.readFromDataSource(source);
     StaticTypeCache staticTypes =
-        new StaticTypeCache.readFromDataSource(source, node);
+        StaticTypeCache.readFromDataSource(source, node);
     source.end(tag);
-    return new FunctionDataImpl(node, functionNode, definition, staticTypes);
+    return FunctionDataImpl(node, functionNode, definition, staticTypes);
   }
 
   @override
@@ -752,14 +750,13 @@
 
   factory SignatureFunctionData.readFromDataSource(DataSource source) {
     source.begin(tag);
-    MemberDefinition definition =
-        new MemberDefinition.readFromDataSource(source);
+    MemberDefinition definition = MemberDefinition.readFromDataSource(source);
     InterfaceType memberThisType = source.readDartType(allowNull: true);
     List<ir.TypeParameter> typeParameters = source.readTypeParameterNodes();
     ClassTypeVariableAccess classTypeVariableAccess =
         source.readEnum(ClassTypeVariableAccess.values);
     source.end(tag);
-    return new SignatureFunctionData(
+    return SignatureFunctionData(
         definition, memberThisType, typeParameters, classTypeVariableAccess);
   }
 
@@ -779,7 +776,7 @@
 
   @override
   FunctionType getFunctionType(covariant JsKernelToElementMap elementMap) {
-    throw new UnsupportedError("SignatureFunctionData.getFunctionType");
+    throw UnsupportedError("SignatureFunctionData.getFunctionType");
   }
 
   @override
@@ -787,8 +784,8 @@
     return typeParameters
         .map<TypeVariableType>((ir.TypeParameter typeParameter) {
       return elementMap
-          .getDartType(new ir.TypeParameterType(
-              typeParameter, ir.Nullability.nonNullable))
+          .getDartType(
+              ir.TypeParameterType(typeParameter, ir.Nullability.nonNullable))
           .withoutNullability;
     }).toList();
   }
@@ -798,8 +795,8 @@
       JsToElementMap elementMap,
       ParameterStructure parameterStructure,
       void f(DartType type, String name, ConstantValue defaultValue),
-      {bool isNative: false}) {
-    throw new UnimplementedError('SignatureData.forEachParameter');
+      {bool isNative = false}) {
+    throw UnimplementedError('SignatureData.forEachParameter');
   }
 
   @override
@@ -828,7 +825,7 @@
       JsToElementMap elementMap,
       ParameterStructure parameterStructure,
       void f(DartType type, String name, ConstantValue defaultValue),
-      {bool isNative: false}) {
+      {bool isNative = false}) {
     return baseData.forEachParameter(elementMap, parameterStructure, f,
         isNative: isNative);
   }
@@ -857,11 +854,10 @@
   factory GeneratorBodyFunctionData.readFromDataSource(DataSource source) {
     source.begin(tag);
     // TODO(johnniwinther): Share the original base data on deserialization.
-    FunctionData baseData = new JMemberData.readFromDataSource(source);
-    MemberDefinition definition =
-        new MemberDefinition.readFromDataSource(source);
+    FunctionData baseData = JMemberData.readFromDataSource(source);
+    MemberDefinition definition = MemberDefinition.readFromDataSource(source);
     source.end(tag);
-    return new GeneratorBodyFunctionData(baseData, definition);
+    return GeneratorBodyFunctionData(baseData, definition);
   }
 
   @override
@@ -900,16 +896,14 @@
     } else if (node is ir.Constructor) {
       functionNode = node.function;
     } else {
-      throw new UnsupportedError(
+      throw UnsupportedError(
           "Unexpected member node $node (${node.runtimeType}).");
     }
-    MemberDefinition definition =
-        new MemberDefinition.readFromDataSource(source);
+    MemberDefinition definition = MemberDefinition.readFromDataSource(source);
     StaticTypeCache staticTypes =
-        new StaticTypeCache.readFromDataSource(source, node);
+        StaticTypeCache.readFromDataSource(source, node);
     source.end(tag);
-    return new JConstructorDataImpl(
-        node, functionNode, definition, staticTypes);
+    return JConstructorDataImpl(node, functionNode, definition, staticTypes);
   }
 
   @override
@@ -946,16 +940,14 @@
     } else if (node is ir.Constructor) {
       functionNode = node.function;
     } else {
-      throw new UnsupportedError(
+      throw UnsupportedError(
           "Unexpected member node $node (${node.runtimeType}).");
     }
-    MemberDefinition definition =
-        new MemberDefinition.readFromDataSource(source);
+    MemberDefinition definition = MemberDefinition.readFromDataSource(source);
     StaticTypeCache staticTypes =
-        new StaticTypeCache.readFromDataSource(source, node);
+        StaticTypeCache.readFromDataSource(source, node);
     source.end(tag);
-    return new ConstructorBodyDataImpl(
-        node, functionNode, definition, staticTypes);
+    return ConstructorBodyDataImpl(node, functionNode, definition, staticTypes);
   }
 
   @override
@@ -993,12 +985,11 @@
   factory JFieldDataImpl.readFromDataSource(DataSource source) {
     source.begin(tag);
     ir.Member node = source.readMemberNode();
-    MemberDefinition definition =
-        new MemberDefinition.readFromDataSource(source);
+    MemberDefinition definition = MemberDefinition.readFromDataSource(source);
     StaticTypeCache staticTypes =
-        new StaticTypeCache.readFromDataSource(source, node);
+        StaticTypeCache.readFromDataSource(source, node);
     source.end(tag);
-    return new JFieldDataImpl(node, definition, staticTypes);
+    return JFieldDataImpl(node, definition, staticTypes);
   }
 
   @override
@@ -1041,7 +1032,7 @@
     source.begin(tag);
     ir.TypeParameter node = source.readTypeParameterNode();
     source.end(tag);
-    return new JTypeVariableData(node);
+    return JTypeVariableData(node);
   }
 
   void writeToDataSink(DataSink sink) {
diff --git a/pkg/compiler/lib/src/js_model/js_strategy.dart b/pkg/compiler/lib/src/js_model/js_strategy.dart
index 0e57dd9..c6f42f1 100644
--- a/pkg/compiler/lib/src/js_model/js_strategy.dart
+++ b/pkg/compiler/lib/src/js_model/js_strategy.dart
@@ -84,18 +84,17 @@
   SourceInformationStrategy sourceInformationStrategy;
 
   /// The generated code as a js AST for compiled methods.
-  final Map<MemberEntity, js.Expression> generatedCode =
-      <MemberEntity, js.Expression>{};
+  final Map<MemberEntity, js.Expression> generatedCode = {};
 
   JsBackendStrategy(this._compiler) {
     bool generateSourceMap = _compiler.options.generateSourceMap;
     if (!generateSourceMap) {
       sourceInformationStrategy = const JavaScriptSourceInformationStrategy();
     } else {
-      sourceInformationStrategy = new KernelSourceInformationStrategy(this);
+      sourceInformationStrategy = KernelSourceInformationStrategy(this);
     }
-    _emitterTask = new CodeEmitterTask(_compiler, generateSourceMap);
-    _functionCompiler = new SsaFunctionCompiler(
+    _emitterTask = CodeEmitterTask(_compiler, generateSourceMap);
+    _functionCompiler = SsaFunctionCompiler(
         _compiler.options,
         _compiler.reporter,
         this,
@@ -163,23 +162,20 @@
   JClosedWorld createJClosedWorld(
       KClosedWorld closedWorld, OutputUnitData outputUnitData) {
     KernelFrontendStrategy strategy = _compiler.frontendStrategy;
-    _elementMap = new JsKernelToElementMap(
+    _elementMap = JsKernelToElementMap(
         _compiler.reporter,
         _compiler.environment,
         strategy.elementMap,
         closedWorld.liveMemberUsage,
         closedWorld.annotationsData);
     ClosureDataBuilder closureDataBuilder =
-        new ClosureDataBuilder(_elementMap, closedWorld.annotationsData);
-    JsClosedWorldBuilder closedWorldBuilder = new JsClosedWorldBuilder(
-        _elementMap,
-        closureDataBuilder,
-        _compiler.options,
-        _compiler.abstractValueStrategy);
+        ClosureDataBuilder(_elementMap, closedWorld.annotationsData);
+    JsClosedWorldBuilder closedWorldBuilder = JsClosedWorldBuilder(_elementMap,
+        closureDataBuilder, _compiler.options, _compiler.abstractValueStrategy);
     JClosedWorld jClosedWorld = closedWorldBuilder.convertClosedWorld(
         closedWorld, strategy.closureModels, outputUnitData);
     _elementMap.lateOutputUnitDataBuilder =
-        new LateOutputUnitDataBuilder(jClosedWorld.outputUnitData);
+        LateOutputUnitDataBuilder(jClosedWorld.outputUnitData);
     return jClosedWorld;
   }
 
@@ -197,23 +193,23 @@
         : const FixedNames();
 
     Tracer tracer =
-        new Tracer(closedWorld, _compiler.options, _compiler.outputProvider);
+        Tracer(closedWorld, _compiler.options, _compiler.outputProvider);
 
     RuntimeTypesSubstitutions rtiSubstitutions;
     if (_compiler.options.disableRtiOptimization) {
-      rtiSubstitutions = new TrivialRuntimeTypesSubstitutions(closedWorld);
+      rtiSubstitutions = TrivialRuntimeTypesSubstitutions(closedWorld);
       _rtiChecksBuilder =
-          new TrivialRuntimeTypesChecksBuilder(closedWorld, rtiSubstitutions);
+          TrivialRuntimeTypesChecksBuilder(closedWorld, rtiSubstitutions);
     } else {
-      RuntimeTypesImpl runtimeTypesImpl = new RuntimeTypesImpl(closedWorld);
+      RuntimeTypesImpl runtimeTypesImpl = RuntimeTypesImpl(closedWorld);
       _rtiChecksBuilder = runtimeTypesImpl;
       rtiSubstitutions = runtimeTypesImpl;
     }
 
-    RecipeEncoder rtiRecipeEncoder = new RecipeEncoderImpl(closedWorld,
+    RecipeEncoder rtiRecipeEncoder = RecipeEncoderImpl(closedWorld,
         rtiSubstitutions, closedWorld.nativeData, closedWorld.commonElements);
 
-    CodegenInputs codegen = new CodegenInputsImpl(
+    CodegenInputs codegen = CodegenInputsImpl(
         rtiSubstitutions, rtiRecipeEncoder, tracer, fixedNames);
 
     functionCompiler.initialize(globalTypeInferenceResults, codegen);
@@ -229,7 +225,7 @@
       CodegenResults codegenResults) {
     assert(_elementMap != null,
         "JsBackendStrategy.elementMap has not been created yet.");
-    OneShotInterceptorData oneShotInterceptorData = new OneShotInterceptorData(
+    OneShotInterceptorData oneShotInterceptorData = OneShotInterceptorData(
         closedWorld.interceptorData,
         closedWorld.commonElements,
         closedWorld.nativeData);
@@ -237,26 +233,25 @@
         globalInferenceResults, codegen, oneShotInterceptorData);
     ElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
     CommonElements commonElements = closedWorld.commonElements;
-    BackendImpacts impacts =
-        new BackendImpacts(commonElements, _compiler.options);
-    _customElementsCodegenAnalysis = new CustomElementsCodegenAnalysis(
+    BackendImpacts impacts = BackendImpacts(commonElements, _compiler.options);
+    _customElementsCodegenAnalysis = CustomElementsCodegenAnalysis(
         commonElements, elementEnvironment, closedWorld.nativeData);
-    return new CodegenEnqueuer(
+    return CodegenEnqueuer(
         task,
-        new CodegenWorldBuilderImpl(
+        CodegenWorldBuilderImpl(
             closedWorld,
             _compiler.abstractValueStrategy.createSelectorStrategy(),
             oneShotInterceptorData),
-        new KernelCodegenWorkItemBuilder(
+        KernelCodegenWorkItemBuilder(
             this,
             closedWorld,
             codegenResults,
-            new ClosedEntityLookup(_elementMap),
+            ClosedEntityLookup(_elementMap),
             // TODO(johnniwinther): Avoid the need for a [ComponentLookup]. This
             // is caused by some type masks holding a kernel node for using in
             // tracing.
-            new ComponentLookup(_elementMap.programEnv.mainComponent)),
-        new CodegenEnqueuerListener(
+            ComponentLookup(_elementMap.programEnv.mainComponent)),
+        CodegenEnqueuerListener(
             _compiler.options,
             elementEnvironment,
             commonElements,
@@ -277,10 +272,10 @@
     FixedNames fixedNames = codegen.fixedNames;
     _namer = _compiler.options.enableMinification
         ? _compiler.options.useFrequencyNamer
-            ? new FrequencyBasedNamer(closedWorld, fixedNames)
-            : new MinifyNamer(closedWorld, fixedNames)
-        : new Namer(closedWorld, fixedNames);
-    _nativeCodegenEnqueuer = new NativeCodegenEnqueuer(
+            ? FrequencyBasedNamer(closedWorld, fixedNames)
+            : MinifyNamer(closedWorld, fixedNames)
+        : Namer(closedWorld, fixedNames);
+    _nativeCodegenEnqueuer = NativeCodegenEnqueuer(
         _compiler.options,
         closedWorld.elementEnvironment,
         closedWorld.commonElements,
@@ -292,9 +287,9 @@
     // TODO(johnniwinther): Share the impact object created in
     // createCodegenEnqueuer.
     BackendImpacts impacts =
-        new BackendImpacts(closedWorld.commonElements, _compiler.options);
+        BackendImpacts(closedWorld.commonElements, _compiler.options);
 
-    _codegenImpactTransformer = new CodegenImpactTransformer(
+    _codegenImpactTransformer = CodegenImpactTransformer(
         closedWorld,
         closedWorld.elementEnvironment,
         impacts,
@@ -319,14 +314,14 @@
     if (_compiler.options.testMode) {
       bool useDataKinds = true;
       List<Object> data = [];
-      DataSink sink = new ObjectSink(data, useDataKinds: useDataKinds);
-      sink.registerCodegenWriter(new CodegenWriterImpl(closedWorld));
+      DataSink sink = ObjectSink(data, useDataKinds: useDataKinds);
+      sink.registerCodegenWriter(CodegenWriterImpl(closedWorld));
       result.writeToDataSink(sink);
-      DataSource source = new ObjectSource(data, useDataKinds: useDataKinds);
+      DataSource source = ObjectSource(data, useDataKinds: useDataKinds);
       List<ModularName> modularNames = [];
       List<ModularExpression> modularExpression = [];
       source.registerCodegenReader(
-          new CodegenReaderImpl(closedWorld, modularNames, modularExpression));
+          CodegenReaderImpl(closedWorld, modularNames, modularExpression));
       source.registerEntityLookup(entityLookup);
       source.registerComponentLookup(componentLookup);
       result = CodegenResult.readFromDataSource(
@@ -336,7 +331,7 @@
       generatedCode[member] = result.code;
     }
     if (retainDataForTesting) {
-      codegenImpactsForTesting ??= <MemberEntity, WorldImpact>{};
+      codegenImpactsForTesting ??= {};
       codegenImpactsForTesting[member] = result.impact;
     }
     WorldImpact worldImpact =
@@ -364,7 +359,7 @@
   @override
   SsaBuilder createSsaBuilder(
       CompilerTask task, SourceInformationStrategy sourceInformationStrategy) {
-    return new KernelSsaBuilder(
+    return KernelSsaBuilder(
         task,
         _compiler.options,
         _compiler.reporter,
@@ -384,23 +379,22 @@
       JClosedWorld closedWorld,
       GlobalLocalsMap globalLocalsMap,
       InferredDataBuilder inferredDataBuilder) {
-    return new TypeGraphInferrer(
+    return TypeGraphInferrer(
         _compiler, closedWorld, globalLocalsMap, inferredDataBuilder);
   }
 
   @override
   void prepareCodegenReader(DataSource source) {
-    source.registerEntityReader(new ClosedEntityReader(_elementMap));
-    source.registerEntityLookup(new ClosedEntityLookup(_elementMap));
+    source.registerEntityReader(ClosedEntityReader(_elementMap));
+    source.registerEntityLookup(ClosedEntityLookup(_elementMap));
     source.registerComponentLookup(
-        new ComponentLookup(_elementMap.programEnv.mainComponent));
+        ComponentLookup(_elementMap.programEnv.mainComponent));
   }
 
   @override
   EntityWriter forEachCodegenMember(void Function(MemberEntity member) f) {
     int earlyMemberIndexLimit = _elementMap.prepareForCodegenSerialization();
-    ClosedEntityWriter entityWriter =
-        new ClosedEntityWriter(earlyMemberIndexLimit);
+    ClosedEntityWriter entityWriter = ClosedEntityWriter(earlyMemberIndexLimit);
     for (int memberIndex = 0;
         memberIndex < _elementMap.members.length;
         memberIndex++) {
@@ -425,7 +419,7 @@
   @override
   WorkItem createWorkItem(MemberEntity entity) {
     if (entity.isAbstract) return null;
-    return new KernelCodegenWorkItem(_backendStrategy, _closedWorld,
+    return KernelCodegenWorkItem(_backendStrategy, _closedWorld,
         _codegenResults, _entityLookup, _componentLookup, entity);
   }
 }
@@ -478,12 +472,12 @@
       CodegenRegistry registry,
       ModularNamer namer,
       ModularEmitter emitter) {
-    _inlineCache ??= new FunctionInlineCache(closedWorld.annotationsData);
-    _inlineDataCache ??= new InlineDataCache(
+    _inlineCache ??= FunctionInlineCache(closedWorld.annotationsData);
+    _inlineDataCache ??= InlineDataCache(
         enableUserAssertions: _options.enableUserAssertions,
         omitImplicitCasts: _options.omitImplicitChecks);
     return _task.measure(() {
-      KernelSsaGraphBuilder builder = new KernelSsaGraphBuilder(
+      KernelSsaGraphBuilder builder = KernelSsaGraphBuilder(
           _options,
           _reporter,
           member,
@@ -574,7 +568,7 @@
   @override
   AbstractValue inferredIndexType(ir.ForInStatement node) {
     return AbstractValueFactory.inferredResultTypeForSelector(
-        new Selector.index(), typeOfIterator(node), _globalInferenceResults);
+        Selector.index(), typeOfIterator(node), _globalInferenceResults);
   }
 
   @override
diff --git a/pkg/compiler/lib/src/js_model/js_world.dart b/pkg/compiler/lib/src/js_model/js_world.dart
index e5956fd..1e469ff 100644
--- a/pkg/compiler/lib/src/js_model/js_world.dart
+++ b/pkg/compiler/lib/src/js_model/js_world.dart
@@ -24,7 +24,6 @@
 import '../js_backend/native_data.dart';
 import '../js_backend/no_such_method_registry.dart';
 import '../js_backend/runtime_types_resolution.dart';
-import '../js_model/locals.dart';
 import '../ordered_typeset.dart';
 import '../options.dart';
 import '../serialization/serialization.dart';
@@ -57,8 +56,7 @@
 
   final Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses;
 
-  final Map<ClassEntity, Map<ClassEntity, bool>> _subtypeCoveredByCache =
-      <ClassEntity, Map<ClassEntity, bool>>{};
+  final Map<ClassEntity, Map<ClassEntity, bool>> _subtypeCoveredByCache = {};
 
   // TODO(johnniwinther): Can this be derived from [ClassSet]s?
   final Set<ClassEntity> implementedClasses;
@@ -131,23 +129,22 @@
       DataSource source) {
     source.begin(tag);
 
-    JsKernelToElementMap elementMap =
-        new JsKernelToElementMap.readFromDataSource(
-            options, reporter, environment, component, source);
-    ClassHierarchy classHierarchy = new ClassHierarchy.readFromDataSource(
-        source, elementMap.commonElements);
-    NativeData nativeData = new NativeData.readFromDataSource(
-        source, elementMap.elementEnvironment);
+    JsKernelToElementMap elementMap = JsKernelToElementMap.readFromDataSource(
+        options, reporter, environment, component, source);
+    ClassHierarchy classHierarchy =
+        ClassHierarchy.readFromDataSource(source, elementMap.commonElements);
+    NativeData nativeData =
+        NativeData.readFromDataSource(source, elementMap.elementEnvironment);
     elementMap.nativeData = nativeData;
-    InterceptorData interceptorData = new InterceptorData.readFromDataSource(
+    InterceptorData interceptorData = InterceptorData.readFromDataSource(
         source, nativeData, elementMap.commonElements);
-    BackendUsage backendUsage = new BackendUsage.readFromDataSource(source);
-    RuntimeTypesNeed rtiNeed = new RuntimeTypesNeed.readFromDataSource(
+    BackendUsage backendUsage = BackendUsage.readFromDataSource(source);
+    RuntimeTypesNeed rtiNeed = RuntimeTypesNeed.readFromDataSource(
         source, elementMap.elementEnvironment);
     JFieldAnalysis allocatorAnalysis =
-        new JFieldAnalysis.readFromDataSource(source, options);
+        JFieldAnalysis.readFromDataSource(source, options);
     NoSuchMethodData noSuchMethodData =
-        new NoSuchMethodData.readFromDataSource(source);
+        NoSuchMethodData.readFromDataSource(source);
 
     Set<ClassEntity> implementedClasses = source.readClasses().toSet();
     Set<ClassEntity> liveNativeClasses = source.readClasses().toSet();
@@ -162,22 +159,21 @@
         source.readClassMap(() => source.readClasses().toSet());
 
     AnnotationsData annotationsData =
-        new AnnotationsData.readFromDataSource(options, source);
+        AnnotationsData.readFromDataSource(options, source);
 
     ClosureData closureData =
-        new ClosureData.readFromDataSource(elementMap, source);
+        ClosureData.readFromDataSource(elementMap, source);
 
-    OutputUnitData outputUnitData =
-        new OutputUnitData.readFromDataSource(source);
+    OutputUnitData outputUnitData = OutputUnitData.readFromDataSource(source);
     elementMap.lateOutputUnitDataBuilder =
-        new LateOutputUnitDataBuilder(outputUnitData);
+        LateOutputUnitDataBuilder(outputUnitData);
 
     Map<MemberEntity, MemberAccess> memberAccess = source.readMemberMap(
-        (MemberEntity member) => new MemberAccess.readFromDataSource(source));
+        (MemberEntity member) => MemberAccess.readFromDataSource(source));
 
     source.end(tag);
 
-    return new JsClosedWorld(
+    return JsClosedWorld(
         elementMap,
         nativeData,
         interceptorData,
@@ -280,8 +276,7 @@
 
   @override
   bool everySubtypeIsSubclassOfOrMixinUseOf(ClassEntity x, ClassEntity y) {
-    Map<ClassEntity, bool> secondMap =
-        _subtypeCoveredByCache[x] ??= <ClassEntity, bool>{};
+    Map<ClassEntity, bool> secondMap = _subtypeCoveredByCache[x] ??= {};
     return secondMap[y] ??= classHierarchy.subtypesOf(x).every(
         (ClassEntity cls) =>
             classHierarchy.isSubclassOf(cls, y) ||
@@ -389,7 +384,7 @@
   @override
   Iterable<ClassEntity> mixinUsesOf(ClassEntity cls) {
     if (_liveMixinUses == null) {
-      _liveMixinUses = new Map<ClassEntity, List<ClassEntity>>();
+      _liveMixinUses = Map<ClassEntity, List<ClassEntity>>();
       for (ClassEntity mixin in mixinUses.keys) {
         List<ClassEntity> uses = <ClassEntity>[];
 
@@ -438,7 +433,7 @@
     if (_allFunctions == null) {
       // [FunctionSet] is created lazily because it is not used when we switch
       // from a frontend to a backend model before inference.
-      _allFunctions = new FunctionSet(liveInstanceMembers);
+      _allFunctions = FunctionSet(liveInstanceMembers);
     }
   }
 
@@ -535,7 +530,7 @@
 
   @override
   Sorter get sorter {
-    return _sorter ??= new KernelSorter(elementMap);
+    return _sorter ??= KernelSorter(elementMap);
   }
 
   @override
diff --git a/pkg/compiler/lib/src/js_model/js_world_builder.dart b/pkg/compiler/lib/src/js_model/js_world_builder.dart
index a5ad110..45e38ba 100644
--- a/pkg/compiler/lib/src/js_model/js_world_builder.dart
+++ b/pkg/compiler/lib/src/js_model/js_world_builder.dart
@@ -40,7 +40,7 @@
 class JsClosedWorldBuilder {
   final JsKernelToElementMap _elementMap;
   final Map<ClassEntity, ClassHierarchyNode> _classHierarchyNodes =
-      new ClassHierarchyNodesMap();
+      ClassHierarchyNodesMap();
   final Map<ClassEntity, ClassSet> _classSets = <ClassEntity, ClassSet>{};
   final ClosureDataBuilder _closureDataBuilder;
   final CompilerOptions _options;
@@ -57,14 +57,14 @@
       KClosedWorld closedWorld,
       Map<MemberEntity, ClosureScopeModel> closureModels,
       OutputUnitData kOutputUnitData) {
-    JsToFrontendMap map = new JsToFrontendMapImpl(_elementMap);
+    JsToFrontendMap map = JsToFrontendMapImpl(_elementMap);
 
     NativeData nativeData = _convertNativeData(map, closedWorld.nativeData);
     _elementMap.nativeData = nativeData;
     InterceptorData interceptorData =
         _convertInterceptorData(map, nativeData, closedWorld.interceptorData);
 
-    Set<ClassEntity> implementedClasses = new Set<ClassEntity>();
+    Set<ClassEntity> implementedClasses = Set<ClassEntity>();
 
     /// Converts [node] from the frontend world to the corresponding
     /// [ClassHierarchyNode] for the backend world.
@@ -78,7 +78,7 @@
         if (node.parentNode != null) {
           parentNode = convertClassHierarchyNode(node.parentNode);
         }
-        return new ClassHierarchyNode(parentNode, cls, node.hierarchyDepth);
+        return ClassHierarchyNode(parentNode, cls, node.hierarchyDepth);
       });
       newNode.isAbstractlyInstantiated = node.isAbstractlyInstantiated;
       newNode.isDirectlyInstantiated = node.isDirectlyInstantiated;
@@ -91,7 +91,7 @@
       ClassEntity cls = map.toBackendClass(classSet.cls);
       return _classSets.putIfAbsent(cls, () {
         ClassHierarchyNode newNode = convertClassHierarchyNode(classSet.node);
-        ClassSet newClassSet = new ClassSet(newNode);
+        ClassSet newClassSet = ClassSet(newNode);
         for (ClassHierarchyNode subtype in classSet.subtypeNodes) {
           ClassHierarchyNode newSubtype = convertClassHierarchyNode(subtype);
           newClassSet.addSubtype(newSubtype);
@@ -133,7 +133,7 @@
     List<FunctionEntity> callMethods = <FunctionEntity>[];
     ClosureData closureData;
     if (_options.disableRtiOptimization) {
-      rtiNeed = new TrivialRuntimeTypesNeed(_elementMap.elementEnvironment);
+      rtiNeed = TrivialRuntimeTypesNeed(_elementMap.elementEnvironment);
       closureData = _closureDataBuilder.createClosureEntities(
           this,
           map.toBackendMemberMap(closureModels, identity),
@@ -142,14 +142,14 @@
     } else {
       RuntimeTypesNeedImpl kernelRtiNeed = closedWorld.rtiNeed;
       Set<ir.LocalFunction> localFunctionsNodesNeedingSignature =
-          new Set<ir.LocalFunction>();
+          Set<ir.LocalFunction>();
       for (KLocalFunction localFunction
           in kernelRtiNeed.localFunctionsNeedingSignature) {
         ir.LocalFunction node = localFunction.node;
         localFunctionsNodesNeedingSignature.add(node);
       }
       Set<ir.LocalFunction> localFunctionsNodesNeedingTypeArguments =
-          new Set<ir.LocalFunction>();
+          Set<ir.LocalFunction>();
       for (KLocalFunction localFunction
           in kernelRtiNeed.localFunctionsNeedingTypeArguments) {
         ir.LocalFunction node = localFunction.node;
@@ -161,9 +161,7 @@
       closureData = _closureDataBuilder.createClosureEntities(
           this,
           map.toBackendMemberMap(closureModels, identity),
-          new JsClosureRtiNeed(
-              jRtiNeed,
-              localFunctionsNodesNeedingTypeArguments,
+          JsClosureRtiNeed(jRtiNeed, localFunctionsNodesNeedingTypeArguments,
               localFunctionsNodesNeedingSignature),
           callMethods);
 
@@ -190,7 +188,7 @@
         _convertBackendUsage(map, closedWorld.backendUsage);
 
     NoSuchMethodDataImpl oldNoSuchMethodData = closedWorld.noSuchMethodData;
-    NoSuchMethodData noSuchMethodData = new NoSuchMethodDataImpl(
+    NoSuchMethodData noSuchMethodData = NoSuchMethodDataImpl(
         map.toBackendFunctionSet(oldNoSuchMethodData.throwingImpls),
         map.toBackendFunctionSet(oldNoSuchMethodData.otherImpls),
         map.toBackendFunctionSet(oldNoSuchMethodData.forwardingSyntaxImpls));
@@ -199,7 +197,7 @@
         JFieldAnalysis.from(closedWorld, map, _options);
 
     AnnotationsDataImpl oldAnnotationsData = closedWorld.annotationsData;
-    AnnotationsData annotationsData = new AnnotationsDataImpl(_options,
+    AnnotationsData annotationsData = AnnotationsDataImpl(_options,
         map.toBackendMemberMap(oldAnnotationsData.pragmaAnnotations, identity));
 
     OutputUnitData outputUnitData =
@@ -208,9 +206,9 @@
     Map<MemberEntity, MemberAccess> memberAccess = map.toBackendMemberMap(
         closedWorld.liveMemberUsage,
         (MemberUsage usage) =>
-            new MemberAccess(usage.reads, usage.writes, usage.invokes));
+            MemberAccess(usage.reads, usage.writes, usage.invokes));
 
-    return new JsClosedWorld(
+    return JsClosedWorld(
         _elementMap,
         nativeData,
         interceptorData,
@@ -229,7 +227,7 @@
         extractTypeArgumentsInterfacesNewRti,
         mixinUses,
         typesImplementedBySubclasses,
-        new ClassHierarchyImpl(
+        ClassHierarchyImpl(
             _elementMap.commonElements, _classHierarchyNodes, _classSets),
         _abstractValueStrategy,
         annotationsData,
@@ -250,7 +248,7 @@
         map.toBackendClassSet(backendUsage.helperClassesUsed);
     Set<RuntimeTypeUse> runtimeTypeUses =
         backendUsage.runtimeTypeUses.map((RuntimeTypeUse runtimeTypeUse) {
-      return new RuntimeTypeUse(
+      return RuntimeTypeUse(
           runtimeTypeUse.kind,
           map.toBackendType(runtimeTypeUse.receiverType),
           map.toBackendType(runtimeTypeUse.argumentType));
@@ -290,7 +288,7 @@
         map.toBackendClassSet(nativeBasicData.anonymousJsInteropClasses);
     Map<MemberEntity, String> jsInteropMembers =
         map.toBackendMemberMap(nativeBasicData.jsInteropMembers, identity);
-    return new NativeBasicDataImpl(
+    return NativeBasicDataImpl(
         _elementEnvironment,
         nativeBasicData.isAllowInteropUsed,
         nativeClassTagInfo,
@@ -314,7 +312,7 @@
     }
 
     NativeBehavior convertNativeBehavior(NativeBehavior behavior) {
-      NativeBehavior newBehavior = new NativeBehavior();
+      NativeBehavior newBehavior = NativeBehavior();
 
       for (dynamic type in behavior.typesReturned) {
         newBehavior.typesReturned.add(convertNativeBehaviorType(type));
@@ -353,7 +351,7 @@
     Map<MemberEntity, NativeBehavior> nativeFieldStoreBehavior =
         map.toBackendMemberMap(
             nativeData.nativeFieldStoreBehavior, convertNativeBehavior);
-    return new NativeDataImpl(
+    return NativeDataImpl(
         nativeBasicData,
         nativeMemberName,
         nativeMethodBehavior,
@@ -369,7 +367,7 @@
         .forEach((String name, Set<MemberEntity> members) {
       interceptedMembers[name] = map.toBackendMemberSet(members);
     });
-    return new InterceptorDataImpl(
+    return InterceptorDataImpl(
         nativeData,
         _commonElements,
         interceptedMembers,
@@ -389,16 +387,16 @@
     Set<Selector> selectorsNeedingTypeArguments =
         rtiNeed.selectorsNeedingTypeArguments.map((Selector selector) {
       if (selector.memberName.isPrivate) {
-        return new Selector(
+        return Selector(
             selector.kind,
-            new PrivateName(selector.memberName.text,
+            PrivateName(selector.memberName.text,
                 map.toBackendLibrary(selector.memberName.library),
                 isSetter: selector.memberName.isSetter),
             selector.callStructure);
       }
       return selector;
     }).toSet();
-    return new RuntimeTypesNeedImpl(
+    return RuntimeTypesNeedImpl(
         _elementEnvironment,
         classesNeedingTypeArguments,
         methodsNeedingSignature,
@@ -433,10 +431,10 @@
     // Tell the hierarchy that this is the super class. then we can use
     // .getSupertypes(class)
     ClassHierarchyNode parentNode = _classHierarchyNodes[superclass];
-    ClassHierarchyNode node = new ClassHierarchyNode(parentNode,
+    ClassHierarchyNode node = ClassHierarchyNode(parentNode,
         closureClassInfo.closureClassEntity, parentNode.hierarchyDepth + 1);
     _classHierarchyNodes[closureClassInfo.closureClassEntity] = node;
-    _classSets[closureClassInfo.closureClassEntity] = new ClassSet(node);
+    _classSets[closureClassInfo.closureClassEntity] = ClassSet(node);
     node.isDirectlyInstantiated = true;
 
     return closureClassInfo;
@@ -512,7 +510,7 @@
       return result;
     }
 
-    return new OutputUnitData.from(
+    return OutputUnitData.from(
         data,
         map.toBackendLibrary,
         convertClassMap,
@@ -607,9 +605,10 @@
   /// returned instead.
   MemberEntity toBackendMember(MemberEntity member);
 
-  DartType toBackendType(DartType type, {bool allowFreeVariables: false});
+  DartType toBackendType(DartType type, {bool allowFreeVariables = false});
 
-  ConstantValue toBackendConstant(ConstantValue value, {bool allowNull: false});
+  ConstantValue toBackendConstant(ConstantValue value,
+      {bool allowNull = false});
 
   /// Register [closureData] with this map.
   ///
@@ -635,7 +634,7 @@
   }
 
   Set<FieldEntity> toBackendFieldSet(Iterable<FieldEntity> set) {
-    Set<FieldEntity> newSet = new Set<FieldEntity>();
+    Set<FieldEntity> newSet = Set<FieldEntity>();
     for (FieldEntity element in set) {
       FieldEntity backendField = toBackendMember(element);
       if (backendField != null) {
@@ -647,7 +646,7 @@
   }
 
   Set<FunctionEntity> toBackendFunctionSet(Iterable<FunctionEntity> set) {
-    Set<FunctionEntity> newSet = new Set<FunctionEntity>();
+    Set<FunctionEntity> newSet = Set<FunctionEntity>();
     for (FunctionEntity element in set) {
       FunctionEntity backendFunction = toBackendMember(element);
       if (backendFunction != null) {
@@ -678,7 +677,7 @@
 
 Map<K, V2> convertMap<K, V1, V2>(
     Map<K, V1> map, K convertKey(K key), V2 convertValue(V1 value)) {
-  Map<K, V2> newMap = <K, V2>{};
+  Map<K, V2> newMap = {};
   map.forEach((K key, V1 value) {
     K newKey = convertKey(key);
     V2 newValue = convertValue(value);
@@ -697,10 +696,10 @@
   JsToFrontendMapImpl(this._backend);
 
   @override
-  DartType toBackendType(DartType type, {bool allowFreeVariables: false}) =>
+  DartType toBackendType(DartType type, {bool allowFreeVariables = false}) =>
       type == null
           ? null
-          : new _TypeConverter(_backend.types,
+          : _TypeConverter(_backend.types,
                   allowFreeVariables: allowFreeVariables)
               .visit(type, toBackendEntity);
 
@@ -754,28 +753,27 @@
 
   @override
   ConstantValue toBackendConstant(ConstantValue constant,
-      {bool allowNull: false}) {
+      {bool allowNull = false}) {
     if (constant == null) {
       if (!allowNull) {
-        throw new UnsupportedError('Null not allowed as constant value.');
+        throw UnsupportedError('Null not allowed as constant value.');
       }
       return null;
     }
     return constant.accept(
-        new _ConstantConverter(_backend.types, toBackendEntity), null);
+        _ConstantConverter(_backend.types, toBackendEntity), null);
   }
 }
 
-typedef Entity _EntityConverter(Entity cls);
+typedef _EntityConverter = Entity Function(Entity cls);
 
 class _TypeConverter implements DartTypeVisitor<DartType, _EntityConverter> {
   final DartTypes _dartTypes;
   final bool allowFreeVariables;
 
-  Map<FunctionTypeVariable, FunctionTypeVariable> _functionTypeVariables =
-      <FunctionTypeVariable, FunctionTypeVariable>{};
+  Map<FunctionTypeVariable, FunctionTypeVariable> _functionTypeVariables = {};
 
-  _TypeConverter(this._dartTypes, {this.allowFreeVariables: false});
+  _TypeConverter(this._dartTypes, {this.allowFreeVariables = false});
 
   List<DartType> convertTypes(
           List<DartType> types, _EntityConverter converter) =>
@@ -885,7 +883,7 @@
   final _TypeConverter typeConverter;
 
   _ConstantConverter(this._dartTypes, this.toBackendEntity)
-      : typeConverter = new _TypeConverter(_dartTypes);
+      : typeConverter = _TypeConverter(_dartTypes);
 
   @override
   ConstantValue visitNull(NullConstantValue constant, _) => constant;
@@ -914,7 +912,7 @@
 
   @override
   ConstantValue visitFunction(FunctionConstantValue constant, _) {
-    return new FunctionConstantValue(toBackendEntity(constant.element),
+    return FunctionConstantValue(toBackendEntity(constant.element),
         typeConverter.visit(constant.type, toBackendEntity));
   }
 
@@ -925,7 +923,7 @@
     if (identical(entries, constant.entries) && type == constant.type) {
       return constant;
     }
-    return new ListConstantValue(type, entries);
+    return ListConstantValue(type, entries);
   }
 
   @override
@@ -936,7 +934,7 @@
     if (identical(entries, constant.entries) && type == constant.type) {
       return constant;
     }
-    return new constant_system.JavaScriptSetConstant(type, entries);
+    return constant_system.JavaScriptSetConstant(type, entries);
   }
 
   @override
@@ -950,7 +948,7 @@
         type == constant.type) {
       return constant;
     }
-    return new constant_system.JavaScriptMapConstant(
+    return constant_system.JavaScriptMapConstant(
         type, keys, values, constant.onlyStringKeys);
   }
 
@@ -963,7 +961,7 @@
       assert(backendField != null, "No backend field for $f.");
       fields[backendField] = v.accept(this, null);
     });
-    return new ConstructedConstantValue(type, fields);
+    return ConstructedConstantValue(type, fields);
   }
 
   @override
@@ -974,20 +972,20 @@
     if (type == constant.type && representedType == constant.representedType) {
       return constant;
     }
-    return new TypeConstantValue(representedType, type);
+    return TypeConstantValue(representedType, type);
   }
 
   @override
   ConstantValue visitInterceptor(InterceptorConstantValue constant, _) {
     // Interceptor constants are only created in the SSA graph builder.
-    throw new UnsupportedError(
+    throw UnsupportedError(
         "Unexpected visitInterceptor ${constant.toStructuredText(_dartTypes)}");
   }
 
   @override
   ConstantValue visitDeferredGlobal(DeferredGlobalConstantValue constant, _) {
     // Deferred global constants are only created in the SSA graph builder.
-    throw new UnsupportedError(
+    throw UnsupportedError(
         "Unexpected DeferredGlobalConstantValue ${constant.toStructuredText(_dartTypes)}");
   }
 
@@ -996,7 +994,7 @@
     ConstantValue function = constant.function.accept(this, null);
     List<DartType> typeArguments =
         typeConverter.convertTypes(constant.typeArguments, toBackendEntity);
-    return new InstantiationConstantValue(typeArguments, function);
+    return InstantiationConstantValue(typeArguments, function);
   }
 
   List<ConstantValue> _handleValues(List<ConstantValue> values) {
diff --git a/pkg/compiler/lib/src/js_model/locals.dart b/pkg/compiler/lib/src/js_model/locals.dart
index 103c5a8..6f88356 100644
--- a/pkg/compiler/lib/src/js_model/locals.dart
+++ b/pkg/compiler/lib/src/js_model/locals.dart
@@ -44,14 +44,14 @@
     int mapCount = source.readInt();
     for (int i = 0; i < mapCount; i++) {
       KernelToLocalsMap localsMap =
-          new KernelToLocalsMapImpl.readFromDataSource(source);
+          KernelToLocalsMapImpl.readFromDataSource(source);
       List<MemberEntity> members = source.readMembers();
       for (MemberEntity member in members) {
         _localsMaps[member] = localsMap;
       }
     }
     source.end(tag);
-    return new GlobalLocalsMap.internal(localMapKeyLookup, _localsMaps);
+    return GlobalLocalsMap.internal(localMapKeyLookup, _localsMaps);
   }
 
   /// Serializes this [GlobalLocalsMap] to [sink].
@@ -89,7 +89,7 @@
     // constructor steps.
     MemberEntity entity = key;
     if (entity is ConstructorBodyEntity) key = entity.constructor;
-    return _localsMaps.putIfAbsent(key, () => new KernelToLocalsMapImpl(key));
+    return _localsMaps.putIfAbsent(key, () => KernelToLocalsMapImpl(key));
   }
 }
 
@@ -303,7 +303,7 @@
 
   JJumpTarget _getJumpTarget(ir.TreeNode node) {
     return jumpTargetMap.putIfAbsent(node, () {
-      return new JJumpTarget(member, jumpIndex++,
+      return JJumpTarget(member, jumpIndex++,
           isSwitch: node is ir.SwitchStatement,
           isSwitchCase: node is ir.SwitchCase);
     });
@@ -469,10 +469,10 @@
   bool isContinueTarget;
 
   JJumpTarget(this.memberContext, this.nestingLevel,
-      {this.isSwitch: false,
-      this.isSwitchCase: false,
-      this.isBreakTarget: false,
-      this.isContinueTarget: false});
+      {this.isSwitch = false,
+      this.isSwitchCase = false,
+      this.isBreakTarget = false,
+      this.isContinueTarget = false});
 
   /// Deserializes a [JJumpTarget] object from [source].
   factory JJumpTarget.readFromDataSource(DataSource source) {
@@ -483,7 +483,7 @@
     bool isSwitchCase = source.readBool();
     bool isBreakTarget = source.readBool();
     bool isContinueTarget = source.readBool();
-    JJumpTarget target = new JJumpTarget(memberContext, nestingLevel,
+    JJumpTarget target = JJumpTarget(memberContext, nestingLevel,
         isSwitch: isSwitch,
         isSwitchCase: isSwitchCase,
         isBreakTarget: isBreakTarget,
@@ -524,9 +524,9 @@
 
   @override
   LabelDefinition addLabel(String labelName,
-      {bool isBreakTarget: false, bool isContinueTarget: false}) {
+      {bool isBreakTarget = false, bool isContinueTarget = false}) {
     _labels ??= <LabelDefinition>[];
-    LabelDefinition labelDefinition = new JLabelDefinition(this, labelName,
+    LabelDefinition labelDefinition = JLabelDefinition(this, labelName,
         isBreakTarget: isBreakTarget, isContinueTarget: isContinueTarget);
     _labels.add(labelDefinition);
     return labelDefinition;
@@ -539,7 +539,7 @@
 
   @override
   String toString() {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('JJumpTarget(');
     sb.write('memberContext=');
     sb.write(memberContext);
@@ -569,13 +569,13 @@
   bool isContinueTarget;
 
   JLabelDefinition(this.target, this.labelName,
-      {this.isBreakTarget: false, this.isContinueTarget: false});
+      {this.isBreakTarget = false, this.isContinueTarget = false});
 
   @override
   String get name => labelName;
   @override
   String toString() {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('JLabelDefinition(');
     sb.write(',labelName=');
     sb.write(labelName);
@@ -596,7 +596,7 @@
   /// True if this local represents a local parameter.
   final bool isRegularParameter;
 
-  JLocal(this.name, this.memberContext, {this.isRegularParameter: false}) {
+  JLocal(this.name, this.memberContext, {this.isRegularParameter = false}) {
     assert(memberContext is! JGeneratorBody);
   }
 
@@ -604,7 +604,7 @@
 
   @override
   String toString() {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     sb.write('$_kind(');
     if (memberContext.enclosingClass != null) {
       sb.write(memberContext.enclosingClass.name);
diff --git a/pkg/compiler/lib/src/serialization/abstract_sink.dart b/pkg/compiler/lib/src/serialization/abstract_sink.dart
index 8cf7074..2f6967b 100644
--- a/pkg/compiler/lib/src/serialization/abstract_sink.dart
+++ b/pkg/compiler/lib/src/serialization/abstract_sink.dart
@@ -51,7 +51,7 @@
   }
 
   AbstractDataSink(
-      {this.useDataKinds: false, this.tagFrequencyMap, this.importedIndices}) {
+      {this.useDataKinds = false, this.tagFrequencyMap, this.importedIndices}) {
     _dartTypeNodeWriter = DartTypeNodeWriter(this);
     _stringIndex = _createSink<String>();
     _uriIndex = _createSink<Uri>();
@@ -99,7 +99,7 @@
     assert(_currentMemberContext != null,
         "DataSink has no current member context.");
     return _currentMemberData ??= _memberData[_currentMemberContext] ??=
-        new _MemberData(_currentMemberContext);
+        _MemberData(_currentMemberContext);
   }
 
   @override
@@ -117,17 +117,17 @@
   }
 
   @override
-  void writeDartType(DartType value, {bool allowNull: false}) {
+  void writeDartType(DartType value, {bool allowNull = false}) {
     _writeDataKind(DataKind.dartType);
     _writeDartType(value, [], allowNull: allowNull);
   }
 
   void _writeDartType(
       DartType value, List<FunctionTypeVariable> functionTypeVariables,
-      {bool allowNull: false}) {
+      {bool allowNull = false}) {
     if (value == null) {
       if (!allowNull) {
-        throw new UnsupportedError("Missing DartType is not allowed.");
+        throw UnsupportedError("Missing DartType is not allowed.");
       }
       writeEnum(DartTypeKind.none);
     } else {
@@ -136,17 +136,17 @@
   }
 
   @override
-  void writeDartTypeNode(ir.DartType value, {bool allowNull: false}) {
+  void writeDartTypeNode(ir.DartType value, {bool allowNull = false}) {
     _writeDataKind(DataKind.dartTypeNode);
     _writeDartTypeNode(value, [], allowNull: allowNull);
   }
 
   void _writeDartTypeNode(
       ir.DartType value, List<ir.TypeParameter> functionTypeVariables,
-      {bool allowNull: false}) {
+      {bool allowNull = false}) {
     if (value == null) {
       if (!allowNull) {
-        throw new UnsupportedError("Missing ir.DartType node is not allowed.");
+        throw UnsupportedError("Missing ir.DartType node is not allowed.");
       }
       writeEnum(DartTypeNodeKind.none);
     } else {
@@ -275,7 +275,7 @@
 
   @override
   void writeTreeNodesInContext(Iterable<ir.TreeNode> values,
-      {bool allowNull: false}) {
+      {bool allowNull = false}) {
     if (values == null) {
       assert(allowNull);
       writeInt(0);
@@ -289,7 +289,7 @@
 
   @override
   void writeTreeNodeMapInContext<V>(Map<ir.TreeNode, V> map, void f(V value),
-      {bool allowNull: false}) {
+      {bool allowNull = false}) {
     if (map == null) {
       assert(allowNull);
       writeInt(0);
@@ -306,13 +306,13 @@
     ir.TreeNode member = node;
     while (member is! ir.Member) {
       if (member == null) {
-        throw new UnsupportedError("No enclosing member of TreeNode "
+        throw UnsupportedError("No enclosing member of TreeNode "
             "$node (${node.runtimeType})");
       }
       member = member.parent;
     }
     _writeMemberNode(member);
-    return _memberData[member] ??= new _MemberData(member);
+    return _memberData[member] ??= _MemberData(member);
   }
 
   void _writeTreeNode(ir.TreeNode value, _MemberData memberData) {
@@ -366,7 +366,7 @@
       _writeEnumInternal(_FunctionNodeKind.functionDeclaration);
       _writeTreeNode(parent, memberData);
     } else {
-      throw new UnsupportedError(
+      throw UnsupportedError(
           "Unsupported FunctionNode parent ${parent.runtimeType}");
     }
   }
@@ -388,7 +388,7 @@
       _writeFunctionNode(parent, memberData);
       _writeIntInternal(parent.typeParameters.indexOf(value));
     } else {
-      throw new UnsupportedError(
+      throw UnsupportedError(
           "Unsupported TypeParameter parent ${parent.runtimeType}");
     }
   }
@@ -436,7 +436,7 @@
       writeEnum(LocalKind.typeVariableLocal);
       writeTypeVariable(local.typeVariable);
     } else {
-      throw new UnsupportedError("Unsupported local ${local.runtimeType}");
+      throw UnsupportedError("Unsupported local ${local.runtimeType}");
     }
   }
 
@@ -453,7 +453,7 @@
   }
 
   void _writeDoubleValue(double value) {
-    ByteData data = new ByteData(8);
+    ByteData data = ByteData(8);
     data.setFloat64(0, value);
     writeInt(data.getUint16(0));
     writeInt(data.getUint16(2));
@@ -464,7 +464,7 @@
   @override
   void writeIntegerValue(int value) {
     _writeDataKind(DataKind.int);
-    _writeBigInt(new BigInt.from(value));
+    _writeBigInt(BigInt.from(value));
   }
 
   void _writeBigInt(BigInt value) {
diff --git a/pkg/compiler/lib/src/serialization/abstract_source.dart b/pkg/compiler/lib/src/serialization/abstract_source.dart
index bda940e..27f29ff 100644
--- a/pkg/compiler/lib/src/serialization/abstract_source.dart
+++ b/pkg/compiler/lib/src/serialization/abstract_source.dart
@@ -39,7 +39,7 @@
     }
   }
 
-  AbstractDataSource({this.useDataKinds: false, this.importedIndices}) {
+  AbstractDataSource({this.useDataKinds = false, this.importedIndices}) {
     _stringIndex = _createSource<String>();
     _uriIndex = _createSource<Uri>();
     _memberNodeIndex = _createSource<_MemberData>();
@@ -175,7 +175,7 @@
       List<ir.TypeParameter> functionTypeVariables) {
     int count = readInt();
     if (count == 0) return emptyListOfDartTypes;
-    List<ir.DartType> types = new List<ir.DartType>.filled(count, null);
+    List<ir.DartType> types = List<ir.DartType>.filled(count, null);
     for (int index = 0; index < count; index++) {
       types[index] = _readDartTypeNode(functionTypeVariables);
     }
@@ -188,11 +188,11 @@
     Uri uri = _readUri();
     int begin = _readIntInternal();
     int end = _readIntInternal();
-    return new SourceSpan(uri, begin, end);
+    return SourceSpan(uri, begin, end);
   }
 
   @override
-  DartType readDartType({bool allowNull: false}) {
+  DartType readDartType({bool allowNull = false}) {
     _checkDataKind(DataKind.dartType);
     DartType type = DartType.readFromDataSource(this, []);
     assert(type != null || allowNull);
@@ -200,7 +200,7 @@
   }
 
   @override
-  ir.DartType readDartTypeNode({bool allowNull: false}) {
+  ir.DartType readDartTypeNode({bool allowNull = false}) {
     _checkDataKind(DataKind.dartTypeNode);
     ir.DartType type = _readDartTypeNode([]);
     assert(type != null || allowNull);
@@ -226,7 +226,7 @@
         ir.Nullability typeParameterTypeNullability =
             readEnum(ir.Nullability.values);
         ir.DartType promotedBound = _readDartTypeNode(functionTypeVariables);
-        return new ir.TypeParameterType(
+        return ir.TypeParameterType(
             typeParameter, typeParameterTypeNullability, promotedBound);
       case DartTypeNodeKind.functionTypeVariable:
         int index = readInt();
@@ -234,16 +234,15 @@
         ir.Nullability typeParameterTypeNullability =
             readEnum(ir.Nullability.values);
         ir.DartType promotedBound = _readDartTypeNode(functionTypeVariables);
-        return new ir.TypeParameterType(functionTypeVariables[index],
+        return ir.TypeParameterType(functionTypeVariables[index],
             typeParameterTypeNullability, promotedBound);
       case DartTypeNodeKind.functionType:
         begin(functionTypeNodeTag);
         int typeParameterCount = readInt();
-        List<ir.TypeParameter> typeParameters =
-            new List<ir.TypeParameter>.generate(
-                typeParameterCount, (int index) => new ir.TypeParameter());
+        List<ir.TypeParameter> typeParameters = List<ir.TypeParameter>.generate(
+            typeParameterCount, (int index) => ir.TypeParameter());
         functionTypeVariables =
-            new List<ir.TypeParameter>.from(functionTypeVariables)
+            List<ir.TypeParameter>.from(functionTypeVariables)
               ..addAll(typeParameters);
         for (int index = 0; index < typeParameterCount; index++) {
           typeParameters[index].name = readString();
@@ -259,18 +258,17 @@
             _readDartTypeNodes(functionTypeVariables);
         int namedParameterCount = readInt();
         List<ir.NamedType> namedParameters =
-            new List<ir.NamedType>.filled(namedParameterCount, null);
+            List<ir.NamedType>.filled(namedParameterCount, null);
         for (int index = 0; index < namedParameterCount; index++) {
           String name = readString();
           bool isRequired = readBool();
           ir.DartType type = _readDartTypeNode(functionTypeVariables);
           namedParameters[index] =
-              new ir.NamedType(name, type, isRequired: isRequired);
+              ir.NamedType(name, type, isRequired: isRequired);
         }
         ir.TypedefType typedefType = _readDartTypeNode(functionTypeVariables);
         end(functionTypeNodeTag);
-        return new ir.FunctionType(
-            positionalParameters, returnType, nullability,
+        return ir.FunctionType(positionalParameters, returnType, nullability,
             namedParameters: namedParameters,
             typeParameters: typeParameters,
             requiredParameterCount: requiredParameterCount,
@@ -281,35 +279,35 @@
         ir.Nullability nullability = readEnum(ir.Nullability.values);
         List<ir.DartType> typeArguments =
             _readDartTypeNodes(functionTypeVariables);
-        return new ir.InterfaceType(cls, nullability, typeArguments);
+        return ir.InterfaceType(cls, nullability, typeArguments);
       case DartTypeNodeKind.thisInterfaceType:
         ir.Class cls = readClassNode();
         ir.Nullability nullability = readEnum(ir.Nullability.values);
         List<ir.DartType> typeArguments =
             _readDartTypeNodes(functionTypeVariables);
-        return new ThisInterfaceType(cls, nullability, typeArguments);
+        return ThisInterfaceType(cls, nullability, typeArguments);
       case DartTypeNodeKind.exactInterfaceType:
         ir.Class cls = readClassNode();
         ir.Nullability nullability = readEnum(ir.Nullability.values);
         List<ir.DartType> typeArguments =
             _readDartTypeNodes(functionTypeVariables);
-        return new ExactInterfaceType(cls, nullability, typeArguments);
+        return ExactInterfaceType(cls, nullability, typeArguments);
       case DartTypeNodeKind.typedef:
         ir.Typedef typedef = readTypedefNode();
         ir.Nullability nullability = readEnum(ir.Nullability.values);
         List<ir.DartType> typeArguments =
             _readDartTypeNodes(functionTypeVariables);
-        return new ir.TypedefType(typedef, nullability, typeArguments);
+        return ir.TypedefType(typedef, nullability, typeArguments);
       case DartTypeNodeKind.dynamicType:
         return const ir.DynamicType();
       case DartTypeNodeKind.futureOrType:
         ir.Nullability nullability = readEnum(ir.Nullability.values);
         ir.DartType typeArgument = _readDartTypeNode(functionTypeVariables);
-        return new ir.FutureOrType(typeArgument, nullability);
+        return ir.FutureOrType(typeArgument, nullability);
       case DartTypeNodeKind.nullType:
         return const ir.NullType();
     }
-    throw new UnsupportedError("Unexpected DartTypeKind $kind");
+    throw UnsupportedError("Unexpected DartTypeKind $kind");
   }
 
   _MemberData _readMemberData() {
@@ -328,7 +326,7 @@
         String name = _readString();
         return library.lookupMemberDataByName(name);
     }
-    throw new UnsupportedError("Unsupported _MemberKind $kind");
+    throw UnsupportedError("Unsupported _MemberKind $kind");
   }
 
   @override
@@ -454,10 +452,10 @@
 
   @override
   List<E> readTreeNodesInContext<E extends ir.TreeNode>(
-      {bool emptyAsNull: false}) {
+      {bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
-    List<E> list = new List<E>.filled(count, null);
+    List<E> list = List<E>.filled(count, null);
     for (int i = 0; i < count; i++) {
       ir.TreeNode node = readTreeNodeInContextInternal(currentMemberData);
       list[i] = node;
@@ -467,7 +465,7 @@
 
   @override
   Map<K, V> readTreeNodeMapInContext<K extends ir.TreeNode, V>(V f(),
-      {bool emptyAsNull: false}) {
+      {bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
     Map<K, V> map = {};
@@ -492,7 +490,7 @@
   }
 
   double _readDoubleValue() {
-    ByteData data = new ByteData(8);
+    ByteData data = ByteData(8);
     data.setUint16(0, readInt());
     data.setUint16(2, readInt());
     data.setUint16(4, readInt());
@@ -519,60 +517,60 @@
     switch (kind) {
       case ConstantValueKind.BOOL:
         bool value = readBool();
-        return new BoolConstantValue(value);
+        return BoolConstantValue(value);
       case ConstantValueKind.INT:
         BigInt value = _readBigInt();
-        return new IntConstantValue(value);
+        return IntConstantValue(value);
       case ConstantValueKind.DOUBLE:
         double value = _readDoubleValue();
-        return new DoubleConstantValue(value);
+        return DoubleConstantValue(value);
       case ConstantValueKind.STRING:
         String value = readString();
-        return new StringConstantValue(value);
+        return StringConstantValue(value);
       case ConstantValueKind.NULL:
         return const NullConstantValue();
       case ConstantValueKind.FUNCTION:
         IndexedFunction function = readMember();
         DartType type = readDartType();
-        return new FunctionConstantValue(function, type);
+        return FunctionConstantValue(function, type);
       case ConstantValueKind.LIST:
         DartType type = readDartType();
         List<ConstantValue> entries = readConstants();
-        return new ListConstantValue(type, entries);
+        return ListConstantValue(type, entries);
       case ConstantValueKind.SET:
         DartType type = readDartType();
         MapConstantValue entries = readConstant();
-        return new constant_system.JavaScriptSetConstant(type, entries);
+        return constant_system.JavaScriptSetConstant(type, entries);
       case ConstantValueKind.MAP:
         DartType type = readDartType();
         ListConstantValue keyList = readConstant();
         List<ConstantValue> values = readConstants();
         bool onlyStringKeys = readBool();
-        return new constant_system.JavaScriptMapConstant(
+        return constant_system.JavaScriptMapConstant(
             type, keyList, values, onlyStringKeys);
       case ConstantValueKind.CONSTRUCTED:
         InterfaceType type = readDartType();
         Map<FieldEntity, ConstantValue> fields =
             readMemberMap<FieldEntity, ConstantValue>(
                 (MemberEntity member) => readConstant());
-        return new ConstructedConstantValue(type, fields);
+        return ConstructedConstantValue(type, fields);
       case ConstantValueKind.TYPE:
         DartType representedType = readDartType();
         DartType type = readDartType();
-        return new TypeConstantValue(representedType, type);
+        return TypeConstantValue(representedType, type);
       case ConstantValueKind.INSTANTIATION:
         List<DartType> typeArguments = readDartTypes();
         ConstantValue function = readConstant();
-        return new InstantiationConstantValue(typeArguments, function);
+        return InstantiationConstantValue(typeArguments, function);
       case ConstantValueKind.NON_CONSTANT:
-        return new NonConstantValue();
+        return NonConstantValue();
       case ConstantValueKind.INTERCEPTOR:
         ClassEntity cls = readClass();
-        return new InterceptorConstantValue(cls);
+        return InterceptorConstantValue(cls);
       case ConstantValueKind.DEFERRED_GLOBAL:
         ConstantValue constant = readConstant();
         OutputUnit unit = readOutputUnitReference();
-        return new DeferredGlobalConstantValue(constant, unit);
+        return DeferredGlobalConstantValue(constant, unit);
       case ConstantValueKind.DUMMY_INTERCEPTOR:
         return DummyInterceptorConstantValue();
       case ConstantValueKind.LATE_SENTINEL:
@@ -581,9 +579,9 @@
         return UnreachableConstantValue();
       case ConstantValueKind.JS_NAME:
         js.LiteralString name = readJsNode();
-        return new JsNameConstantValue(name);
+        return JsNameConstantValue(name);
     }
-    throw new UnsupportedError("Unexpexted constant value kind ${kind}.");
+    throw UnsupportedError("Unexpexted constant value kind ${kind}.");
   }
 
   ir.TreeNode _readTreeNode(_MemberData memberData) {
@@ -605,7 +603,7 @@
         ir.ConstantExpression expression = _readTreeNode(memberData);
         ir.Constant constant =
             memberData.getConstantByIndex(expression, _readIntInternal());
-        return new ConstantReference(expression, constant);
+        return ConstantReference(expression, constant);
       case _TreeNodeKind.node:
         memberData ??= _readMemberData();
         int index = _readIntInternal();
@@ -616,7 +614,7 @@
             "${memberData.node}.$_errorContext");
         return treeNode;
     }
-    throw new UnsupportedError("Unexpected _TreeNodeKind $kind");
+    throw UnsupportedError("Unexpected _TreeNodeKind $kind");
   }
 
   ir.FunctionNode _readFunctionNode(_MemberData memberData) {
@@ -635,7 +633,7 @@
         ir.FunctionDeclaration functionDeclaration = _readTreeNode(memberData);
         return functionDeclaration.function;
     }
-    throw new UnsupportedError("Unexpected _FunctionNodeKind $kind");
+    throw UnsupportedError("Unexpected _FunctionNodeKind $kind");
   }
 
   @override
@@ -654,7 +652,7 @@
         ir.FunctionNode functionNode = _readFunctionNode(memberData);
         return functionNode.typeParameters[_readIntInternal()];
     }
-    throw new UnsupportedError("Unexpected _TypeParameterKind kind $kind");
+    throw UnsupportedError("Unexpected _TypeParameterKind kind $kind");
   }
 
   void _checkDataKind(DataKind expectedKind) {
@@ -676,18 +674,18 @@
         return localLookup.getLocalByIndex(memberContext, localIndex);
       case LocalKind.thisLocal:
         ClassEntity cls = readClass();
-        return new ThisLocal(cls);
+        return ThisLocal(cls);
       case LocalKind.boxLocal:
         ClassEntity cls = readClass();
-        return new BoxLocal(cls);
+        return BoxLocal(cls);
       case LocalKind.anonymousClosureLocal:
         ClassEntity cls = readClass();
-        return new AnonymousClosureLocal(cls);
+        return AnonymousClosureLocal(cls);
       case LocalKind.typeVariableLocal:
         TypeVariableEntity typeVariable = readTypeVariable();
-        return new TypeVariableLocal(typeVariable);
+        return TypeVariableLocal(typeVariable);
     }
-    throw new UnsupportedError("Unexpected local kind $kind");
+    throw UnsupportedError("Unexpected local kind $kind");
   }
 
   @override
@@ -705,7 +703,7 @@
     Uri uri = _readUri();
     Uri enclosingLibraryUri = _readUri();
     bool isDeferred = _readBool();
-    return new ImportEntity(isDeferred, name, uri, enclosingLibraryUri);
+    return ImportEntity(isDeferred, name, uri, enclosingLibraryUri);
   }
 
   @override
diff --git a/pkg/compiler/lib/src/serialization/binary_sink.dart b/pkg/compiler/lib/src/serialization/binary_sink.dart
index 7394824..92a4d43 100644
--- a/pkg/compiler/lib/src/serialization/binary_sink.dart
+++ b/pkg/compiler/lib/src/serialization/binary_sink.dart
@@ -13,10 +13,10 @@
   int _length = 0;
 
   BinarySink(this.sink,
-      {bool useDataKinds: false,
+      {bool useDataKinds = false,
       Map<String, int> tagFrequencyMap,
       DataSourceIndices importedIndices})
-      : _bufferedSink = new BufferedSink(sink),
+      : _bufferedSink = BufferedSink(sink),
         super(
             useDataKinds: useDataKinds,
             tagFrequencyMap: tagFrequencyMap,
diff --git a/pkg/compiler/lib/src/serialization/binary_source.dart b/pkg/compiler/lib/src/serialization/binary_source.dart
index 0bbe4d0..3844b35 100644
--- a/pkg/compiler/lib/src/serialization/binary_source.dart
+++ b/pkg/compiler/lib/src/serialization/binary_source.dart
@@ -13,7 +13,7 @@
   final StringInterner _stringInterner;
 
   BinarySourceImpl(this._bytes,
-      {bool useDataKinds: false,
+      {bool useDataKinds = false,
       StringInterner stringInterner,
       DataSourceIndices importedIndices})
       : _stringInterner = stringInterner,
@@ -29,7 +29,7 @@
   @override
   String _readStringInternal() {
     int length = _readIntInternal();
-    List<int> bytes = new Uint8List(length);
+    List<int> bytes = Uint8List(length);
     bytes.setRange(0, bytes.length, _bytes, _byteOffset);
     _byteOffset += bytes.length;
     String string = utf8.decode(bytes);
diff --git a/pkg/compiler/lib/src/serialization/helpers.dart b/pkg/compiler/lib/src/serialization/helpers.dart
index 17a3eda..a0bd6d7 100644
--- a/pkg/compiler/lib/src/serialization/helpers.dart
+++ b/pkg/compiler/lib/src/serialization/helpers.dart
@@ -141,7 +141,7 @@
   @override
   void defaultDartType(
       ir.DartType node, List<ir.TypeParameter> functionTypeVariables) {
-    throw new UnsupportedError(
+    throw UnsupportedError(
         "Unexpected ir.DartType $node (${node.runtimeType}).");
   }
 
@@ -208,9 +208,8 @@
       ir.FunctionType node, List<ir.TypeParameter> functionTypeVariables) {
     _sink.writeEnum(DartTypeNodeKind.functionType);
     _sink.begin(functionTypeNodeTag);
-    functionTypeVariables =
-        new List<ir.TypeParameter>.from(functionTypeVariables)
-          ..addAll(node.typeParameters);
+    functionTypeVariables = List<ir.TypeParameter>.from(functionTypeVariables)
+      ..addAll(node.typeParameters);
     _sink.writeInt(node.typeParameters.length);
     for (ir.TypeParameter parameter in node.typeParameters) {
       _sink.writeString(parameter.name);
diff --git a/pkg/compiler/lib/src/serialization/member_data.dart b/pkg/compiler/lib/src/serialization/member_data.dart
index df58f12..87db36b 100644
--- a/pkg/compiler/lib/src/serialization/member_data.dart
+++ b/pkg/compiler/lib/src/serialization/member_data.dart
@@ -18,7 +18,7 @@
     if (_libraryMap == null) {
       _libraryMap = {};
       for (ir.Library library in _component.libraries) {
-        _libraryMap[library.importUri] = new _LibraryData(library);
+        _libraryMap[library.importUri] = _LibraryData(library);
       }
     }
     _LibraryData data = _libraryMap[canonicalUri];
@@ -80,7 +80,7 @@
             !_classesByNode.containsKey(cls),
             "Duplicate class '${cls.name}' in $_classesByNode "
             "trying to add $cls.");
-        _classesByNode[cls] = _classesByName[cls.name] = new _ClassData(cls);
+        _classesByNode[cls] = _classesByName[cls.name] = _ClassData(cls);
       }
     }
   }
@@ -126,7 +126,7 @@
             !_membersByNode.containsKey(member),
             "Duplicate member '$name' in $_membersByNode "
             "trying to add $member.");
-        _membersByNode[member] = _membersByName[name] = new _MemberData(member);
+        _membersByNode[member] = _membersByName[name] = _MemberData(member);
       }
     }
   }
@@ -174,7 +174,7 @@
             !_membersByNode.containsKey(member),
             "Duplicate member '$name' in $_membersByNode "
             "trying to add $member.");
-        _membersByNode[member] = _membersByName[name] = new _MemberData(member);
+        _membersByNode[member] = _membersByName[name] = _MemberData(member);
       }
     }
   }
@@ -219,14 +219,13 @@
     if (_indexToNodeMap == null) {
       _indexToNodeMap = {};
       _nodeToIndexMap = {};
-      node.accept(
-          new _TreeNodeIndexerVisitor(_indexToNodeMap, _nodeToIndexMap));
+      node.accept(_TreeNodeIndexerVisitor(_indexToNodeMap, _nodeToIndexMap));
     }
   }
 
   _ConstantNodeIndexerVisitor _createConstantIndexer(
       ir.ConstantExpression node) {
-    _ConstantNodeIndexerVisitor indexer = new _ConstantNodeIndexerVisitor();
+    _ConstantNodeIndexerVisitor indexer = _ConstantNodeIndexerVisitor();
     node.constant.accept(indexer);
     return indexer;
   }
diff --git a/pkg/compiler/lib/src/serialization/mixins.dart b/pkg/compiler/lib/src/serialization/mixins.dart
index 0b48464..8e2bfa3 100644
--- a/pkg/compiler/lib/src/serialization/mixins.dart
+++ b/pkg/compiler/lib/src/serialization/mixins.dart
@@ -16,10 +16,10 @@
   }
 
   @override
-  List<E> readList<E>(E f(), {bool emptyAsNull: false}) {
+  List<E> readList<E>(E f(), {bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
-    List<E> list = new List<E>.filled(count, null);
+    List<E> list = List<E>.filled(count, null);
     for (int i = 0; i < count; i++) {
       list[i] = f();
     }
@@ -45,10 +45,10 @@
   }
 
   @override
-  List<String> readStrings({bool emptyAsNull: false}) {
+  List<String> readStrings({bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
-    List<String> list = new List<String>.filled(count, null);
+    List<String> list = List<String>.filled(count, null);
     for (int i = 0; i < count; i++) {
       list[i] = readString();
     }
@@ -56,10 +56,10 @@
   }
 
   @override
-  List<DartType> readDartTypes({bool emptyAsNull: false}) {
+  List<DartType> readDartTypes({bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
-    List<DartType> list = new List<DartType>.filled(count, null);
+    List<DartType> list = List<DartType>.filled(count, null);
     for (int i = 0; i < count; i++) {
       list[i] = readDartType();
     }
@@ -67,11 +67,10 @@
   }
 
   @override
-  List<ir.TypeParameter> readTypeParameterNodes({bool emptyAsNull: false}) {
+  List<ir.TypeParameter> readTypeParameterNodes({bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
-    List<ir.TypeParameter> list =
-        new List<ir.TypeParameter>.filled(count, null);
+    List<ir.TypeParameter> list = List<ir.TypeParameter>.filled(count, null);
     for (int i = 0; i < count; i++) {
       list[i] = readTypeParameterNode();
     }
@@ -79,10 +78,10 @@
   }
 
   @override
-  List<E> readMembers<E extends MemberEntity>({bool emptyAsNull: false}) {
+  List<E> readMembers<E extends MemberEntity>({bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
-    List<E> list = new List<E>.filled(count, null);
+    List<E> list = List<E>.filled(count, null);
     for (int i = 0; i < count; i++) {
       MemberEntity member = readMember();
       list[i] = member;
@@ -91,10 +90,10 @@
   }
 
   @override
-  List<E> readMemberNodes<E extends ir.Member>({bool emptyAsNull: false}) {
+  List<E> readMemberNodes<E extends ir.Member>({bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
-    List<E> list = new List<E>.filled(count, null);
+    List<E> list = List<E>.filled(count, null);
     for (int i = 0; i < count; i++) {
       ir.Member value = readMemberNode();
       list[i] = value;
@@ -103,10 +102,10 @@
   }
 
   @override
-  List<E> readClasses<E extends ClassEntity>({bool emptyAsNull: false}) {
+  List<E> readClasses<E extends ClassEntity>({bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
-    List<E> list = new List<E>.filled(count, null);
+    List<E> list = List<E>.filled(count, null);
     for (int i = 0; i < count; i++) {
       ClassEntity cls = readClass();
       list[i] = cls;
@@ -116,7 +115,7 @@
 
   @override
   Map<K, V> readLibraryMap<K extends LibraryEntity, V>(V f(),
-      {bool emptyAsNull: false}) {
+      {bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
     Map<K, V> map = {};
@@ -130,7 +129,7 @@
 
   @override
   Map<K, V> readClassMap<K extends ClassEntity, V>(V f(),
-      {bool emptyAsNull: false}) {
+      {bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
     Map<K, V> map = {};
@@ -144,7 +143,7 @@
 
   @override
   Map<K, V> readMemberMap<K extends MemberEntity, V>(V f(MemberEntity member),
-      {bool emptyAsNull: false}) {
+      {bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
     Map<K, V> map = {};
@@ -158,7 +157,7 @@
 
   @override
   Map<K, V> readMemberNodeMap<K extends ir.Member, V>(V f(),
-      {bool emptyAsNull: false}) {
+      {bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
     Map<K, V> map = {};
@@ -172,7 +171,7 @@
 
   @override
   Map<K, V> readTreeNodeMap<K extends ir.TreeNode, V>(V f(),
-      {bool emptyAsNull: false}) {
+      {bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
     Map<K, V> map = {};
@@ -186,7 +185,7 @@
 
   @override
   Map<K, V> readTypeVariableMap<K extends IndexedTypeVariable, V>(V f(),
-      {bool emptyAsNull: false}) {
+      {bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
     Map<K, V> map = {};
@@ -199,10 +198,10 @@
   }
 
   @override
-  List<E> readLocals<E extends Local>({bool emptyAsNull: false}) {
+  List<E> readLocals<E extends Local>({bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
-    List<E> list = new List<E>.filled(count, null);
+    List<E> list = List<E>.filled(count, null);
     for (int i = 0; i < count; i++) {
       Local local = readLocal();
       list[i] = local;
@@ -211,7 +210,8 @@
   }
 
   @override
-  Map<K, V> readLocalMap<K extends Local, V>(V f(), {bool emptyAsNull: false}) {
+  Map<K, V> readLocalMap<K extends Local, V>(V f(),
+      {bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
     Map<K, V> map = {};
@@ -224,10 +224,10 @@
   }
 
   @override
-  List<E> readTreeNodes<E extends ir.TreeNode>({bool emptyAsNull: false}) {
+  List<E> readTreeNodes<E extends ir.TreeNode>({bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
-    List<E> list = new List<E>.filled(count, null);
+    List<E> list = List<E>.filled(count, null);
     for (int i = 0; i < count; i++) {
       ir.TreeNode node = readTreeNode();
       list[i] = node;
@@ -236,7 +236,7 @@
   }
 
   @override
-  Map<String, V> readStringMap<V>(V f(), {bool emptyAsNull: false}) {
+  Map<String, V> readStringMap<V>(V f(), {bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
     Map<String, V> map = {};
@@ -294,10 +294,10 @@
   }
 
   @override
-  List<E> readConstants<E extends ConstantValue>({bool emptyAsNull: false}) {
+  List<E> readConstants<E extends ConstantValue>({bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
-    List<E> list = new List<E>.filled(count, null);
+    List<E> list = List<E>.filled(count, null);
     for (int i = 0; i < count; i++) {
       ConstantValue value = readConstant();
       list[i] = value;
@@ -307,7 +307,7 @@
 
   @override
   Map<K, V> readConstantMap<K extends ConstantValue, V>(V f(),
-      {bool emptyAsNull: false}) {
+      {bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
     Map<K, V> map = {};
@@ -338,10 +338,10 @@
   }
 
   @override
-  List<ImportEntity> readImports({bool emptyAsNull: false}) {
+  List<ImportEntity> readImports({bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
-    List<ImportEntity> list = new List<ImportEntity>.filled(count, null);
+    List<ImportEntity> list = List<ImportEntity>.filled(count, null);
     for (int i = 0; i < count; i++) {
       list[i] = readImport();
     }
@@ -349,7 +349,7 @@
   }
 
   @override
-  Map<ImportEntity, V> readImportMap<V>(V f(), {bool emptyAsNull: false}) {
+  Map<ImportEntity, V> readImportMap<V>(V f(), {bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
     Map<ImportEntity, V> map = {};
@@ -362,10 +362,10 @@
   }
 
   @override
-  List<ir.DartType> readDartTypeNodes({bool emptyAsNull: false}) {
+  List<ir.DartType> readDartTypeNodes({bool emptyAsNull = false}) {
     int count = readInt();
     if (count == 0 && emptyAsNull) return null;
-    List<ir.DartType> list = new List<ir.DartType>.filled(count, null);
+    List<ir.DartType> list = List<ir.DartType>.filled(count, null);
     for (int i = 0; i < count; i++) {
       list[i] = readDartTypeNode();
     }
@@ -376,7 +376,7 @@
   ir.Name readName() {
     String text = readString();
     ir.Library library = readValueOrNull(readLibraryNode);
-    return new ir.Name(text, library);
+    return ir.Name(text, library);
   }
 
   @override
@@ -436,7 +436,7 @@
   }
 
   @override
-  void writeClasses(Iterable<ClassEntity> values, {bool allowNull: false}) {
+  void writeClasses(Iterable<ClassEntity> values, {bool allowNull = false}) {
     if (values == null) {
       assert(allowNull);
       writeInt(0);
@@ -449,7 +449,7 @@
   }
 
   @override
-  void writeTreeNodes(Iterable<ir.TreeNode> values, {bool allowNull: false}) {
+  void writeTreeNodes(Iterable<ir.TreeNode> values, {bool allowNull = false}) {
     if (values == null) {
       assert(allowNull);
       writeInt(0);
@@ -462,7 +462,7 @@
   }
 
   @override
-  void writeStrings(Iterable<String> values, {bool allowNull: false}) {
+  void writeStrings(Iterable<String> values, {bool allowNull = false}) {
     if (values == null) {
       assert(allowNull);
       writeInt(0);
@@ -475,7 +475,7 @@
   }
 
   @override
-  void writeMemberNodes(Iterable<ir.Member> values, {bool allowNull: false}) {
+  void writeMemberNodes(Iterable<ir.Member> values, {bool allowNull = false}) {
     if (values == null) {
       assert(allowNull);
       writeInt(0);
@@ -488,7 +488,7 @@
   }
 
   @override
-  void writeDartTypes(Iterable<DartType> values, {bool allowNull: false}) {
+  void writeDartTypes(Iterable<DartType> values, {bool allowNull = false}) {
     if (values == null) {
       assert(allowNull);
       writeInt(0);
@@ -502,7 +502,7 @@
 
   @override
   void writeLibraryMap<V>(Map<LibraryEntity, V> map, void f(V value),
-      {bool allowNull: false}) {
+      {bool allowNull = false}) {
     if (map == null) {
       assert(allowNull);
       writeInt(0);
@@ -517,7 +517,7 @@
 
   @override
   void writeClassMap<V>(Map<ClassEntity, V> map, void f(V value),
-      {bool allowNull: false}) {
+      {bool allowNull = false}) {
     if (map == null) {
       assert(allowNull);
       writeInt(0);
@@ -533,7 +533,7 @@
   @override
   void writeMemberMap<V>(
       Map<MemberEntity, V> map, void f(MemberEntity member, V value),
-      {bool allowNull: false}) {
+      {bool allowNull = false}) {
     if (map == null) {
       assert(allowNull);
       writeInt(0);
@@ -548,7 +548,7 @@
 
   @override
   void writeStringMap<V>(Map<String, V> map, void f(V value),
-      {bool allowNull: false}) {
+      {bool allowNull = false}) {
     if (map == null) {
       assert(allowNull);
       writeInt(0);
@@ -562,7 +562,7 @@
   }
 
   @override
-  void writeLocals(Iterable<Local> values, {bool allowNull: false}) {
+  void writeLocals(Iterable<Local> values, {bool allowNull = false}) {
     if (values == null) {
       assert(allowNull);
       writeInt(0);
@@ -576,7 +576,7 @@
 
   @override
   void writeLocalMap<V>(Map<Local, V> map, void f(V value),
-      {bool allowNull: false}) {
+      {bool allowNull = false}) {
     if (map == null) {
       assert(allowNull);
       writeInt(0);
@@ -591,7 +591,7 @@
 
   @override
   void writeMemberNodeMap<V>(Map<ir.Member, V> map, void f(V value),
-      {bool allowNull: false}) {
+      {bool allowNull = false}) {
     if (map == null) {
       assert(allowNull);
       writeInt(0);
@@ -606,7 +606,7 @@
 
   @override
   void writeTreeNodeMap<V>(Map<ir.TreeNode, V> map, void f(V value),
-      {bool allowNull: false}) {
+      {bool allowNull = false}) {
     if (map == null) {
       assert(allowNull);
       writeInt(0);
@@ -621,7 +621,7 @@
 
   @override
   void writeTypeVariableMap<V>(Map<IndexedTypeVariable, V> map, void f(V value),
-      {bool allowNull: false}) {
+      {bool allowNull = false}) {
     if (map == null) {
       assert(allowNull);
       writeInt(0);
@@ -636,7 +636,7 @@
 
   @override
   void writeList<E>(Iterable<E> values, void f(E value),
-      {bool allowNull: false}) {
+      {bool allowNull = false}) {
     if (values == null) {
       assert(allowNull);
       writeInt(0);
@@ -671,7 +671,7 @@
   }
 
   @override
-  void writeMembers(Iterable<MemberEntity> values, {bool allowNull: false}) {
+  void writeMembers(Iterable<MemberEntity> values, {bool allowNull = false}) {
     if (values == null) {
       assert(allowNull);
       writeInt(0);
@@ -685,7 +685,7 @@
 
   @override
   void writeTypeParameterNodes(Iterable<ir.TypeParameter> values,
-      {bool allowNull: false}) {
+      {bool allowNull = false}) {
     if (values == null) {
       assert(allowNull);
       writeInt(0);
@@ -706,7 +706,8 @@
   }
 
   @override
-  void writeConstants(Iterable<ConstantValue> values, {bool allowNull: false}) {
+  void writeConstants(Iterable<ConstantValue> values,
+      {bool allowNull = false}) {
     if (values == null) {
       assert(allowNull);
       writeInt(0);
@@ -720,7 +721,7 @@
 
   @override
   void writeConstantMap<V>(Map<ConstantValue, V> map, void f(V value),
-      {bool allowNull: false}) {
+      {bool allowNull = false}) {
     if (map == null) {
       assert(allowNull);
       writeInt(0);
@@ -750,7 +751,7 @@
   }
 
   @override
-  void writeImports(Iterable<ImportEntity> values, {bool allowNull: false}) {
+  void writeImports(Iterable<ImportEntity> values, {bool allowNull = false}) {
     if (values == null) {
       assert(allowNull);
       writeInt(0);
@@ -764,7 +765,7 @@
 
   @override
   void writeImportMap<V>(Map<ImportEntity, V> map, void f(V value),
-      {bool allowNull: false}) {
+      {bool allowNull = false}) {
     if (map == null) {
       assert(allowNull);
       writeInt(0);
@@ -779,7 +780,7 @@
 
   @override
   void writeDartTypeNodes(Iterable<ir.DartType> values,
-      {bool allowNull: false}) {
+      {bool allowNull = false}) {
     if (values == null) {
       assert(allowNull);
       writeInt(0);
diff --git a/pkg/compiler/lib/src/serialization/node_indexer.dart b/pkg/compiler/lib/src/serialization/node_indexer.dart
index d62ed9f..377eb80 100644
--- a/pkg/compiler/lib/src/serialization/node_indexer.dart
+++ b/pkg/compiler/lib/src/serialization/node_indexer.dart
@@ -387,7 +387,7 @@
 
   @override
   void defaultConstant(ir.Constant node) {
-    throw new UnimplementedError(
+    throw UnimplementedError(
         "Unexpected constant: $node (${node.runtimeType})");
   }
 }
diff --git a/pkg/compiler/lib/src/serialization/object_sink.dart b/pkg/compiler/lib/src/serialization/object_sink.dart
index 623e104..bbb91e3 100644
--- a/pkg/compiler/lib/src/serialization/object_sink.dart
+++ b/pkg/compiler/lib/src/serialization/object_sink.dart
@@ -22,12 +22,12 @@
 
   @override
   void _begin(String tag) {
-    _data.add(new Tag('begin:$tag'));
+    _data.add(Tag('begin:$tag'));
   }
 
   @override
   void _end(String tag) {
-    _data.add(new Tag('end:$tag'));
+    _data.add(Tag('end:$tag'));
   }
 
   @override
diff --git a/pkg/compiler/lib/src/serialization/object_source.dart b/pkg/compiler/lib/src/serialization/object_source.dart
index 2d61f96..07e07ad 100644
--- a/pkg/compiler/lib/src/serialization/object_source.dart
+++ b/pkg/compiler/lib/src/serialization/object_source.dart
@@ -24,7 +24,7 @@
 
   @override
   void _begin(String tag) {
-    Tag expectedTag = new Tag('begin:$tag');
+    Tag expectedTag = Tag('begin:$tag');
     Tag actualTag = _read();
     assert(
         expectedTag == actualTag,
@@ -34,7 +34,7 @@
 
   @override
   void _end(String tag) {
-    Tag expectedTag = new Tag('end:$tag');
+    Tag expectedTag = Tag('end:$tag');
     Tag actualTag = _read();
     assert(
         expectedTag == actualTag,
@@ -56,7 +56,7 @@
 
   @override
   String get _errorContext {
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
     for (int i = _index - 50; i < _index + 10; i++) {
       if (i >= 0 && i < _data.length) {
         if (i == _index - 1) {
diff --git a/pkg/compiler/lib/src/serialization/serialization.dart b/pkg/compiler/lib/src/serialization/serialization.dart
index 051be85..4fb6654 100644
--- a/pkg/compiler/lib/src/serialization/serialization.dart
+++ b/pkg/compiler/lib/src/serialization/serialization.dart
@@ -78,7 +78,7 @@
   /// This is a convenience method to be used together with
   /// [DataSource.readList].
   void writeList<E>(Iterable<E> values, void f(E value),
-      {bool allowNull: false});
+      {bool allowNull = false});
 
   /// Writes the boolean [value] to this data sink.
   void writeBool(bool value);
@@ -106,7 +106,7 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSource.readStrings].
-  void writeStrings(Iterable<String> values, {bool allowNull: false});
+  void writeStrings(Iterable<String> values, {bool allowNull = false});
 
   /// Writes the [map] from string to [V] values to this data sink, calling [f]
   /// to write each value to the data sink. If [allowNull] is `true`, [map] is
@@ -115,7 +115,7 @@
   /// This is a convenience method to be used together with
   /// [DataSource.readStringMap].
   void writeStringMap<V>(Map<String, V> map, void f(V value),
-      {bool allowNull: false});
+      {bool allowNull = false});
 
   /// Writes the enum value [value] to this data sink.
   // TODO(johnniwinther): Change the signature to
@@ -143,7 +143,7 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSource.readMemberNodes].
-  void writeMemberNodes(Iterable<ir.Member> values, {bool allowNull: false});
+  void writeMemberNodes(Iterable<ir.Member> values, {bool allowNull = false});
 
   /// Writes the [map] from references to kernel member nodes to [V] values to
   /// this data sink, calling [f] to write each value to the data sink. If
@@ -152,7 +152,7 @@
   /// This is a convenience method to be used together with
   /// [DataSource.readMemberNodeMap].
   void writeMemberNodeMap<V>(Map<ir.Member, V> map, void f(V value),
-      {bool allowNull: false});
+      {bool allowNull = false});
 
   /// Writes a kernel name node to this data sink.
   void writeName(ir.Name value);
@@ -179,7 +179,7 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSource.readTreeNodes].
-  void writeTreeNodes(Iterable<ir.TreeNode> values, {bool allowNull: false});
+  void writeTreeNodes(Iterable<ir.TreeNode> values, {bool allowNull = false});
 
   /// Writes the [map] from references to kernel tree nodes to [V] values to
   /// this data sink, calling [f] to write each value to the data sink. If
@@ -188,7 +188,7 @@
   /// This is a convenience method to be used together with
   /// [DataSource.readTreeNodeMap].
   void writeTreeNodeMap<V>(Map<ir.TreeNode, V> map, void f(V value),
-      {bool allowNull: false});
+      {bool allowNull = false});
 
   /// Writes a reference to the kernel tree node [value] in the known [context]
   /// to this data sink.
@@ -208,7 +208,7 @@
   /// This is a convenience method to be used together with
   /// [DataSource.readTreeNodesInContext].
   void writeTreeNodesInContext(Iterable<ir.TreeNode> values,
-      {bool allowNull: false});
+      {bool allowNull = false});
 
   /// Writes the [map] from references to kernel tree nodes to [V] values in the
   /// known [context] to this data sink, calling [f] to write each value to the
@@ -217,7 +217,7 @@
   /// This is a convenience method to be used together with
   /// [DataSource.readTreeNodeMapInContext].
   void writeTreeNodeMapInContext<V>(Map<ir.TreeNode, V> map, void f(V value),
-      {bool allowNull: false});
+      {bool allowNull = false});
 
   /// Writes a reference to the kernel type parameter node [value] to this data
   /// sink.
@@ -230,22 +230,22 @@
   /// This is a convenience method to be used together with
   /// [DataSource.readTypeParameterNodes].
   void writeTypeParameterNodes(Iterable<ir.TypeParameter> values,
-      {bool allowNull: false});
+      {bool allowNull = false});
 
   /// Writes the type [value] to this data sink. If [allowNull] is `true`,
   /// [value] is allowed to be `null`.
-  void writeDartType(DartType value, {bool allowNull: false});
+  void writeDartType(DartType value, {bool allowNull = false});
 
   /// Writes the type [values] to this data sink. If [allowNull] is `true`,
   /// [values] is allowed to be `null`.
   ///
   /// This is a convenience method to be used together with
   /// [DataSource.readDartTypes].
-  void writeDartTypes(Iterable<DartType> values, {bool allowNull: false});
+  void writeDartTypes(Iterable<DartType> values, {bool allowNull = false});
 
   /// Writes the kernel type node [value] to this data sink. If [allowNull] is
   /// `true`, [value] is allowed to be `null`.
-  void writeDartTypeNode(ir.DartType value, {bool allowNull: false});
+  void writeDartTypeNode(ir.DartType value, {bool allowNull = false});
 
   /// Writes the kernel type node [values] to this data sink. If [allowNull] is
   /// `true`, [values] is allowed to be `null`.
@@ -253,7 +253,7 @@
   /// This is a convenience method to be used together with
   /// [DataSource.readDartTypeNodes].
   void writeDartTypeNodes(Iterable<ir.DartType> values,
-      {bool allowNull: false});
+      {bool allowNull = false});
 
   /// Writes the source span [value] to this data sink.
   void writeSourceSpan(SourceSpan value);
@@ -275,7 +275,7 @@
   /// This is a convenience method to be used together with
   /// [DataSource.readLibraryMap].
   void writeLibraryMap<V>(Map<LibraryEntity, V> map, void f(V value),
-      {bool allowNull: false});
+      {bool allowNull = false});
 
   /// Writes a reference to the indexed class [value] to this data sink.
   void writeClass(IndexedClass value);
@@ -292,7 +292,7 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSource.readClasses].
-  void writeClasses(Iterable<ClassEntity> values, {bool allowNull: false});
+  void writeClasses(Iterable<ClassEntity> values, {bool allowNull = false});
 
   /// Writes the [map] from references to indexed classes to [V] values to this
   /// data sink, calling [f] to write each value to the data sink. If
@@ -301,7 +301,7 @@
   /// This is a convenience method to be used together with
   /// [DataSource.readClassMap].
   void writeClassMap<V>(Map<ClassEntity, V> map, void f(V value),
-      {bool allowNull: false});
+      {bool allowNull = false});
 
   /// Writes a reference to the indexed member [value] to this data sink.
   void writeMember(IndexedMember value);
@@ -318,7 +318,7 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSource.readMembers].
-  void writeMembers(Iterable<MemberEntity> values, {bool allowNull: false});
+  void writeMembers(Iterable<MemberEntity> values, {bool allowNull = false});
 
   /// Writes the [map] from references to indexed members to [V] values to this
   /// data sink, calling [f] to write each value to the data sink. If
@@ -328,7 +328,7 @@
   /// [DataSource.readMemberMap].
   void writeMemberMap<V>(
       Map<MemberEntity, V> map, void f(MemberEntity member, V value),
-      {bool allowNull: false});
+      {bool allowNull = false});
 
   /// Writes a reference to the indexed type variable [value] to this data sink.
   void writeTypeVariable(IndexedTypeVariable value);
@@ -340,7 +340,7 @@
   /// This is a convenience method to be used together with
   /// [DataSource.readTypeVariableMap].
   void writeTypeVariableMap<V>(Map<IndexedTypeVariable, V> map, void f(V value),
-      {bool allowNull: false});
+      {bool allowNull = false});
 
   /// Writes a reference to the local [value] to this data sink.
   void writeLocal(Local local);
@@ -357,7 +357,7 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSource.readLocals].
-  void writeLocals(Iterable<Local> values, {bool allowNull: false});
+  void writeLocals(Iterable<Local> values, {bool allowNull = false});
 
   /// Writes the [map] from references to locals to [V] values to this data
   /// sink, calling [f] to write each value to the data sink. If [allowNull] is
@@ -366,7 +366,7 @@
   /// This is a convenience method to be used together with
   /// [DataSource.readLocalMap].
   void writeLocalMap<V>(Map<Local, V> map, void f(V value),
-      {bool allowNull: false});
+      {bool allowNull = false});
 
   /// Writes the constant [value] to this data sink.
   void writeConstant(ConstantValue value);
@@ -379,7 +379,7 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSource.readConstants].
-  void writeConstants(Iterable<ConstantValue> values, {bool allowNull: false});
+  void writeConstants(Iterable<ConstantValue> values, {bool allowNull = false});
 
   /// Writes the [map] from constant values to [V] values to this data sink,
   /// calling [f] to write each value to the data sink. If [allowNull] is
@@ -388,7 +388,7 @@
   /// This is a convenience method to be used together with
   /// [DataSource.readConstantMap].
   void writeConstantMap<V>(Map<ConstantValue, V> map, void f(V value),
-      {bool allowNull: false});
+      {bool allowNull = false});
 
   /// Writes a double value to this data sink.
   void writeDoubleValue(double value);
@@ -410,7 +410,7 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSource.readImports].
-  void writeImports(Iterable<ImportEntity> values, {bool allowNull: false});
+  void writeImports(Iterable<ImportEntity> values, {bool allowNull = false});
 
   /// Writes the [map] from imports to [V] values to this data sink,
   /// calling [f] to write each value to the data sink. If [allowNull] is
@@ -419,7 +419,7 @@
   /// This is a convenience method to be used together with
   /// [DataSource.readImportMap].
   void writeImportMap<V>(Map<ImportEntity, V> map, void f(V value),
-      {bool allowNull: false});
+      {bool allowNull = false});
 
   /// Writes an abstract [value] to this data sink.
   ///
@@ -561,7 +561,7 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSink.writeList].
-  List<E> readList<E>(E f(), {bool emptyAsNull: false});
+  List<E> readList<E>(E f(), {bool emptyAsNull = false});
 
   /// Reads a boolean value from this data source.
   bool readBool();
@@ -590,7 +590,7 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSink.writeStrings].
-  List<String> readStrings({bool emptyAsNull: false});
+  List<String> readStrings({bool emptyAsNull = false});
 
   /// Reads a map from string values to [V] values from this data source,
   /// calling [f] to read each value from the data source. If [emptyAsNull] is
@@ -598,7 +598,7 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSink.writeStringMap].
-  Map<String, V> readStringMap<V>(V f(), {bool emptyAsNull: false});
+  Map<String, V> readStringMap<V>(V f(), {bool emptyAsNull = false});
 
   /// Reads an enum value from the list of enum [values] from this data source.
   ///
@@ -632,7 +632,7 @@
   /// This is a convenience method to be used together with
   /// [DataSink.writeMemberNodes].
   List<ir.Member> readMemberNodes<E extends ir.Member>(
-      {bool emptyAsNull: false});
+      {bool emptyAsNull = false});
 
   /// Reads a map from kernel member nodes to [V] values from this data source,
   /// calling [f] to read each value from the data source. If [emptyAsNull] is
@@ -641,7 +641,7 @@
   /// This is a convenience method to be used together with
   /// [DataSink.writeMemberNodeMap].
   Map<K, V> readMemberNodeMap<K extends ir.Member, V>(V f(),
-      {bool emptyAsNull: false});
+      {bool emptyAsNull = false});
 
   /// Reads a kernel name node from this data source.
   ir.Name readName();
@@ -665,7 +665,7 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSink.writeTreeNodes].
-  List<E> readTreeNodes<E extends ir.TreeNode>({bool emptyAsNull: false});
+  List<E> readTreeNodes<E extends ir.TreeNode>({bool emptyAsNull = false});
 
   /// Reads a map from kernel tree nodes to [V] values from this data source,
   /// calling [f] to read each value from the data source. If [emptyAsNull] is
@@ -674,7 +674,7 @@
   /// This is a convenience method to be used together with
   /// [DataSink.writeTreeNodeMap].
   Map<K, V> readTreeNodeMap<K extends ir.TreeNode, V>(V f(),
-      {bool emptyAsNull: false});
+      {bool emptyAsNull = false});
 
   /// Reads a reference to a kernel tree node in the known [context] from this
   /// data source.
@@ -691,7 +691,7 @@
   /// This is a convenience method to be used together with
   /// [DataSink.writeTreeNodesInContext].
   List<E> readTreeNodesInContext<E extends ir.TreeNode>(
-      {bool emptyAsNull: false});
+      {bool emptyAsNull = false});
 
   /// Reads a map from kernel tree nodes to [V] values in the known [context]
   /// from this data source, calling [f] to read each value from the data
@@ -701,7 +701,7 @@
   /// This is a convenience method to be used together with
   /// [DataSink.writeTreeNodeMapInContext].
   Map<K, V> readTreeNodeMapInContext<K extends ir.TreeNode, V>(V f(),
-      {bool emptyAsNull: false});
+      {bool emptyAsNull = false});
 
   /// Reads a reference to a kernel type parameter node from this data source.
   ir.TypeParameter readTypeParameterNode();
@@ -712,29 +712,29 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSink.writeTypeParameterNodes].
-  List<ir.TypeParameter> readTypeParameterNodes({bool emptyAsNull: false});
+  List<ir.TypeParameter> readTypeParameterNodes({bool emptyAsNull = false});
 
   /// Reads a type from this data source. If [allowNull], the returned type is
   /// allowed to be `null`.
-  DartType readDartType({bool allowNull: false});
+  DartType readDartType({bool allowNull = false});
 
   /// Reads a list of types from this data source. If [emptyAsNull] is `true`,
   /// `null` is returned instead of an empty list.
   ///
   /// This is a convenience method to be used together with
   /// [DataSink.writeDartTypes].
-  List<DartType> readDartTypes({bool emptyAsNull: false});
+  List<DartType> readDartTypes({bool emptyAsNull = false});
 
   /// Reads a kernel type node from this data source. If [allowNull], the
   /// returned type is allowed to be `null`.
-  ir.DartType readDartTypeNode({bool allowNull: false});
+  ir.DartType readDartTypeNode({bool allowNull = false});
 
   /// Reads a list of kernel type nodes from this data source. If [emptyAsNull]
   /// is `true`, `null` is returned instead of an empty list.
   ///
   /// This is a convenience method to be used together with
   /// [DataSink.writeDartTypeNodes].
-  List<ir.DartType> readDartTypeNodes({bool emptyAsNull: false});
+  List<ir.DartType> readDartTypeNodes({bool emptyAsNull = false});
 
   /// Reads a source span from this data source.
   SourceSpan readSourceSpan();
@@ -746,7 +746,7 @@
   /// source.
   IndexedLibrary readLibraryOrNull();
   Map<K, V> readLibraryMap<K extends LibraryEntity, V>(V f(),
-      {bool emptyAsNull: false});
+      {bool emptyAsNull = false});
 
   /// Reads a reference to an indexed class from this data source.
   IndexedClass readClass();
@@ -760,7 +760,7 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSink.writeClasses].
-  List<E> readClasses<E extends ClassEntity>({bool emptyAsNull: false});
+  List<E> readClasses<E extends ClassEntity>({bool emptyAsNull = false});
 
   /// Reads a map from indexed classes to [V] values from this data source,
   /// calling [f] to read each value from the data source. If [emptyAsNull] is
@@ -769,7 +769,7 @@
   /// This is a convenience method to be used together with
   /// [DataSink.writeClassMap].
   Map<K, V> readClassMap<K extends ClassEntity, V>(V f(),
-      {bool emptyAsNull: false});
+      {bool emptyAsNull = false});
 
   /// Reads a reference to an indexed member from this data source.
   IndexedMember readMember();
@@ -783,7 +783,7 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSink.writeMembers].
-  List<E> readMembers<E extends MemberEntity>({bool emptyAsNull: false});
+  List<E> readMembers<E extends MemberEntity>({bool emptyAsNull = false});
 
   /// Reads a map from indexed members to [V] values from this data source,
   /// calling [f] to read each value from the data source. If [emptyAsNull] is
@@ -792,7 +792,7 @@
   /// This is a convenience method to be used together with
   /// [DataSink.writeMemberMap].
   Map<K, V> readMemberMap<K extends MemberEntity, V>(V f(MemberEntity member),
-      {bool emptyAsNull: false});
+      {bool emptyAsNull = false});
 
   /// Reads a reference to an indexed type variable from this data source.
   IndexedTypeVariable readTypeVariable();
@@ -804,7 +804,7 @@
   /// This is a convenience method to be used together with
   /// [DataSink.writeTypeVariableMap].
   Map<K, V> readTypeVariableMap<K extends IndexedTypeVariable, V>(V f(),
-      {bool emptyAsNull: false});
+      {bool emptyAsNull = false});
 
   /// Reads a reference to a local from this data source.
   Local readLocal();
@@ -817,7 +817,7 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSink.writeLocals].
-  List<E> readLocals<E extends Local>({bool emptyAsNull: false});
+  List<E> readLocals<E extends Local>({bool emptyAsNull = false});
 
   /// Reads a map from locals to [V] values from this data source, calling [f]
   /// to read each value from the data source. If [emptyAsNull] is `true`,
@@ -825,7 +825,7 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSink.writeLocalMap].
-  Map<K, V> readLocalMap<K extends Local, V>(V f(), {bool emptyAsNull: false});
+  Map<K, V> readLocalMap<K extends Local, V>(V f(), {bool emptyAsNull = false});
 
   /// Reads a constant value from this data source.
   ConstantValue readConstant();
@@ -847,7 +847,7 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSink.writeConstants].
-  List<E> readConstants<E extends ConstantValue>({bool emptyAsNull: false});
+  List<E> readConstants<E extends ConstantValue>({bool emptyAsNull = false});
 
   /// Reads a map from constant values to [V] values from this data source,
   /// calling [f] to read each value from the data source. If [emptyAsNull] is
@@ -856,7 +856,7 @@
   /// This is a convenience method to be used together with
   /// [DataSink.writeConstantMap].
   Map<K, V> readConstantMap<K extends ConstantValue, V>(V f(),
-      {bool emptyAsNull: false});
+      {bool emptyAsNull = false});
 
   /// Reads a import from this data source.
   ImportEntity readImport();
@@ -869,7 +869,7 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSink.writeImports].
-  List<ImportEntity> readImports({bool emptyAsNull: false});
+  List<ImportEntity> readImports({bool emptyAsNull = false});
 
   /// Reads a map from imports to [V] values from this data source,
   /// calling [f] to read each value from the data source. If [emptyAsNull] is
@@ -877,7 +877,7 @@
   ///
   /// This is a convenience method to be used together with
   /// [DataSink.writeImportMap].
-  Map<ImportEntity, V> readImportMap<V>(V f(), {bool emptyAsNull: false});
+  Map<ImportEntity, V> readImportMap<V>(V f(), {bool emptyAsNull = false});
 
   /// Reads an [AbstractValue] from this data source.
   ///
diff --git a/pkg/compiler/lib/src/serialization/strategies.dart b/pkg/compiler/lib/src/serialization/strategies.dart
index 909e909..65c8824 100644
--- a/pkg/compiler/lib/src/serialization/strategies.dart
+++ b/pkg/compiler/lib/src/serialization/strategies.dart
@@ -38,8 +38,8 @@
   }
 
   ir.Component deserializeComponent(List<int> data) {
-    ir.Component component = new ir.Component();
-    new BinaryBuilder(data).readComponent(component);
+    ir.Component component = ir.Component();
+    BinaryBuilder(data).readComponent(component);
     return component;
   }
 
@@ -67,13 +67,13 @@
 class BytesInMemorySerializationStrategy extends SerializationStrategy<int> {
   final bool useDataKinds;
 
-  const BytesInMemorySerializationStrategy({this.useDataKinds: false});
+  const BytesInMemorySerializationStrategy({this.useDataKinds = false});
 
   @override
   List<int> serializeGlobalTypeInferenceResults(
       DataSourceIndices indices, GlobalTypeInferenceResults results) {
-    ByteSink byteSink = new ByteSink();
-    DataSink sink = new BinarySink(byteSink,
+    ByteSink byteSink = ByteSink();
+    DataSink sink = BinarySink(byteSink,
         useDataKinds: useDataKinds, importedIndices: indices);
     serializeGlobalTypeInferenceResultsToSink(results, sink);
     return byteSink.builder.takeBytes();
@@ -105,8 +105,8 @@
 
   @override
   List<int> serializeClosedWorld(JsClosedWorld closedWorld) {
-    ByteSink byteSink = new ByteSink();
-    DataSink sink = new BinarySink(byteSink, useDataKinds: useDataKinds);
+    ByteSink byteSink = ByteSink();
+    DataSink sink = BinarySink(byteSink, useDataKinds: useDataKinds);
     serializeClosedWorldToSink(closedWorld, sink);
     return byteSink.builder.takeBytes();
   }
@@ -119,7 +119,7 @@
       AbstractValueStrategy abstractValueStrategy,
       ir.Component component,
       List<int> data) {
-    DataSource source = new BinarySourceImpl(data, useDataKinds: useDataKinds);
+    DataSource source = BinarySourceImpl(data, useDataKinds: useDataKinds);
     var closedWorld = deserializeClosedWorldFromSource(options, reporter,
         environment, abstractValueStrategy, component, source);
     return ClosedWorldAndIndices(closedWorld, source.exportIndices());
@@ -129,18 +129,18 @@
 class BytesOnDiskSerializationStrategy extends SerializationStrategy<int> {
   final bool useDataKinds;
 
-  const BytesOnDiskSerializationStrategy({this.useDataKinds: false});
+  const BytesOnDiskSerializationStrategy({this.useDataKinds = false});
 
   @override
   List<int> serializeGlobalTypeInferenceResults(
       DataSourceIndices indices, GlobalTypeInferenceResults results) {
     Uri uri = Uri.base.resolve('world.data');
-    DataSink sink = new BinarySink(
-        new BinaryOutputSinkAdapter(new RandomAccessBinaryOutputSink(uri)),
+    DataSink sink = BinarySink(
+        BinaryOutputSinkAdapter(RandomAccessBinaryOutputSink(uri)),
         useDataKinds: useDataKinds,
         importedIndices: indices);
     serializeGlobalTypeInferenceResultsToSink(results, sink);
-    return new File.fromUri(uri).readAsBytesSync();
+    return File.fromUri(uri).readAsBytesSync();
   }
 
   @override
@@ -170,11 +170,11 @@
   @override
   List<int> serializeClosedWorld(JsClosedWorld closedWorld) {
     Uri uri = Uri.base.resolve('closed_world.data');
-    DataSink sink = new BinarySink(
-        new BinaryOutputSinkAdapter(new RandomAccessBinaryOutputSink(uri)),
+    DataSink sink = BinarySink(
+        BinaryOutputSinkAdapter(RandomAccessBinaryOutputSink(uri)),
         useDataKinds: useDataKinds);
     serializeClosedWorldToSink(closedWorld, sink);
-    return new File.fromUri(uri).readAsBytesSync();
+    return File.fromUri(uri).readAsBytesSync();
   }
 
   @override
@@ -185,7 +185,7 @@
       AbstractValueStrategy abstractValueStrategy,
       ir.Component component,
       List<int> data) {
-    DataSource source = new BinarySourceImpl(data, useDataKinds: useDataKinds);
+    DataSource source = BinarySourceImpl(data, useDataKinds: useDataKinds);
     var closedWorld = deserializeClosedWorldFromSource(options, reporter,
         environment, abstractValueStrategy, component, source);
     return ClosedWorldAndIndices(closedWorld, source.exportIndices());
@@ -196,14 +196,14 @@
     extends SerializationStrategy<Object> {
   final bool useDataKinds;
 
-  const ObjectsInMemorySerializationStrategy({this.useDataKinds: true});
+  const ObjectsInMemorySerializationStrategy({this.useDataKinds = true});
 
   @override
   List<Object> serializeGlobalTypeInferenceResults(
       DataSourceIndices indices, GlobalTypeInferenceResults results) {
     List<Object> data = [];
-    DataSink sink = new ObjectSink(data,
-        useDataKinds: useDataKinds, importedIndices: indices);
+    DataSink sink =
+        ObjectSink(data, useDataKinds: useDataKinds, importedIndices: indices);
     serializeGlobalTypeInferenceResultsToSink(results, sink);
     return data;
   }
@@ -235,7 +235,7 @@
   @override
   List<Object> serializeClosedWorld(JsClosedWorld closedWorld) {
     List<Object> data = [];
-    DataSink sink = new ObjectSink(data, useDataKinds: useDataKinds);
+    DataSink sink = ObjectSink(data, useDataKinds: useDataKinds);
     serializeClosedWorldToSink(closedWorld, sink);
     return data;
   }
@@ -248,7 +248,7 @@
       AbstractValueStrategy abstractValueStrategy,
       ir.Component component,
       List<Object> data) {
-    DataSource source = new ObjectSource(data, useDataKinds: useDataKinds);
+    DataSource source = ObjectSource(data, useDataKinds: useDataKinds);
     var closedWorld = deserializeClosedWorldFromSource(options, reporter,
         environment, abstractValueStrategy, component, source);
     return ClosedWorldAndIndices(closedWorld, source.exportIndices());
diff --git a/pkg/compiler/lib/src/serialization/task.dart b/pkg/compiler/lib/src/serialization/task.dart
index 479a2aa..d182e35 100644
--- a/pkg/compiler/lib/src/serialization/task.dart
+++ b/pkg/compiler/lib/src/serialization/task.dart
@@ -86,13 +86,13 @@
         AbstractValueStrategy abstractValueStrategy,
         ir.Component component,
         DataSource source) {
-  JsClosedWorld newClosedWorld = new JsClosedWorld.readFromDataSource(
+  JsClosedWorld newClosedWorld = JsClosedWorld.readFromDataSource(
       options, reporter, environment, abstractValueStrategy, component, source);
   GlobalLocalsMap newGlobalLocalsMap = GlobalLocalsMap.readFromDataSource(
       newClosedWorld.closureDataLookup.getEnclosingMember, source);
   InferredData newInferredData =
-      new InferredData.readFromDataSource(source, newClosedWorld);
-  return new GlobalTypeInferenceResults.readFromDataSource(
+      InferredData.readFromDataSource(source, newClosedWorld);
+  return GlobalTypeInferenceResults.readFromDataSource(
       source,
       newClosedWorld.elementMap,
       newClosedWorld,
@@ -112,7 +112,7 @@
     AbstractValueStrategy abstractValueStrategy,
     ir.Component component,
     DataSource source) {
-  return new JsClosedWorld.readFromDataSource(
+  return JsClosedWorld.readFromDataSource(
       options, reporter, environment, abstractValueStrategy, component, source);
 }
 
@@ -147,8 +147,8 @@
       _reporter.log('Writing dill to ${_options.outputUri}');
       api.BinaryOutputSink dillOutput =
           _outputProvider.createBinarySink(_options.outputUri);
-      BinaryOutputSinkAdapter irSink = new BinaryOutputSinkAdapter(dillOutput);
-      ir.BinaryPrinter printer = new ir.BinaryPrinter(irSink);
+      BinaryOutputSinkAdapter irSink = BinaryOutputSinkAdapter(dillOutput);
+      ir.BinaryPrinter printer = ir.BinaryPrinter(irSink);
       printer.writeComponentFile(component);
       irSink.close();
     });
@@ -159,7 +159,7 @@
       _reporter.log('Reading dill from ${_options.entryPoint}');
       api.Input<List<int>> dillInput = await _provider
           .readFromUri(_options.entryPoint, inputKind: api.InputKind.binary);
-      ir.Component component = new ir.Component();
+      ir.Component component = ir.Component();
       // Not using growable lists saves memory.
       ir.BinaryBuilder(dillInput.data,
               useGrowableLists: false, stringInterner: _stringInterner)
@@ -259,7 +259,7 @@
       _reporter.log('Writing closed world to ${_options.writeClosedWorldUri}');
       api.BinaryOutputSink dataOutput =
           _outputProvider.createBinarySink(_options.writeClosedWorldUri);
-      DataSink sink = new BinarySink(new BinaryOutputSinkAdapter(dataOutput));
+      DataSink sink = BinarySink(BinaryOutputSinkAdapter(dataOutput));
       serializeClosedWorldToSink(closedWorld, sink);
     });
   }
@@ -330,7 +330,7 @@
       _reporter.log('Writing data to ${_options.writeDataUri}');
       api.BinaryOutputSink dataOutput =
           _outputProvider.createBinarySink(_options.writeDataUri);
-      DataSink sink = new BinarySink(new BinaryOutputSinkAdapter(dataOutput));
+      DataSink sink = BinarySink(BinaryOutputSinkAdapter(dataOutput));
       serializeGlobalTypeInferenceResultsToSinkLegacy(results, sink);
     });
   }
@@ -373,10 +373,10 @@
     measureSubtask('serialize codegen', () {
       Uri uri = Uri.parse('${_options.writeCodegenUri}$shard');
       api.BinaryOutputSink dataOutput = _outputProvider.createBinarySink(uri);
-      DataSink sink = new BinarySink(new BinaryOutputSinkAdapter(dataOutput));
+      DataSink sink = BinarySink(BinaryOutputSinkAdapter(dataOutput));
       _reporter.log('Writing data to ${uri}');
       sink.registerEntityWriter(entityWriter);
-      sink.registerCodegenWriter(new CodegenWriterImpl(closedWorld));
+      sink.registerCodegenWriter(CodegenWriterImpl(closedWorld));
       sink.writeMemberMap(
           results,
           (MemberEntity member, CodegenResult result) =>
@@ -405,7 +405,7 @@
         dataInput.release();
       });
     }
-    return new DeserializedCodegenResults(
+    return DeserializedCodegenResults(
         globalTypeInferenceResults, codegenInputs, results);
   }
 
@@ -423,7 +423,7 @@
       List<ModularName> modularNames = [];
       List<ModularExpression> modularExpressions = [];
       CodegenReader reader =
-          new CodegenReaderImpl(closedWorld, modularNames, modularExpressions);
+          CodegenReaderImpl(closedWorld, modularNames, modularExpressions);
       source.registerCodegenReader(reader);
       CodegenResult result = CodegenResult.readFromDataSource(
           source, modularNames, modularExpressions);
diff --git a/pkg/compiler/lib/src/world.dart b/pkg/compiler/lib/src/world.dart
index 72b3ec0..f3d9ab1 100644
--- a/pkg/compiler/lib/src/world.dart
+++ b/pkg/compiler/lib/src/world.dart
@@ -13,7 +13,6 @@
         KCommonElements,
         KElementEnvironment;
 import 'deferred_load/output_unit.dart';
-import 'diagnostics/diagnostic_listener.dart';
 import 'elements/entities.dart';
 import 'elements/names.dart';
 import 'elements/types.dart';
diff --git a/pkg/compiler/test/annotations/annotations_test.dart b/pkg/compiler/test/annotations/annotations_test.dart
index a4424c6..2f81123 100644
--- a/pkg/compiler/test/annotations/annotations_test.dart
+++ b/pkg/compiler/test/annotations/annotations_test.dart
@@ -10,7 +10,6 @@
 import 'package:compiler/src/closure.dart';
 import 'package:compiler/src/common.dart';
 import 'package:compiler/src/compiler.dart';
-import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/js_backend/annotations.dart';
 import 'package:compiler/src/js_model/element_map.dart';
diff --git a/pkg/compiler/test/codegen/codegen_test_helper.dart b/pkg/compiler/test/codegen/codegen_test_helper.dart
index b2bb6b1..51b1b78 100644
--- a/pkg/compiler/test/codegen/codegen_test_helper.dart
+++ b/pkg/compiler/test/codegen/codegen_test_helper.dart
@@ -10,7 +10,6 @@
 import 'package:compiler/src/common.dart';
 import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/compiler.dart';
-import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/js_model/element_map.dart';
 import 'package:compiler/src/js_model/js_strategy.dart';
diff --git a/pkg/compiler/test/codegen/model_test.dart b/pkg/compiler/test/codegen/model_test.dart
index ba7376d..9862c60 100644
--- a/pkg/compiler/test/codegen/model_test.dart
+++ b/pkg/compiler/test/codegen/model_test.dart
@@ -11,7 +11,6 @@
 import 'package:compiler/src/common.dart';
 import 'package:compiler/src/common/codegen.dart';
 import 'package:compiler/src/compiler.dart';
-import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/js/js.dart' as js;
 import 'package:compiler/src/js_emitter/model.dart';
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_constant3/lib1.dart b/pkg/compiler/test/deferred_loading/data/deferred_constant3/lib1.dart
index 54f922e..a7d086f 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_constant3/lib1.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_constant3/lib1.dart
@@ -14,10 +14,10 @@
 /*member: m1:
  constants=[
   ConstructedConstant(C(x=IntConstant(1)))=main{},
-  ConstructedConstant(C(x=IntConstant(2)))=1{l1},
-  ConstructedConstant(C(x=IntConstant(3)))=1{l1},
-  ConstructedConstant(C(x=IntConstant(4)))=2{l2}],
- member_unit=1{l1}
+  ConstructedConstant(C(x=IntConstant(2)))=2{l1},
+  ConstructedConstant(C(x=IntConstant(3)))=2{l1},
+  ConstructedConstant(C(x=IntConstant(4)))=1{l2}],
+ member_unit=2{l1}
 */
 m1() async {
   print(c2);
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_constant3/lib2.dart b/pkg/compiler/test/deferred_loading/data/deferred_constant3/lib2.dart
index 51392c1..39553ee 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_constant3/lib2.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_constant3/lib2.dart
@@ -15,9 +15,9 @@
 /*member: m2:
  constants=[
   ConstructedConstant(C(x=IntConstant(1)))=main{},
-  ConstructedConstant(C(x=IntConstant(4)))=2{l2},
-  ConstructedConstant(C(x=IntConstant(5)))=2{l2}],
- member_unit=2{l2}
+  ConstructedConstant(C(x=IntConstant(4)))=1{l2},
+  ConstructedConstant(C(x=IntConstant(5)))=1{l2}],
+ member_unit=1{l2}
 */
 m2() async {
   print(c3);
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_constant3/main.dart b/pkg/compiler/test/deferred_loading/data/deferred_constant3/main.dart
index 8f1f9f3..4fd5d66 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_constant3/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_constant3/main.dart
@@ -4,11 +4,11 @@
 
 /*library: 
  a_pre_fragments=[
-  p1: {units: [1{l1}], usedBy: [], needs: []},
-  p2: {units: [2{l2}], usedBy: [], needs: []}],
+  p1: {units: [2{l1}], usedBy: [], needs: []},
+  p2: {units: [1{l2}], usedBy: [], needs: []}],
  b_finalized_fragments=[
-  f1: [1{l1}],
-  f2: [2{l2}]],
+  f1: [2{l1}],
+  f2: [1{l2}]],
  c_steps=[
   l1=(f1),
   l2=(f2)]
@@ -24,7 +24,7 @@
 /*member: main:
  constants=[
   ConstructedConstant(C(x=IntConstant(1)))=main{},
-  ConstructedConstant(C(x=IntConstant(2)))=1{l1}],
+  ConstructedConstant(C(x=IntConstant(2)))=2{l1}],
  member_unit=main{}
 */
 main() async {
diff --git a/pkg/compiler/test/inference/callers_test.dart b/pkg/compiler/test/inference/callers_test.dart
index 421ff24..8f9250d 100644
--- a/pkg/compiler/test/inference/callers_test.dart
+++ b/pkg/compiler/test/inference/callers_test.dart
@@ -9,7 +9,6 @@
 import 'package:compiler/src/closure.dart';
 import 'package:compiler/src/common.dart';
 import 'package:compiler/src/compiler.dart';
-import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/inferrer/type_graph_inferrer.dart';
 import 'package:compiler/src/js_model/element_map.dart';
diff --git a/pkg/compiler/test/inference/inference_data_test.dart b/pkg/compiler/test/inference/inference_data_test.dart
index 1ad073f..d550d3b 100644
--- a/pkg/compiler/test/inference/inference_data_test.dart
+++ b/pkg/compiler/test/inference/inference_data_test.dart
@@ -10,7 +10,6 @@
 import 'package:compiler/src/closure.dart';
 import 'package:compiler/src/common.dart';
 import 'package:compiler/src/compiler.dart';
-import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/js_backend/inferred_data.dart';
 import 'package:compiler/src/js_model/element_map.dart';
diff --git a/pkg/compiler/test/inference/inference_test_helper.dart b/pkg/compiler/test/inference/inference_test_helper.dart
index 231a108..79144b9 100644
--- a/pkg/compiler/test/inference/inference_test_helper.dart
+++ b/pkg/compiler/test/inference/inference_test_helper.dart
@@ -9,7 +9,6 @@
 import 'package:compiler/src/closure.dart';
 import 'package:compiler/src/common.dart';
 import 'package:compiler/src/compiler.dart';
-import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/inferrer/typemasks/masks.dart';
 import 'package:compiler/src/inferrer/types.dart';
diff --git a/pkg/compiler/test/inference/side_effects_test.dart b/pkg/compiler/test/inference/side_effects_test.dart
index f6b92f1..53a8d48 100644
--- a/pkg/compiler/test/inference/side_effects_test.dart
+++ b/pkg/compiler/test/inference/side_effects_test.dart
@@ -9,7 +9,6 @@
 import 'package:compiler/src/closure.dart';
 import 'package:compiler/src/common.dart';
 import 'package:compiler/src/compiler.dart';
-import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/js_backend/inferred_data.dart';
 import 'package:compiler/src/js_model/element_map.dart';
diff --git a/pkg/compiler/test/inlining/inlining_test.dart b/pkg/compiler/test/inlining/inlining_test.dart
index 717045f..77b1501 100644
--- a/pkg/compiler/test/inlining/inlining_test.dart
+++ b/pkg/compiler/test/inlining/inlining_test.dart
@@ -9,7 +9,6 @@
 import 'package:compiler/src/closure.dart';
 import 'package:compiler/src/common.dart';
 import 'package:compiler/src/compiler.dart';
-import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/js_model/element_map.dart';
 import 'package:compiler/src/js_model/js_strategy.dart';
diff --git a/pkg/compiler/test/optimization/optimization_test.dart b/pkg/compiler/test/optimization/optimization_test.dart
index c89e863..c3e5d37 100644
--- a/pkg/compiler/test/optimization/optimization_test.dart
+++ b/pkg/compiler/test/optimization/optimization_test.dart
@@ -11,7 +11,6 @@
 import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/common.dart';
 import 'package:compiler/src/compiler.dart';
-import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/js_model/element_map.dart';
 import 'package:compiler/src/js_model/js_strategy.dart';
diff --git a/pkg/compiler/test/rti/rti_emission_test_helper.dart b/pkg/compiler/test/rti/rti_emission_test_helper.dart
index fbded89..aa48230 100644
--- a/pkg/compiler/test/rti/rti_emission_test_helper.dart
+++ b/pkg/compiler/test/rti/rti_emission_test_helper.dart
@@ -10,7 +10,6 @@
 import 'package:compiler/src/closure.dart';
 import 'package:compiler/src/common.dart';
 import 'package:compiler/src/compiler.dart';
-import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/js_backend/runtime_types.dart';
 import 'package:compiler/src/js_emitter/model.dart';
diff --git a/pkg/compiler/test/rti/rti_need_test_helper.dart b/pkg/compiler/test/rti/rti_need_test_helper.dart
index c59c219..f72a9f4 100644
--- a/pkg/compiler/test/rti/rti_need_test_helper.dart
+++ b/pkg/compiler/test/rti/rti_need_test_helper.dart
@@ -11,7 +11,6 @@
 import 'package:compiler/src/common.dart';
 import 'package:compiler/src/common_elements.dart';
 import 'package:compiler/src/compiler.dart';
-import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/elements/types.dart';
 import 'package:compiler/src/js_backend/runtime_types_resolution.dart';
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart
index a20eb79..422caec 100644
--- a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart
@@ -21,7 +21,6 @@
 import 'package:kernel/ast.dart' show Component, Library;
 import 'package:kernel/target/targets.dart';
 import 'package:path/path.dart' as p;
-import 'package:source_maps/parser.dart' as source_maps;
 import 'package:source_maps/source_maps.dart' as source_maps;
 import 'package:test/test.dart';
 import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart'
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index 0fe5e02..159cbab 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -10,7 +10,6 @@
     show ScannerConfiguration;
 
 import 'package:front_end/src/api_prototype/experimental_flags.dart';
-import 'package:front_end/src/api_prototype/front_end.dart';
 
 import 'package:front_end/src/api_prototype/lowering_predicates.dart'
     show isExtensionThisName;
diff --git a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
index 6978d00..d012efa 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -24,7 +24,6 @@
 import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/clone.dart';
 import 'package:kernel/core_types.dart';
-import 'package:kernel/kernel.dart';
 import 'package:kernel/src/const_canonical_type.dart';
 import 'package:kernel/src/legacy_erasure.dart';
 import 'package:kernel/src/norm.dart';
diff --git a/pkg/front_end/test/id_testing/id_testing_test.dart b/pkg/front_end/test/id_testing/id_testing_test.dart
index c7c8b83..f3f465f 100644
--- a/pkg/front_end/test/id_testing/id_testing_test.dart
+++ b/pkg/front_end/test/id_testing/id_testing_test.dart
@@ -7,7 +7,6 @@
 import 'package:_fe_analyzer_shared/src/testing/id.dart' show ActualData, Id;
 import 'package:_fe_analyzer_shared/src/testing/id_testing.dart'
     show DataInterpreter, StringDataInterpreter, runTests;
-import 'package:_fe_analyzer_shared/src/testing/id_testing.dart';
 import 'dart:io' show Directory, Platform;
 import 'package:front_end/src/fasta/messages.dart' show FormattedMessage;
 import 'package:front_end/src/testing/id_testing_helper.dart'
diff --git a/pkg/front_end/test/id_tests/assigned_variables_test.dart b/pkg/front_end/test/id_tests/assigned_variables_test.dart
index 8a54a08..53e04d5 100644
--- a/pkg/front_end/test/id_tests/assigned_variables_test.dart
+++ b/pkg/front_end/test/id_tests/assigned_variables_test.dart
@@ -11,7 +11,6 @@
     show ActualData, Id, IdKind;
 import 'package:_fe_analyzer_shared/src/testing/id_testing.dart'
     show DataInterpreter, runTests;
-import 'package:_fe_analyzer_shared/src/testing/id_testing.dart';
 import 'package:front_end/src/fasta/builder/member_builder.dart';
 import 'package:front_end/src/fasta/source/source_loader.dart';
 
diff --git a/pkg/front_end/test/id_tests/constant_test.dart b/pkg/front_end/test/id_tests/constant_test.dart
index 0b2db7e..cdf28c3 100644
--- a/pkg/front_end/test/id_tests/constant_test.dart
+++ b/pkg/front_end/test/id_tests/constant_test.dart
@@ -8,7 +8,6 @@
 import 'package:_fe_analyzer_shared/src/testing/id.dart' show ActualData, Id;
 import 'package:_fe_analyzer_shared/src/testing/id_testing.dart'
     show DataInterpreter, StringDataInterpreter, runTests;
-import 'package:_fe_analyzer_shared/src/testing/id_testing.dart';
 import 'package:front_end/src/testing/id_testing_helper.dart'
     show
         CfeDataExtractor,
diff --git a/pkg/front_end/test/id_tests/inferred_type_arguments_test.dart b/pkg/front_end/test/id_tests/inferred_type_arguments_test.dart
index 0670441..32f5603 100644
--- a/pkg/front_end/test/id_tests/inferred_type_arguments_test.dart
+++ b/pkg/front_end/test/id_tests/inferred_type_arguments_test.dart
@@ -8,7 +8,6 @@
 import 'package:_fe_analyzer_shared/src/testing/id.dart' show ActualData, Id;
 import 'package:_fe_analyzer_shared/src/testing/id_testing.dart'
     show DataInterpreter, runTests;
-import 'package:_fe_analyzer_shared/src/testing/id_testing.dart';
 import 'package:front_end/src/fasta/builder/member_builder.dart';
 import 'package:front_end/src/fasta/type_inference/type_inference_engine.dart';
 import 'package:front_end/src/testing/id_testing_helper.dart';
diff --git a/pkg/front_end/test/id_tests/inferred_variable_types_test.dart b/pkg/front_end/test/id_tests/inferred_variable_types_test.dart
index 8403ae5..3049cb9 100644
--- a/pkg/front_end/test/id_tests/inferred_variable_types_test.dart
+++ b/pkg/front_end/test/id_tests/inferred_variable_types_test.dart
@@ -8,7 +8,6 @@
 import 'package:_fe_analyzer_shared/src/testing/id.dart' show ActualData, Id;
 import 'package:_fe_analyzer_shared/src/testing/id_testing.dart'
     show DataInterpreter, runTests;
-import 'package:_fe_analyzer_shared/src/testing/id_testing.dart';
 import 'package:front_end/src/fasta/builder/member_builder.dart';
 import 'package:front_end/src/fasta/type_inference/type_inference_engine.dart';
 import 'package:front_end/src/testing/id_testing_helper.dart';
diff --git a/pkg/front_end/test/id_tests/reachability_test.dart b/pkg/front_end/test/id_tests/reachability_test.dart
index 7cd2ab7..288bee9 100644
--- a/pkg/front_end/test/id_tests/reachability_test.dart
+++ b/pkg/front_end/test/id_tests/reachability_test.dart
@@ -8,7 +8,6 @@
 import 'package:_fe_analyzer_shared/src/testing/id.dart' show ActualData, Id;
 import 'package:_fe_analyzer_shared/src/testing/id_testing.dart'
     show DataInterpreter, runTests;
-import 'package:_fe_analyzer_shared/src/testing/id_testing.dart';
 import 'package:front_end/src/testing/id_testing_helper.dart';
 import 'package:front_end/src/fasta/builder/member_builder.dart';
 import 'package:front_end/src/fasta/source/source_loader.dart';
diff --git a/pkg/front_end/test/id_tests/type_promotion_test.dart b/pkg/front_end/test/id_tests/type_promotion_test.dart
index 87d3d38..52e0ec2 100644
--- a/pkg/front_end/test/id_tests/type_promotion_test.dart
+++ b/pkg/front_end/test/id_tests/type_promotion_test.dart
@@ -8,7 +8,6 @@
 import 'package:_fe_analyzer_shared/src/testing/id.dart' show ActualData, Id;
 import 'package:_fe_analyzer_shared/src/testing/id_testing.dart'
     show DataInterpreter, runTests;
-import 'package:_fe_analyzer_shared/src/testing/id_testing.dart';
 import 'package:front_end/src/testing/id_testing_helper.dart';
 import 'package:front_end/src/testing/id_testing_utils.dart';
 import 'package:kernel/ast.dart' hide Variance;
diff --git a/pkg/front_end/test/id_tests/why_not_promoted_test.dart b/pkg/front_end/test/id_tests/why_not_promoted_test.dart
index 603cd8c..8b8d215 100644
--- a/pkg/front_end/test/id_tests/why_not_promoted_test.dart
+++ b/pkg/front_end/test/id_tests/why_not_promoted_test.dart
@@ -9,7 +9,6 @@
 import 'package:_fe_analyzer_shared/src/testing/id.dart' show ActualData, Id;
 import 'package:_fe_analyzer_shared/src/testing/id_testing.dart'
     show DataInterpreter, runTests;
-import 'package:_fe_analyzer_shared/src/testing/id_testing.dart';
 import 'package:front_end/src/fasta/builder/member_builder.dart';
 import 'package:front_end/src/fasta/type_inference/type_inference_engine.dart';
 import 'package:front_end/src/testing/id_testing_helper.dart';
diff --git a/pkg/front_end/test/lint_suite.dart b/pkg/front_end/test/lint_suite.dart
index 8e11c97..af61e9a 100644
--- a/pkg/front_end/test/lint_suite.dart
+++ b/pkg/front_end/test/lint_suite.dart
@@ -15,8 +15,6 @@
 
 import 'package:_fe_analyzer_shared/src/scanner/token.dart' show Token;
 
-import 'package:_fe_analyzer_shared/src/scanner/token.dart';
-
 import 'package:_fe_analyzer_shared/src/scanner/utf8_bytes_scanner.dart'
     show Utf8BytesScanner;
 
diff --git a/pkg/front_end/test/predicates/predicate_test.dart b/pkg/front_end/test/predicates/predicate_test.dart
index 98ed0cb..2660e72 100644
--- a/pkg/front_end/test/predicates/predicate_test.dart
+++ b/pkg/front_end/test/predicates/predicate_test.dart
@@ -8,7 +8,6 @@
 import 'package:_fe_analyzer_shared/src/testing/id.dart';
 import 'package:_fe_analyzer_shared/src/testing/id_testing.dart'
     show DataInterpreter, runTests;
-import 'package:_fe_analyzer_shared/src/testing/id_testing.dart';
 import 'package:_fe_analyzer_shared/src/testing/features.dart';
 import 'package:front_end/src/api_prototype/experimental_flags.dart';
 import 'package:front_end/src/base/nnbd_mode.dart';
diff --git a/pkg/front_end/tool/perf.dart b/pkg/front_end/tool/perf.dart
index 7844f2b..be32427 100644
--- a/pkg/front_end/tool/perf.dart
+++ b/pkg/front_end/tool/perf.dart
@@ -28,7 +28,6 @@
 import 'package:analyzer/src/file_system/file_system.dart';
 import 'package:analyzer/src/generated/parser.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/generated/source_io.dart';
 import 'package:analyzer/src/source/package_map_resolver.dart';
 import 'package:path/path.dart' as path;
 
diff --git a/pkg/kernel/bin/split.dart b/pkg/kernel/bin/split.dart
index 90f1028..149f28e 100755
--- a/pkg/kernel/bin/split.dart
+++ b/pkg/kernel/bin/split.dart
@@ -8,7 +8,6 @@
 
 import 'package:kernel/ast.dart';
 import 'package:kernel/binary/ast_to_binary.dart';
-import 'package:kernel/kernel.dart';
 import 'package:kernel/src/tool/command_line_util.dart';
 
 void usage() {
diff --git a/pkg/kernel/lib/transformations/empty.dart b/pkg/kernel/lib/transformations/empty.dart
index 4d7ccff..66ab05c 100644
--- a/pkg/kernel/lib/transformations/empty.dart
+++ b/pkg/kernel/lib/transformations/empty.dart
@@ -5,7 +5,6 @@
 library kernel.transformations.empty;
 
 import '../ast.dart';
-import '../kernel.dart';
 
 Component transformComponent(Component component) {
   new EmptyTransformer().visitComponent(component);
diff --git a/pkg/kernel/lib/transformations/scanner.dart b/pkg/kernel/lib/transformations/scanner.dart
index ec75cbd..9148fa7 100644
--- a/pkg/kernel/lib/transformations/scanner.dart
+++ b/pkg/kernel/lib/transformations/scanner.dart
@@ -5,7 +5,6 @@
 library kernel.transformations.scanner;
 
 import '../ast.dart';
-import '../kernel.dart';
 
 abstract class Scanner<X extends TreeNode?, Y extends TreeNode?> {
   final Scanner<Y, TreeNode?>? next;
diff --git a/pkg/kernel/lib/transformations/value_class.dart b/pkg/kernel/lib/transformations/value_class.dart
index cbb27dc..2a96ffd 100644
--- a/pkg/kernel/lib/transformations/value_class.dart
+++ b/pkg/kernel/lib/transformations/value_class.dart
@@ -7,7 +7,6 @@
 import 'package:kernel/type_environment.dart';
 
 import '../ast.dart';
-import '../kernel.dart';
 import '../core_types.dart' show CoreTypes;
 import '../class_hierarchy.dart' show ClassHierarchy;
 import './scanner.dart';
diff --git a/runtime/tools/dartfuzz/dartfuzz_test.dart b/runtime/tools/dartfuzz/dartfuzz_test.dart
index fb826ff..7ba2f79 100644
--- a/runtime/tools/dartfuzz/dartfuzz_test.dart
+++ b/runtime/tools/dartfuzz/dartfuzz_test.dart
@@ -356,8 +356,7 @@
       }
       // Report every 10 minutes.
       if ((current_time - report_time) > (10 * 60 * 1000)) {
-        print(
-            '\n$isolate: busy @$numTests ${current_time - start_time} seconds....');
+        print('\n$isolate: busy @$numTests ${current_time - start_time}ms....');
         report_time = current_time;
       }
     }
diff --git a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/classes.dart b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/classes.dart
index 7e019bf..5a5d299 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/classes.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/classes.dart
@@ -107,11 +107,13 @@
 @JSExportName('implements')
 final implements_ = JS('', 'Symbol("implements")');
 
-/// Either `null` if `clazz` doesn't directly implement any interfaces or a
-/// list of type objects if it does.  Note, indirectly (e.g., via superclass)
-/// implemented interfaces aren't included here.
-/// See compiler.dart for when/how it is emitted.
-List Function()? getImplements(clazz) => JS(
+/// Returns `null` if [clazz] doesn't directly implement any interfaces or a
+/// a `Function` that when called produces a `List` of the type objects
+/// [clazz] implements.
+///
+/// Note, indirectly (e.g., via superclass) implemented interfaces aren't
+/// included here. See compiler.dart for when/how it is emitted.
+List<Object> Function()? getImplements(clazz) => JS(
     '',
     'Object.hasOwnProperty.call(#, #) ? #[#] : null',
     clazz,
diff --git a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart
index 3c0267d..c92852f 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart
@@ -839,6 +839,26 @@
   toString() => name;
 }
 
+/// A helper data class for the subtype check algorithm to represent a generic
+/// function type variable with its bound.
+///
+/// Instances of this class are created during subtype check operations to pass
+/// information deeper into the algorithm. They are not canonicalized and should
+/// be discarded after use.
+class TypeVariableForSubtype extends DartType {
+  /// The position of this type variable in the type variable list of a generic
+  /// function.
+  final int index;
+
+  /// The bound for this type variable.
+  ///
+  /// Only nullable to avoid the cost of a late field within the subtype check.
+  /// Should not be null after initial creation algorithm is complete.
+  DartType? bound;
+
+  TypeVariableForSubtype(this.index);
+}
+
 class Variance {
   static const int unrelated = 0;
   static const int covariant = 1;
@@ -889,6 +909,7 @@
 
 class GenericFunctionType extends AbstractFunctionType {
   final _instantiateTypeParts;
+  @notNull
   final int formalCount;
   final _instantiateTypeBounds;
   final List<TypeVariable> _typeFormals;
@@ -1166,7 +1187,9 @@
 })()''');
 
 /// Returns true if [ft1] <: [ft2].
-_isFunctionSubtype(ft1, ft2, @notNull bool strictMode) => JS('', '''(() => {
+@notNull
+bool _isFunctionSubtype(ft1, ft2, @notNull bool strictMode) =>
+    JS<bool>('!', '''(() => {
   let ret1 = $ft1.returnType;
   let ret2 = $ft2.returnType;
 
@@ -1257,6 +1280,14 @@
   return $_isSubtype(ret1, ret2, strictMode);
 })()''');
 
+/// Number of generic function type variables encountered so far during a
+/// subtype check.
+///
+/// This continues to increase through nested generic function types but should
+/// always be reset before performing a new subtype check.
+@notNull
+var _typeVariableCount = 0;
+
 /// Returns true if [t1] <: [t2].
 @notNull
 bool isSubtypeOf(@notNull t1, @notNull t2) {
@@ -1265,9 +1296,12 @@
   var map = JS<Object>('!', '#[#]', t1, _subtypeCache);
   bool result = JS('', '#.get(#)', map, t2);
   if (JS('!', '# !== void 0', result)) return result;
-
+  // Reset count before performing subtype check.
+  _typeVariableCount = 0;
   var validSubtype = _isSubtype(t1, t2, true);
   if (!validSubtype && !compileTimeFlag('soundNullSafety')) {
+    // Reset count before performing subtype check.
+    _typeVariableCount = 0;
     validSubtype = _isSubtype(t1, t2, false);
     if (validSubtype) {
       // TODO(nshahan) Need more information to be helpful here.
@@ -1339,45 +1373,44 @@
 }
 
 @notNull
-bool _isSubtype(t1, t2, @notNull bool strictMode) => JS<bool>('!', '''(() => {
-  if (!$strictMode) {
+bool _isSubtype(t1, t2, @notNull bool strictMode) {
+  if (!strictMode) {
     // Strip nullable types when performing check in weak mode.
     // TODO(nshahan) Investigate stripping off legacy types as well.
-    if (${_jsInstanceOf(t1, NullableType)}) {
-      t1 = t1.type;
+    if (_jsInstanceOf(t1, NullableType)) {
+      t1 = JS<NullableType>('!', '#', t1).type;
     }
-    if (${_jsInstanceOf(t2, NullableType)}) {
-      t2 = t2.type;
+    if (_jsInstanceOf(t2, NullableType)) {
+      t2 = JS<NullableType>('!', '#', t2).type;
     }
   }
-  if ($t1 === $t2) {
+
+  if (JS<bool>('!', '# === #', t1, t2)) {
     return true;
   }
 
   // Trivially true, "Right Top" or "Left Bottom".
-  if (${_isTop(t2)} || ${_isBottom(t1, strictMode)}) {
+  if (_isTop(t2) || _isBottom(t1, strictMode)) {
     return true;
   }
 
   // "Left Top".
-  if (${_equalType(t1, dynamic)} || $t1 === $void_) {
-    return $_isSubtype($nullable($Object), $t2, $strictMode);
+  if (_equalType(t1, dynamic) || JS<bool>('!', '# === #', t1, void_)) {
+    return _isSubtype(typeRep<Object?>(), t2, strictMode);
   }
 
   // "Right Object".
-  if (${_equalType(t2, Object)}) {
-    // TODO(nshahan) Need to handle type variables.
-    // https://github.com/dart-lang/sdk/issues/38816
-    if (${_isFutureOr(t1)}) {
-      let t1TypeArg = ${getGenericArgs(t1)}[0];
-      return $_isSubtype(t1TypeArg, $Object, $strictMode);
+  if (_equalType(t2, Object)) {
+    if (_isFutureOr(t1)) {
+      var t1TypeArg = JS('', '#[0]', getGenericArgs(t1));
+      return _isSubtype(t1TypeArg, typeRep<Object>(), strictMode);
     }
 
-    if (${_jsInstanceOf(t1, LegacyType)}) {
-      return $_isSubtype(t1.type, t2, $strictMode);
+    if (_jsInstanceOf(t1, LegacyType)) {
+      return _isSubtype(JS<LegacyType>('!', '#', t1).type, t2, strictMode);
     }
 
-    if (${_equalType(t1, Null)} || ${_jsInstanceOf(t1, NullableType)}) {
+    if (_equalType(t1, Null) || _jsInstanceOf(t1, NullableType)) {
       // Checks for t1 is dynamic or void already performed in "Left Top" test.
       return false;
     }
@@ -1385,81 +1418,78 @@
   }
 
   // "Left Null".
-  if (${_equalType(t1, Null)}) {
-    // TODO(nshahan) Need to handle type variables.
-    // https://github.com/dart-lang/sdk/issues/38816
-    if (${_isFutureOr(t2)}) {
-      let t2TypeArg = ${getGenericArgs(t2)}[0];
-      return $_isSubtype($Null, t2TypeArg, $strictMode);
+  if (_equalType(t1, Null)) {
+    if (_isFutureOr(t2)) {
+      var t2TypeArg = JS('', '#[0]', getGenericArgs(t2));
+      return _isSubtype(typeRep<Null>(), t2TypeArg, strictMode);
     }
 
-    return ${_equalType(t2, Null)} || ${_jsInstanceOf(t2, LegacyType)} ||
-        ${_jsInstanceOf(t2, NullableType)};
+    return _equalType(t2, Null) ||
+        _jsInstanceOf(t2, LegacyType) ||
+        _jsInstanceOf(t2, NullableType);
   }
 
   // "Left Legacy".
-  if (${_jsInstanceOf(t1, LegacyType)}) {
-    return $_isSubtype(t1.type, t2, $strictMode);
+  if (_jsInstanceOf(t1, LegacyType)) {
+    return _isSubtype(JS<LegacyType>('!', '#', t1).type, t2, strictMode);
   }
 
   // "Right Legacy".
-  if (${_jsInstanceOf(t2, LegacyType)}) {
-    return $_isSubtype(t1, $nullable(t2.type), $strictMode);
+  if (_jsInstanceOf(t2, LegacyType)) {
+    return _isSubtype(
+        t1, nullable(JS<LegacyType>('!', '#', t2).type), strictMode);
   }
 
   // Handle FutureOr<T> union type.
-  if (${_isFutureOr(t1)}) {
-    let t1TypeArg = ${getGenericArgs(t1)}[0];
-    if (${_isFutureOr(t2)}) {
-      let t2TypeArg = ${getGenericArgs(t2)}[0];
+  if (_isFutureOr(t1)) {
+    var t1TypeArg = JS('!', '#[0]', getGenericArgs(t1));
+    if (_isFutureOr(t2)) {
+      var t2TypeArg = JS('!', '#[0]', getGenericArgs(t2));
       // FutureOr<A> <: FutureOr<B> if A <: B
-      if ($_isSubtype(t1TypeArg, t2TypeArg, $strictMode)) {
+      if (_isSubtype(t1TypeArg, t2TypeArg, strictMode)) {
         return true;
       }
     }
 
     // given t1 is Future<A> | A, then:
     // (Future<A> | A) <: t2 iff Future<A> <: t2 and A <: t2.
-    let t1Future = ${getGenericClassStatic<Future>()}(t1TypeArg);
+    var t1Future = JS('!', '#(#)', getGenericClassStatic<Future>(), t1TypeArg);
     // Known to handle the case FutureOr<Null> <: Future<Null>.
-    return $_isSubtype(t1Future, $t2, $strictMode) &&
-        $_isSubtype(t1TypeArg, $t2, $strictMode);
+    return _isSubtype(t1Future, t2, strictMode) &&
+        _isSubtype(t1TypeArg, t2, strictMode);
   }
 
   // "Left Nullable".
-  if (${_jsInstanceOf(t1, NullableType)}) {
-    // TODO(nshahan) Need to handle type variables.
-    // https://github.com/dart-lang/sdk/issues/38816
-    return $_isSubtype(t1.type, t2, $strictMode) && $_isSubtype($Null, t2, $strictMode);
+  if (_jsInstanceOf(t1, NullableType)) {
+    return _isSubtype(JS<NullableType>('!', '#', t1).type, t2, strictMode) &&
+        _isSubtype(typeRep<Null>(), t2, strictMode);
   }
 
-  if ($_isFutureOr($t2)) {
+  if (_isFutureOr(t2)) {
     // given t2 is Future<A> | A, then:
     // t1 <: (Future<A> | A) iff t1 <: Future<A> or t1 <: A
-    let t2TypeArg = ${getGenericArgs(t2)}[0];
-    let t2Future = ${getGenericClassStatic<Future>()}(t2TypeArg);
-    // TODO(nshahan) Need to handle type variables on the left.
-    // https://github.com/dart-lang/sdk/issues/38816
-    return $_isSubtype($t1, t2Future, $strictMode) || $_isSubtype($t1, t2TypeArg, $strictMode);
+    var t2TypeArg = JS('!', '#[0]', getGenericArgs(t2));
+    var t2Future = JS('!', '#(#)', getGenericClassStatic<Future>(), t2TypeArg);
+    return _isSubtype(t1, t2Future, strictMode) ||
+        _isSubtype(t1, t2TypeArg, strictMode);
   }
 
   // "Right Nullable".
-  if (${_jsInstanceOf(t2, NullableType)}) {
-    // TODO(nshahan) Need to handle type variables.
-    // https://github.com/dart-lang/sdk/issues/38816
-    return $_isSubtype(t1, t2.type, $strictMode) || $_isSubtype(t1, $Null, $strictMode);
+  if (_jsInstanceOf(t2, NullableType)) {
+    return _isSubtype(t1, JS<NullableType>('!', '#', t2).type, strictMode) ||
+        _isSubtype(t1, typeRep<Null>(), strictMode);
   }
 
   // "Traditional" name-based subtype check.  Avoid passing
   // function types to the class subtype checks, since we don't
   // currently distinguish between generic typedefs and classes.
-  if (!${_jsInstanceOf(t2, AbstractFunctionType)}) {
+  if (!_jsInstanceOf(t2, AbstractFunctionType)) {
     // t2 is an interface type.
 
-    if (${_jsInstanceOf(t1, AbstractFunctionType)}) {
+    if (_jsInstanceOf(t1, AbstractFunctionType)) {
       // Function types are only subtypes of interface types `Function` (and top
       // types, handled already above).
-      return ${_equalType(t2, Function)};
+      return _equalType(t2, Function);
     }
 
     // Even though lazy and anonymous JS types are natural subtypes of
@@ -1472,34 +1502,33 @@
     // JavaScriptObject <: package:js types
     // package:js types <: JavaScriptObject
 
-    if (${_isInterfaceSubtype(t1, JavaScriptObject, strictMode)}
-        &&
-            // TODO: Since package:js types are instances of PackageJSType and
-            // we don't have a mechanism to determine if *some* package:js type
-            // implements t2. This will possibly require keeping a map of these
-            // relationships for this subtyping check. For now, this will only
-            // work if t2 is also a PackageJSType.
-            ${_isInterfaceSubtype(_pkgJSTypeForSubtyping, t2, strictMode)}) {
+    if (_isInterfaceSubtype(t1, typeRep<JavaScriptObject>(), strictMode) &&
+        // TODO: Since package:js types are instances of PackageJSType and
+        // we don't have a mechanism to determine if *some* package:js type
+        // implements t2. This will possibly require keeping a map of these
+        // relationships for this subtyping check. For now, this will only
+        // work if t2 is also a PackageJSType.
+        _isInterfaceSubtype(_pkgJSTypeForSubtyping, t2, strictMode)) {
       return true;
     }
 
-    if (${_isInterfaceSubtype(JavaScriptObject, t2, strictMode)}
-        && ${_isInterfaceSubtype(t1, _pkgJSTypeForSubtyping, strictMode)}) {
+    if (_isInterfaceSubtype(typeRep<JavaScriptObject>(), t2, strictMode) &&
+        _isInterfaceSubtype(t1, _pkgJSTypeForSubtyping, strictMode)) {
       return true;
     }
 
     // Compare two interface types.
-    return ${_isInterfaceSubtype(t1, t2, strictMode)};
+    return _isInterfaceSubtype(t1, t2, strictMode);
   }
 
   // Function subtyping.
-  if (!${_jsInstanceOf(t1, AbstractFunctionType)}) {
+  if (!_jsInstanceOf(t1, AbstractFunctionType)) {
     return false;
   }
 
   // Handle generic functions.
-  if (${_jsInstanceOf(t1, GenericFunctionType)}) {
-    if (!${_jsInstanceOf(t2, GenericFunctionType)}) {
+  if (_jsInstanceOf(t1, GenericFunctionType)) {
+    if (!_jsInstanceOf(t2, GenericFunctionType)) {
       return false;
     }
 
@@ -1509,97 +1538,142 @@
     //
     // where TFresh is a list of fresh type variables that both g1 and g2 will
     // be instantiated with.
-    let formalCount = $t1.formalCount;
-    if (formalCount !== $t2.formalCount) {
+    var formalCount = JS<GenericFunctionType>('!', '#', t1).formalCount;
+    if (formalCount != JS<GenericFunctionType>('!', '#', t2).formalCount) {
       return false;
     }
 
-    // Using either function's type formals will work as long as they're both
-    // instantiated with the same ones. The instantiate operation is guaranteed
-    // to avoid capture because it does not depend on its TypeVariable objects,
-    // rather it uses JS function parameters to ensure correct binding.
-    let fresh = $t2.typeFormals;
+    // Fresh type variables will be used to instantiate generic functions.
+    List<Object> fresh1;
+    List<Object> fresh2;
 
     // Without type bounds all will instantiate to dynamic. Only need to check
     // further if at least one of the functions has type bounds.
-    if ($t1.hasTypeBounds || $t2.hasTypeBounds) {
-      // Check the bounds of the type parameters of g1 and g2. Given a type
-      // parameter `T1 extends U1` from g1, and a type parameter `T2 extends U2`
-      // from g2, we must ensure that U1 and U2 are mutual subtypes.
-      //
-      // (Note there is no variance in the type bounds of type parameters of
-      // generic functions).
-      let t1Bounds = $t1.instantiateTypeBounds(fresh);
-      let t2Bounds = $t2.instantiateTypeBounds(fresh);
-      for (let i = 0; i < formalCount; i++) {
-        if (t1Bounds[i] != t2Bounds[i]) {
-          if (!($_isSubtype(t1Bounds[i], t2Bounds[i], $strictMode)
-              && $_isSubtype(t2Bounds[i], t1Bounds[i], $strictMode))) {
+    if (JS<bool>('!', '#.hasTypeBounds || #.hasTypeBounds', t1, t2)) {
+      // Create two sets of fresh type variables that can store their bounds so
+      // they can be considered in recursive calls.
+      fresh1 = JS('!', 'new Array(#)', formalCount);
+      fresh2 = JS('!', 'new Array(#)', formalCount);
+      for (var i = 0; i < formalCount; i++, _typeVariableCount++) {
+        JS('!', '#[#] = #', fresh1, i,
+            TypeVariableForSubtype(_typeVariableCount));
+        JS('!', '#[#] = #', fresh2, i,
+            TypeVariableForSubtype(_typeVariableCount));
+      }
+      var t1Bounds =
+          JS<GenericFunctionType>('!', '#', t1).instantiateTypeBounds(fresh1);
+      var t2Bounds =
+          JS<GenericFunctionType>('!', '#', t2).instantiateTypeBounds(fresh2);
+
+      for (var i = 0; i < formalCount; i++) {
+        var t1Bound = JS<Object>('!', '#[#]', t1Bounds, i);
+        var t2Bound = JS<Object>('!', '#[#]', t2Bounds, i);
+
+        // Check the bounds of the type parameters of g1 and g2. Given a type
+        // parameter `T1 extends B1` from g1, and a type parameter `T2 extends
+        // B2` from g2, we must ensure that B1 and B2 are mutual subtypes.
+        //
+        // (Note there is no variance in the type bounds of type parameters of
+        // generic functions).
+        if (JS<bool>('!', '# != #', t1Bound, t2Bound)) {
+          if (!(_isSubtype(t1Bound, t2Bound, strictMode) &&
+              _isSubtype(t2Bound, t1Bound, strictMode))) {
             return false;
           }
         }
+        // Assign bounds to be used in the `_isInterfaceSubtype` check later as
+        // this subtype check continues.
+        JS('', '#[#].bound = #', fresh1, i, t1Bound);
+        JS('', '#[#].bound = #', fresh2, i, t2Bound);
       }
+    } else {
+      // Using either function's type formals will work as long as they're both
+      // instantiated with the same ones. The instantiate operation is
+      // guaranteed to avoid capture because it does not depend on its
+      // TypeVariable objects, rather it uses JS function parameters to ensure
+      // correct binding.
+      fresh1 = JS<GenericFunctionType>('!', '#', t1).typeFormals;
+      fresh2 = fresh1;
     }
 
-    $t1 = $t1.instantiate(fresh);
-    $t2 = $t2.instantiate(fresh);
-  } else if (${_jsInstanceOf(t2, GenericFunctionType)}) {
+    t1 = JS<GenericFunctionType>('!', '#', t1).instantiate(fresh1);
+    t2 = JS<GenericFunctionType>('!', '#', t2).instantiate(fresh2);
+  } else if (_jsInstanceOf(t2, GenericFunctionType)) {
     return false;
   }
 
   // Handle non-generic functions.
-  return ${_isFunctionSubtype(t1, t2, strictMode)};
-})()''');
+  return _isFunctionSubtype(t1, t2, strictMode);
+}
 
-bool _isInterfaceSubtype(t1, t2, @notNull bool strictMode) => JS('', '''(() => {
+@notNull
+bool _isInterfaceSubtype(t1, t2, @notNull bool strictMode) {
   // Instances of PackageJSType are all subtypes of each other.
-  if (${_jsInstanceOf(t1, PackageJSType)}
-      && ${_jsInstanceOf(t2, PackageJSType)}) {
+  if (_jsInstanceOf(t1, PackageJSType) && _jsInstanceOf(t2, PackageJSType)) {
     return true;
   }
 
-  if ($t1 === $t2) {
+  if (JS<bool>('!', '# === #', t1, t2)) {
     return true;
   }
-  if (${_equalType(t1, Object)}) {
+  if (_equalType(t1, Object)) {
     return false;
   }
 
   // Classes cannot subtype `Function` or vice versa.
-  if (${_equalType(t1, Function)} || ${_equalType(t2, Function)}) {
+  if (_equalType(t1, Function) || _equalType(t2, Function)) {
     return false;
   }
 
   // If t1 is a JS Object, we may not hit core.Object.
-  if ($t1 == null) {
-    return ${_equalType(t2, Object)} || ${_equalType(t2, dynamic)};
+  if (t1 == null) {
+    return _equalType(t2, Object) || _equalType(t2, dynamic);
+  }
+
+  if (_jsInstanceOf(t1, TypeVariableForSubtype)) {
+    if (_jsInstanceOf(t2, TypeVariableForSubtype)) {
+      // Bounds were already checked to be subtypes of each other in the
+      // generic function section of `_isSubtype()` so just check these type
+      // variables share the same index in their respective signatures.
+      return JS<TypeVariableForSubtype>('!', '#', t1).index ==
+          JS<TypeVariableForSubtype>('!', '#', t2).index;
+    }
+
+    // If t1 <: bound <: t2 then t1 <: t2.
+    return _isSubtype(
+        JS<TypeVariableForSubtype>('!', '#', t1).bound, t2, strictMode);
   }
 
   // Check if t1 and t2 have the same raw type.  If so, check covariance on
   // type parameters.
-  let raw1 = $getGenericClass($t1);
-  let raw2 = $getGenericClass($t2);
-  if (raw1 != null && raw1 == raw2) {
-    let typeArguments1 = $getGenericArgs($t1);
-    let typeArguments2 = $getGenericArgs($t2);
-    if (typeArguments1.length != typeArguments2.length) {
-      $assertFailed();
+  var raw1 = getGenericClass(t1);
+  var raw2 = getGenericClass(t2);
+  if (raw1 != null && JS<bool>('!', '# == #', raw1, raw2)) {
+    var typeArguments1 = getGenericArgs(t1);
+    var typeArguments2 = getGenericArgs(t2);
+    if (JS<bool>('!', '#.length != #.length', typeArguments1, typeArguments2)) {
+      assertFailed('Internal type check failure.');
     }
-    let variances = $getGenericArgVariances($t1);
-    for (let i = 0; i < typeArguments1.length; ++i) {
+    var variances = getGenericArgVariances(t1);
+    for (var i = 0; i < JS<int>('!', '#.length', typeArguments1); ++i) {
       // When using implicit variance, variances will be undefined and
       // considered covariant.
-      if (variances === void 0 || variances[i] == ${Variance.covariant}) {
-        if (!$_isSubtype(typeArguments1[i], typeArguments2[i], $strictMode)) {
+      var varianceType = JS('!', '# && #[#]', variances, variances, i);
+      var typeArg1 = JS('!', '#[#]', typeArguments1, i);
+      var typeArg2 = JS('!', '#[#]', typeArguments2, i);
+      if (JS<bool>('!', '# === void 0 || # == #', varianceType, varianceType,
+          Variance.covariant)) {
+        if (!_isSubtype(typeArg1, typeArg2, strictMode)) {
           return false;
         }
-      } else if (variances[i] == ${Variance.contravariant}) {
-        if (!$_isSubtype(typeArguments2[i], typeArguments1[i], $strictMode)) {
+      } else if (JS<bool>(
+          '!', '# == #', varianceType, Variance.contravariant)) {
+        if (!_isSubtype(typeArg2, typeArg1, strictMode)) {
           return false;
         }
-      } else if (variances[i] == ${Variance.invariant}) {
-        if (!$_isSubtype(typeArguments1[i], typeArguments2[i], $strictMode) ||
-            !$_isSubtype(typeArguments2[i], typeArguments1[i], $strictMode)) {
+      } else if (JS<bool>('!', '# == #', varianceType, Variance.invariant)) {
+        if (!_isSubtype(typeArg1, typeArg2, strictMode) ||
+            !_isSubtype(typeArg2, typeArg1, strictMode)) {
           return false;
         }
       }
@@ -1607,27 +1681,27 @@
     return true;
   }
 
-  if ($_isInterfaceSubtype(t1.__proto__, $t2, $strictMode)) {
+  if (_isInterfaceSubtype(JS('', '#.__proto__', t1), t2, strictMode)) {
     return true;
   }
 
   // Check mixin.
-  let m1 = $getMixin($t1);
-  if (m1 != null && $_isInterfaceSubtype(m1, $t2, $strictMode)) {
+  var m1 = getMixin(t1);
+  if (m1 != null && _isInterfaceSubtype(m1, t2, strictMode)) {
     return true;
   }
 
   // Check interfaces.
-  let getInterfaces = $getImplements($t1);
-  if (getInterfaces) {
-    for (let i1 of getInterfaces()) {
-      if ($_isInterfaceSubtype(i1, $t2, $strictMode)) {
+  var getInterfaces = getImplements(t1);
+  if (getInterfaces != null) {
+    for (var i1 in getInterfaces()) {
+      if (_isInterfaceSubtype(i1, t2, strictMode)) {
         return true;
       }
     }
   }
   return false;
-})()''');
+}
 
 Object? extractTypeArguments<T>(T instance, Function f) {
   if (instance == null) {
diff --git a/tools/VERSION b/tools/VERSION
index f5db836..198805e 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 15
 PATCH 0
-PRERELEASE 129
+PRERELEASE 130
 PRERELEASE_PATCH 0
\ No newline at end of file