Version 2.0.0-dev.46.0

Merge commit '3acccedc4028506345028be6519a0f086c3eec78' into dev
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3a214cd..46c72ce 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,5 @@
+## 2.0.0-dev.46.0
+
 ## 2.0.0-dev.45.0
 
 ### Tool Changes
diff --git a/docs/language/dartLangSpec.tex b/docs/language/dartLangSpec.tex
index b30b562..2e76f4c 100644
--- a/docs/language/dartLangSpec.tex
+++ b/docs/language/dartLangSpec.tex
@@ -2593,7 +2593,8 @@
 \rationale{The name of the resulting class is necessary because it is part of the names of the introduced constructors.}
 
 \LMHash{}
-In both cases above, $C$ declares the same instance members as $M$ (respectively, $M_k$).
+In both cases above, $C$ declares the same instance members as $M$ (respectively, $M_k$),
+and it does not declare any static members.
 If any of the instance variables of $M$ (respectively, $M_k$) have initializers,
 they are executed in the instance scope of $M$ (respectively, $M_k$)
 to initialize the corresponding instance variables of $C$.
diff --git a/pkg/analysis_server/lib/src/flutter/flutter_correction.dart b/pkg/analysis_server/lib/src/flutter/flutter_correction.dart
index 4f667b5..7e16232 100644
--- a/pkg/analysis_server/lib/src/flutter/flutter_correction.dart
+++ b/pkg/analysis_server/lib/src/flutter/flutter_correction.dart
@@ -7,7 +7,7 @@
 import 'package:analysis_server/src/services/correction/util.dart';
 import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/src/dart/ast/utilities.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart' hide Element;
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_dart.dart';
@@ -25,6 +25,7 @@
   final AnalysisSession session;
   final CompilationUnit unit;
 
+  AstNode node;
   CorrectionUtils utils;
 
   FlutterCorrections(
@@ -42,6 +43,7 @@
         assert(unit != null),
         selectionEnd = selectionOffset + selectionLength,
         selectionRange = new SourceRange(selectionOffset, selectionLength) {
+    node = new NodeLocator(selectionOffset, selectionEnd).searchWithin(unit);
     utils = new CorrectionUtils(unit, buffer: fileContent);
   }
 
@@ -50,37 +52,34 @@
    */
   String get eol => utils.endOfLine;
 
-  /// Wrap the code between [selectionOffset] and [selectionEnd] into a new
-  /// widget with the [parentType].  It is expected that the parent widget has
-  /// the default constructor and the `child` named parameter.
-  Future<SourceChange> wrapWidget(InterfaceType parentType) async {
-    String src = utils.getText(selectionOffset, selectionLength);
-    var changeBuilder = new DartChangeBuilder(session);
-    await changeBuilder.addFileEdit(file, (builder) {
-      builder.addReplacement(selectionRange, (builder) {
-        builder.write('new ');
-        builder.writeType(parentType);
-        builder.write('(');
-        if (src.contains(eol)) {
-          String indentOld = utils.getLinePrefix(selectionOffset);
-          String indentNew = indentOld + utils.getIndent(1);
-          builder.write(eol);
-          builder.write(indentNew);
-          src = _replaceSourceIndent(src, indentOld, indentNew);
-          src += ',$eol$indentOld';
-        }
-        builder.write('child: ');
-        builder.selectHere();
-        builder.write(src);
-        builder.write(')');
-      });
-    });
-    return changeBuilder.sourceChange;
-  }
+  Future<SourceChange> addForDesignTimeConstructor() async {
+    final node = this.node;
+    if (node is ClassDeclaration) {
+      var className = node.name.name;
+      var location = utils.prepareNewConstructorLocation(node);
+      var changeBuilder = new DartChangeBuilder(session);
+      await changeBuilder.addFileEdit(file, (builder) {
+        builder.addInsertion(location.offset, (builder) {
+          builder.write(location.prefix);
 
-  static String _replaceSourceIndent(
-      String source, String indentOld, String indentNew) {
-    return source.replaceAll(
-        new RegExp('^$indentOld', multiLine: true), indentNew);
+          // If there are no constructors, we need to add also default.
+          bool hasConstructors =
+              node.members.any((m) => m is ConstructorDeclaration);
+          if (!hasConstructors) {
+            builder.writeln('$className();');
+            builder.writeln();
+            builder.write('  ');
+          }
+
+          builder.writeln('$className.forDesignTime() {');
+          builder.writeln('    // TODO: add arguments');
+          builder.writeln('    return new $className();');
+          builder.write('  }');
+          builder.write(location.suffix);
+        });
+      });
+      return changeBuilder.sourceChange;
+    }
+    return null;
   }
 }
diff --git a/pkg/analysis_server/lib/src/services/correction/util.dart b/pkg/analysis_server/lib/src/services/correction/util.dart
index 71dd8c0..5281867 100644
--- a/pkg/analysis_server/lib/src/services/correction/util.dart
+++ b/pkg/analysis_server/lib/src/services/correction/util.dart
@@ -1296,8 +1296,8 @@
       TokenType operator = expression.operator.type;
       Expression le = expression.leftOperand;
       Expression re = expression.rightOperand;
-      _InvertedCondition ls = _invertCondition0(le);
-      _InvertedCondition rs = _invertCondition0(re);
+      _InvertedCondition ls = _InvertedCondition._simple(getNodeText(le));
+      _InvertedCondition rs = _InvertedCondition._simple(getNodeText(re));
       if (operator == TokenType.LT) {
         return _InvertedCondition._binary2(ls, " >= ", rs);
       }
@@ -1317,10 +1317,14 @@
         return _InvertedCondition._binary2(ls, " == ", rs);
       }
       if (operator == TokenType.AMPERSAND_AMPERSAND) {
+        ls = _invertCondition0(le);
+        rs = _invertCondition0(re);
         return _InvertedCondition._binary(
             TokenType.BAR_BAR.precedence, ls, " || ", rs);
       }
       if (operator == TokenType.BAR_BAR) {
+        ls = _invertCondition0(le);
+        rs = _invertCondition0(re);
         return _InvertedCondition._binary(
             TokenType.AMPERSAND_AMPERSAND.precedence, ls, " && ", rs);
       }
diff --git a/pkg/analysis_server/test/services/correction/util_test.dart b/pkg/analysis_server/test/services/correction/util_test.dart
index 1589df0..05866c9 100644
--- a/pkg/analysis_server/test/services/correction/util_test.dart
+++ b/pkg/analysis_server/test/services/correction/util_test.dart
@@ -1,8 +1,10 @@
 // Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+import 'dart:async';
 
 import 'package:analysis_server/src/services/correction/util.dart';
+import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:analyzer_plugin/src/utilities/string_utilities.dart';
@@ -19,6 +21,24 @@
 
 @reflectiveTest
 class UtilTest extends AbstractSingleUnitTest {
+  Future<void> assert_invertCondition(String expr, String expected) async {
+    await resolveTestUnit('''
+main() {
+  int v1, v2, v3, v4, v5;
+  bool b1, b2, b3, b4, b5;
+  if ($expr) {
+    0;
+  } else {
+    1;
+  }
+}
+''');
+    IfStatement ifStatement = findNodeAtString('if (');
+    Expression condition = ifStatement.condition;
+    String result = new CorrectionUtils(testUnit).invertCondition(condition);
+    expect(result, expected);
+  }
+
   test_addLibraryImports_dart_hasImports_between() async {
     await resolveTestUnit('''
 import 'dart:async';
@@ -220,6 +240,51 @@
 ''');
   }
 
+  test_invertCondition_binary_compare() async {
+    await assert_invertCondition('0 < 1', '0 >= 1');
+    await assert_invertCondition('0 > 1', '0 <= 1');
+    await assert_invertCondition('0 <= 1', '0 > 1');
+    await assert_invertCondition('0 >= 1', '0 < 1');
+    await assert_invertCondition('0 == 1', '0 != 1');
+    await assert_invertCondition('0 != 1', '0 == 1');
+  }
+
+  test_invertCondition_binary_compare_boolean() async {
+    await assert_invertCondition('b1 == null', 'b1 != null');
+    await assert_invertCondition('b1 != null', 'b1 == null');
+  }
+
+  test_invertCondition_binary_logical() async {
+    await assert_invertCondition('b1 && b2', '!b1 || !b2');
+    await assert_invertCondition('!b1 && !b2', 'b1 || b2');
+    await assert_invertCondition('b1 || b2', '!b1 && !b2');
+    await assert_invertCondition('!b1 || !b2', 'b1 && b2');
+  }
+
+  test_invertCondition_complex() async {
+    await assert_invertCondition('b1 && b2 || b3', '(!b1 || !b2) && !b3');
+    await assert_invertCondition('b1 || b2 && b3', '!b1 && (!b2 || !b3)');
+    await assert_invertCondition('(!b1 || !b2) && !b3', 'b1 && b2 || b3');
+    await assert_invertCondition('!b1 && (!b2 || !b3)', 'b1 || b2 && b3');
+  }
+
+  test_invertCondition_is() async {
+    await assert_invertCondition('v1 is int', 'v1 is! int');
+    await assert_invertCondition('v1 is! int', 'v1 is int');
+  }
+
+  test_invertCondition_literal() async {
+    await assert_invertCondition('true', 'false');
+    await assert_invertCondition('false', 'true');
+  }
+
+  test_invertCondition_not() async {
+    await assert_invertCondition('b1', '!b1');
+    await assert_invertCondition('!b1', 'b1');
+    await assert_invertCondition('!((b1))', 'b1');
+    await assert_invertCondition('(((b1)))', '!b1');
+  }
+
   void _assertAddLibraryImport(List<Source> newLibraries, String expectedCode) {
     SourceChange change = new SourceChange('');
     addLibraryImports(change, testLibraryElement, newLibraries.toSet());
diff --git a/pkg/analysis_server/test/src/flutter/flutter_correction_test.dart b/pkg/analysis_server/test/src/flutter/flutter_correction_test.dart
index fb36548..b285c2b 100644
--- a/pkg/analysis_server/test/src/flutter/flutter_correction_test.dart
+++ b/pkg/analysis_server/test/src/flutter/flutter_correction_test.dart
@@ -2,12 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'dart:async';
-
 import 'package:analysis_server/src/flutter/flutter_correction.dart';
 import 'package:analysis_server/src/protocol_server.dart';
-import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/dart/element/type.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -23,7 +19,8 @@
 @reflectiveTest
 class FlutterCorrectionTest extends AbstractSingleUnitTest {
   int offset;
-  int length;
+  int length = 0;
+  FlutterCorrections corrections;
 
   int findOffset(String search) {
     int offset = testCode.indexOf(search);
@@ -37,127 +34,76 @@
     packageMap['flutter'] = [configureFlutterPackage(resourceProvider)];
   }
 
-  test_wrapWidget_OK_multiLine() async {
+  test_addForDesignTimeConstructor_BAD_notClass() async {
+    await resolveTestUnit('var v = 42;');
+    offset = findOffset('v =');
+    _createCorrections();
+
+    SourceChange change = await corrections.addForDesignTimeConstructor();
+    expect(change, isNull);
+  }
+
+  test_addForDesignTimeConstructor_OK_hasConstructor() async {
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
+
 class MyWidget extends StatelessWidget {
+  MyWidget(String text);
+
   Widget build(BuildContext context) {
-    return /*start*/new Row(
-      children: [
-        new Text('aaa'),
-        new Text('bbb'),
-      ],
-    )/*end*/;
+    return new Container();
   }
 }
 ''');
-    _setStartEndSelection();
+    offset = findOffset('class MyWidget');
+    _createCorrections();
 
-    InterfaceType parentType = await _getContainerType();
-    SourceChange change = await _wrapWidget(parentType);
-
+    SourceChange change = await corrections.addForDesignTimeConstructor();
     _assertChange(change, r'''
 import 'package:flutter/widgets.dart';
+
 class MyWidget extends StatelessWidget {
+  MyWidget(String text);
+
+  MyWidget.forDesignTime() {
+    // TODO: add arguments
+    return new MyWidget();
+  }
+
   Widget build(BuildContext context) {
-    return new Container(
-      child: /*start*/new Row(
-        children: [
-          new Text('aaa'),
-          new Text('bbb'),
-        ],
-      )/*end*/,
-    );
+    return new Container();
   }
 }
 ''');
   }
 
-  test_wrapWidget_OK_multiLine_subChild() async {
+  test_addForDesignTimeConstructor_OK_noConstructor() async {
     await resolveTestUnit('''
 import 'package:flutter/widgets.dart';
+
 class MyWidget extends StatelessWidget {
   Widget build(BuildContext context) {
-    return new Container(
-      child: /*start*/new Row(
-        children: [
-          new Text('aaa'),
-          new Text('bbb'),
-        ],
-      )/*end*/,
-    );
+    return new Container();
   }
 }
 ''');
-    _setStartEndSelection();
+    offset = findOffset('class MyWidget');
+    _createCorrections();
 
-    InterfaceType parentType = await _getContainerType();
-    SourceChange change = await _wrapWidget(parentType);
-
+    SourceChange change = await corrections.addForDesignTimeConstructor();
     _assertChange(change, r'''
 import 'package:flutter/widgets.dart';
+
 class MyWidget extends StatelessWidget {
+  MyWidget();
+
+  MyWidget.forDesignTime() {
+    // TODO: add arguments
+    return new MyWidget();
+  }
+
   Widget build(BuildContext context) {
-    return new Container(
-      child: new Container(
-        child: /*start*/new Row(
-          children: [
-            new Text('aaa'),
-            new Text('bbb'),
-          ],
-        )/*end*/,
-      ),
-    );
-  }
-}
-''');
-  }
-
-  test_wrapWidget_OK_oneLine_newInstance() async {
-    await resolveTestUnit('''
-import 'package:flutter/widgets.dart';
-class MyWidget extends StatelessWidget {
-  Widget build(BuildContext context) {
-    return /*start*/new Text('abc')/*end*/;
-  }
-}
-''');
-    _setStartEndSelection();
-
-    InterfaceType parentType = await _getContainerType();
-    SourceChange change = await _wrapWidget(parentType);
-
-    _assertChange(change, r'''
-import 'package:flutter/widgets.dart';
-class MyWidget extends StatelessWidget {
-  Widget build(BuildContext context) {
-    return new Container(child: /*start*/new Text('abc')/*end*/);
-  }
-}
-''');
-  }
-
-  test_wrapWidget_OK_oneLine_variable() async {
-    await resolveTestUnit('''
-import 'package:flutter/widgets.dart';
-class MyWidget extends StatelessWidget {
-  Widget build(BuildContext context) {
-    var text = new Text('abc');
-    return /*start*/text/*end*/;
-  }
-}
-''');
-    _setStartEndSelection();
-
-    InterfaceType parentType = await _getContainerType();
-    SourceChange change = await _wrapWidget(parentType);
-
-    _assertChange(change, r'''
-import 'package:flutter/widgets.dart';
-class MyWidget extends StatelessWidget {
-  Widget build(BuildContext context) {
-    var text = new Text('abc');
-    return new Container(child: /*start*/text/*end*/);
+    return new Container();
   }
 }
 ''');
@@ -178,27 +124,13 @@
     expect(resultCode, expectedCode);
   }
 
-  Future<InterfaceType> _getContainerType() async {
-    LibraryElement widgetsLibrary = await testAnalysisResult.session
-        .getLibraryByUri('package:flutter/widgets.dart');
-    ClassElement containerElement =
-        widgetsLibrary.exportNamespace.get('Container');
-    return containerElement.type;
-  }
-
-  void _setStartEndSelection() {
-    offset = findOffset('/*start*/');
-    length = findOffset('/*end*/') + '/*end*/'.length - offset;
-  }
-
-  Future<SourceChange> _wrapWidget(InterfaceType parentType) async {
-    var corrections = new FlutterCorrections(
+  void _createCorrections() {
+    corrections = new FlutterCorrections(
         file: testFile,
         fileContent: testCode,
         selectionOffset: offset,
         selectionLength: length,
         session: testAnalysisResult.session,
         unit: testUnit);
-    return await corrections.wrapWidget(parentType);
   }
 }
diff --git a/pkg/analyzer/lib/src/context/builder.dart b/pkg/analyzer/lib/src/context/builder.dart
index c084ed5..f81e3a7 100644
--- a/pkg/analyzer/lib/src/context/builder.dart
+++ b/pkg/analyzer/lib/src/context/builder.dart
@@ -492,6 +492,7 @@
         }
       }
       if (ContextBuilderOptions.flutterRepo) {
+        // TODO(devoncarew): Should we still be auto-inserting this?
         const lintName = 'public_member_api_docs';
         Linter rule = options.lintRules.firstWhere(
             (Linter lint) => lint.name == lintName,
diff --git a/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart b/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart
index 9340caf..ba59397 100644
--- a/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart
@@ -272,7 +272,7 @@
 
             addFileResult(library.fileUri);
             for (var part in library.parts) {
-              addFileResult(part.fileUri);
+              addFileResult(library.fileUri.resolve(part.partUri));
             }
 
             var libraryResult = new LibraryCompilationResult(
@@ -328,7 +328,7 @@
 
       // Remember libraries for parts.
       for (var part in library.parts) {
-        _partToLibrary[part.fileUri] = library.fileUri;
+        _partToLibrary[library.fileUri.resolve(part.partUri)] = library.fileUri;
       }
 
       // Record reverse dependencies.
diff --git a/pkg/analyzer/lib/src/kernel/resynthesize.dart b/pkg/analyzer/lib/src/kernel/resynthesize.dart
index 5586c26..a66763e 100644
--- a/pkg/analyzer/lib/src/kernel/resynthesize.dart
+++ b/pkg/analyzer/lib/src/kernel/resynthesize.dart
@@ -201,7 +201,7 @@
       // Build units for parts.
       var parts = new List<CompilationUnitElementImpl>(kernel.parts.length);
       for (int i = 0; i < kernel.parts.length; i++) {
-        var fileUri = kernel.parts[i].fileUri;
+        var fileUri = kernel.fileUri.resolve(kernel.parts[i].partUri);
         var unitContext = libraryContext._buildUnit("$fileUri");
         parts[i] = unitContext.unit;
       }
@@ -974,7 +974,8 @@
   List<kernel.Expression> get annotations {
     if (_annotations == null) {
       for (var part in context.libraryContext.library.parts) {
-        if ("${part.fileUri}" == context.fileUri) {
+        if ("${context.libraryContext.library.fileUri.resolve(part.partUri)}" ==
+            context.fileUri) {
           return _annotations = part.annotations;
         }
       }
diff --git a/pkg/analyzer/lib/src/lint/options_rule_validator.dart b/pkg/analyzer/lib/src/lint/options_rule_validator.dart
index 217778a..622aa31 100644
--- a/pkg/analyzer/lib/src/lint/options_rule_validator.dart
+++ b/pkg/analyzer/lib/src/lint/options_rule_validator.dart
@@ -24,6 +24,7 @@
 class LinterRuleOptionsValidator extends OptionsValidator {
   static const linter = 'linter';
   static const rulesKey = 'rules';
+
   @override
   List<AnalysisError> validate(ErrorReporter reporter, YamlMap options) {
     List<AnalysisError> errors = <AnalysisError>[];
@@ -37,8 +38,8 @@
 
   validateRules(YamlNode rules, ErrorReporter reporter) {
     if (rules is YamlList) {
-      Iterable<String> registeredLints =
-          Registry.ruleRegistry.map((r) => r.name);
+      List<String> registeredLints =
+          Registry.ruleRegistry.map((r) => r.name).toList();
       rules.nodes.forEach((YamlNode ruleNode) {
         Object value = ruleNode.value;
         if (value != null && !registeredLints.contains(value)) {
diff --git a/pkg/analyzer/lib/src/task/options.dart b/pkg/analyzer/lib/src/task/options.dart
index c7c83de..0c23e88 100644
--- a/pkg/analyzer/lib/src/task/options.dart
+++ b/pkg/analyzer/lib/src/task/options.dart
@@ -156,6 +156,9 @@
   /// Lazily populated set of error codes (hashed for speedy lookup).
   static HashSet<String> _errorCodes;
 
+  /// Lazily populated set of lint codes.
+  Set<String> _lintCodes;
+
   /// Legal error code names.
   static Set<String> get errorCodes {
     if (_errorCodes == null) {
@@ -166,6 +169,14 @@
     return _errorCodes;
   }
 
+  Set<String> get lintCodes {
+    if (_lintCodes == null) {
+      _lintCodes = new Set.from(
+          Registry.ruleRegistry.rules.map((rule) => rule.name.toUpperCase()));
+    }
+    return _lintCodes;
+  }
+
   @override
   void validate(ErrorReporter reporter, YamlMap options) {
     var analyzer = getValue(options, AnalyzerOptions.analyzer);
@@ -176,7 +187,7 @@
         filters.nodes.forEach((k, v) {
           if (k is YamlScalar) {
             value = toUpperCase(k.value);
-            if (!errorCodes.contains(value)) {
+            if (!errorCodes.contains(value) && !lintCodes.contains(value)) {
               reporter.reportErrorForSpan(
                   AnalysisOptionsWarningCode.UNRECOGNIZED_ERROR_CODE,
                   k.span,
diff --git a/pkg/analyzer/test/generated/parser_fasta_test.dart b/pkg/analyzer/test/generated/parser_fasta_test.dart
index f9ad390..17f11d3 100644
--- a/pkg/analyzer/test/generated/parser_fasta_test.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_test.dart
@@ -500,47 +500,6 @@
 
   @override
   @failingTest
-  void test_nonConstructorFactory_field() {
-    // TODO(brianwilkerson) Does not recover.
-    //   Internal problem: Compiler cannot run without a compiler context.
-    //   Tip: Are calls to the compiler wrapped in CompilerContext.runInContext?
-    //   package:front_end/src/fasta/compiler_context.dart 81:7             CompilerContext.current
-    //   package:front_end/src/fasta/problems.dart 29:25                    internalProblem
-    //   package:front_end/src/fasta/problems.dart 41:10                    unhandled
-    //   package:analyzer/src/fasta/ast_builder.dart 1498:7                 AstBuilder.endFactoryMethod
-    //   test/generated/parser_fasta_listener.dart 731:14                   ForwardingTestListener.endFactoryMethod
-    //   package:front_end/src/fasta/parser/parser.dart 2465:14             Parser.parseFactoryMethod
-    //   package:front_end/src/fasta/parser/parser.dart 2240:15             Parser.parseMember
-    //   test/generated/parser_fasta_test.dart 3702:39                      ParserProxy._run
-    super.test_nonConstructorFactory_field();
-  }
-
-  @override
-  @failingTest
-  void test_nonConstructorFactory_method() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.NON_CONSTRUCTOR_FACTORY, found 0
-    super.test_nonConstructorFactory_method();
-  }
-
-  @override
-  @failingTest
-  void test_setterInFunction_block() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.SETTER_IN_FUNCTION, found 0
-    super.test_setterInFunction_block();
-  }
-
-  @override
-  @failingTest
-  void test_setterInFunction_expression() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.SETTER_IN_FUNCTION, found 0
-    super.test_setterInFunction_expression();
-  }
-
-  @override
-  @failingTest
   void test_unexpectedToken_endOfFieldDeclarationStatement() {
     // TODO(brianwilkerson) Wrong errors:
     // Expected 1 errors of type ParserErrorCode.UNEXPECTED_TOKEN, found 0
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index dc7803d..a18492f 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -4878,19 +4878,27 @@
   }
 
   void test_nonConstructorFactory_field() {
-    createParser('factory int x;');
+    createParser('factory int x;', expectedEndOffset: 12);
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors(
-        [expectedError(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, 0, 7)]);
+    listener.assertErrors(usingFastaParser
+        ? [
+            expectedError(ParserErrorCode.MISSING_FUNCTION_PARAMETERS, 12, 1),
+            expectedError(ParserErrorCode.MISSING_FUNCTION_BODY, 12, 1)
+          ]
+        : [expectedError(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, 0, 7)]);
   }
 
   void test_nonConstructorFactory_method() {
-    createParser('factory int m() {}');
+    createParser('factory int m() {}', expectedEndOffset: 12);
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors(
-        [expectedError(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, 0, 7)]);
+    listener.assertErrors(usingFastaParser
+        ? [
+            expectedError(ParserErrorCode.MISSING_FUNCTION_PARAMETERS, 12, 1),
+            expectedError(ParserErrorCode.MISSING_FUNCTION_BODY, 12, 1)
+          ]
+        : [expectedError(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, 0, 7)]);
   }
 
   void test_nonIdentifierLibraryName_library() {
@@ -5054,14 +5062,16 @@
 
   void test_setterInFunction_block() {
     parseStatement("set x(v) {_x = v;}");
-    listener.assertErrors(
-        [expectedError(ParserErrorCode.SETTER_IN_FUNCTION, 0, 3)]);
+    listener.assertErrors(usingFastaParser
+        ? [expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 0, 3)]
+        : [expectedError(ParserErrorCode.SETTER_IN_FUNCTION, 0, 3)]);
   }
 
   void test_setterInFunction_expression() {
     parseStatement("set x(v) => _x = v;");
-    listener.assertErrors(
-        [expectedError(ParserErrorCode.SETTER_IN_FUNCTION, 0, 3)]);
+    listener.assertErrors(usingFastaParser
+        ? [expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 0, 3)]
+        : [expectedError(ParserErrorCode.SETTER_IN_FUNCTION, 0, 3)]);
   }
 
   void test_staticAfterConst() {
diff --git a/pkg/analyzer/test/src/task/options_test.dart b/pkg/analyzer/test/src/task/options_test.dart
index 6bec4ec..98a9fcf 100644
--- a/pkg/analyzer/test/src/task/options_test.dart
+++ b/pkg/analyzer/test/src/task/options_test.dart
@@ -544,6 +544,15 @@
     ''', [AnalysisOptionsWarningCode.UNRECOGNIZED_ERROR_CODE]);
   }
 
+  test_analyzer_lint_codes_recognized() {
+    Registry.ruleRegistry.register(new TestRule());
+    validate('''
+analyzer:
+  errors:
+    fantastic_test_rule: ignore
+    ''', []);
+  }
+
   test_analyzer_language_supported() {
     validate('''
 analyzer:
diff --git a/pkg/compiler/lib/src/inferrer/ast_inferrer_engine.dart b/pkg/compiler/lib/src/inferrer/ast_inferrer_engine.dart
index 71f6445..acea941 100644
--- a/pkg/compiler/lib/src/inferrer/ast_inferrer_engine.dart
+++ b/pkg/compiler/lib/src/inferrer/ast_inferrer_engine.dart
@@ -58,7 +58,7 @@
 
   FunctionEntity lookupCallMethod(covariant ClassElement cls) {
     MethodElement callMethod = cls.lookupMember(Identifiers.call);
-    if (callMethod == null) {
+    if (callMethod == null || callMethod.isAbstract) {
       callMethod = cls.lookupMember(Identifiers.noSuchMethod_);
     }
     return callMethod;
diff --git a/pkg/compiler/lib/src/inferrer/builder.dart b/pkg/compiler/lib/src/inferrer/builder.dart
index ff6f898..6deee5e 100644
--- a/pkg/compiler/lib/src/inferrer/builder.dart
+++ b/pkg/compiler/lib/src/inferrer/builder.dart
@@ -2508,6 +2508,9 @@
   @override
   TypeInformation visitTopLevelGetterInvoke(ast.Send node, GetterElement getter,
       ast.NodeList arguments, CallStructure callStructure, _) {
+    if (getter.isDeferredLoaderGetter) {
+      return types.dynamicType;
+    }
     return handleStaticFieldOrGetterInvoke(node, getter);
   }
 
@@ -2661,6 +2664,9 @@
   @override
   TypeInformation visitTopLevelGetterGet(
       ast.Send node, GetterElement getter, _) {
+    if (getter.isDeferredLoaderGetter) {
+      return types.functionType;
+    }
     return handleStaticGetterGet(node, getter);
   }
 
diff --git a/pkg/compiler/lib/src/inferrer/closure_tracer.dart b/pkg/compiler/lib/src/inferrer/closure_tracer.dart
index 4363142..174089d 100644
--- a/pkg/compiler/lib/src/inferrer/closure_tracer.dart
+++ b/pkg/compiler/lib/src/inferrer/closure_tracer.dart
@@ -21,7 +21,12 @@
 
   ClosureTracerVisitor(this.tracedElements, ApplyableTypeInformation tracedType,
       InferrerEngine inferrer)
-      : super(tracedType, inferrer);
+      : super(tracedType, inferrer) {
+    assert(
+        tracedElements.every((f) => !f.isAbstract),
+        "Tracing abstract methods: "
+        "${tracedElements.where((f) => f.isAbstract)}");
+  }
 
   ApplyableTypeInformation get tracedType => super.tracedType;
 
diff --git a/pkg/compiler/lib/src/inferrer/kernel_inferrer_engine.dart b/pkg/compiler/lib/src/inferrer/kernel_inferrer_engine.dart
index 24b0ecc..217c1ee 100644
--- a/pkg/compiler/lib/src/inferrer/kernel_inferrer_engine.dart
+++ b/pkg/compiler/lib/src/inferrer/kernel_inferrer_engine.dart
@@ -174,7 +174,7 @@
   FunctionEntity lookupCallMethod(ClassEntity cls) {
     FunctionEntity function =
         _elementEnvironment.lookupClassMember(cls, Identifiers.call);
-    if (function == null) {
+    if (function == null || function.isAbstract) {
       function =
           _elementEnvironment.lookupClassMember(cls, Identifiers.noSuchMethod_);
     }
diff --git a/pkg/compiler/lib/src/inferrer/type_system.dart b/pkg/compiler/lib/src/inferrer/type_system.dart
index a4fbfd7..90c3101 100644
--- a/pkg/compiler/lib/src/inferrer/type_system.dart
+++ b/pkg/compiler/lib/src/inferrer/type_system.dart
@@ -376,6 +376,8 @@
   }
 
   MemberTypeInformation getInferredTypeOfMember(MemberEntity member) {
+    assert(!member.isAbstract,
+        failedAt(member, "Unexpected abstract member $member."));
     return memberTypeInformations.putIfAbsent(member, () {
       MemberTypeInformation typeInformation =
           strategy.createMemberTypeInformation(member);
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 5da318a..6d75fca 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
@@ -105,6 +105,7 @@
 
   NsmCategory _categorizeImpl(FunctionEntity element) {
     assert(element.name == Identifiers.noSuchMethod_);
+    assert(!element.isAbstract);
     if (defaultImpls.contains(element)) {
       return NsmCategory.DEFAULT;
     }
diff --git a/pkg/compiler/lib/src/js_backend/resolution_listener.dart b/pkg/compiler/lib/src/js_backend/resolution_listener.dart
index dbfb64a..289ae42 100644
--- a/pkg/compiler/lib/src/js_backend/resolution_listener.dart
+++ b/pkg/compiler/lib/src/js_backend/resolution_listener.dart
@@ -201,7 +201,10 @@
     for (ClassEntity cls in recentClasses) {
       MemberEntity element = _elementEnvironment.lookupLocalClassMember(
           cls, Identifiers.noSuchMethod_);
-      if (element != null && element.isInstanceMember && element.isFunction) {
+      if (element != null &&
+          element.isInstanceMember &&
+          element.isFunction &&
+          !element.isAbstract) {
         _noSuchMethodRegistry.registerNoSuchMethod(element);
       }
     }
diff --git a/pkg/compiler/lib/src/kernel/element_map_mixins.dart b/pkg/compiler/lib/src/kernel/element_map_mixins.dart
index c064fbb..8cdbb9c 100644
--- a/pkg/compiler/lib/src/kernel/element_map_mixins.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_mixins.dart
@@ -347,7 +347,7 @@
       cls = elementEnvironment.getSuperClass(cls);
       MemberEntity member = elementEnvironment.lookupLocalClassMember(
           cls, Identifiers.noSuchMethod_);
-      if (member != null) {
+      if (member != null && !member.isAbstract) {
         if (member.isFunction) {
           FunctionEntity function = member;
           if (function.parameterStructure.positionalParameters >= 1) {
diff --git a/pkg/compiler/lib/src/source_file_provider.dart b/pkg/compiler/lib/src/source_file_provider.dart
index 15281c8..638a8a1 100644
--- a/pkg/compiler/lib/src/source_file_provider.dart
+++ b/pkg/compiler/lib/src/source_file_provider.dart
@@ -497,4 +497,19 @@
     }
     return result;
   }
+
+  @override
+  api.Input autoReadFromFile(Uri resourceUri) {
+    var path = resourceUri.path;
+    if (path.startsWith('/bazel-root')) {
+      path = path.substring('/bazel-root/'.length);
+      for (var dir in dirs) {
+        var file = dir.resolve(path);
+        if (new File.fromUri(file).existsSync()) {
+          return super.autoReadFromFile(file);
+        }
+      }
+    }
+    return null;
+  }
 }
diff --git a/pkg/compiler/testing_dart.json b/pkg/compiler/testing_dart.json
index 17a04e0..4ebf407 100644
--- a/pkg/compiler/testing_dart.json
+++ b/pkg/compiler/testing_dart.json
@@ -22,6 +22,11 @@
       "^tests/compiler/dart2js/deferred/load_graph_segmentation_test\\.dart",
       "^tests/compiler/dart2js/deferred/not_in_main_test\\.dart",
       "^tests/compiler/dart2js/in_user_code_test\\.dart",
+      "^tests/compiler/dart2js/inference/data/call_site\\.dart",
+      "^tests/compiler/dart2js/inference/data/general\\.dart",
+      "^tests/compiler/dart2js/inference/data/no_such_method\\.dart",
+      "^tests/compiler/dart2js/inference/data/no_such_method2\\.dart",
+      "^tests/compiler/dart2js/inference/data/postfix_prefix\\.dart",
       "^tests/compiler/dart2js/inference/data/super_invoke\\.dart",
       "^tests/compiler/dart2js/inference/simple_inferrer_closure_test\\.dart",
       "^tests/compiler/dart2js/inference/simple_inferrer_const_closure2_test\\.dart",
diff --git a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
index 3f840d9..122b9ce 100644
--- a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
@@ -3040,6 +3040,11 @@
     var element = accessor;
     if (accessor is PropertyAccessorElement) element = accessor.variable;
 
+    // If this is one of our compiler's temporary variables, return its JS form.
+    if (element is TemporaryVariableElement) {
+      return element.jsVariable;
+    }
+
     // Directly emit constants.
     if (element is VariableElement && element.isStatic && element.isConst) {
       var val = element.computeConstantValue() as DartObjectImpl;
@@ -3119,11 +3124,6 @@
       return _emitParameter(element);
     }
 
-    // If this is one of our compiler's temporary variables, return its JS form.
-    if (element is TemporaryVariableElement) {
-      return element.jsVariable;
-    }
-
     return new JS.Identifier(name);
   }
 
@@ -4920,7 +4920,8 @@
 
     variable ??= new JS.TemporaryId(name);
 
-    var idElement = new TemporaryVariableElement.forNode(id, variable);
+    var idElement = new TemporaryVariableElement.forNode(id, variable)
+      ..enclosingElement = _currentElement;
     id.staticElement = idElement;
     id.staticType = type;
     setIsDynamicInvoke(id, dynamicInvoke ?? type.isDynamic);
diff --git a/pkg/front_end/lib/src/fasta/builder_graph.dart b/pkg/front_end/lib/src/fasta/builder_graph.dart
index b4350b1..7f54bc2 100644
--- a/pkg/front_end/lib/src/fasta/builder_graph.dart
+++ b/pkg/front_end/lib/src/fasta/builder_graph.dart
@@ -60,7 +60,7 @@
 
       // Parts
       for (LibraryPart part in library.library.parts) {
-        Uri uri = part.fileUri;
+        Uri uri = library.uri.resolve(part.partUri);
         if (builders.containsKey(uri)) {
           yield uri;
         }
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index 073b8d7..fe2dddf9 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -336,7 +336,8 @@
         }
       } else if (library is DillLibraryBuilder) {
         for (LibraryPart part in library.library.parts) {
-          addBuilderAndInvalidateUris(part.fileUri, library, false);
+          Uri partUri = library.uri.resolve(part.partUri);
+          addBuilderAndInvalidateUris(partUri, library, false);
         }
       }
     }
diff --git a/pkg/front_end/lib/src/fasta/kernel/constness_evaluator.dart b/pkg/front_end/lib/src/fasta/kernel/constness_evaluator.dart
index 6ed7d2b..ab7f9ce 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constness_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constness_evaluator.dart
@@ -328,13 +328,27 @@
   visitVariableGet(VariableGet node) {
     if (!node.variable.isConst) return const ConstnessInfo.decidedNew();
     // TODO(dmitryas): Handle the case of recursive dependencies.
+    // TODO(dmitryas): Find a way to get fileUri of the variable.
     return node.variable.initializer.accept(this);
   }
 
   @override
   visitStaticGet(StaticGet node) {
-    // TODO(dmitryas): Handle this case.
-    return const ConstnessInfo.taintedConst(null);
+    Member target = node.target;
+    if (target is Field) {
+      if (target.isConst) {
+        if (this.uri == target.fileUri) {
+          return target.initializer.accept(this);
+        }
+        return target.initializer
+            .accept(new ConstnessEvaluator(coreTypes, target.fileUri));
+      } else {
+        return const ConstnessInfo.decidedNew();
+      }
+    } else {
+      // TODO(dmitryas): Handle the case of a tear-off.
+      return const ConstnessInfo.taintedConst(null);
+    }
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
index 9d4fa71..2798fb5a 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
@@ -306,12 +306,8 @@
     cloned.isAbstract = true;
     cloned.isNoSuchMethodForwarder = true;
 
-    String name = cloned.name.name;
     cls.procedures.add(cloned);
     cloned.parent = cls;
-    DillMemberBuilder memberBuilder = new DillMemberBuilder(cloned, this);
-    memberBuilder.next = scopeBuilder[name];
-    scopeBuilder.addMember(name, memberBuilder);
   }
 
   void addNoSuchMethodForwarders(ClassHierarchy hierarchy) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
index 4cbda32..5bd9437 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
@@ -810,12 +810,20 @@
     }
 
     for (KernelLibraryBuilder part in parts) {
-      library.addPart(new LibraryPart(<Expression>[], part.fileUri));
       part.addDependencies(library, seen);
     }
   }
 
   @override
+  void addPart(List<MetadataBuilder> metadata, String uri, int charOffset) {
+    super.addPart(metadata, uri, charOffset);
+    // TODO(ahe): [metadata] should be stored, evaluated, and added to [part].
+    LibraryPart part = new LibraryPart(<Expression>[], uri)
+      ..fileOffset = charOffset;
+    library.addPart(part);
+  }
+
+  @override
   Library build(LibraryBuilder coreLibrary) {
     super.build(coreLibrary);
 
diff --git a/pkg/front_end/lib/src/fasta/parser/parser.dart b/pkg/front_end/lib/src/fasta/parser/parser.dart
index ed58944..f53eba3 100644
--- a/pkg/front_end/lib/src/fasta/parser/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser/parser.dart
@@ -1379,113 +1379,6 @@
     }
   }
 
-  /// If the token after [token] begins a valid type reference
-  /// or looks like a valid type reference, then return the last token
-  /// in that type reference, otherwise return [token].
-  ///
-  /// For example, it is an error when built-in keyword is being used as a type,
-  /// as in `abstract<t> foo`. In situations such as this, return the last
-  /// token in that type reference and assume the caller will report the error
-  /// and recover.
-  Token skipTypeReferenceOpt(Token token, bool inDeclaration) {
-    final Token beforeStart = token;
-    Token next = token.next;
-
-    TokenType type = next.type;
-    bool looksLikeTypeRef = false;
-    if (type != TokenType.IDENTIFIER) {
-      String value = next.stringValue;
-      if (identical(value, 'get') || identical(value, 'set')) {
-        // No type reference.
-        return beforeStart;
-      } else if (identical(value, 'factory') || identical(value, 'operator')) {
-        Token next2 = next.next;
-        if (!optional('<', next2) || next2.endGroup == null) {
-          // No type reference.
-          return beforeStart;
-        }
-        // Even though built-ins cannot be used as a type,
-        // it looks like its being used as such.
-      } else if (identical(value, 'void')) {
-        // Found type reference.
-        looksLikeTypeRef = true;
-      } else if (identical(value, 'Function')) {
-        // Found type reference.
-        return skipGenericFunctionType(token);
-      } else if (identical(value, 'typedef')) {
-        // `typedef` can be used as a prefix.
-        // For example: `typedef.A x = new typedef.A();`
-        if (!optional('.', next.next)) {
-          // No type reference.
-          return beforeStart;
-        }
-      } else if (!next.isIdentifier) {
-        // No type reference.
-        return beforeStart;
-      }
-    }
-    token = next;
-    next = token.next;
-
-    if (optional('.', next)) {
-      token = next;
-      next = token.next;
-      if (next.type != TokenType.IDENTIFIER) {
-        String value = next.stringValue;
-        if (identical(value, '<')) {
-          // Found a type reference, but missing an identifier after the period.
-          rewriteAndRecover(
-              token,
-              fasta.templateExpectedIdentifier.withArguments(next),
-              new SyntheticStringToken(
-                  TokenType.IDENTIFIER, '', next.charOffset, 0));
-          // Fall through to continue processing as a type reference.
-          next = token.next;
-        } else if (!next.isIdentifier) {
-          if (identical(value, 'void')) {
-            looksLikeTypeRef = true;
-            // Found a type reference, but the period
-            // and preceding identifier are both invalid.
-            reportRecoverableErrorWithToken(
-                token, fasta.templateUnexpectedToken);
-            // Fall through to continue processing as a type reference.
-          } else {
-            // No type reference.
-            return beforeStart;
-          }
-        }
-      }
-      token = next;
-      next = token.next;
-    }
-
-    if (optional('<', next)) {
-      token = next.endGroup;
-      if (token == null) {
-        // TODO(danrubel): Consider better recovery
-        // because this is probably a type reference.
-        return beforeStart;
-      }
-      next = token.next;
-      if (optional('(', next)) {
-        // No type reference - e.g. `f<E>()`.
-        return beforeStart;
-      }
-    }
-
-    if (optional('Function', next)) {
-      looksLikeTypeRef = true;
-      token = skipGenericFunctionType(token);
-      next = token.next;
-    }
-
-    return next.isIdentifier ||
-            (inDeclaration && next.isOperator && !optional('=', next)) ||
-            looksLikeTypeRef
-        ? token
-        : beforeStart;
-  }
-
   /// Returns `true` if [token] matches '<' type (',' type)* '>' '(', and
   /// otherwise returns `false`. The final '(' is not part of the grammar
   /// construct `typeArguments`, but it is required here such that type
@@ -2892,14 +2785,8 @@
     typeContinuation ??= TypeContinuation.Required;
 
     Token beforeType = token;
-    // TODO(danrubel): Consider changing the listener contract
-    // so that the type reference can be parsed immediately
-    // rather than skipped now and parsed later.
-    token = skipTypeReferenceOpt(token, true);
-    if (token == beforeType) {
-      // There is no type reference.
-      beforeType = null;
-    }
+    TypeInfo typeInfo = computeType(token, false);
+    token = typeInfo.skipType(token);
     next = token.next;
 
     Token getOrSet;
@@ -2984,13 +2871,17 @@
         }
       }
       return parseTopLevelMethod(
-          beforeStart, externalToken, beforeType, getOrSet, token);
+          beforeStart, externalToken, beforeType, typeInfo, getOrSet, token);
     }
 
     if (getOrSet != null) {
       reportRecoverableErrorWithToken(
           getOrSet, fasta.templateExtraneousModifier);
     }
+    // TODO(danrubel): Use typeInfo when parsing fields.
+    if (typeInfo == noTypeInfo) {
+      beforeType = null;
+    }
     return parseFields(beforeStart, externalToken, null, null, varFinalOrConst,
         beforeType, token, MemberKind.TopLevelField, typeContinuation);
   }
@@ -3053,14 +2944,10 @@
   }
 
   Token parseTopLevelMethod(Token beforeStart, Token externalToken,
-      Token beforeType, Token getOrSet, Token beforeName) {
+      Token beforeType, TypeInfo typeInfo, Token getOrSet, Token beforeName) {
     listener.beginTopLevelMethod(beforeStart, externalToken);
 
-    if (beforeType == null) {
-      listener.handleNoType(beforeName);
-    } else {
-      parseType(beforeType, TypeContinuation.Optional);
-    }
+    typeInfo.parseType(beforeType, this);
     Token name = ensureIdentifier(
         beforeName, IdentifierContext.topLevelFunctionDeclaration);
 
@@ -3722,6 +3609,9 @@
             getOrSet, fasta.templateExtraneousModifier);
       }
       // TODO(danrubel): Use typeInfo when parsing fields.
+      if (typeInfo == noTypeInfo) {
+        beforeType = null;
+      }
       token = parseFields(
           beforeStart,
           externalToken,
@@ -4320,6 +4210,11 @@
       return parseExpressionStatementOrConstDeclaration(token);
     } else if (!inPlainSync && identical(value, 'await')) {
       return parseExpressionStatement(token);
+    } else if (identical(value, 'set') && token.next.next.isIdentifier) {
+      // Recovery: invalid use of `set`
+      reportRecoverableErrorWithToken(
+          token.next, fasta.templateUnexpectedToken);
+      return parseStatementX(token.next);
     } else if (token.next.isIdentifier) {
       if (optional(':', token.next.next)) {
         return parseLabeledStatement(token);
@@ -6509,6 +6404,10 @@
             getOrSet,
             token);
       } else {
+        // TODO(danrubel): Use typeInfo when parsing fields.
+        if (typeInfo == noTypeInfo) {
+          beforeType = null;
+        }
         token = parseFields(
             beforeStart,
             externalToken,
diff --git a/pkg/front_end/lib/src/fasta/parser/type_info.dart b/pkg/front_end/lib/src/fasta/parser/type_info.dart
index 5723020..4b2394a 100644
--- a/pkg/front_end/lib/src/fasta/parser/type_info.dart
+++ b/pkg/front_end/lib/src/fasta/parser/type_info.dart
@@ -118,13 +118,25 @@
   if (!isValidTypeReference(next)) {
     if (next.type.isBuiltIn) {
       Token afterType = next.next;
-      if (optional('<', afterType) && afterType.endGroup != null) {
+      if (optional('<', afterType) &&
+          afterType.endGroup != null &&
+          looksLikeName(afterType.endGroup.next)) {
         // Recovery: built-in used as a type
-        return new ComplexTypeInfo(token)
-            .computeSimpleWithTypeArguments(required);
-      } else if (isGeneralizedFunctionType(afterType)) {
-        // Recovery: built-in used as a type
-        return new ComplexTypeInfo(token).computeIdentifierGFT(required);
+        return new ComplexTypeInfo(token).computeBuiltinAsType(required);
+      } else {
+        String value = next.stringValue;
+        if (!identical('get', value) &&
+            !identical('set', value) &&
+            !identical('factory', value) &&
+            !identical('operator', value)) {
+          if (isGeneralizedFunctionType(afterType)) {
+            // Recovery: built-in used as a type
+            return new ComplexTypeInfo(token).computeBuiltinAsType(required);
+          } else if (required) {
+            // Recovery: built-in used as a type
+            return new ComplexTypeInfo(token).computeBuiltinAsType(required);
+          }
+        }
       }
     }
     return noTypeInfo;
@@ -216,7 +228,10 @@
 /// Instances of [ComplexTypeInfo] are returned by [computeType] to represent
 /// type references that cannot be represented by the constants above.
 class ComplexTypeInfo implements TypeInfo {
+  /// The first token in the type reference.
   final Token start;
+
+  /// The last token in the type reference.
   Token end;
 
   /// Non-null if type arguments were seen during analysis.
@@ -311,9 +326,11 @@
     assert(optional('Function', start));
     computeRest(start, required);
 
-    return gftHasReturnType != null
-        ? this
-        : required ? simpleTypeInfo : noTypeInfo;
+    if (gftHasReturnType == null) {
+      return required ? simpleTypeInfo : noTypeInfo;
+    }
+    assert(end != null);
+    return this;
   }
 
   /// Given void `Function` non-identifier, compute the type
@@ -323,23 +340,53 @@
     assert(optional('Function', start.next));
     computeRest(start.next, required);
 
-    return gftHasReturnType != null ? this : voidTypeInfo;
+    if (gftHasReturnType == null) {
+      return voidTypeInfo;
+    }
+    assert(end != null);
+    return this;
+  }
+
+  /// Given a builtin, return the receiver so that parseType will report
+  /// an error for the builtin used as a type.
+  TypeInfo computeBuiltinAsType(bool required) {
+    assert(start.type.isBuiltIn);
+    end = start;
+    Token token = start.next;
+    if (optional('<', token)) {
+      typeArguments = token;
+      token = skipTypeArguments(typeArguments);
+      if (token == null) {
+        token = typeArguments;
+        typeArguments = null;
+      } else {
+        end = token;
+      }
+    }
+    computeRest(token, required);
+
+    assert(end != null);
+    return this;
   }
 
   /// Given identifier `Function` non-identifier, compute the type
   /// and return the receiver or one of the [TypeInfo] constants.
   TypeInfo computeIdentifierGFT(bool required) {
-    assert(isValidTypeReference(start) || start.type.isBuiltIn);
+    assert(isValidTypeReference(start));
     assert(optional('Function', start.next));
     computeRest(start.next, required);
 
-    return gftHasReturnType != null ? this : simpleTypeInfo;
+    if (gftHasReturnType == null) {
+      return simpleTypeInfo;
+    }
+    assert(end != null);
+    return this;
   }
 
   /// Given identifier `<` ... `>`, compute the type
   /// and return the receiver or one of the [TypeInfo] constants.
   TypeInfo computeSimpleWithTypeArguments(bool required) {
-    assert(isValidTypeReference(start) || start.type.isBuiltIn);
+    assert(isValidTypeReference(start));
     typeArguments = start.next;
     assert(optional('<', typeArguments));
 
@@ -350,9 +397,11 @@
     end = token;
     computeRest(token.next, required);
 
-    return required || looksLikeName(end.next) || gftHasReturnType != null
-        ? this
-        : noTypeInfo;
+    if (!required && !looksLikeName(end.next) && gftHasReturnType == null) {
+      return noTypeInfo;
+    }
+    assert(end != null);
+    return this;
   }
 
   /// Given identifier `.` identifier, compute the type
@@ -377,9 +426,11 @@
     }
     computeRest(token, required);
 
-    return required || looksLikeName(end.next) || gftHasReturnType != null
-        ? this
-        : noTypeInfo;
+    if (!required && !looksLikeName(end.next) && gftHasReturnType == null) {
+      return noTypeInfo;
+    }
+    assert(end != null);
+    return this;
   }
 
   void computeRest(Token token, bool required) {
@@ -401,6 +452,9 @@
       if (token == null) {
         break; // Not a function type.
       }
+      if (!required && !token.next.isIdentifier) {
+        break; // `Function` used as the name in a function declaration.
+      }
       assert(optional(')', token));
       gftHasReturnType ??= typeVariableStart != start;
       typeVariableStarters = typeVariableStarters.prepend(typeVariableStart);
diff --git a/pkg/front_end/test/fasta/parser/type_info_test.dart b/pkg/front_end/test/fasta/parser/type_info_test.dart
index 331eb7e..6d4b93b 100644
--- a/pkg/front_end/test/fasta/parser/type_info_test.dart
+++ b/pkg/front_end/test/fasta/parser/type_info_test.dart
@@ -181,16 +181,35 @@
     expectInfo(noTypeInfo, 'operator *');
   }
 
+  void test_computeType_builtin() {
+    // Expect complex rather than simpleTypeInfo so that parseType reports
+    // an error for the builtin used as a type.
+    expectComplexInfo('abstract',
+        required: true,
+        expectedErrors: [error(codeBuiltInIdentifierAsType, 0, 8)]);
+    expectComplexInfo('export',
+        required: true,
+        expectedErrors: [error(codeBuiltInIdentifierAsType, 0, 6)]);
+    expectComplexInfo('abstract Function()',
+        required: false,
+        tokenAfter: 'Function',
+        expectedErrors: [error(codeBuiltInIdentifierAsType, 0, 8)]);
+    expectComplexInfo('export Function()',
+        required: false,
+        tokenAfter: 'Function',
+        expectedErrors: [error(codeBuiltInIdentifierAsType, 0, 6)]);
+  }
+
   void test_computeType_gft() {
-    expectComplexInfo('Function()', expectedCalls: [
+    expectComplexInfo('Function() m', tokenAfter: 'm', expectedCalls: [
       'handleNoTypeVariables (',
       'beginFunctionType Function',
       'handleNoType ',
       'beginFormalParameters ( MemberKind.GeneralizedFunctionType',
       'endFormalParameters 0 ( ) MemberKind.GeneralizedFunctionType',
-      'endFunctionType Function ',
+      'endFunctionType Function m',
     ]);
-    expectComplexInfo('Function<T>()', expectedCalls: [
+    expectComplexInfo('Function<T>() m', tokenAfter: 'm', expectedCalls: [
       'beginTypeVariables <',
       'beginTypeVariable T',
       'beginMetadataStar T',
@@ -203,9 +222,9 @@
       'handleNoType ',
       'beginFormalParameters ( MemberKind.GeneralizedFunctionType',
       'endFormalParameters 0 ( ) MemberKind.GeneralizedFunctionType',
-      'endFunctionType Function ',
+      'endFunctionType Function m',
     ]);
-    expectComplexInfo('Function(int)', expectedCalls: [
+    expectComplexInfo('Function(int) m', tokenAfter: 'm', expectedCalls: [
       'handleNoTypeVariables (',
       'beginFunctionType Function',
       'handleNoType ',
@@ -222,9 +241,9 @@
       'beginTypeVariables null null ) FormalParameterKind.mandatory '
           'MemberKind.GeneralizedFunctionType',
       'endFormalParameters 1 ( ) MemberKind.GeneralizedFunctionType',
-      'endFunctionType Function ',
+      'endFunctionType Function m',
     ]);
-    expectComplexInfo('Function<T>(int)', expectedCalls: [
+    expectComplexInfo('Function<T>(int) m', tokenAfter: 'm', expectedCalls: [
       'beginTypeVariables <',
       'beginTypeVariable T',
       'beginMetadataStar T',
@@ -247,11 +266,22 @@
       'handleFormalParameterWithoutValue )',
       'beginTypeVariables null null ) FormalParameterKind.mandatory MemberKind.GeneralizedFunctionType',
       'endFormalParameters 1 ( ) MemberKind.GeneralizedFunctionType',
-      'endFunctionType Function ',
+      'endFunctionType Function m',
     ]);
-    expectComplexInfo('Function(int x)');
-    expectComplexInfo('Function<T>(int x)');
-    expectComplexInfo('Function<T>(int x) Function<T>(int x)');
+
+    expectInfo(noTypeInfo, 'Function(int x)', required: false);
+    expectInfo(noTypeInfo, 'Function<T>(int x)', required: false);
+
+    expectComplexInfo('Function(int x)', required: true);
+    expectComplexInfo('Function<T>(int x)', required: true);
+
+    expectComplexInfo('Function(int x) m', tokenAfter: 'm');
+    expectComplexInfo('Function<T>(int x) m', tokenAfter: 'm');
+    expectComplexInfo('Function<T>(int x) Function<T>(int x)',
+        required: false, tokenAfter: 'Function');
+    expectComplexInfo('Function<T>(int x) Function<T>(int x)', required: true);
+    expectComplexInfo('Function<T>(int x) Function<T>(int x) m',
+        tokenAfter: 'm');
   }
 
   void test_computeType_identifier() {
@@ -282,14 +312,25 @@
   }
 
   void test_computeType_identifierComplex() {
-    expectComplexInfo('C Function()');
-    expectComplexInfo('C Function<T>()');
-    expectComplexInfo('C Function(int)');
-    expectComplexInfo('C Function<T>(int)');
-    expectComplexInfo('C Function(int x)');
-    expectComplexInfo('C Function<T>(int x)');
-    expectComplexInfo('C Function<T>(int x) Function<T>(int x)');
+    expectInfo(simpleTypeInfo, 'C Function()', required: false);
+    expectInfo(simpleTypeInfo, 'C Function<T>()', required: false);
+    expectInfo(simpleTypeInfo, 'C Function(int)', required: false);
+    expectInfo(simpleTypeInfo, 'C Function<T>(int)', required: false);
+    expectInfo(simpleTypeInfo, 'C Function(int x)', required: false);
+    expectInfo(simpleTypeInfo, 'C Function<T>(int x)', required: false);
+
+    expectComplexInfo('C Function()', required: true);
+    expectComplexInfo('C Function<T>()', required: true);
+    expectComplexInfo('C Function(int)', required: true);
+    expectComplexInfo('C Function<T>(int)', required: true);
+    expectComplexInfo('C Function(int x)', required: true);
+    expectComplexInfo('C Function<T>(int x)', required: true);
+    expectComplexInfo('C Function<T>(int x) Function<T>(int x)',
+        required: false, tokenAfter: 'Function');
+    expectComplexInfo('C Function<T>(int x) Function<T>(int x)',
+        required: true);
     expectComplexInfo('C Function(', // Scanner inserts synthetic ')'.
+        required: true,
         expectedCalls: [
           'handleNoTypeVariables (',
           'beginFunctionType C',
@@ -387,6 +428,7 @@
 
   void test_computeType_identifierTypeArgGFT() {
     expectComplexInfo('C<T> Function(', // Scanner inserts synthetic ')'.
+        required: true,
         expectedCalls: [
           'handleNoTypeVariables (',
           'beginFunctionType C',
@@ -401,7 +443,10 @@
           'endFormalParameters 0 ( ) MemberKind.GeneralizedFunctionType',
           'endFunctionType Function ',
         ]);
-    expectComplexInfo('C<T> Function<T>(int x) Function<T>(int x)');
+    expectComplexInfo('C<T> Function<T>(int x) Function<T>(int x)',
+        required: false, tokenAfter: 'Function');
+    expectComplexInfo('C<T> Function<T>(int x) Function<T>(int x)',
+        required: true);
   }
 
   void test_computeType_identifierTypeArgRecovery() {
@@ -479,6 +524,7 @@
 
   void test_computeType_prefixedGFT() {
     expectComplexInfo('C.a Function(', // Scanner inserts synthetic ')'.
+        required: true,
         expectedCalls: [
           'handleNoTypeVariables (',
           'beginFunctionType C',
@@ -491,7 +537,10 @@
           'endFormalParameters 0 ( ) MemberKind.GeneralizedFunctionType',
           'endFunctionType Function ',
         ]);
-    expectComplexInfo('C.a Function<T>(int x) Function<T>(int x)');
+    expectComplexInfo('C.a Function<T>(int x) Function<T>(int x)',
+        required: false, tokenAfter: 'Function');
+    expectComplexInfo('C.a Function<T>(int x) Function<T>(int x)',
+        required: true);
   }
 
   void test_computeType_prefixedTypeArg() {
@@ -522,6 +571,7 @@
 
   void test_computeType_prefixedTypeArgGFT() {
     expectComplexInfo('C.a<T> Function<T>(int x) Function<T>(int x)',
+        required: true,
         expectedCalls: [
           'beginTypeVariables <',
           'beginTypeVariable T',
@@ -596,6 +646,7 @@
     expectInfo(voidTypeInfo, 'void operator');
     expectInfo(voidTypeInfo, 'void Function');
     expectComplexInfo('void Function(', // Scanner inserts synthetic ')'.
+        required: true,
         expectedCalls: [
           'handleNoTypeVariables (',
           'beginFunctionType void',
@@ -607,7 +658,8 @@
   }
 
   void test_computeType_voidComplex() {
-    expectComplexInfo('void Function()', expectedCalls: [
+    expectInfo(voidTypeInfo, 'void Function()', required: false);
+    expectComplexInfo('void Function()', required: true, expectedCalls: [
       'handleNoTypeVariables (',
       'beginFunctionType void',
       'handleVoidKeyword void',
@@ -615,12 +667,23 @@
       'endFormalParameters 0 ( ) MemberKind.GeneralizedFunctionType',
       'endFunctionType Function ',
     ]);
-    expectComplexInfo('void Function<T>()');
-    expectComplexInfo('void Function(int)');
-    expectComplexInfo('void Function<T>(int)');
-    expectComplexInfo('void Function(int x)');
-    expectComplexInfo('void Function<T>(int x)');
-    expectComplexInfo('void Function<T>(int x) Function<T>(int x)');
+
+    expectInfo(voidTypeInfo, 'void Function<T>()', required: false);
+    expectInfo(voidTypeInfo, 'void Function(int)', required: false);
+    expectInfo(voidTypeInfo, 'void Function<T>(int)', required: false);
+    expectInfo(voidTypeInfo, 'void Function(int x)', required: false);
+    expectInfo(voidTypeInfo, 'void Function<T>(int x)', required: false);
+
+    expectComplexInfo('void Function<T>()', required: true);
+    expectComplexInfo('void Function(int)', required: true);
+    expectComplexInfo('void Function<T>(int)', required: true);
+    expectComplexInfo('void Function(int x)', required: true);
+    expectComplexInfo('void Function<T>(int x)', required: true);
+
+    expectComplexInfo('void Function<T>(int x) Function<T>(int x)',
+        required: false, tokenAfter: 'Function');
+    expectComplexInfo('void Function<T>(int x) Function<T>(int x)',
+        required: true);
   }
 }
 
diff --git a/pkg/front_end/test/incremental_load_from_dill_test.dart b/pkg/front_end/test/incremental_load_from_dill_test.dart
index 93bd46b..b324e31 100644
--- a/pkg/front_end/test/incremental_load_from_dill_test.dart
+++ b/pkg/front_end/test/incremental_load_from_dill_test.dart
@@ -93,10 +93,9 @@
   Future<Result<TestData>> run(TestData data, Context context) async {
     YamlMap map = data.map;
     switch (map["type"]) {
-      case "simple":
-        await simpleTest(
+      case "basic":
+        await basicTest(
           map["sources"],
-          map["name"],
           map["entry"],
           map["strong"],
           map["invalidate"],
@@ -116,13 +115,8 @@
   }
 }
 
-void simpleTest(
-    Map<String, String> sourceFiles,
-    String testName,
-    String entryPoint,
-    bool strong,
-    List<String> invalidate,
-    Directory outDir) async {
+void basicTest(Map<String, String> sourceFiles, String entryPoint, bool strong,
+    List<String> invalidate, Directory outDir) async {
   Uri entryPointUri;
   Set<String> invalidateFilenames = invalidate?.toSet() ?? new Set<String>();
   List<Uri> invalidateUris = <Uri>[];
@@ -139,9 +133,8 @@
     new File.fromUri(uri).writeAsStringSync(source);
   }
 
-  Uri output = outDir.uri.resolve("${testName}_full.dill");
-  Uri initializedOutput =
-      outDir.uri.resolve("${testName}_full_from_initialized.dill");
+  Uri output = outDir.uri.resolve("full.dill");
+  Uri initializedOutput = outDir.uri.resolve("full_from_initialized.dill");
 
   Stopwatch stopwatch = new Stopwatch()..start();
   CompilerOptions options = getOptions(strong);
diff --git a/pkg/front_end/testcases/compile.status b/pkg/front_end/testcases/compile.status
index f06a2f9..31b8193 100644
--- a/pkg/front_end/testcases/compile.status
+++ b/pkg/front_end/testcases/compile.status
@@ -126,5 +126,3 @@
 
 co19_language_metadata_syntax_t04: RuntimeError # Fasta doesn't recover well
 external_import: RuntimeError # Expected -- test uses import which doesn't exist.
-
-implicit_const_with_static_fields: Fail
diff --git a/pkg/front_end/testcases/implicit_const_with_static_fields.dart.direct.expect b/pkg/front_end/testcases/implicit_const_with_static_fields.dart.direct.expect
new file mode 100644
index 0000000..f928029
--- /dev/null
+++ b/pkg/front_end/testcases/implicit_const_with_static_fields.dart.direct.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static const field dynamic constField = 87;
+  const constructor •(dynamic x) → void
+    : super core::Object::•()
+    ;
+}
+static const field dynamic constTopLevelField = 42;
+static method main() → dynamic {
+  const self::C::•(self::C::constField);
+  const self::C::•(self::constTopLevelField);
+}
diff --git a/pkg/front_end/testcases/implicit_const_with_static_fields.dart.direct.transformed.expect b/pkg/front_end/testcases/implicit_const_with_static_fields.dart.direct.transformed.expect
new file mode 100644
index 0000000..f928029
--- /dev/null
+++ b/pkg/front_end/testcases/implicit_const_with_static_fields.dart.direct.transformed.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static const field dynamic constField = 87;
+  const constructor •(dynamic x) → void
+    : super core::Object::•()
+    ;
+}
+static const field dynamic constTopLevelField = 42;
+static method main() → dynamic {
+  const self::C::•(self::C::constField);
+  const self::C::•(self::constTopLevelField);
+}
diff --git a/pkg/front_end/testcases/implicit_const_with_static_fields.dart.outline.expect b/pkg/front_end/testcases/implicit_const_with_static_fields.dart.outline.expect
new file mode 100644
index 0000000..ad0b9c4
--- /dev/null
+++ b/pkg/front_end/testcases/implicit_const_with_static_fields.dart.outline.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static const field dynamic constField;
+  const constructor •(dynamic x) → void
+    ;
+}
+static const field dynamic constTopLevelField;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/implicit_const_with_static_fields.dart.strong.expect b/pkg/front_end/testcases/implicit_const_with_static_fields.dart.strong.expect
new file mode 100644
index 0000000..90d9837
--- /dev/null
+++ b/pkg/front_end/testcases/implicit_const_with_static_fields.dart.strong.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static const field core::int constField = 87;
+  const constructor •(dynamic x) → void
+    : super core::Object::•()
+    ;
+}
+static const field core::int constTopLevelField = 42;
+static method main() → dynamic {
+  const self::C::•(self::C::constField);
+  const self::C::•(self::constTopLevelField);
+}
diff --git a/pkg/front_end/testcases/implicit_const_with_static_fields.dart.strong.transformed.expect b/pkg/front_end/testcases/implicit_const_with_static_fields.dart.strong.transformed.expect
new file mode 100644
index 0000000..90d9837
--- /dev/null
+++ b/pkg/front_end/testcases/implicit_const_with_static_fields.dart.strong.transformed.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static const field core::int constField = 87;
+  const constructor •(dynamic x) → void
+    : super core::Object::•()
+    ;
+}
+static const field core::int constTopLevelField = 42;
+static method main() → dynamic {
+  const self::C::•(self::C::constField);
+  const self::C::•(self::constTopLevelField);
+}
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/calculated_bounds_no_strongmode.yaml b/pkg/front_end/testcases/incremental_initialize_from_dill/calculated_bounds_no_strongmode.yaml
index c6eb17a..9b471de 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/calculated_bounds_no_strongmode.yaml
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/calculated_bounds_no_strongmode.yaml
@@ -5,18 +5,17 @@
 # Test compiling in non-strong-mode from source and initializing from dill.
 # Make sure that any inference if done in the same way.
 
-type: simple
-name: testCalculatedBounds
-entry: testCalculatedBounds_a.dart
+type: basic
+entry: a.dart
 strong: false
 invalidate:
-  - testCalculatedBounds_a.dart
+  - a.dart
 sources:
-  testCalculatedBounds_a.dart: |
-    import 'testCalculatedBounds_b.dart';
+  a.dart: |
+    import 'b.dart';
 
     class A {
       void foo(B cls) {}
     }
-  testCalculatedBounds_b.dart: |
+  b.dart: |
     abstract class B<T extends String> {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/deferred_library.yaml b/pkg/front_end/testcases/incremental_initialize_from_dill/deferred_library.yaml
index 7ffc3f1..7ea4cc0 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/deferred_library.yaml
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/deferred_library.yaml
@@ -5,17 +5,16 @@
 # Test loading from a dill file with a deferred library.
 # This is done by initializing from dill and making no changes/invalidations.
 
-type: simple
-name: testDeferredLibrary
-entry: testDeferredLibrary_main.dart
+type: basic
+entry: a.dart
 strong: false
 invalidate:
 sources:
-  testDeferredLibrary_main.dart: |
-    import 'testDeferredLibrary_b.dart' deferred as b;
+  a.dart: |
+    import 'b.dart' deferred as b;
 
     void main() {
       print(b.foo());
     }
-  testDeferredLibrary_b.dart: |
+  b.dart: |
     String foo() => "hello from foo in b";
\ No newline at end of file
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/invalidate_export_of_main.yaml b/pkg/front_end/testcases/incremental_initialize_from_dill/invalidate_export_of_main.yaml
index 5a11db2..07e5102 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/invalidate_export_of_main.yaml
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/invalidate_export_of_main.yaml
@@ -4,14 +4,13 @@
 
 # Invalidate the entrypoint which just exports another file (which has main).
 
-type: simple
-name: testInvalidateExportOfMain
-entry: testInvalidateExportOfMain_a.dart
+type: basic
+entry: a.dart
 strong: true
 invalidate:
-  - testInvalidateExportOfMain_a.dart
+  - a.dart
 sources:
-  testInvalidateExportOfMain_a.dart: |
-    export 'testInvalidateExportOfMain_b.dart';
-  testInvalidateExportOfMain_b.dart: |
+  a.dart: |
+    export 'b.dart';
+  b.dart: |
     main() { print("hello"); }
\ No newline at end of file
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/invalidate_package_part_as_file.yaml b/pkg/front_end/testcases/incremental_initialize_from_dill/invalidate_package_part_as_file.yaml
index 759ae72..43eb78b 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/invalidate_package_part_as_file.yaml
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/invalidate_package_part_as_file.yaml
@@ -4,8 +4,7 @@
 
 # Test that invalidating a part of a package works with file URI.
 
-type: simple
-name: testDeferredLibrary
+type: basic
 entry: "package:dummy/main.dart"
 strong: false
 invalidate:
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/invalidate_package_part_as_package.yaml b/pkg/front_end/testcases/incremental_initialize_from_dill/invalidate_package_part_as_package.yaml
index 759ae72..43eb78b 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/invalidate_package_part_as_package.yaml
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/invalidate_package_part_as_package.yaml
@@ -4,8 +4,7 @@
 
 # Test that invalidating a part of a package works with file URI.
 
-type: simple
-name: testDeferredLibrary
+type: basic
 entry: "package:dummy/main.dart"
 strong: false
 invalidate:
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/invalidate_part.yaml b/pkg/front_end/testcases/incremental_initialize_from_dill/invalidate_part.yaml
index e3828ea..8ff940e 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/invalidate_part.yaml
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/invalidate_part.yaml
@@ -4,23 +4,22 @@
 
 # Invalidate a part file.
 
-type: simple
-name: testInvalidatePart
-entry: testInvalidatePart_a.dart
+type: basic
+entry: a.dart
 strong: true
 invalidate:
-  - testInvalidatePart_b.dart
+  - b.dart
 sources:
-  testInvalidatePart_a.dart: |
+  a.dart: |
     library a;
-    import 'testInvalidatePart_c.dart';
-    part 'testInvalidatePart_b.dart';
-  testInvalidatePart_b.dart: |
+    import 'c.dart';
+    part 'b.dart';
+  b.dart: |
     part of a;
     b() { print("b"); }
-  testInvalidatePart_c.dart: |
+  c.dart: |
     library c;
-    part 'testInvalidatePart_d.dart';
-  testInvalidatePart_d.dart: |
+    part 'd.dart';
+  d.dart: |
     part of c;
     d() { print("d"); }
\ No newline at end of file
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/mixin_from_sdk.yaml b/pkg/front_end/testcases/incremental_initialize_from_dill/mixin_from_sdk.yaml
index b86dbc7..30d267a 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/mixin_from_sdk.yaml
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/mixin_from_sdk.yaml
@@ -6,14 +6,13 @@
 # Make sure compiling from source and compiling where we initialize from dill
 # ends up including the same source code.
 
-type: simple
-name: testMixinFromSdk
-entry: testMixinFromSdk_a.dart
+type: basic
+entry: a.dart
 strong: true
 invalidate:
-  - testMixinFromSdk_a.dart
+  - a.dart
 sources:
-  testMixinFromSdk_a.dart: |
+  a.dart: |
     import 'dart:collection';
 
     class Foo extends Object with ListMixin<int> {
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/strongmode_mixins.yaml b/pkg/front_end/testcases/incremental_initialize_from_dill/strongmode_mixins.yaml
index dbabbd3..1981950 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/strongmode_mixins.yaml
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/strongmode_mixins.yaml
@@ -6,16 +6,15 @@
 # on something compiled from source and (potentially) goes into
 # something loaded from dill.
 
-type: simple
-name: testStrongModeMixins
-entry: testStrongModeMixins_a.dart
+type: basic
+entry: a.dart
 strong: true
 invalidate:
-  - testStrongModeMixins_a.dart
+  - a.dart
 sources:
-  testStrongModeMixins_a.dart: |
-    import 'testStrongModeMixins_b.dart';
+  a.dart: |
+    import 'b.dart';
     class A extends Object with B<Object>, C {}
-  testStrongModeMixins_b.dart: |
+  b.dart: |
     abstract class C<T extends Object> extends Object with B<T> {}
     abstract class B<ChildType extends Object> extends Object {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/strongmode_mixins_2.yaml b/pkg/front_end/testcases/incremental_initialize_from_dill/strongmode_mixins_2.yaml
index 4907a06..b82c820 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/strongmode_mixins_2.yaml
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/strongmode_mixins_2.yaml
@@ -4,17 +4,16 @@
 
 # Compile in strong mode. Use mixins.
 
-type: simple
-name: testStrongModeMixins2
-entry: testStrongModeMixins2_a.dart
+type: basic
+entry: a.dart
 strong: true
 invalidate:
-  - testStrongModeMixins2_a.dart
+  - a.dart
 sources:
-  testStrongModeMixins2_a.dart: |
-    import 'testStrongModeMixins2_b.dart';
+  a.dart: |
+    import 'b.dart';
     class A extends Object with B<C>, D<Object> {}
-  testStrongModeMixins2_b.dart: |
+  b.dart: |
     abstract class B<ChildType extends Object> extends Object {
       ChildType get child => null;
       set child(ChildType value) {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private.dart b/pkg/front_end/testcases/no_such_method_forwarders/private.dart
new file mode 100644
index 0000000..35827b5
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This test checks that private members of classes from other libraries don't
+// cause generation of noSuchMethod forwarders.
+
+library private;
+
+import './private_module.dart' show Fisk;
+
+abstract class Foo {
+  dynamic noSuchMethod(Invocation invocation) => 42;
+}
+
+class Bar extends Foo implements Fisk {}
+
+class Baz extends Foo implements Fisk {
+  _hest() => null;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private.dart.direct.expect b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.direct.expect
new file mode 100644
index 0000000..937b5a6
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.direct.expect
@@ -0,0 +1,27 @@
+library private;
+import self as self;
+import "dart:core" as core;
+import "./private_module.dart" as pri;
+
+abstract class Foo extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return 42;
+}
+class Bar extends self::Foo implements pri::Fisk {
+  synthetic constructor •() → void
+    : super self::Foo::•()
+    ;
+  abstract no-such-method-forwarder method /* from org-dartlang-testcase:///private_module.dart */ _hest() → void;
+}
+class Baz extends self::Foo implements pri::Fisk {
+  synthetic constructor •() → void
+    : super self::Foo::•()
+    ;
+  method _hest() → dynamic
+    return null;
+  abstract no-such-method-forwarder method /* from org-dartlang-testcase:///private_module.dart */ _hest() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private.dart.direct.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.direct.transformed.expect
new file mode 100644
index 0000000..937b5a6
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.direct.transformed.expect
@@ -0,0 +1,27 @@
+library private;
+import self as self;
+import "dart:core" as core;
+import "./private_module.dart" as pri;
+
+abstract class Foo extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return 42;
+}
+class Bar extends self::Foo implements pri::Fisk {
+  synthetic constructor •() → void
+    : super self::Foo::•()
+    ;
+  abstract no-such-method-forwarder method /* from org-dartlang-testcase:///private_module.dart */ _hest() → void;
+}
+class Baz extends self::Foo implements pri::Fisk {
+  synthetic constructor •() → void
+    : super self::Foo::•()
+    ;
+  method _hest() → dynamic
+    return null;
+  abstract no-such-method-forwarder method /* from org-dartlang-testcase:///private_module.dart */ _hest() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.outline.expect
new file mode 100644
index 0000000..1817793
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.outline.expect
@@ -0,0 +1,25 @@
+library private;
+import self as self;
+import "dart:core" as core;
+import "./private_module.dart" as pri;
+
+abstract class Foo extends core::Object {
+  synthetic constructor •() → void
+    ;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    ;
+}
+class Bar extends self::Foo implements pri::Fisk {
+  synthetic constructor •() → void
+    ;
+  abstract no-such-method-forwarder method /* from org-dartlang-testcase:///private_module.dart */ _hest() → void;
+}
+class Baz extends self::Foo implements pri::Fisk {
+  synthetic constructor •() → void
+    ;
+  method _hest() → dynamic
+    ;
+  abstract no-such-method-forwarder method /* from org-dartlang-testcase:///private_module.dart */ _hest() → void;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.strong.expect
new file mode 100644
index 0000000..937b5a6
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.strong.expect
@@ -0,0 +1,27 @@
+library private;
+import self as self;
+import "dart:core" as core;
+import "./private_module.dart" as pri;
+
+abstract class Foo extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return 42;
+}
+class Bar extends self::Foo implements pri::Fisk {
+  synthetic constructor •() → void
+    : super self::Foo::•()
+    ;
+  abstract no-such-method-forwarder method /* from org-dartlang-testcase:///private_module.dart */ _hest() → void;
+}
+class Baz extends self::Foo implements pri::Fisk {
+  synthetic constructor •() → void
+    : super self::Foo::•()
+    ;
+  method _hest() → dynamic
+    return null;
+  abstract no-such-method-forwarder method /* from org-dartlang-testcase:///private_module.dart */ _hest() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.strong.transformed.expect
new file mode 100644
index 0000000..937b5a6
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.strong.transformed.expect
@@ -0,0 +1,27 @@
+library private;
+import self as self;
+import "dart:core" as core;
+import "./private_module.dart" as pri;
+
+abstract class Foo extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return 42;
+}
+class Bar extends self::Foo implements pri::Fisk {
+  synthetic constructor •() → void
+    : super self::Foo::•()
+    ;
+  abstract no-such-method-forwarder method /* from org-dartlang-testcase:///private_module.dart */ _hest() → void;
+}
+class Baz extends self::Foo implements pri::Fisk {
+  synthetic constructor •() → void
+    : super self::Foo::•()
+    ;
+  method _hest() → dynamic
+    return null;
+  abstract no-such-method-forwarder method /* from org-dartlang-testcase:///private_module.dart */ _hest() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private_module.dart b/pkg/front_end/testcases/no_such_method_forwarders/private_module.dart
new file mode 100644
index 0000000..b7258fc
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private_module.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Supplement library for
+// pkg/front_end_testcases/no_such_method_forwarders/private.dart
+
+library private_module;
+
+abstract class Fisk {
+  void _hest();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private_module.dart.direct.expect b/pkg/front_end/testcases/no_such_method_forwarders/private_module.dart.direct.expect
new file mode 100644
index 0000000..9565466
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private_module.dart.direct.expect
@@ -0,0 +1,11 @@
+library private_module;
+import self as self;
+import "dart:core" as core;
+
+abstract class Fisk extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  abstract method _hest() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private_module.dart.direct.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/private_module.dart.direct.transformed.expect
new file mode 100644
index 0000000..9565466
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private_module.dart.direct.transformed.expect
@@ -0,0 +1,11 @@
+library private_module;
+import self as self;
+import "dart:core" as core;
+
+abstract class Fisk extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  abstract method _hest() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private_module.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/private_module.dart.outline.expect
new file mode 100644
index 0000000..fd3f8a1
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private_module.dart.outline.expect
@@ -0,0 +1,11 @@
+library private_module;
+import self as self;
+import "dart:core" as core;
+
+abstract class Fisk extends core::Object {
+  synthetic constructor •() → void
+    ;
+  abstract method _hest() → void;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private_module.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/private_module.dart.strong.expect
new file mode 100644
index 0000000..9565466
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private_module.dart.strong.expect
@@ -0,0 +1,11 @@
+library private_module;
+import self as self;
+import "dart:core" as core;
+
+abstract class Fisk extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  abstract method _hest() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private_module.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/private_module.dart.strong.transformed.expect
new file mode 100644
index 0000000..9565466
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private_module.dart.strong.transformed.expect
@@ -0,0 +1,11 @@
+library private_module;
+import self as self;
+import "dart:core" as core;
+
+abstract class Fisk extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  abstract method _hest() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart
new file mode 100644
index 0000000..983c5b7
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This test checks that a noSuchMethod forwarder is generated for an inherited
+// abstract private member that is declared in the same library as the
+// implementor.
+
+abstract class Foo {
+  void _foo();
+}
+
+class Bar extends Foo {
+  dynamic noSuchMethod(Invocation invocation) => null;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.direct.expect b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.direct.expect
new file mode 100644
index 0000000..dbc0d1d
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.direct.expect
@@ -0,0 +1,19 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Foo extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  abstract method _foo() → void;
+}
+class Bar extends self::Foo {
+  synthetic constructor •() → void
+    : super self::Foo::•()
+    ;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  abstract no-such-method-forwarder method _foo() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.direct.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.direct.transformed.expect
new file mode 100644
index 0000000..dbc0d1d
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.direct.transformed.expect
@@ -0,0 +1,19 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Foo extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  abstract method _foo() → void;
+}
+class Bar extends self::Foo {
+  synthetic constructor •() → void
+    : super self::Foo::•()
+    ;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  abstract no-such-method-forwarder method _foo() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.outline.expect
new file mode 100644
index 0000000..8dc462e
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.outline.expect
@@ -0,0 +1,18 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Foo extends core::Object {
+  synthetic constructor •() → void
+    ;
+  abstract method _foo() → void;
+}
+class Bar extends self::Foo {
+  synthetic constructor •() → void
+    ;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    ;
+  abstract no-such-method-forwarder method _foo() → void;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.strong.expect
new file mode 100644
index 0000000..dbc0d1d
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.strong.expect
@@ -0,0 +1,19 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Foo extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  abstract method _foo() → void;
+}
+class Bar extends self::Foo {
+  synthetic constructor •() → void
+    : super self::Foo::•()
+    ;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  abstract no-such-method-forwarder method _foo() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.strong.transformed.expect
new file mode 100644
index 0000000..dbc0d1d
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.strong.transformed.expect
@@ -0,0 +1,19 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Foo extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  abstract method _foo() → void;
+}
+class Bar extends self::Foo {
+  synthetic constructor •() → void
+    : super self::Foo::•()
+    ;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return null;
+  abstract no-such-method-forwarder method _foo() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/outline.status b/pkg/front_end/testcases/outline.status
index a31e6b7..80f615e 100644
--- a/pkg/front_end/testcases/outline.status
+++ b/pkg/front_end/testcases/outline.status
@@ -280,5 +280,3 @@
 rasta/issue_000047: Fail
 rasta/native_is_illegal: Pass # Issue 29763
 rasta/type_with_parse_error: Fail
-
-implicit_const_with_static_fields: Fail
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index a1d3394..6f767dc 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -33,7 +33,6 @@
 function_type_recovery: Fail
 functions: Fail
 hello: Fail
-implicit_const_with_static_fields: Fail
 implicit_this: Fail
 invocations: Fail
 literals: Fail
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index 6a577c3..2806388 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -238,8 +238,8 @@
 }
 
 type LibraryPart {
-  UriReference fileUri;
   List<Expression> annotations;
+  StringReference partUri;
 }
 
 type Typedef {
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index c2fa92f..dcb6c66 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -523,14 +523,11 @@
 ///     part <url>;
 ///
 /// optionally with metadata.
-class LibraryPart extends TreeNode implements FileUriNode {
+class LibraryPart extends TreeNode {
   final List<Expression> annotations;
-  final Uri fileUri;
+  final String partUri;
 
-  LibraryPart(List<Expression> annotations, Uri fileUri)
-      : this.byReference(annotations, fileUri);
-
-  LibraryPart.byReference(this.annotations, this.fileUri) {
+  LibraryPart(this.annotations, this.partUri) {
     setParents(annotations, this);
   }
 
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 951aedd..97fd9dd 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -715,9 +715,9 @@
   }
 
   LibraryPart readLibraryPart(Library library) {
-    var fileUri = readUriReference();
-    var annotations = readExpressionList();
-    return new LibraryPart(annotations, fileUri)..parent = library;
+    List<Expression> annotations = readExpressionList();
+    String partUri = readStringReference();
+    return new LibraryPart(annotations, partUri)..parent = library;
   }
 
   Typedef readTypedef() {
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index a050b72..ec68922 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -665,10 +665,8 @@
     if (_metadataSubsections != null) {
       _recordNodeOffsetForMetadataMapping(node);
     }
-    final Uri activeFileUriSaved = _activeFileUri;
-    _activeFileUri = writeUriReference(node.fileUri);
     writeNodeList(node.annotations);
-    _activeFileUri = activeFileUriSaved;
+    writeStringReference(node.partUri);
   }
 
   void visitTypedef(Typedef node) {
diff --git a/runtime/bin/dfe.cc b/runtime/bin/dfe.cc
index d6bad2b..6bccb8d 100644
--- a/runtime/bin/dfe.cc
+++ b/runtime/bin/dfe.cc
@@ -253,13 +253,17 @@
 }
 
 void* DFE::ReadScript(const char* script_uri) const {
+  int64_t start = Dart_TimelineGetMicros();
   const uint8_t* buffer = NULL;
   intptr_t buffer_length = -1;
   bool result = TryReadKernelFile(script_uri, &buffer, &buffer_length);
-  if (result) {
-    return Dart_ReadKernelBinary(buffer, buffer_length, ReleaseFetchedBytes);
-  }
-  return NULL;
+  void* read_binary =
+      result ? Dart_ReadKernelBinary(buffer, buffer_length, ReleaseFetchedBytes)
+             : NULL;
+  int64_t end = Dart_TimelineGetMicros();
+  Dart_TimelineEvent("DFE::ReadScript", start, end,
+                     Dart_Timeline_Event_Duration, 0, NULL, NULL);
+  return read_binary;
 }
 
 bool DFE::TryReadKernelFile(const char* script_uri,
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index f7868e1..99597f7 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -488,6 +488,7 @@
                                                 Dart_IsolateFlags* flags,
                                                 char** error,
                                                 int* exit_code) {
+  int64_t start = Dart_TimelineGetMicros();
   ASSERT(script_uri != NULL);
   void* kernel_program = NULL;
   AppSnapshot* app_snapshot = NULL;
@@ -579,15 +580,21 @@
 #if !defined(DART_PRECOMPILED_RUNTIME)
   }
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
+
+  Dart_Isolate created_isolate = NULL;
   if (isolate == NULL) {
     delete isolate_data;
-    return NULL;
+  } else {
+    bool set_native_resolvers = (kernel_program || isolate_snapshot_data);
+    created_isolate = IsolateSetupHelper(
+        isolate, is_main_isolate, script_uri, package_root, packages_config,
+        set_native_resolvers, isolate_run_app_snapshot, error, exit_code);
   }
+  int64_t end = Dart_TimelineGetMicros();
+  Dart_TimelineEvent("CreateIsolateAndSetupHelper", start, end,
+                     Dart_Timeline_Event_Duration, 0, NULL, NULL);
 
-  bool set_native_resolvers = (kernel_program || isolate_snapshot_data);
-  return IsolateSetupHelper(isolate, is_main_isolate, script_uri, package_root,
-                            packages_config, set_native_resolvers,
-                            isolate_run_app_snapshot, error, exit_code);
+  return created_isolate;
 }
 
 #undef CHECK_RESULT
diff --git a/runtime/bin/run_vm_tests.cc b/runtime/bin/run_vm_tests.cc
index d5d6ff0..6446440 100644
--- a/runtime/bin/run_vm_tests.cc
+++ b/runtime/bin/run_vm_tests.cc
@@ -200,6 +200,12 @@
   return isolate;
 }
 
+static void CleanupIsolate(void* callback_data) {
+  bin::IsolateData* isolate_data =
+      reinterpret_cast<bin::IsolateData*>(callback_data);
+  delete isolate_data;
+}
+
 static int Main(int argc, const char** argv) {
   // Flags being passed to the Dart VM.
   int dart_argc = 0;
@@ -269,7 +275,7 @@
   const char* err_msg = Dart::InitOnce(
       dart::bin::vm_snapshot_data, dart::bin::vm_snapshot_instructions,
       CreateIsolateAndSetup /* create */, NULL /* shutdown */,
-      NULL /* cleanup */, NULL /* thread_exit */,
+      CleanupIsolate /* cleanup */, NULL /* thread_exit */,
       dart::bin::DartUtils::OpenFile, dart::bin::DartUtils::ReadFile,
       dart::bin::DartUtils::WriteFile, dart::bin::DartUtils::CloseFile,
       NULL /* entropy_source */, NULL /* get_service_assets */,
diff --git a/runtime/lib/errors_patch.dart b/runtime/lib/errors_patch.dart
index e79dfae..0eb39d1 100644
--- a/runtime/lib/errors_patch.dart
+++ b/runtime/lib/errors_patch.dart
@@ -184,6 +184,10 @@
       : _receiver = receiver,
         _invocation = invocation as _InvocationMirror;
 
+  static void _throwNewInvocation(Object receiver, Invocation invocation) {
+    throw new NoSuchMethodError.withInvocation(receiver, invocation);
+  }
+
   // The compiler emits a call to _throwNew when it cannot resolve a static
   // method at compile time. The receiver is actually the literal class of the
   // unresolved method.
diff --git a/runtime/lib/invocation_mirror_patch.dart b/runtime/lib/invocation_mirror_patch.dart
index a1703c5..30c3e74d6 100644
--- a/runtime/lib/invocation_mirror_patch.dart
+++ b/runtime/lib/invocation_mirror_patch.dart
@@ -57,15 +57,17 @@
   }
 
   void _setMemberNameAndType() {
+    _type ??= 0;
     if (_functionName.startsWith("get:")) {
-      _type = _GETTER;
+      _type |= _GETTER;
       _memberName = new internal.Symbol.unvalidated(_functionName.substring(4));
     } else if (_functionName.startsWith("set:")) {
-      _type = _SETTER;
+      _type |= _SETTER;
       _memberName =
           new internal.Symbol.unvalidated(_functionName.substring(4) + "=");
     } else {
-      _type = _isSuperInvocation ? (_SUPER << _LEVEL_SHIFT) | _METHOD : _METHOD;
+      _type |=
+          _isSuperInvocation ? (_SUPER << _LEVEL_SHIFT) | _METHOD : _METHOD;
       _memberName = new internal.Symbol.unvalidated(_functionName);
     }
   }
@@ -188,14 +190,15 @@
   }
 
   _InvocationMirror(this._functionName, this._argumentsDescriptor,
-      this._arguments, this._isSuperInvocation);
+      this._arguments, this._isSuperInvocation, this._type);
 
   _InvocationMirror._withoutType(this._functionName, this._typeArguments,
       this._positionalArguments, this._namedArguments, this._isSuperInvocation);
 
   static _allocateInvocationMirror(String functionName,
-      List argumentsDescriptor, List arguments, bool isSuperInvocation) {
+      List argumentsDescriptor, List arguments, bool isSuperInvocation,
+      [int type = null]) {
     return new _InvocationMirror(
-        functionName, argumentsDescriptor, arguments, isSuperInvocation);
+        functionName, argumentsDescriptor, arguments, isSuperInvocation, type);
   }
 }
diff --git a/runtime/observatory/tests/observatory_ui/observatory_ui.status b/runtime/observatory/tests/observatory_ui/observatory_ui.status
index 1937c70..5f0849e 100644
--- a/runtime/observatory/tests/observatory_ui/observatory_ui.status
+++ b/runtime/observatory/tests/observatory_ui/observatory_ui.status
@@ -8,8 +8,9 @@
 [ $runtime == drt || !$browser || $fast_startup ]
 *: SkipByDesign
 
-[ $runtime == ff || $runtime == safari ]
-allocation_profile: Skip
-cpu_profile_table: Skip
-persistent_handles_page: Skip
+# custom elements are not supported on old browsers, we don't
+# intend for observatory to work on old browser versions, so
+# skipping.
+[ $runtime == ff || $runtime == ie10 || $runtime == ie11 || $runtime == safari ]
+*: SkipByDesign
 
diff --git a/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart b/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart
index c9299b9..40daf1e 100644
--- a/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart
@@ -71,6 +71,7 @@
 
 void allEventsHaveIsolateNumber(List events) {
   for (Map event in events) {
+    print(event);
     if (event['ph'] == 'M') {
       // Skip meta-data events.
       continue;
@@ -91,6 +92,11 @@
       // Skip API category events which sometimes don't have an isolate.
       continue;
     }
+    if (event['cat'] == 'Embedder' &&
+        (event['name'] == 'DFE::ReadScript' ||
+            event['name'] == 'CreateIsolateAndSetupHelper')) {
+      continue;
+    }
     Map arguments = event['args'];
     expect(arguments, new isInstanceOf<Map>());
     expect(arguments['isolateNumber'], new isInstanceOf<String>());
diff --git a/runtime/platform/globals.h b/runtime/platform/globals.h
index 09c0a81..ef225bc 100644
--- a/runtime/platform/globals.h
+++ b/runtime/platform/globals.h
@@ -680,7 +680,7 @@
 // On Windows the reentrent version of strtok is called
 // strtok_s. Unify on the posix name strtok_r.
 #if defined(HOST_OS_WINDOWS)
-#define snprintf _snprintf
+#define snprintf _sprintf_p
 #define strtok_r strtok_s
 #endif
 
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index 80613e4..423d363 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -60,6 +60,7 @@
 [ $compiler == dartk ]
 cc/DartAPI_New: Fail
 cc/DartAPI_TypeGetParameterizedTypes: Crash
+cc/IsolateReload_TearOff_Parameter_Count_Mismatch: Pass, Fail # Issue 32781
 dart/redirection_type_shuffling_test/00: RuntimeError
 dart/redirection_type_shuffling_test/none: RuntimeError
 
@@ -192,16 +193,12 @@
 cc/SourceReport_Coverage_UnusedClass_NoForceCompile: Fail
 cc/SourceReport_MultipleReports: Fail
 cc/SourceReport_PossibleBreakpoints_Simple: Fail
-cc/StackTraceFormat: Fail
 cc/UseDartApi: Fail
 dart/data_uri_import_test/utf16: MissingRuntimeError
 dart/spawn_shutdown_test: SkipSlow
 
 [ $compiler == dartk && $runtime == vm && $system == macos ]
 cc/IsolateReload_LibraryLookup: Fail, Crash
-cc/IsolateReload_TearOff_AddArguments: Fail
-cc/IsolateReload_TearOff_Instance_Equality: Fail
-cc/IsolateReload_TearOff_List_Set: Fail
 
 [ $compiler == dartk && $runtime == vm && $strong ]
 cc/IsolateReload_LibraryHide: Crash
@@ -209,15 +206,9 @@
 
 [ $compiler == dartk && $system == linux ]
 cc/IsolateReload_LibraryLookup: Fail, Crash
-cc/IsolateReload_TearOff_AddArguments: Fail
-cc/IsolateReload_TearOff_Instance_Equality: Fail
-cc/IsolateReload_TearOff_List_Set: Fail
 
 [ $compiler == dartk && $system == windows ]
 cc/IsolateReload_LibraryLookup: Fail, Crash
-cc/IsolateReload_TearOff_AddArguments: Fail
-cc/IsolateReload_TearOff_Instance_Equality: Fail
-cc/IsolateReload_TearOff_List_Set: Fail
 cc/Profiler_ContextAllocation: Fail, Pass # Flaky on Windows --- sometimes give "profiler_test.cc: 1107: error: expected: !walker.Down()"
 cc/Profiler_FunctionTicks: Fail, Pass
 cc/Profiler_ToggleRecordAllocation: Fail, Pass
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index d39e205..6e9ffcbd 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -4206,11 +4206,28 @@
 
 FlowGraph* StreamingFlowGraphBuilder::BuildGraphOfImplicitClosureFunction(
     const Function& function) {
+  const Function& parent = Function::ZoneHandle(Z, function.parent_function());
+  const String& func_name = String::ZoneHandle(Z, parent.name());
+  const Class& owner = Class::ZoneHandle(Z, parent.Owner());
+  Function& target = Function::ZoneHandle(Z, owner.LookupFunction(func_name));
+
+  if (target.raw() != parent.raw()) {
+    DEBUG_ASSERT(Isolate::Current()->HasAttemptedReload());
+    if (target.IsNull() || (target.is_static() != parent.is_static()) ||
+        (target.kind() != parent.kind())) {
+      target = Function::null();
+    }
+  }
+
+  if (target.IsNull() ||
+      (parent.num_fixed_parameters() != target.num_fixed_parameters())) {
+    return BuildGraphOfNoSuchMethodForwarder(function, true,
+                                             parent.is_static());
+  }
+
   // The prologue builder needs the default parameter values.
   SetupDefaultParameterValues();
 
-  const Function& target = Function::ZoneHandle(Z, function.parent_function());
-
   TargetEntryInstr* normal_entry = flow_graph_builder_->BuildTargetEntry();
   PrologueInfo prologue_info(-1, -1);
   BlockEntryInstr* instruction_cursor =
@@ -4294,10 +4311,10 @@
       AlternativeReadingScope _(reader_);
       body += BuildArgumentTypeChecks();
     } else {
-      // Check if target function was annotated with no-dynamic-invocations.
+      // Check if parent function was annotated with no-dynamic-invocations.
       const ProcedureAttributesMetadata attrs =
           procedure_attributes_metadata_helper_.GetProcedureAttributes(
-              target.kernel_offset());
+              parent.kernel_offset());
       if (!attrs.has_dynamic_invocations) {
         // If it was then we might need to build some checks in the
         // tear-off.
@@ -4347,9 +4364,11 @@
     }
   }
 
-  // Forward them to the target.
+  // Forward them to the parent.
   intptr_t argument_count = positional_argument_count + named_argument_count;
-  if (!target.is_static()) ++argument_count;
+  if (!parent.is_static()) {
+    ++argument_count;
+  }
   body += StaticCall(TokenPosition::kNoSource, target, argument_count,
                      argument_names, ICData::kNoRebind,
                      /* result_type = */ NULL, type_args_len);
@@ -4362,9 +4381,13 @@
                 flow_graph_builder_->last_used_block_id_, prologue_info);
 }
 
+// If throw_no_such_method_error is set to true (defaults to false), an
+// instance of NoSuchMethodError is thrown. Otherwise, the instance
+// noSuchMethod is called.
 FlowGraph* StreamingFlowGraphBuilder::BuildGraphOfNoSuchMethodForwarder(
     const Function& function,
-    bool is_implicit_closure_function) {
+    bool is_implicit_closure_function,
+    bool throw_no_such_method_error) {
   // The prologue builder needs the default parameter values.
   SetupDefaultParameterValues();
 
@@ -4515,8 +4538,26 @@
 
   // Load receiver.
   if (is_implicit_closure_function) {
-    body += LoadLocal(parsed_function()->current_context_var());
-    body += B->LoadField(Context::variable_offset(0));
+    if (throw_no_such_method_error) {
+      const Function& parent =
+          Function::ZoneHandle(Z, function.parent_function());
+      const Class& owner = Class::ZoneHandle(Z, parent.Owner());
+      AbstractType& type = AbstractType::ZoneHandle(Z);
+      type ^= Type::New(owner, TypeArguments::Handle(Z), owner.token_pos(),
+                        Heap::kOld);
+      // If the current class is the result of a mixin application, we must
+      // use the class scope of the class from which the function originates.
+      if (owner.IsMixinApplication()) {
+        ClassFinalizer::FinalizeType(
+            Class::Handle(Z, parsed_function()->function().origin()), type);
+      } else {
+        type ^= ClassFinalizer::FinalizeType(owner, type);
+      }
+      body += Constant(type);
+    } else {
+      body += LoadLocal(parsed_function()->current_context_var());
+      body += B->LoadField(Context::variable_offset(0));
+    }
   } else {
     LocalScope* scope = parsed_function()->node_sequence()->scope();
     body += LoadLocal(scope->VariableAt(0));
@@ -4544,6 +4585,28 @@
   body += Constant(Bool::False());
   body += PushArgument();
 
+  if (throw_no_such_method_error) {
+    const Function& parent =
+        Function::ZoneHandle(Z, function.parent_function());
+    const Class& owner = Class::ZoneHandle(Z, parent.Owner());
+    InvocationMirror::Level im_level = owner.IsTopLevel()
+                                           ? InvocationMirror::kTopLevel
+                                           : InvocationMirror::kStatic;
+    InvocationMirror::Kind im_kind;
+    if (function.IsImplicitGetterFunction() || function.IsGetterFunction()) {
+      im_kind = InvocationMirror::kGetter;
+    } else if (function.IsImplicitSetterFunction() ||
+               function.IsSetterFunction()) {
+      im_kind = InvocationMirror::kSetter;
+    } else {
+      im_kind = InvocationMirror::kMethod;
+    }
+    body += IntConstant(InvocationMirror::EncodeType(im_level, im_kind));
+  } else {
+    body += NullConstant();
+  }
+  body += PushArgument();
+
   const Class& mirror_class =
       Class::Handle(Z, Library::LookupCoreClass(Symbols::InvocationMirror()));
   ASSERT(!mirror_class.IsNull());
@@ -4552,11 +4615,23 @@
              Library::PrivateCoreLibName(Symbols::AllocateInvocationMirror())));
   ASSERT(!allocation_function.IsNull());
   body += StaticCall(TokenPosition::kMinSource, allocation_function,
-                     /* argument_count = */ 4, ICData::kStatic);
+                     /* argument_count = */ 5, ICData::kStatic);
   body += PushArgument();  // For the call to noSuchMethod.
 
-  body += InstanceCall(TokenPosition::kNoSource, Symbols::NoSuchMethod(),
-                       Token::kILLEGAL, 2, 1);
+  if (throw_no_such_method_error) {
+    const Class& klass = Class::ZoneHandle(
+        Z, Library::LookupCoreClass(Symbols::NoSuchMethodError()));
+    ASSERT(!klass.IsNull());
+    const Function& throw_function = Function::ZoneHandle(
+        Z,
+        klass.LookupStaticFunctionAllowPrivate(Symbols::ThrowNewInvocation()));
+    ASSERT(!throw_function.IsNull());
+    body += StaticCall(TokenPosition::kNoSource, throw_function, 2,
+                       ICData::kStatic);
+  } else {
+    body += InstanceCall(TokenPosition::kNoSource, Symbols::NoSuchMethod(),
+                         Token::kILLEGAL, 2, 1);
+  }
   body += StoreLocal(TokenPosition::kNoSource, result);
   body += Drop();
 
@@ -5987,8 +6062,8 @@
 }
 
 void StreamingFlowGraphBuilder::SkipLibraryPart() {
-  ReadUInt();               // Read source_uri_index.
   SkipListOfExpressions();  // Read annotations.
+  SkipStringReference();    // Read part URI index.
 }
 
 void StreamingFlowGraphBuilder::SkipLibraryTypedef() {
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
index e9b3b57..36c1833 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
@@ -1121,7 +1121,8 @@
   FlowGraph* BuildGraphOfFunction(bool constructor);
   FlowGraph* BuildGraphOfNoSuchMethodForwarder(
       const Function& function,
-      bool is_implicit_closure_function);
+      bool is_implicit_closure_function,
+      bool throw_no_such_method_error = false);
 
   intptr_t GetOffsetForSourceInfo(intptr_t index);
 
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 3429379..b7a56b9 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -1165,6 +1165,7 @@
                    Dart_IsolateFlags* flags,
                    void* callback_data,
                    char** error) {
+  API_TIMELINE_DURATION(Thread::Current());
   return CreateIsolate(script_uri, main, snapshot_data, snapshot_instructions,
                        -1, NULL, flags, callback_data, error);
 }
@@ -1175,6 +1176,7 @@
                                                       Dart_IsolateFlags* flags,
                                                       void* callback_data,
                                                       char** error) {
+  API_TIMELINE_DURATION(Thread::Current());
   // Setup default flags in case none were passed.
   Dart_IsolateFlags api_flags;
   if (flags == NULL) {
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index 9a55de7..fc532c3 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -3327,6 +3327,11 @@
 }
 
 VM_UNIT_TEST_CASE(DartAPI_CurrentIsolateData) {
+  Dart_IsolateShutdownCallback saved_shutdown = Isolate::ShutdownCallback();
+  Dart_IsolateCleanupCallback saved_cleanup = Isolate::CleanupCallback();
+  Isolate::SetShutdownCallback(NULL);
+  Isolate::SetCleanupCallback(NULL);
+
   intptr_t mydata = 12345;
   Dart_Isolate isolate =
       TestCase::CreateTestIsolate(NULL, reinterpret_cast<void*>(mydata));
@@ -3334,6 +3339,9 @@
   EXPECT_EQ(mydata, reinterpret_cast<intptr_t>(Dart_CurrentIsolateData()));
   EXPECT_EQ(mydata, reinterpret_cast<intptr_t>(Dart_IsolateData(isolate)));
   Dart_ShutdownIsolate();
+
+  Isolate::SetShutdownCallback(saved_shutdown);
+  Isolate::SetCleanupCallback(saved_cleanup);
 }
 
 static Dart_Handle LoadScript(const char* url_str, const char* source) {
@@ -7250,31 +7258,41 @@
   }
 }
 
-static void* saved_callback_data;
+static void* shutdown_callback_data;
 static void IsolateShutdownTestCallback(void* callback_data) {
-  saved_callback_data = callback_data;
+  shutdown_callback_data = callback_data;
+}
+static void* cleanup_callback_data;
+static void IsolateCleanupTestCallback(void* callback_data) {
+  cleanup_callback_data = callback_data;
 }
 
-VM_UNIT_TEST_CASE(DartAPI_IsolateShutdown) {
-  Dart_IsolateShutdownCallback saved = Isolate::ShutdownCallback();
+VM_UNIT_TEST_CASE(DartAPI_IsolateShutdownAndCleanup) {
+  Dart_IsolateShutdownCallback saved_shutdown = Isolate::ShutdownCallback();
+  Dart_IsolateCleanupCallback saved_cleanup = Isolate::CleanupCallback();
   Isolate::SetShutdownCallback(IsolateShutdownTestCallback);
+  Isolate::SetCleanupCallback(IsolateCleanupTestCallback);
 
-  saved_callback_data = NULL;
+  shutdown_callback_data = NULL;
+  cleanup_callback_data = NULL;
   void* my_data = reinterpret_cast<void*>(12345);
   // Create an isolate.
   Dart_Isolate isolate = TestCase::CreateTestIsolate(NULL, my_data);
   EXPECT(isolate != NULL);
 
   // The shutdown callback has not been called.
-  EXPECT_EQ(0, reinterpret_cast<intptr_t>(saved_callback_data));
+  EXPECT_EQ(0, reinterpret_cast<intptr_t>(shutdown_callback_data));
+  EXPECT_EQ(0, reinterpret_cast<intptr_t>(cleanup_callback_data));
 
   // Shutdown the isolate.
   Dart_ShutdownIsolate();
 
   // The shutdown callback has been called.
-  EXPECT_EQ(12345, reinterpret_cast<intptr_t>(saved_callback_data));
+  EXPECT_EQ(12345, reinterpret_cast<intptr_t>(shutdown_callback_data));
+  EXPECT_EQ(12345, reinterpret_cast<intptr_t>(cleanup_callback_data));
 
-  Isolate::SetShutdownCallback(saved);
+  Isolate::SetShutdownCallback(saved_shutdown);
+  Isolate::SetCleanupCallback(saved_cleanup);
 }
 
 static int64_t add_result = 0;
diff --git a/runtime/vm/isolate_reload_test.cc b/runtime/vm/isolate_reload_test.cc
index a8b8928..08abecb5 100644
--- a/runtime/vm/isolate_reload_test.cc
+++ b/runtime/vm/isolate_reload_test.cc
@@ -1527,6 +1527,99 @@
   EXPECT_NON_NULL(lib);
 }
 
+TEST_CASE(IsolateReload_TearOff_Parameter_Count_Mismatch) {
+  const char* kScript =
+      "import 'file:///test:isolate_reload_helper';\n"
+      "class C {\n"
+      "  static foo() => 'old';\n"
+      "}\n"
+      "main() {\n"
+      "  var f1 = C.foo;\n"
+      "  reloadTest();\n"
+      "  return f1();\n"
+      "}\n";
+
+  Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
+  EXPECT_VALID(lib);
+
+  const char* kReloadScript =
+      "import 'file:///test:isolate_reload_helper';\n"
+      "class C {\n"
+      "  static foo(i) => 'new:$i';\n"
+      "}\n"
+      "main() {\n"
+      "  var f1 = C.foo;\n"
+      "  reloadTest();\n"
+      "  return f1();\n"
+      "}\n";
+
+  TestCase::SetReloadTestScript(kReloadScript);
+
+  Dart_Handle error_handle = SimpleInvokeError(lib, "main");
+
+  const char* error;
+  if (TestCase::UsingDartFrontend()) {
+    error =
+        "NoSuchMethodError: Closure call with mismatched arguments: function "
+        "'C.foo'\n"
+        "Receiver: Closure: (dynamic) => dynamic from Function 'foo': static.\n"
+        "Tried calling: C.foo()\n"
+        "Found: C.foo(dynamic) => dynamic\n"
+        "#0      Object.noSuchMethod "
+        "(dart:core/runtime/libobject_patch.dart:46:5)\n"
+        "#1      main (file:///test-lib:8:12)";
+  } else {
+    error =
+        "NoSuchMethodError: Closure call with mismatched arguments: function "
+        "'C.foo'\n"
+        "Receiver: Closure: (dynamic) => dynamic from Function 'foo': static.\n"
+        "Tried calling: C.foo()\n"
+        "Found: C.foo(dynamic) => dynamic\n"
+        "#0      Object.noSuchMethod "
+        "(dart:core-patch/dart:core/object_patch.dart:46)\n"
+        "#1      main (test-lib:8:12)";
+  }
+  EXPECT_ERROR(error_handle, error);
+}
+
+TEST_CASE(IsolateReload_TearOff_Remove) {
+  const char* kScript =
+      "import 'file:///test:isolate_reload_helper';\n"
+      "class C {\n"
+      "  static foo({String bar: 'bar'}) => 'old';\n"
+      "}\n"
+      "main() {\n"
+      "  var f1 = C.foo;\n"
+      "  reloadTest();\n"
+      "  try {\n"
+      "    return f1();\n"
+      "  } catch(e) { return '$e'; }\n"
+      "}\n";
+
+  Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
+  EXPECT_VALID(lib);
+
+  const char* kReloadScript =
+      "import 'file:///test:isolate_reload_helper';\n"
+      "class C {\n"
+      "}\n"
+      "main() {\n"
+      "  var f1;\n"
+      "  reloadTest();\n"
+      "  try {\n"
+      "    return f1();\n"
+      "  } catch(e) { return '$e'; }\n"
+      "}\n";
+
+  TestCase::SetReloadTestScript(kReloadScript);
+
+  EXPECT_SUBSTRING(
+      "NoSuchMethodError: No static method 'foo' declared in class 'C'.",
+      SimpleInvokeStr(lib, "main"));
+
+  lib = TestCase::GetReloadLibrary();
+  EXPECT_NON_NULL(lib);
+}
 TEST_CASE(IsolateReload_TearOff_Class_Identity) {
   const char* kScript =
       "import 'file:///test:isolate_reload_helper';\n"
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index d971e45..7c1f494 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -3981,6 +3981,10 @@
           continue;  // Another interface may work better.
         }
       }
+      // In Dart 2, implementing Function has no meaning.
+      if (isolate->strong() && interface_class.IsDartFunctionClass()) {
+        continue;
+      }
       if (interface_class.TypeTest(test_kind, interface_args, other,
                                    other_type_arguments, bound_error,
                                    bound_trail, space)) {
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index 0dd75a3..f7ffc17 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -3248,6 +3248,7 @@
 }
 
 TEST_CASE(StackTraceFormat) {
+  Isolate* isolate = Isolate::Current();
   const char* kScriptChars =
       "void baz() {\n"
       "  throw 'MyException';\n"
@@ -3290,20 +3291,28 @@
   Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
   EXPECT_VALID(lib);
   Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
-  EXPECT_ERROR(result,
-               "Unhandled exception:\n"
-               "MyException\n"
-               "#0      baz (test-lib:2:3)\n"
-               "#1      new _OtherClass._named (test-lib:7:5)\n"
-               "#2      globalVar= (test-lib:12:7)\n"
-               "#3      _bar (test-lib:16:3)\n"
-               "#4      MyClass.field (test-lib:25:5)\n"
-               "#5      MyClass.foo.fooHelper (test-lib:30:7)\n"
-               "#6      MyClass.foo (test-lib:32:14)\n"
-               "#7      new MyClass.<anonymous closure> (test-lib:21:12)\n"
-               "#8      new MyClass (test-lib:21:18)\n"
-               "#9      main.<anonymous closure> (test-lib:37:14)\n"
-               "#10     main (test-lib:37:24)");
+
+  const char* lib_url =
+      isolate->use_dart_frontend() ? "file:///test-lib" : "test-lib";
+  const size_t kExpectedLen = 512;
+  char expected[kExpectedLen];
+  snprintf(expected, kExpectedLen,
+           "Unhandled exception:\n"
+           "MyException\n"
+           "#0      baz (%1$s:2:3)\n"
+           "#1      new _OtherClass._named (%1$s:7:5)\n"
+           "#2      globalVar= (%1$s:12:7)\n"
+           "#3      _bar (%1$s:16:3)\n"
+           "#4      MyClass.field (%1$s:25:5)\n"
+           "#5      MyClass.foo.fooHelper (%1$s:30:7)\n"
+           "#6      MyClass.foo (%1$s:32:14)\n"
+           "#7      new MyClass.<anonymous closure> (%1$s:21:12)\n"
+           "#8      new MyClass (%1$s:21:18)\n"
+           "#9      main.<anonymous closure> (%1$s:37:14)\n"
+           "#10     main (%1$s:37:24)",
+           lib_url);
+
+  EXPECT_ERROR(result, expected);
 }
 
 ISOLATE_UNIT_TEST_CASE(WeakProperty_PreserveCrossGen) {
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index 01ae09b..4b3f6bc 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -76,6 +76,7 @@
   V(CyclicInitializationError, "CyclicInitializationError")                    \
   V(_CompileTimeError, "_CompileTimeError")                                    \
   V(ThrowNew, "_throwNew")                                                     \
+  V(ThrowNewInvocation, "_throwNewInvocation")                                 \
   V(ThrowNewIfNotLoaded, "_throwNewIfNotLoaded")                               \
   V(EvaluateAssertion, "_evaluateAssertion")                                   \
   V(Symbol, "Symbol")                                                          \
diff --git a/samples-dev/swarm/App.dart b/samples-dev/swarm/App.dart
index 06b5fad..301021b 100644
--- a/samples-dev/swarm/App.dart
+++ b/samples-dev/swarm/App.dart
@@ -34,7 +34,7 @@
           // TODO(sigmund):  Consider eliminating the call to "wrap", for
           // instance, modify event listeners to always wrap, or extend DOM code
           // to intercept the beginning & end of each event loop
-          EventBatch.wrap((Event event) => onLoad()));
+          EventBatch.wrap((event) => onLoad()));
     }
   }
 
diff --git a/samples-dev/swarm/SwarmViews.dart b/samples-dev/swarm/SwarmViews.dart
index 003e544..9896317 100644
--- a/samples-dev/swarm/SwarmViews.dart
+++ b/samples-dev/swarm/SwarmViews.dart
@@ -821,7 +821,7 @@
         new CanvasElement(height: img.height, width: img.width);
 
     final CanvasRenderingContext2D ctx = canvas.getContext("2d");
-    ctx.drawImage(img, 0, 0, img.width, img.height);
+    ctx.drawImageScaled(img, 0, 0, img.width, img.height);
 
     return canvas.toDataUrl("image/png");
   }
diff --git a/samples-dev/swarm/Views.dart b/samples-dev/swarm/Views.dart
index 7bedbfa..3bd25cc 100644
--- a/samples-dev/swarm/Views.dart
+++ b/samples-dev/swarm/Views.dart
@@ -686,7 +686,7 @@
     return getPageLength(viewLength) ~/ _itemLength * page;
   }
 
-  int getSnapIndex(num offset, int viewLength) {
+  int getSnapIndex(num offset, num viewLength) {
     int index = (-offset / _itemLength).round();
     if (_paginate) {
       index = getPageStartIndex(getPage(index, viewLength), viewLength);
@@ -863,7 +863,7 @@
     throw 'Not implemented';
   }
 
-  int getSnapIndex(num offset, int viewLength) {
+  int getSnapIndex(num offset, num viewLength) {
     for (int i = 1; i < _data.length; i++) {
       if (getOffset(i) + getOffset(i - 1) > -offset * 2) {
         return i - 1;
diff --git a/samples-dev/swarm/swarm_ui_lib/observable/observable.dart b/samples-dev/swarm/swarm_ui_lib/observable/observable.dart
index 373e350..e9d32f8 100644
--- a/samples-dev/swarm/swarm_ui_lib/observable/observable.dart
+++ b/samples-dev/swarm/swarm_ui_lib/observable/observable.dart
@@ -174,8 +174,8 @@
 
   Iterable<T> get reversed => _internal.reversed;
 
-  void sort([int compare(var a, var b)]) {
-    if (compare == null) compare = Comparable.compare;
+  void sort([int compare(T a, T b)]) {
+    //if (compare == null) compare = (u, v) => Comparable.compare(u, v);
     _internal.sort(compare);
     recordGlobalChange();
   }
@@ -296,11 +296,11 @@
     throw new UnimplementedError();
   }
 
-  List sublist(int start, [int end]) {
+  List<T> sublist(int start, [int end]) {
     throw new UnimplementedError();
   }
 
-  Iterable getRange(int start, int end) {
+  Iterable<T> getRange(int start, int end) {
     throw new UnimplementedError();
   }
 
@@ -331,16 +331,16 @@
   }
 
   String join([String separator = ""]) => _internal.join(separator);
-  dynamic firstWhere(bool test(T value), {Object orElse()}) {
+  T firstWhere(bool test(T value), {T orElse()}) {
     return _internal.firstWhere(test, orElse: orElse);
   }
 
-  dynamic lastWhere(bool test(T value), {Object orElse()}) {
+  T lastWhere(bool test(T value), {T orElse()}) {
     return _internal.lastWhere(test, orElse: orElse);
   }
 
   void shuffle([random]) => throw new UnimplementedError();
-  bool remove(T element) => throw new UnimplementedError();
+  bool remove(Object element) => throw new UnimplementedError();
   void removeWhere(bool test(T element)) => throw new UnimplementedError();
   void retainWhere(bool test(T element)) => throw new UnimplementedError();
   List<T> toList({bool growable: true}) => throw new UnimplementedError();
diff --git a/samples-dev/swarm/swarm_ui_lib/touch/Momentum.dart b/samples-dev/swarm/swarm_ui_lib/touch/Momentum.dart
index 05adab5..eea39a0 100644
--- a/samples-dev/swarm/swarm_ui_lib/touch/Momentum.dart
+++ b/samples-dev/swarm/swarm_ui_lib/touch/Momentum.dart
@@ -112,7 +112,7 @@
  * class at all.
  */
 class Solver {
-  static num solve(num fn(num), num targetY, num startX,
+  static num solve(num Function(num) fn, num targetY, num startX,
       [int maxIterations = 50]) {
     num lastX = 0;
     num lastY = fn(lastX);
diff --git a/samples-dev/swarm/swarm_ui_lib/touch/TouchUtil.dart b/samples-dev/swarm/swarm_ui_lib/touch/TouchUtil.dart
index 60ed6e4..0a841b7 100644
--- a/samples-dev/swarm/swarm_ui_lib/touch/TouchUtil.dart
+++ b/samples-dev/swarm/swarm_ui_lib/touch/TouchUtil.dart
@@ -10,7 +10,7 @@
  * touch events are created from the actual mouse events.
  */
 EventListener mouseToTouchCallback(EventListener callback) {
-  return (MouseEvent e) {
+  return (Event e) {
     var touches = <Touch>[];
     var targetTouches = <Touch>[];
     var changedTouches = <Touch>[];
@@ -240,7 +240,7 @@
 }
 
 class MockTouchEvent implements TouchEvent {
-  MouseEvent wrapped;
+  dynamic /*MouseEvent*/ wrapped;
   // TODO(jacobr): these are currently Lists instead of a TouchList.
   final List<Touch> touches;
   final List<Touch> targetTouches;
@@ -340,7 +340,7 @@
     throw new UnimplementedError();
   }
 
-  List get path {
+  List<EventTarget> get path {
     throw new UnimplementedError();
   }
 
diff --git a/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart b/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
index 4c006b6..35df582 100644
--- a/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
+++ b/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
@@ -95,6 +95,9 @@
 /// Display name used for compilation using the new common frontend.
 const String kernelName = 'kernel';
 
+/// Display name used for strong mode compilation using the new common frontend.
+const String strongName = 'strong mode';
+
 /// Compute actual data for all members defined in the program with the
 /// [entryPoint] and [memorySourceFiles].
 ///
@@ -439,8 +442,10 @@
 /// file and any supporting libraries.
 Future checkTests(Directory dataDir, ComputeMemberDataFunction computeFromAst,
     ComputeMemberDataFunction computeFromKernel,
-    {List<String> skipForAst: const <String>[],
+    {bool testStrongMode: false,
+    List<String> skipForAst: const <String>[],
     List<String> skipForKernel: const <String>[],
+    List<String> skipForStrong: const <String>[],
     bool filterActualData(IdValue idValue, ActualData actualData),
     List<String> options: const <String>[],
     List<String> args: const <String>[],
@@ -476,7 +481,9 @@
       testOptions.add(Flags.enableAsserts);
     } else if (name.endsWith('_strong.dart')) {
       strongModeOnlyTest = true;
-      testOptions.add(Flags.strongMode);
+      if (!testStrongMode) {
+        testOptions.add(Flags.strongMode);
+      }
     } else if (name.endsWith('_checked.dart')) {
       testOptions.add(Flags.enableCheckedMode);
     }
@@ -496,7 +503,8 @@
     };
     Map<String, MemberAnnotations<IdValue>> expectedMaps = {
       astMarker: new MemberAnnotations<IdValue>(),
-      kernelMarker: new MemberAnnotations<IdValue>()
+      kernelMarker: new MemberAnnotations<IdValue>(),
+      strongMarker: new MemberAnnotations<IdValue>(),
     };
     computeExpectedMap(entryPoint, code[entryPoint], expectedMaps);
     Map<String, String> memorySourceFiles = {
@@ -542,7 +550,8 @@
         hasFailures = true;
       }
     }
-    if (skipForKernel.contains(name)) {
+    if (skipForKernel.contains(name) ||
+        (testStrongMode && strongModeOnlyTest)) {
       print('--skipped for kernel--------------------------------------------');
     } else {
       print('--from kernel---------------------------------------------------');
@@ -561,6 +570,27 @@
         hasFailures = true;
       }
     }
+    if (testStrongMode) {
+      if (skipForStrong.contains(name)) {
+        print('--skipped for kernel (strong mode)----------------------------');
+      } else {
+        print('--from kernel (strong mode)-----------------------------------');
+        MemberAnnotations<IdValue> annotations = expectedMaps[strongMarker];
+        CompiledData compiledData2 = await computeData(
+            entryPoint, memorySourceFiles, computeFromKernel,
+            computeClassData: computeClassDataFromKernel,
+            options: [Flags.strongMode]..addAll(testOptions),
+            verbose: verbose,
+            forUserLibrariesOnly: forUserLibrariesOnly,
+            globalIds: annotations.globalData.keys);
+        if (await checkCode(
+            kernelName, entity.uri, code, annotations, compiledData2,
+            filterActualData: filterActualData,
+            fatalErrors: !testAfterFailures)) {
+          hasFailures = true;
+        }
+      }
+    }
   }
   Expect.isFalse(hasFailures, 'Errors found.');
 }
@@ -722,20 +752,24 @@
 
 const String astMarker = 'ast.';
 const String kernelMarker = 'kernel.';
+const String strongMarker = 'strong.';
 
-/// Compute two [MemberAnnotations] objects from [code] specifying the expected
-/// annotations we anticipate encountering; one corresponding to the old
-/// implementation, one for the new implementation.
+/// Compute three [MemberAnnotations] objects from [code] specifying the
+/// expected annotations we anticipate encountering; one corresponding to the
+/// old implementation, one for the new implementation, and one for the new
+/// implementation using strong mode.
 ///
 /// If an annotation starts with 'ast.' it is only expected for the old
-/// implementation and if it starts with 'kernel.' it is only expected for the
-/// new implementation. Otherwise it is expected for both implementations.
+/// implementation, if it starts with 'kernel.' it is only expected for the
+/// new implementation, and if it starts with 'strong.' it is only expected for
+/// strong mode (using the common frontend). Otherwise it is expected for all
+/// implementations.
 ///
 /// Most nodes have the same and expectations should match this by using
 /// annotations without prefixes.
 void computeExpectedMap(Uri sourceUri, AnnotatedCode code,
     Map<String, MemberAnnotations<IdValue>> maps) {
-  List<String> mapKeys = [astMarker, kernelMarker];
+  List<String> mapKeys = [astMarker, kernelMarker, strongMarker];
   Map<String, AnnotatedCode> split = splitByPrefixes(code, mapKeys);
 
   split.forEach((String marker, AnnotatedCode code) {
diff --git a/tests/compiler/dart2js/equivalence/id_equivalence_tester.dart b/tests/compiler/dart2js/equivalence/id_equivalence_tester.dart
index 3592578..93832e4 100644
--- a/tests/compiler/dart2js/equivalence/id_equivalence_tester.dart
+++ b/tests/compiler/dart2js/equivalence/id_equivalence_tester.dart
@@ -42,6 +42,9 @@
   'final_field2.dart',
   // TODO(johnniwinther): Fix ast equivalence on instance fields in for.
   'field_type.dart',
+
+  // Kernel add synthetic nodes for tear off of loadLibrary.
+  'deferred_load_get.dart',
 ];
 
 main(List<String> args) {
diff --git a/tests/compiler/dart2js/inference/data/call_site.dart b/tests/compiler/dart2js/inference/data/call_site.dart
index e9bcd9f..5fd4eea 100644
--- a/tests/compiler/dart2js/inference/data/call_site.dart
+++ b/tests/compiler/dart2js/inference/data/call_site.dart
@@ -262,14 +262,14 @@
   new A17(). /*invoke: [exact=A17]*/ x17(1);
   new A17(). /*invoke: [exact=A17]*/ x17(1, 2);
   new A17(). /*invoke: [exact=A17]*/ x17(1, 2, "x");
-  // ignore: undefined_named_parameter
-  new A17(). /*invoke: [exact=A17]*/ x17(1, p2: 2);
-  // ignore: undefined_named_parameter
-  new A17(). /*invoke: [exact=A17]*/ x17(1, p3: "x");
-  // ignore: undefined_named_parameter
-  new A17(). /*invoke: [exact=A17]*/ x17(1, p3: "x", p2: 2);
-  // ignore: undefined_named_parameter
-  new A17(). /*invoke: [exact=A17]*/ x17(1, p2: 2, p3: "x");
+  dynamic a = new A17();
+  a. /*invoke: [exact=A17]*/ x17(1, p2: 2);
+  dynamic b = new A17();
+  b. /*invoke: [exact=A17]*/ x17(1, p3: "x");
+  dynamic c = new A17();
+  c. /*invoke: [exact=A17]*/ x17(1, p3: "x", p2: 2);
+  dynamic d = new A17();
+  d. /*invoke: [exact=A17]*/ x17(1, p2: 2, p3: "x");
 }
 
 /*element: A18.:[exact=A18]*/
@@ -284,10 +284,10 @@
 test18() {
   new A18(). /*invoke: [exact=A18]*/ x18(1, true, 1.1);
   new A18(). /*invoke: [exact=A18]*/ x18(1, false, 2.2);
-  // ignore: undefined_named_parameter
-  new A18(). /*invoke: [exact=A18]*/ x18(1, p3: 3.3, p2: true);
-  // ignore: undefined_named_parameter
-  new A18(). /*invoke: [exact=A18]*/ x18(1, p2: false, p3: 4.4);
+  dynamic a = new A18();
+  a. /*invoke: [exact=A18]*/ x18(1, p3: 3.3, p2: true);
+  dynamic b = new A18();
+  b. /*invoke: [exact=A18]*/ x18(1, p2: false, p3: 4.4);
 }
 
 /*element: A19.:[exact=A19]*/
diff --git a/tests/compiler/dart2js/inference/data/closurization_instance_call.dart b/tests/compiler/dart2js/inference/data/closurization_instance_call.dart
index 8dd31e7..5a074cd 100644
--- a/tests/compiler/dart2js/inference/data/closurization_instance_call.dart
+++ b/tests/compiler/dart2js/inference/data/closurization_instance_call.dart
@@ -23,18 +23,31 @@
 
 // TODO(johnniwinther): Fix the refined type. Missing call methods in the closed
 // world leads to concluding [exact=Class].
-/*element: closurizedCallToString:[exact=JSString]*/
+/*ast.element: closurizedCallToString:[exact=JSString]*/
+/*kernel.element: closurizedCallToString:[exact=JSString]*/
+/*strong.element: closurizedCallToString:[empty]*/
 closurizedCallToString() {
   var c = new Class();
   c.call(); // Make `Class.call` live.
   var local = c. /*[exact=Class]*/ method;
-  local. /*invoke: [subtype=Function]*/ toString();
+  local
+      .
+      /*ast.invoke: [subtype=Function]*/
+      /*kernel.invoke: [subtype=Function]*/
+      /*strong.invoke: [subclass=Closure]*/
+      toString();
   local();
   local
-      . /*invoke: [exact=Class]*/
+      .
+      /*ast.invoke: [exact=Class]*/
+      /*kernel.invoke: [exact=Class]*/
+      /*strong.invoke: [empty]*/
       toString();
   local.call();
   return local
-      . /*invoke: [exact=Class]*/
+      .
+      /*ast.invoke: [exact=Class]*/
+      /*kernel.invoke: [exact=Class]*/
+      /*strong.invoke: [empty]*/
       toString();
 }
diff --git a/tests/compiler/dart2js/inference/data/closurization_local_call.dart b/tests/compiler/dart2js/inference/data/closurization_local_call.dart
index 30e4983..2e2cf0e 100644
--- a/tests/compiler/dart2js/inference/data/closurization_local_call.dart
+++ b/tests/compiler/dart2js/inference/data/closurization_local_call.dart
@@ -20,18 +20,31 @@
 
 // TODO(johnniwinther): Fix the refined type. Missing call methods in the closed
 // world leads to concluding [exact=Class].
-/*element: closurizedCallToString:[exact=JSString]*/
+/*ast.element: closurizedCallToString:[exact=JSString]*/
+/*kernel.element: closurizedCallToString:[exact=JSString]*/
+/*strong.element: closurizedCallToString:[empty]*/
 closurizedCallToString() {
   var c = new Class();
   c.call(); // Make `Class.call` live.
   var local = /*[exact=JSUInt31]*/ () => 42;
-  local. /*invoke: [subtype=Function]*/ toString();
+  local
+      .
+      /*ast.invoke: [subtype=Function]*/
+      /*kernel.invoke: [subtype=Function]*/
+      /*strong.invoke: [subclass=Closure]*/
+      toString();
   local();
   local
-      . /*invoke: [exact=Class]*/
+      .
+      /*ast.invoke: [exact=Class]*/
+      /*kernel.invoke: [exact=Class]*/
+      /*strong.invoke: [empty]*/
       toString();
   local.call();
   return local
-      . /*invoke: [exact=Class]*/
+      .
+      /*ast.invoke: [exact=Class]*/
+      /*kernel.invoke: [exact=Class]*/
+      /*strong.invoke: [empty]*/
       toString();
 }
diff --git a/tests/compiler/dart2js/inference/data/closurization_static_call.dart b/tests/compiler/dart2js/inference/data/closurization_static_call.dart
index b4d00d8..e4efff1 100644
--- a/tests/compiler/dart2js/inference/data/closurization_static_call.dart
+++ b/tests/compiler/dart2js/inference/data/closurization_static_call.dart
@@ -23,18 +23,31 @@
 
 // TODO(johnniwinther): Fix the refined type. Missing call methods in the closed
 // world leads to concluding [exact=Class].
-/*element: closurizedCallToString:[exact=JSString]*/
+/*ast.element: closurizedCallToString:[exact=JSString]*/
+/*kernel.element: closurizedCallToString:[exact=JSString]*/
+/*strong.element: closurizedCallToString:[empty]*/
 closurizedCallToString() {
   var c = new Class();
   c.call(); // Make `Class.call` live.
   var local = method;
-  local. /*invoke: [subtype=Function]*/ toString();
+  local
+      .
+      /*ast.invoke: [subtype=Function]*/
+      /*kernel.invoke: [subtype=Function]*/
+      /*strong.invoke: [subclass=Closure]*/
+      toString();
   local();
   local
-      . /*invoke: [exact=Class]*/
+      .
+      /*ast.invoke: [exact=Class]*/
+      /*kernel.invoke: [exact=Class]*/
+      /*strong.invoke: [empty]*/
       toString();
   local.call();
   return local
-      . /*invoke: [exact=Class]*/
+      .
+      /*ast.invoke: [exact=Class]*/
+      /*kernel.invoke: [exact=Class]*/
+      /*strong.invoke: [empty]*/
       toString();
 }
diff --git a/tests/compiler/dart2js/inference/data/deferred_load.dart b/tests/compiler/dart2js/inference/data/deferred_load.dart
index 7920746..af34b6e 100644
--- a/tests/compiler/dart2js/inference/data/deferred_load.dart
+++ b/tests/compiler/dart2js/inference/data/deferred_load.dart
@@ -1,3 +1,7 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
 import 'package:expect/expect.dart' deferred as expect;
 
 /*element: main:[null]*/
diff --git a/tests/compiler/dart2js/inference/data/deferred_load_get.dart b/tests/compiler/dart2js/inference/data/deferred_load_get.dart
new file mode 100644
index 0000000..44b2121
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/deferred_load_get.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart' deferred as expect;
+
+// Synthetic getter added by kernel.
+/*kernel.element: __loadLibrary_expect:[null|subclass=Object]*/
+/*strong.element: __loadLibrary_expect:[null|subclass=Object]*/
+
+/*element: main:[null]*/
+main() {
+  tearOffLoadLibrary();
+}
+
+/*element: tearOffLoadLibrary:[subclass=Closure]*/
+tearOffLoadLibrary() => expect.loadLibrary;
diff --git a/tests/compiler/dart2js/inference/data/dictionary_types.dart b/tests/compiler/dart2js/inference/data/dictionary_types.dart
index f6f3cc4..84dc58c 100644
--- a/tests/compiler/dart2js/inference/data/dictionary_types.dart
+++ b/tests/compiler/dart2js/inference/data/dictionary_types.dart
@@ -12,25 +12,35 @@
 }
 
 /*element: dictionaryA1:Map([subclass=JsLinkedHashMap], key: [null|subclass=Object], value: [null|subclass=Object])*/
-var dictionaryA1 = {'string': "aString", 'int': 42, 'double': 21.5, 'list': []};
+dynamic dictionaryA1 = {
+  'string': "aString",
+  'int': 42,
+  'double': 21.5,
+  'list': []
+};
 
 /*element: dictionaryB1:Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSDouble], [exact=JSExtendableArray], [exact=JSUInt31], [null|exact=JSString]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSDouble], list: Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null), stringTwo: Value([null|exact=JSString], value: "anotherString"), intTwo: [null|exact=JSUInt31]})*/
-var dictionaryB1 = {'string': "aString", 'int': 42, 'double': 21.5, 'list': []};
+dynamic dictionaryB1 = {
+  'string': "aString",
+  'int': 42,
+  'double': 21.5,
+  'list': []
+};
 
 /*element: otherDict1:Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSUInt31], [null|exact=JSString]), map: {stringTwo: Value([exact=JSString], value: "anotherString"), intTwo: [exact=JSUInt31]})*/
-var otherDict1 = {'stringTwo': "anotherString", 'intTwo': 84};
+dynamic otherDict1 = {'stringTwo': "anotherString", 'intTwo': 84};
 
 /*element: int1:[exact=JSUInt31]*/
-var int1 = 0;
+dynamic int1 = 0;
 
 /*element: anotherInt1:[exact=JSUInt31]*/
-var anotherInt1 = 0;
+dynamic anotherInt1 = 0;
 
 /*element: nullOrInt1:[null|exact=JSUInt31]*/
-var nullOrInt1 = 0;
+dynamic nullOrInt1 = 0;
 
 /*element: dynamic1:[null|subclass=Object]*/
-var dynamic1 = 0;
+dynamic dynamic1 = 0;
 
 /*element: test1:[null]*/
 test1() {
@@ -55,19 +65,24 @@
 }
 
 /*element: dictionaryA2:Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSDouble], [exact=JSExtendableArray], [exact=JSUInt31], [null|exact=JSString]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSDouble], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
-var dictionaryA2 = {'string': "aString", 'int': 42, 'double': 21.5, 'list': []};
+dynamic dictionaryA2 = {
+  'string': "aString",
+  'int': 42,
+  'double': 21.5,
+  'list': []
+};
 
 /*element: dictionaryB2:Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSExtendableArray], [exact=JSUInt31], [null|exact=JSString]), map: {string: Value([exact=JSString], value: "aString"), intTwo: [exact=JSUInt31], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
-var dictionaryB2 = {'string': "aString", 'intTwo': 42, 'list': []};
+dynamic dictionaryB2 = {'string': "aString", 'intTwo': 42, 'list': []};
 
 /*element: nullOrInt2:[null|exact=JSUInt31]*/
-var nullOrInt2 = 0;
+dynamic nullOrInt2 = 0;
 
 /*element: aString2:[exact=JSString]*/
-var aString2 = "";
+dynamic aString2 = "";
 
 /*element: doubleOrNull2:[null|exact=JSDouble]*/
-var doubleOrNull2 = 22.2;
+dynamic doubleOrNull2 = 22.2;
 
 /*element: test2:[null]*/
 test2() {
@@ -88,26 +103,31 @@
 }
 
 /*element: dictionary3:Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSDouble], [exact=JSExtendableArray], [exact=JSUInt31], [null|exact=JSString]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSDouble], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
-var dictionary3 = {'string': "aString", 'int': 42, 'double': 21.5, 'list': []};
+dynamic dictionary3 = {
+  'string': "aString",
+  'int': 42,
+  'double': 21.5,
+  'list': []
+};
 /*element: keyD3:Value([exact=JSString], value: "double")*/
-var keyD3 = 'double';
+dynamic keyD3 = 'double';
 
 /*element: keyI3:Value([exact=JSString], value: "int")*/
-var keyI3 = 'int';
+dynamic keyI3 = 'int';
 
 /*element: keyN3:Value([exact=JSString], value: "notFoundInMap")*/
-var keyN3 = 'notFoundInMap';
+dynamic keyN3 = 'notFoundInMap';
 
 /*element: knownDouble3:[exact=JSDouble]*/
-var knownDouble3 = 42.2;
+dynamic knownDouble3 = 42.2;
 
 /*element: intOrNull3:[null|exact=JSUInt31]*/
-var intOrNull3 = dictionary3
+dynamic intOrNull3 = dictionary3
     /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSDouble], [exact=JSExtendableArray], [exact=JSUInt31], [null|exact=JSString]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSDouble], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
     [keyI3];
 
 /*element: justNull3:[null]*/
-var justNull3 = dictionary3
+dynamic justNull3 = dictionary3
     /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union([exact=JSDouble], [exact=JSExtendableArray], [exact=JSUInt31], [null|exact=JSString]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSDouble], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
     [keyN3];
 
@@ -159,13 +179,13 @@
 }
 
 /*element: dict5:Map([null|subclass=JsLinkedHashMap], key: [null|subclass=Object], value: [null|subclass=Object])*/
-var dict5 = makeMap5([1, 2]);
+dynamic dict5 = makeMap5([1, 2]);
 
 /*element: notInt5:[null|subclass=Object]*/
-var notInt5 = 0;
+dynamic notInt5 = 0;
 
 /*element: alsoNotInt5:[null|subclass=Object]*/
-var alsoNotInt5 = 0;
+dynamic alsoNotInt5 = 0;
 
 /*element: makeMap5:Map([subclass=JsLinkedHashMap], key: [null|subclass=Object], value: [null|subclass=Object])*/
 makeMap5(
diff --git a/tests/compiler/dart2js/inference/data/erroneous_super_get.dart b/tests/compiler/dart2js/inference/data/erroneous_super_get.dart
new file mode 100644
index 0000000..4850cab
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/erroneous_super_get.dart
@@ -0,0 +1,27 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*element: main:[null]*/
+main() {
+  missingSuperFieldAccess();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Access of missing super field.
+////////////////////////////////////////////////////////////////////////////////
+
+/*element: Super4.:[exact=Super4]*/
+class Super4 {}
+
+/*element: Sub4.:[exact=Sub4]*/
+class Sub4 extends Super4 {
+  /*element: Sub4.method:[empty]*/
+  // ignore: UNDEFINED_SUPER_GETTER
+  method() => super.field;
+}
+
+/*element: missingSuperFieldAccess:[null]*/
+missingSuperFieldAccess() {
+  new Sub4(). /*invoke: [exact=Sub4]*/ method();
+}
diff --git a/tests/compiler/dart2js/inference/data/erroneous_super_invoke.dart b/tests/compiler/dart2js/inference/data/erroneous_super_invoke.dart
new file mode 100644
index 0000000..19cf31c
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/erroneous_super_invoke.dart
@@ -0,0 +1,160 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*element: main:[null]*/
+main() {
+  missingSuperMethodInvoke();
+  superMethodInvokeMissingArgument();
+  superMethodInvokeExtraArgument();
+  superMethodInvokeExtraNamedArgument();
+  missingSuperMethodInvokeNoSuchMethod();
+  abstractSuperMethodInvokeNoSuchMethod();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Invocation of missing super method.
+////////////////////////////////////////////////////////////////////////////////
+
+/*element: Super4.:[exact=Super4]*/
+class Super4 {}
+
+/*element: Sub4.:[exact=Sub4]*/
+class Sub4 extends Super4 {
+  /*element: Sub4.method:[empty]*/
+  method() {
+    // ignore: UNDEFINED_SUPER_METHOD
+    var a = super.method();
+    return a. /*invoke: [empty]*/ abs();
+  }
+}
+
+/*element: missingSuperMethodInvoke:[null]*/
+missingSuperMethodInvoke() {
+  new Sub4(). /*invoke: [exact=Sub4]*/ method();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Invocation of super method with missing argument.
+////////////////////////////////////////////////////////////////////////////////
+
+/*element: Super5.:[exact=Super5]*/
+class Super5 {
+  /*element: Super5.method1:[exact=JSUInt31]*/
+  method1(/*[exact=JSUInt31]*/ x) => 42;
+}
+
+/*element: Sub5.:[exact=Sub5]*/
+class Sub5 extends Super5 {
+  /*element: Sub5.method2:[empty]*/
+  method2() {
+    super.method1(0);
+    // ignore: NOT_ENOUGH_REQUIRED_ARGUMENTS
+    var a = super.method1();
+    return a. /*invoke: [empty]*/ abs();
+  }
+}
+
+/*element: superMethodInvokeMissingArgument:[null]*/
+superMethodInvokeMissingArgument() {
+  new Sub5(). /*invoke: [exact=Sub5]*/ method2();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Invocation of super method with extra argument.
+////////////////////////////////////////////////////////////////////////////////
+
+/*element: Super6.:[exact=Super6]*/
+class Super6 {
+  /*element: Super6.method:[exact=JSUInt31]*/
+  method() => 42;
+}
+
+/*element: Sub6.:[exact=Sub6]*/
+class Sub6 extends Super6 {
+  /*element: Sub6.method:[empty]*/
+  method() {
+    // ignore: EXTRA_POSITIONAL_ARGUMENTS
+    var a = super.method(0);
+    return a. /*invoke: [empty]*/ abs();
+  }
+}
+
+/*element: superMethodInvokeExtraArgument:[null]*/
+superMethodInvokeExtraArgument() {
+  new Sub6(). /*invoke: [exact=Sub6]*/ method();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Invocation of super method with extra named argument.
+////////////////////////////////////////////////////////////////////////////////
+
+/*element: Super7.:[exact=Super7]*/
+class Super7 {
+  /*element: Super7.method:[exact=JSUInt31]*/
+  method() => 42;
+}
+
+/*element: Sub7.:[exact=Sub7]*/
+class Sub7 extends Super7 {
+  /*element: Sub7.method:[empty]*/
+  method() {
+    // ignore: UNDEFINED_NAMED_PARAMETER
+    var a = super.method(a: 0);
+    return a. /*invoke: [empty]*/ abs();
+  }
+}
+
+/*element: superMethodInvokeExtraNamedArgument:[null]*/
+superMethodInvokeExtraNamedArgument() {
+  new Sub7(). /*invoke: [exact=Sub7]*/ method();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Invocation of super method caught by noSuchMethod.
+////////////////////////////////////////////////////////////////////////////////
+
+/*element: Super8.:[exact=Super8]*/
+class Super8 {
+  /*element: Super8.noSuchMethod:[exact=JSUInt31]*/
+  noSuchMethod(/*[null|subclass=Object]*/ _) => 42;
+}
+
+/*element: Sub8.:[exact=Sub8]*/
+class Sub8 extends Super8 {
+  /*element: Sub8.method:[subclass=JSPositiveInt]*/
+  method() {
+    // ignore: UNDEFINED_SUPER_METHOD
+    var a = super.method();
+    return a. /*invoke: [exact=JSUInt31]*/ abs();
+  }
+}
+
+/*element: missingSuperMethodInvokeNoSuchMethod:[null]*/
+missingSuperMethodInvokeNoSuchMethod() {
+  new Sub8(). /*invoke: [exact=Sub8]*/ method();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Invocation of abstract super method caught by noSuchMethod.
+////////////////////////////////////////////////////////////////////////////////
+
+/*element: Super9.:[exact=Super9]*/
+class Super9 {
+  method();
+
+  /*element: Super9.noSuchMethod:[exact=JSUInt31]*/
+  noSuchMethod(/*[null|subclass=Object]*/ im) => 42;
+}
+
+/*element: Sub9.:[exact=Sub9]*/
+class Sub9 extends Super9 {
+  /*element: Sub9.method:[exact=JSUInt31]*/
+  // ignore: abstract_super_member_reference
+  method() => super.method();
+}
+
+/*element: abstractSuperMethodInvokeNoSuchMethod:[null]*/
+abstractSuperMethodInvokeNoSuchMethod() {
+  new Sub9(). /*invoke: [exact=Sub9]*/ method();
+}
diff --git a/tests/compiler/dart2js/inference/data/erroneous_super_set.dart b/tests/compiler/dart2js/inference/data/erroneous_super_set.dart
new file mode 100644
index 0000000..d100a00
--- /dev/null
+++ b/tests/compiler/dart2js/inference/data/erroneous_super_set.dart
@@ -0,0 +1,30 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*element: main:[null]*/
+main() {
+  missingSuperFieldUpdate();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Update of missing super field.
+////////////////////////////////////////////////////////////////////////////////
+
+/*element: Super4.:[exact=Super4]*/
+class Super4 {}
+
+/*element: Sub4.:[exact=Sub4]*/
+class Sub4 extends Super4 {
+  /*element: Sub4.method:[empty]*/
+  method() {
+    // ignore: UNDEFINED_SUPER_SETTER
+    var a = super.field = new Sub4();
+    return a. /*[empty]*/ method;
+  }
+}
+
+/*element: missingSuperFieldUpdate:[null]*/
+missingSuperFieldUpdate() {
+  new Sub4(). /*invoke: [exact=Sub4]*/ method();
+}
diff --git a/tests/compiler/dart2js/inference/data/expose_this_mask.dart b/tests/compiler/dart2js/inference/data/expose_this_mask.dart
index 847236b..1447e11 100644
--- a/tests/compiler/dart2js/inference/data/expose_this_mask.dart
+++ b/tests/compiler/dart2js/inference/data/expose_this_mask.dart
@@ -169,6 +169,7 @@
   var field6a;
   /*ast.element: Class6.field6b:[exact=JSUInt31]*/
   /*kernel.element: Class6.field6b:[null|exact=JSUInt31]*/
+  /*strong.element: Class6.field6b:[null|exact=JSUInt31]*/
   var field6b;
 
   /*element: Class6.:[exact=Class6]*/
@@ -186,11 +187,13 @@
 
   /*ast.element: SubClass6.access:[exact=JSUInt31]*/
   /*kernel.element: SubClass6.access:[null|exact=JSUInt31]*/
+  /*strong.element: SubClass6.access:[null|exact=JSUInt31]*/
   get access => super.field6b;
 }
 
 /*ast.element: subclassFieldWrite:[exact=JSUInt31]*/
 /*kernel.element: subclassFieldWrite:[null|exact=JSUInt31]*/
+/*strong.element: subclassFieldWrite:[null|exact=JSUInt31]*/
 subclassFieldWrite() {
   new Class6();
   return new SubClass6(). /*[exact=SubClass6]*/ access;
@@ -206,6 +209,7 @@
   var field9a;
   /*ast.element: Class9.field9b:[exact=JSUInt31]*/
   /*kernel.element: Class9.field9b:[null|exact=JSUInt31]*/
+  /*strong.element: Class9.field9b:[null|exact=JSUInt31]*/
   var field9b;
 
   /*element: Class9.:[exact=Class9]*/
@@ -223,6 +227,7 @@
 
   /*ast.element: SubClass9a.access:[exact=JSUInt31]*/
   /*kernel.element: SubClass9a.access:[null|exact=JSUInt31]*/
+  /*strong.element: SubClass9a.access:[null|exact=JSUInt31]*/
   get access => super.field9b;
 }
 
@@ -231,6 +236,7 @@
 
 /*ast.element: subclassesFieldWrite:[exact=JSUInt31]*/
 /*kernel.element: subclassesFieldWrite:[null|exact=JSUInt31]*/
+/*strong.element: subclassesFieldWrite:[null|exact=JSUInt31]*/
 subclassesFieldWrite() {
   new Class9();
   new SubClass9b();
diff --git a/tests/compiler/dart2js/inference/data/field_type.dart b/tests/compiler/dart2js/inference/data/field_type.dart
index 6936a0e..aeec6f6 100644
--- a/tests/compiler/dart2js/inference/data/field_type.dart
+++ b/tests/compiler/dart2js/inference/data/field_type.dart
@@ -351,6 +351,7 @@
   // TODO(johnniwinther): Investigate with these differ.
   /*ast.element: A16.f16:Union([exact=JSString], [exact=JSUInt31])*/
   /*kernel.element: A16.f16:Union([exact=JSString], [null|exact=JSUInt31])*/
+  /*strong.element: A16.f16:Union([exact=JSString], [null|exact=JSUInt31])*/
   var f16;
 
   /*element: A16.:[exact=A16]*/
@@ -463,13 +464,13 @@
 
   /*element: A20.:[exact=A20]*/
   A20() {
+    dynamic a = this;
     // TODO(johnniwinther): Fix ast equivalence on instance fields in for.
     /*iterator: [exact=A20]*/
     /*current: [exact=A20]*/
     /*moveNext: [exact=A20]*/
-    for (/*kernel.update: [exact=A20]*/ f20 in
-        // ignore: for_in_of_invalid_type
-        this) {}
+    for (/*kernel.update: [exact=A20]*/ /*strong.update: [exact=A20]*/ f20
+        in a) {}
   }
 
   /*element: A20.iterator:[exact=A20]*/
@@ -493,14 +494,13 @@
 
   /*element: A21.:[exact=A21]*/
   A21() {
+    dynamic a = this;
     /*iterator: [exact=A21]*/
     /*current: [null]*/
     /*moveNext: [null]*/
     for (
         // ignore: unused_local_variable
-        var i
-        // ignore: for_in_of_invalid_type
-        in this) {}
+        var i in a) {}
     /*update: [exact=A21]*/ f21 = 42;
   }
   /*element: A21.iterator:[null]*/
@@ -659,10 +659,9 @@
 
 /*element: test26:[null]*/
 test26() {
-  new A26(). /*update: [exact=A26]*/ f26 = [new B26(), new A26()]
+  new A26(). /*update: [exact=A26]*/ f26 = <dynamic>[new B26(), new A26()]
               /*Container([exact=JSExtendableArray], element: Union([exact=A26], [exact=B26]), length: 2)*/
               [0]
-          // ignore: undefined_getter
           . /*Union([exact=A26], [exact=B26])*/ f26
       /*invoke: [subclass=JSPositiveInt]*/ +
       42;
diff --git a/tests/compiler/dart2js/inference/data/general.dart b/tests/compiler/dart2js/inference/data/general.dart
index 8616dce..867e759 100644
--- a/tests/compiler/dart2js/inference/data/general.dart
+++ b/tests/compiler/dart2js/inference/data/general.dart
@@ -90,15 +90,15 @@
 /*element: returnEmpty1:[empty]*/
 returnEmpty1() {
   // Ensure that we don't intrisify a wrong call to [int.remainder].
-  // ignore: not_enough_required_arguments
-  return 42. /*invoke: [exact=JSUInt31]*/ remainder();
+  dynamic a = 42;
+  return a. /*invoke: [exact=JSUInt31]*/ remainder();
 }
 
 /*element: returnEmpty2:[empty]*/
 returnEmpty2() {
   // Ensure that we don't intrisify a wrong call to [int.abs].
-  // ignore: extra_positional_arguments
-  return 42. /*invoke: [exact=JSUInt31]*/ abs(42);
+  dynamic a = 42;
+  return a. /*invoke: [exact=JSUInt31]*/ abs(42);
 }
 
 /*element: testIsCheck1:[subclass=JSInt]*/
@@ -212,7 +212,7 @@
 // TODO(29309): Change to [subclass=JSInt] when 29309 is fixed.
 /*element: testIsCheck15:[null|subclass=Object]*/
 testIsCheck15(/*[null|subclass=Object]*/ a) {
-  var c = 42;
+  dynamic c = 42;
   do {
     if (a) return c;
     c = topLevelGetter();
@@ -222,7 +222,7 @@
 
 /*element: testIsCheck16:[null|subclass=Object]*/
 testIsCheck16(/*[null|subclass=Object]*/ a) {
-  var c = 42;
+  dynamic c = 42;
   do {
     if (a) return c;
     c = topLevelGetter();
@@ -232,7 +232,7 @@
 
 /*element: testIsCheck17:[subclass=JSInt]*/
 testIsCheck17(/*[null|subclass=Object]*/ a) {
-  var c = 42;
+  dynamic c = 42;
   for (; c is int;) {
     if (a) return c;
     c = topLevelGetter();
@@ -242,7 +242,7 @@
 
 /*element: testIsCheck18:[null|subclass=Object]*/
 testIsCheck18(/*[null|subclass=Object]*/ a) {
-  var c = 42;
+  dynamic c = 42;
   for (; c is int;) {
     if (a) return c;
     c = topLevelGetter();
@@ -252,7 +252,7 @@
 
 /*element: testIsCheck19:[null|subclass=Object]*/
 testIsCheck19(/*[null|subclass=Object]*/ a) {
-  var c = 42;
+  dynamic c = 42;
   for (; c is! int;) {
     if (a) return c;
     c = topLevelGetter();
@@ -357,8 +357,8 @@
 
 /*element: returnIntAsNum:[exact=JSUInt31]*/
 returnIntAsNum() {
-  // ignore: unnecessary_cast
-  return 0 as num;
+  dynamic a = 0;
+  return a as num;
 }
 
 typedef int Foo();
diff --git a/tests/compiler/dart2js/inference/data/if_null.dart b/tests/compiler/dart2js/inference/data/if_null.dart
index 7856b3e..d9cca46 100644
--- a/tests/compiler/dart2js/inference/data/if_null.dart
+++ b/tests/compiler/dart2js/inference/data/if_null.dart
@@ -28,7 +28,11 @@
 
 /*element: _ifNotNullInvoke:[null|exact=JSBool]*/
 _ifNotNullInvoke(/*[null|exact=JSUInt31]*/ o) {
-  return o?. /*ast.[null|exact=JSUInt31]*/ /*kernel.[exact=JSUInt31]*/ isEven;
+  return o?.
+      /*ast.[null|exact=JSUInt31]*/
+      /*kernel.[exact=JSUInt31]*/
+      /*strong.[exact=JSUInt31]*/
+      isEven;
 }
 
 /*element: ifNotNullInvoke:[null]*/
diff --git a/tests/compiler/dart2js/inference/data/list.dart b/tests/compiler/dart2js/inference/data/list.dart
index 577be23..1b31de9 100644
--- a/tests/compiler/dart2js/inference/data/list.dart
+++ b/tests/compiler/dart2js/inference/data/list.dart
@@ -106,6 +106,7 @@
 
 /*ast.element: newUint32List:Container([exact=NativeUint32List], element: [subclass=JSUInt32], length: null)*/
 /*kernel.element: newUint32List:Container([exact=NativeUint32List], element: [subclass=JSUInt32], length: 13)*/
+/*strong.element: newUint32List:Container([exact=NativeUint32List], element: [subclass=JSUInt32], length: 13)*/
 newUint32List() => new Uint32List((13));
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/tests/compiler/dart2js/inference/data/list_strong.dart b/tests/compiler/dart2js/inference/data/list_strong.dart
deleted file mode 100644
index 577be23..0000000
--- a/tests/compiler/dart2js/inference/data/list_strong.dart
+++ /dev/null
@@ -1,129 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:typed_data';
-
-/*element: main:[null]*/
-main() {
-  emptyList();
-  nullList();
-  constList();
-  constNullList();
-  intList();
-  newList();
-  newFixedList();
-  newFilledList();
-  newFloat32x4List();
-  newInt32x4List();
-  newFloat64x2List();
-  newFloat32List();
-  newFloat64List();
-  newInt16List();
-  newInt32List();
-  newInt8List();
-  newUint16List();
-  newUint32List();
-  newUint8ClampedList();
-  newUint8List();
-}
-
-/*element: emptyList:Container([exact=JSExtendableArray], element: [empty], length: 0)*/
-emptyList() => [];
-
-/*element: constList:Container([exact=JSUnmodifiableArray], element: [empty], length: 0)*/
-constList() => const [];
-
-/*element: nullList:Container([exact=JSExtendableArray], element: [null], length: 1)*/
-nullList() => [null];
-
-/*element: constNullList:Container([exact=JSUnmodifiableArray], element: [null], length: 1)*/
-constNullList() => const [null];
-
-/*element: intList:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 3)*/
-intList() => [1, 2, 3];
-
-/*element: newList:Container([exact=JSExtendableArray], element: [empty], length: 0)*/
-newList() => new List();
-
-/*element: newFixedList:Container([exact=JSFixedArray], element: [null], length: 2)*/
-newFixedList() => new List(2);
-
-/*element: newFilledList:Container([exact=JSFixedArray], element: Value([exact=JSString], value: ""), length: 3)*/
-newFilledList() => new List.filled(3, '');
-
-/*element: newFloat32x4List:[exact=NativeFloat32x4List]*/
-newFloat32x4List() => new Float32x4List(4);
-
-/*element: newInt32x4List:[exact=NativeInt32x4List]*/
-newInt32x4List() => new Int32x4List(5);
-
-/*element: newFloat64x2List:[exact=NativeFloat64x2List]*/
-newFloat64x2List() => new Float64x2List(6);
-
-/*element: newFloat32List:Container([exact=NativeFloat32List], element: [subclass=JSNumber], length: 7)*/
-newFloat32List() => new Float32List(7);
-
-/*element: newFloat64List:Container([exact=NativeFloat64List], element: [subclass=JSNumber], length: 8)*/
-newFloat64List() => new Float64List(8);
-
-/*element: newInt16List:Container([exact=NativeInt16List], element: [subclass=JSInt], length: 9)*/
-newInt16List() => new Int16List(9);
-
-////////////////////////////////////////////////////////////////////////////////
-// Create a Int32List using an unchanged non-final top-level field as length.
-////////////////////////////////////////////////////////////////////////////////
-
-/*element: _field1:[exact=JSUInt31]*/
-var _field1 = 10;
-
-/*element: newInt32List:Container([exact=NativeInt32List], element: [subclass=JSInt], length: null)*/
-newInt32List() => new Int32List(_field1);
-
-////////////////////////////////////////////////////////////////////////////////
-// Create a Int8List using a final top-level field as length.
-////////////////////////////////////////////////////////////////////////////////
-
-/*element: _field2:[exact=JSUInt31]*/
-final _field2 = 11;
-
-/*element: newInt8List:Container([exact=NativeInt8List], element: [subclass=JSInt], length: 11)*/
-newInt8List() => new Int8List(_field2);
-
-////////////////////////////////////////////////////////////////////////////////
-// Create a Uint16List using a const top-level field as length.
-////////////////////////////////////////////////////////////////////////////////
-
-/*element: _field3:[exact=JSUInt31]*/
-const _field3 = 12;
-
-/*element: newUint16List:Container([exact=NativeUint16List], element: [exact=JSUInt31], length: 12)*/
-newUint16List() => new Uint16List(_field3);
-
-////////////////////////////////////////////////////////////////////////////////
-// Create a Uint32List using a parenthesized literal int as length.
-////////////////////////////////////////////////////////////////////////////////
-
-/*ast.element: newUint32List:Container([exact=NativeUint32List], element: [subclass=JSUInt32], length: null)*/
-/*kernel.element: newUint32List:Container([exact=NativeUint32List], element: [subclass=JSUInt32], length: 13)*/
-newUint32List() => new Uint32List((13));
-
-////////////////////////////////////////////////////////////////////////////////
-// Create a Uint8ClampedList using a constant multiplication as length.
-////////////////////////////////////////////////////////////////////////////////
-
-/*element: newUint8ClampedList:Container([exact=NativeUint8ClampedList], element: [exact=JSUInt31], length: null)*/
-newUint8ClampedList() =>
-    new Uint8ClampedList(2 /*invoke: [exact=JSUInt31]*/ * 7);
-
-////////////////////////////////////////////////////////////////////////////////
-// Create a Uint8List using a const static field as length.
-////////////////////////////////////////////////////////////////////////////////
-
-abstract class Class1 {
-  /*element: Class1.field:[exact=JSUInt31]*/
-  static const field = 15;
-}
-
-/*element: newUint8List:Container([exact=NativeUint8List], element: [exact=JSUInt31], length: 15)*/
-newUint8List() => new Uint8List(Class1.field);
diff --git a/tests/compiler/dart2js/inference/data/list_tracer_typed_data_length.dart b/tests/compiler/dart2js/inference/data/list_tracer_typed_data_length.dart
index a042a6c..c528722 100644
--- a/tests/compiler/dart2js/inference/data/list_tracer_typed_data_length.dart
+++ b/tests/compiler/dart2js/inference/data/list_tracer_typed_data_length.dart
@@ -4,6 +4,9 @@
 
 import 'dart:typed_data';
 
+// TODO(johnniwinther): Fix inference for strong mode. List elements should not
+// be [empty].
+
 /*element: myList:Container([null|exact=NativeFloat32List], element: [subclass=JSNumber], length: 42)*/
 var myList = new Float32List(42);
 
@@ -16,7 +19,9 @@
   var a = new Float32List(9);
   return myList
           /*Container([null|exact=NativeFloat32List], element: [subclass=JSNumber], length: 42)*/
-          [0] /*invoke: [subclass=JSNumber]*/ +
+          [0]
+      /*invoke: [subclass=JSNumber]*/
+      +
       myOtherList
           /*Container([null|exact=NativeUint8List], element: [exact=JSUInt31], length: 32)*/
           [0];
diff --git a/tests/compiler/dart2js/inference/data/local_functions.dart b/tests/compiler/dart2js/inference/data/local_functions.dart
index c64f6a5..f6b03f1 100644
--- a/tests/compiler/dart2js/inference/data/local_functions.dart
+++ b/tests/compiler/dart2js/inference/data/local_functions.dart
@@ -64,8 +64,8 @@
 /*element: namedLocalFunctionInvokeMissingArgument:[null|subclass=Object]*/
 namedLocalFunctionInvokeMissingArgument() {
   /*[exact=JSUInt31]*/ local(/*[empty]*/ x) => 0;
-  // ignore: NOT_ENOUGH_REQUIRED_ARGUMENTS
-  return local();
+  dynamic b = local;
+  return b();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -75,8 +75,8 @@
 /*element: namedLocalFunctionInvokeExtraArgument:[null|subclass=Object]*/
 namedLocalFunctionInvokeExtraArgument() {
   /*[exact=JSUInt31]*/ local() => 0;
-  // ignore: EXTRA_POSITIONAL_ARGUMENTS
-  return local(0);
+  dynamic b = local;
+  return b(0);
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -86,8 +86,8 @@
 /*element: namedLocalFunctionInvokeExtraNamedArgument:[null|subclass=Object]*/
 namedLocalFunctionInvokeExtraNamedArgument() {
   /*[exact=JSUInt31]*/ local() => 0;
-  // ignore: UNDEFINED_NAMED_PARAMETER
-  return local(a: 0);
+  dynamic b = local;
+  return b(a: 0);
 }
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/tests/compiler/dart2js/inference/data/logical_if.dart b/tests/compiler/dart2js/inference/data/logical_if.dart
index 4e1adb1..9313a84 100644
--- a/tests/compiler/dart2js/inference/data/logical_if.dart
+++ b/tests/compiler/dart2js/inference/data/logical_if.dart
@@ -246,7 +246,12 @@
 /*element: _promotedNotNotIfThen:[null]*/
 _promotedNotNotIfThen(/*Union([exact=Class10], [exact=JSUInt31])*/ o) {
   if (!(o is! Class10)) {
-    o. /*ast.invoke: Union([exact=Class10], [exact=JSUInt31])*/ /*kernel.invoke: [exact=Class10]*/ toString();
+    o
+        .
+        /*ast.invoke: Union([exact=Class10], [exact=JSUInt31])*/
+        /*kernel.invoke: [exact=Class10]*/
+        /*strong.invoke: [exact=Class10]*/
+        toString();
   }
 }
 
@@ -271,7 +276,12 @@
     // receiver must be [exact=JSUInt31].
     o. /*invoke: Union([exact=Class11], [exact=JSUInt31])*/ toString();
   } else {
-    o. /*ast.invoke: Union([exact=Class11], [exact=JSUInt31])*/ /*kernel.invoke: [exact=Class11]*/ toString();
+    o
+        .
+        /*ast.invoke: Union([exact=Class11], [exact=JSUInt31])*/
+        /*kernel.invoke: [exact=Class11]*/
+        /*strong.invoke: [exact=Class11]*/
+        toString();
   }
 }
 
diff --git a/tests/compiler/dart2js/inference/data/map_tracer_keys.dart b/tests/compiler/dart2js/inference/data/map_tracer_keys.dart
index fb02458..994c879 100644
--- a/tests/compiler/dart2js/inference/data/map_tracer_keys.dart
+++ b/tests/compiler/dart2js/inference/data/map_tracer_keys.dart
@@ -13,10 +13,10 @@
 }
 
 /*element: aDouble1:[null|exact=JSDouble]*/
-double aDouble1 = 42.5;
+dynamic aDouble1 = 42.5;
 
 /*element: aList1:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
-List aList1 = [42];
+dynamic aList1 = [42];
 
 /*element: consume1:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
 consume1(
@@ -44,10 +44,10 @@
 }
 
 /*element: aDouble2:[null|exact=JSDouble]*/
-double aDouble2 = 42.5;
+dynamic aDouble2 = 42.5;
 
 /*element: aList2:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
-List aList2 = [42];
+dynamic aList2 = [42];
 
 /*element: consume2:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
 consume2(
@@ -75,10 +75,10 @@
 }
 
 /*element: aDouble3:Union([exact=JSDouble], [null|exact=JSExtendableArray])*/
-double aDouble3 = 42.5;
+dynamic aDouble3 = 42.5;
 
 /*element: aList3:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
-List aList3 = [42];
+dynamic aList3 = [42];
 
 /*element: consume3:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
 consume3(
@@ -106,10 +106,10 @@
 }
 
 /*element: aDouble4:[null|exact=JSDouble]*/
-double aDouble4 = 42.5;
+dynamic aDouble4 = 42.5;
 
 /*element: aList4:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
-List aList4 = [42];
+dynamic aList4 = [42];
 
 /*element: consume4:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
 consume4(
@@ -134,10 +134,10 @@
 }
 
 /*element: aDouble5:[null|exact=JSDouble]*/
-double aDouble5 = 42.5;
+dynamic aDouble5 = 42.5;
 
 /*element: aList5:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
-List aList5 = [42];
+dynamic aList5 = [42];
 
 /*element: consume5:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
 consume5(
@@ -162,9 +162,9 @@
 }
 
 /*element: aDouble6:Union([null|exact=JSDouble], [null|exact=JSExtendableArray])*/
-double aDouble6 = 42.5;
+dynamic aDouble6 = 42.5;
 /*element: aList6:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
-List aList6 = [42];
+dynamic aList6 = [42];
 
 /*element: consume6:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
 consume6(
diff --git a/tests/compiler/dart2js/inference/data/no_such_method.dart b/tests/compiler/dart2js/inference/data/no_such_method.dart
index fa78655..c4225e3 100644
--- a/tests/compiler/dart2js/inference/data/no_such_method.dart
+++ b/tests/compiler/dart2js/inference/data/no_such_method.dart
@@ -16,8 +16,10 @@
   noSuchMethod(/*[null|subclass=Object]*/ _) => 42;
 
   /*element: Class1.method:[exact=JSUInt31]*/
-  // ignore: UNDEFINED_GETTER
-  method() => this. /*[exact=Class1]*/ missingGetter;
+  method() {
+    dynamic a = this;
+    return a. /*[exact=Class1]*/ missingGetter;
+  }
 }
 
 /*element: missingGetter:[exact=JSUInt31]*/
@@ -33,8 +35,10 @@
   noSuchMethod(/*[null|subclass=Object]*/ _) => 42;
 
   /*element: Class2.method:[exact=JSUInt31]*/
-  // ignore: UNDEFINED_METHOD
-  method() => this. /*invoke: [exact=Class2]*/ missingMethod();
+  method() {
+    dynamic a = this;
+    return a. /*invoke: [exact=Class2]*/ missingMethod();
+  }
 }
 
 /*element: missingMethod:[exact=JSUInt31]*/
@@ -52,9 +56,11 @@
   }
 
   /*element: Class3.method:[null|subclass=Object]*/
-  // ignore: UNDEFINED_METHOD
-  method() => this. /*invoke: [exact=Class3]*/ missingMethod(
-      /*[null]*/ (/*[null|subclass=Object]*/ parameter) {})(0);
+  method() {
+    dynamic a = this;
+    return a. /*invoke: [exact=Class3]*/ missingMethod(
+        /*[null]*/ (/*[null|subclass=Object]*/ parameter) {})(0);
+  }
 }
 
 /*element: closureThroughMissingMethod:[null|subclass=Object]*/
@@ -79,10 +85,10 @@
 
   /*element: Class4.method:[null]*/
   method() {
-    // ignore: UNDEFINED_SETTER
-    this. /*update: [exact=Class4]*/ missingSetter =
+    dynamic a = this;
+    a. /*update: [exact=Class4]*/ missingSetter =
         /*[null]*/ (/*[null|subclass=Object]*/ parameter) {};
-    this. /*invoke: [exact=Class4]*/ field(0);
+    a. /*invoke: [exact=Class4]*/ field(0);
   }
 }
 
diff --git a/tests/compiler/dart2js/inference/data/no_such_method1.dart b/tests/compiler/dart2js/inference/data/no_such_method1.dart
index 9bf8eba..b4a1774 100644
--- a/tests/compiler/dart2js/inference/data/no_such_method1.dart
+++ b/tests/compiler/dart2js/inference/data/no_such_method1.dart
@@ -25,9 +25,10 @@
     [0];
 
 /*element: test1:[exact=JSUInt31]*/
-test1() => new A()
-    // ignore: undefined_method
-    . /*invoke: [exact=A]*/ foo();
+test1() {
+  dynamic e = new A();
+  return e. /*invoke: [exact=A]*/ foo();
+}
 
 /*element: test2:Union([exact=JSUInt31], [subclass=JsLinkedHashMap])*/
 test2() => a. /*invoke: [null|subclass=B]*/ foo();
@@ -39,9 +40,10 @@
 test4() => new C(). /*invoke: [exact=C]*/ foo();
 
 /*element: test5:Union([exact=JSUInt31], [subclass=JsLinkedHashMap])*/
-test5() => (a ? new A() : new B())
-    // ignore: undefined_method
-    . /*invoke: [subclass=A]*/ foo();
+test5() {
+  dynamic e = (a ? new A() : new B());
+  return e. /*invoke: [subclass=A]*/ foo();
+}
 
 /*element: test6:Union([exact=JSUInt31], [subclass=JsLinkedHashMap])*/
 test6() => (a ? new B() : new C()). /*invoke: [subclass=B]*/ foo();
diff --git a/tests/compiler/dart2js/inference/data/no_such_method2.dart b/tests/compiler/dart2js/inference/data/no_such_method2.dart
index 434e82a..0d0eb8f 100644
--- a/tests/compiler/dart2js/inference/data/no_such_method2.dart
+++ b/tests/compiler/dart2js/inference/data/no_such_method2.dart
@@ -47,9 +47,10 @@
 test4() => (a ? new B() : new C()). /*invoke: [subclass=B]*/ foo();
 
 /*element: test5:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test5() => (a ? new B() : new D())
-    // ignore: undefined_method
-    . /*invoke: Union([exact=B], [exact=D])*/ foo();
+test5() {
+  dynamic e = (a ? new B() : new D());
+  return e. /*invoke: Union([exact=B], [exact=D])*/ foo();
+}
 
 // Can hit A.noSuchMethod, D.noSuchMethod and Object.noSuchMethod.
 /*element: test6:Union([exact=JSDouble], [exact=JSUInt31])*/
@@ -57,31 +58,36 @@
 
 // Can hit A.noSuchMethod.
 /*element: test7:[exact=JSUInt31]*/
-test7() => new B()
-    // ignore: undefined_method
-    . /*invoke: [exact=B]*/ bar();
+test7() {
+  dynamic e = new B();
+  return e. /*invoke: [exact=B]*/ bar();
+}
 
 /*element: test8:[exact=JSUInt31]*/
-test8() => new C()
-    // ignore: undefined_method
-    . /*invoke: [exact=C]*/ bar();
+test8() {
+  dynamic e = new C();
+  return e. /*invoke: [exact=C]*/ bar();
+}
 
 /*element: test9:[exact=JSUInt31]*/
-test9() => (a ? new B() : new C())
-    // ignore: undefined_method
-    . /*invoke: [subclass=B]*/ bar();
+test9() {
+  dynamic e = (a ? new B() : new C());
+  return e. /*invoke: [subclass=B]*/ bar();
+}
 
 // Can hit A.noSuchMethod and D.noSuchMethod.
 /*element: test10:Union([exact=JSDouble], [exact=JSUInt31])*/
-test10() => (a ? new B() : new D())
-    // ignore: undefined_method
-    . /*invoke: Union([exact=B], [exact=D])*/ bar();
+test10() {
+  dynamic e = (a ? new B() : new D());
+  return e. /*invoke: Union([exact=B], [exact=D])*/ bar();
+}
 
 // Can hit D.noSuchMethod.
 /*element: test11:[exact=JSDouble]*/
-test11() => new D()
-    // ignore: undefined_method
-    . /*invoke: [exact=D]*/ bar();
+test11() {
+  dynamic e = new D();
+  return e. /*invoke: [exact=D]*/ bar();
+}
 
 /*element: main:[null]*/
 main() {
diff --git a/tests/compiler/dart2js/inference/data/no_such_method3.dart b/tests/compiler/dart2js/inference/data/no_such_method3.dart
index 2b31564..ed6a5f7 100644
--- a/tests/compiler/dart2js/inference/data/no_such_method3.dart
+++ b/tests/compiler/dart2js/inference/data/no_such_method3.dart
@@ -27,9 +27,10 @@
     /*Container([exact=JSExtendableArray], element: [subclass=B], length: 2)*/
     [0];
 /*element: test1:[empty]*/
-test1() => new A()
-    // ignore: undefined_method
-    . /*invoke: [exact=A]*/ foo();
+test1() {
+  dynamic e = new A();
+  return e. /*invoke: [exact=A]*/ foo();
+}
 
 /*element: test2:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
 test2() => a. /*invoke: [null|subclass=B]*/ foo();
@@ -41,9 +42,10 @@
 test4() => new C(). /*invoke: [exact=C]*/ foo();
 
 /*element: test5:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test5() => (a ? new A() : new B())
-    // ignore: undefined_method
-    . /*invoke: [subclass=A]*/ foo();
+test5() {
+  dynamic e = (a ? new A() : new B());
+  return e. /*invoke: [subclass=A]*/ foo();
+}
 
 /*element: test6:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
 test6() => (a ? new B() : new C()). /*invoke: [subclass=B]*/ foo();
diff --git a/tests/compiler/dart2js/inference/data/no_such_method4.dart b/tests/compiler/dart2js/inference/data/no_such_method4.dart
index 1eaaf15..13af644 100644
--- a/tests/compiler/dart2js/inference/data/no_such_method4.dart
+++ b/tests/compiler/dart2js/inference/data/no_such_method4.dart
@@ -27,9 +27,10 @@
     [0];
 
 /*element: test1:[empty]*/
-test1() => new A()
-    // ignore: undefined_method
-    . /*invoke: [exact=A]*/ foo();
+test1() {
+  dynamic e = new A();
+  return e. /*invoke: [exact=A]*/ foo();
+}
 
 /*element: test2:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
 test2() => a. /*invoke: [null|subclass=B]*/ foo();
@@ -41,9 +42,10 @@
 test4() => new C(). /*invoke: [exact=C]*/ foo();
 
 /*element: test5:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test5() => (a ? new A() : new B())
-    // ignore: undefined_method
-    . /*invoke: [subclass=A]*/ foo();
+test5() {
+  dynamic e = (a ? new A() : new B());
+  return e. /*invoke: [subclass=A]*/ foo();
+}
 
 /*element: test6:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
 test6() => (a ? new B() : new C()). /*invoke: [subclass=B]*/ foo();
diff --git a/tests/compiler/dart2js/inference/data/optimizer_hints.dart b/tests/compiler/dart2js/inference/data/optimizer_hints.dart
index bec13c2..bf8463c 100644
--- a/tests/compiler/dart2js/inference/data/optimizer_hints.dart
+++ b/tests/compiler/dart2js/inference/data/optimizer_hints.dart
@@ -57,7 +57,9 @@
 // As above but without the annotation.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*element: notTrustReturnTypeString:[null|subclass=Object]*/
+/*ast.element: notTrustReturnTypeString:[null|subclass=Object]*/
+/*kernel.element: notTrustReturnTypeString:[null|subclass=Object]*/
+/*strong.element: notTrustReturnTypeString:[null|exact=JSString]*/
 String notTrustReturnTypeString() {
   return _assumeDynamic(0);
 }
@@ -80,7 +82,12 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 /*element: _notTrustParameterTypeString:[null]*/
-_notTrustParameterTypeString(String /*[null|subclass=Object]*/ o) {}
+_notTrustParameterTypeString(
+    String
+        /*ast.[null|subclass=Object]*/
+        /*kernel.[null|subclass=Object]*/
+        /*strong.[null|exact=JSString]*/
+        o) {}
 
 /*element: notTrustParameterTypeString:[null]*/
 notTrustParameterTypeString() {
diff --git a/tests/compiler/dart2js/inference/data/postfix_prefix.dart b/tests/compiler/dart2js/inference/data/postfix_prefix.dart
index 0e54d55..f7428dd 100644
--- a/tests/compiler/dart2js/inference/data/postfix_prefix.dart
+++ b/tests/compiler/dart2js/inference/data/postfix_prefix.dart
@@ -2,6 +2,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+/*element: index:[empty]*/
+dynamic get index => throw '';
+
 /*element: A.:[exact=A]*/
 class A {
   /*element: A.foo:Value([exact=JSString], value: "string")*/
@@ -18,6 +21,7 @@
   // TODO(johnniwinther): Investigate why these differ.
   /*ast.element: A.returnDynamic1:Union([exact=JSString], [exact=JSUInt31])*/
   /*kernel.element: A.returnDynamic1:[exact=JSUInt31]*/
+  /*strong.element: A.returnDynamic1:[exact=JSUInt31]*/
   returnDynamic1() => /*[subclass=A]*/ /*update: [subclass=A]*/ foo
       /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ --;
 
@@ -32,38 +36,45 @@
   // TODO(johnniwinther): Investigate why these differ.
   /*ast.element: A.returnDynamic2:Union([exact=JSString], [exact=JSUInt31])*/
   /*kernel.element: A.returnDynamic2:[exact=JSUInt31]*/
+  /*strong.element: A.returnDynamic2:[exact=JSUInt31]*/
   returnDynamic2() => this
-          // ignore: undefined_identifier
-          /*[subclass=A]*/ /*update: [subclass=A]*/ [/*[subclass=A]*/ index]
+          /*[subclass=A]*/ /*update: [subclass=A]*/ [index]
       /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ --;
 
   /*element: A.returnNum3:[subclass=JSNumber]*/
   returnNum3() => /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ --this
-      // ignore: undefined_identifier
-      /*[subclass=A]*/ /*update: [subclass=A]*/ [/*[subclass=A]*/ index];
+      /*[subclass=A]*/ /*update: [subclass=A]*/ [index];
 
   /*element: A.returnNum4:[subclass=JSNumber]*/
   returnNum4() => this
-          // ignore: undefined_identifier
-          /*[subclass=A]*/ /*update: [subclass=A]*/ [/*[subclass=A]*/ index]
+          /*[subclass=A]*/ /*update: [subclass=A]*/ [index]
       /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ -= 42;
 
+  // TODO(johnniwinther): Investigate why implementations differ on update.
   /*element: A.returnEmpty3:[empty]*/
-  returnEmpty3() =>
-      // ignore: undefined_setter
-      this. /*[subclass=A]*/ /*update: [subclass=A]*/ bar
-      /*invoke: [empty]*/ --;
+  returnEmpty3() {
+    dynamic a = this;
+    return a. /*[subclass=A]*/
+            /*ast.update: [subclass=A]*/
+            /*kernel.update: [empty]*/
+            /*strong.update: [empty]*/
+            bar
+        /*invoke: [empty]*/ --;
+  }
 
   /*element: A.returnEmpty1:[empty]*/
-  returnEmpty1() => /*invoke: [empty]*/ --this
-      // ignore: undefined_setter
-      . /*[subclass=A]*/ /*update: [subclass=A]*/ bar;
+  returnEmpty1() {
+    dynamic a = this;
+    return /*invoke: [empty]*/ --a
+        . /*[subclass=A]*/ /*update: [subclass=A]*/ bar;
+  }
 
   /*element: A.returnEmpty2:[empty]*/
-  returnEmpty2() => this
-          // ignore: undefined_setter
-          . /*[subclass=A]*/ /*update: [subclass=A]*/ bar
-      /*invoke: [empty]*/ -= 42;
+  returnEmpty2() {
+    dynamic a = this;
+    return a. /*[subclass=A]*/ /*update: [subclass=A]*/ bar
+        /*invoke: [empty]*/ -= 42;
+  }
 }
 
 /*element: B.:[exact=B]*/
@@ -76,6 +87,7 @@
   // TODO(johnniwinther): Investigate why these differ.
   /*ast.element: B.returnString1:Value([exact=JSString], value: "string")*/
   /*kernel.element: B.returnString1:[empty]*/
+  /*strong.element: B.returnString1:[empty]*/
   returnString1() =>
       super.foo /*invoke: Value([exact=JSString], value: "string")*/ --;
 
@@ -91,23 +103,18 @@
   // TODO(johnniwinther): Investigate why these differ.
   /*ast.element: B.returnString2:Value([exact=JSString], value: "string")*/
   /*kernel.element: B.returnString2:[empty]*/
-  returnString2() =>
-      // ignore: undefined_identifier
-      super[/*[exact=B]*/ index]
+  /*strong.element: B.returnString2:[empty]*/
+  returnString2() => super[index]
       /*invoke: Value([exact=JSString], value: "string")*/ --;
 
   /*element: B.returnDynamic3:[empty]*/
   returnDynamic3() =>
       /*invoke: Value([exact=JSString], value: "string")*/
-      --super
-          // ignore: undefined_identifier
-          [/*[exact=B]*/ index];
+      --super[index];
 
   /*element: B.returnDynamic4:[empty]*/
-  returnDynamic4() =>
-      // ignore: undefined_identifier
-      super[/*[exact=B]*/ index]
-          /*invoke: Value([exact=JSString], value: "string")*/ -= 42;
+  returnDynamic4() => super[index]
+      /*invoke: Value([exact=JSString], value: "string")*/ -= 42;
 }
 
 /*element: main:[null]*/
diff --git a/tests/compiler/dart2js/inference/data/refine_locals.dart b/tests/compiler/dart2js/inference/data/refine_locals.dart
index bc437fb..c7c328c 100644
--- a/tests/compiler/dart2js/inference/data/refine_locals.dart
+++ b/tests/compiler/dart2js/inference/data/refine_locals.dart
@@ -112,9 +112,24 @@
 /*element: _refineToClass1InvokeIfNotNull:[null]*/
 _refineToClass1InvokeIfNotNull(
     /*Union([exact=Class2], [null|exact=Class1])*/ o) {
-  o?. /*ast.invoke: Union([exact=Class2], [null|exact=Class1])*/ /*kernel.invoke: Union([exact=Class1], [exact=Class2])*/ method1();
-  o?. /*ast.invoke: [null|exact=Class1]*/ /*kernel.invoke: [exact=Class1]*/ method0();
-  o?. /*ast.invoke: [null|exact=Class1]*/ /*kernel.invoke: [exact=Class1]*/ method2();
+  o
+      ?.
+      /*ast.invoke: Union([exact=Class2], [null|exact=Class1])*/
+      /*kernel.invoke: Union([exact=Class1], [exact=Class2])*/
+      /*strong.invoke: Union([exact=Class1], [exact=Class2])*/
+      method1();
+  o
+      ?.
+      /*ast.invoke: [null|exact=Class1]*/
+      /*kernel.invoke: [exact=Class1]*/
+      /*strong.invoke: [exact=Class1]*/
+      method0();
+  o
+      ?.
+      /*ast.invoke: [null|exact=Class1]*/
+      /*kernel.invoke: [exact=Class1]*/
+      /*strong.invoke: [exact=Class1]*/
+      method2();
   return o;
 }
 
diff --git a/tests/compiler/dart2js/inference/data/super_get.dart b/tests/compiler/dart2js/inference/data/super_get.dart
index 4b94e76..d1f15f2 100644
--- a/tests/compiler/dart2js/inference/data/super_get.dart
+++ b/tests/compiler/dart2js/inference/data/super_get.dart
@@ -7,7 +7,6 @@
   superFieldAccess();
   superGetterAccess();
   superMethodAccess();
-  missingSuperFieldAccess();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -72,22 +71,3 @@
 superMethodAccess() {
   new Sub3(). /*invoke: [exact=Sub3]*/ method();
 }
-
-////////////////////////////////////////////////////////////////////////////////
-// Access of missing super field.
-////////////////////////////////////////////////////////////////////////////////
-
-/*element: Super4.:[exact=Super4]*/
-class Super4 {}
-
-/*element: Sub4.:[exact=Sub4]*/
-class Sub4 extends Super4 {
-  /*element: Sub4.method:[empty]*/
-  // ignore: UNDEFINED_SUPER_GETTER
-  method() => super.field;
-}
-
-/*element: missingSuperFieldAccess:[null]*/
-missingSuperFieldAccess() {
-  new Sub4(). /*invoke: [exact=Sub4]*/ method();
-}
diff --git a/tests/compiler/dart2js/inference/data/super_invoke.dart b/tests/compiler/dart2js/inference/data/super_invoke.dart
index 3950710..4d8c081 100644
--- a/tests/compiler/dart2js/inference/data/super_invoke.dart
+++ b/tests/compiler/dart2js/inference/data/super_invoke.dart
@@ -7,12 +7,6 @@
   superMethodInvoke();
   superFieldInvoke();
   superGetterInvoke();
-  missingSuperMethodInvoke();
-  superMethodInvokeMissingArgument();
-  superMethodInvokeExtraArgument();
-  superMethodInvokeExtraNamedArgument();
-  missingSuperMethodInvokeNoSuchMethod();
-  abstractSuperMethodInvokeNoSuchMethod();
   overridingAbstractSuperMethodInvoke();
 }
 
@@ -93,153 +87,6 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-// Invocation of missing super method.
-////////////////////////////////////////////////////////////////////////////////
-
-/*element: Super4.:[exact=Super4]*/
-class Super4 {}
-
-/*element: Sub4.:[exact=Sub4]*/
-class Sub4 extends Super4 {
-  /*element: Sub4.method:[empty]*/
-  method() {
-    // ignore: UNDEFINED_SUPER_METHOD
-    var a = super.method();
-    return a. /*invoke: [empty]*/ abs();
-  }
-}
-
-/*element: missingSuperMethodInvoke:[null]*/
-missingSuperMethodInvoke() {
-  new Sub4(). /*invoke: [exact=Sub4]*/ method();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Invocation of super method with missing argument.
-////////////////////////////////////////////////////////////////////////////////
-
-/*element: Super5.:[exact=Super5]*/
-class Super5 {
-  /*element: Super5.method1:[exact=JSUInt31]*/
-  method1(/*[exact=JSUInt31]*/ x) => 42;
-}
-
-/*element: Sub5.:[exact=Sub5]*/
-class Sub5 extends Super5 {
-  /*element: Sub5.method2:[empty]*/
-  method2() {
-    super.method1(0);
-    // ignore: NOT_ENOUGH_REQUIRED_ARGUMENTS
-    var a = super.method1();
-    return a. /*invoke: [empty]*/ abs();
-  }
-}
-
-/*element: superMethodInvokeMissingArgument:[null]*/
-superMethodInvokeMissingArgument() {
-  new Sub5(). /*invoke: [exact=Sub5]*/ method2();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Invocation of super method with extra argument.
-////////////////////////////////////////////////////////////////////////////////
-
-/*element: Super6.:[exact=Super6]*/
-class Super6 {
-  /*element: Super6.method:[exact=JSUInt31]*/
-  method() => 42;
-}
-
-/*element: Sub6.:[exact=Sub6]*/
-class Sub6 extends Super6 {
-  /*element: Sub6.method:[empty]*/
-  method() {
-    // ignore: EXTRA_POSITIONAL_ARGUMENTS
-    var a = super.method(0);
-    return a. /*invoke: [empty]*/ abs();
-  }
-}
-
-/*element: superMethodInvokeExtraArgument:[null]*/
-superMethodInvokeExtraArgument() {
-  new Sub6(). /*invoke: [exact=Sub6]*/ method();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Invocation of super method with extra named argument.
-////////////////////////////////////////////////////////////////////////////////
-
-/*element: Super7.:[exact=Super7]*/
-class Super7 {
-  /*element: Super7.method:[exact=JSUInt31]*/
-  method() => 42;
-}
-
-/*element: Sub7.:[exact=Sub7]*/
-class Sub7 extends Super7 {
-  /*element: Sub7.method:[empty]*/
-  method() {
-    // ignore: UNDEFINED_NAMED_PARAMETER
-    var a = super.method(a: 0);
-    return a. /*invoke: [empty]*/ abs();
-  }
-}
-
-/*element: superMethodInvokeExtraNamedArgument:[null]*/
-superMethodInvokeExtraNamedArgument() {
-  new Sub7(). /*invoke: [exact=Sub7]*/ method();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Invocation of super method caught by noSuchMethod.
-////////////////////////////////////////////////////////////////////////////////
-
-/*element: Super8.:[exact=Super8]*/
-class Super8 {
-  /*element: Super8.noSuchMethod:[exact=JSUInt31]*/
-  noSuchMethod(/*[null|subclass=Object]*/ _) => 42;
-}
-
-/*element: Sub8.:[exact=Sub8]*/
-class Sub8 extends Super8 {
-  /*element: Sub8.method:[subclass=JSPositiveInt]*/
-  method() {
-    // ignore: UNDEFINED_SUPER_METHOD
-    var a = super.method();
-    return a. /*invoke: [exact=JSUInt31]*/ abs();
-  }
-}
-
-/*element: missingSuperMethodInvokeNoSuchMethod:[null]*/
-missingSuperMethodInvokeNoSuchMethod() {
-  new Sub8(). /*invoke: [exact=Sub8]*/ method();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Invocation of abstract super method caught by noSuchMethod.
-////////////////////////////////////////////////////////////////////////////////
-
-/*element: Super9.:[exact=Super9]*/
-class Super9 {
-  method();
-
-  /*element: Super9.noSuchMethod:[exact=JSUInt31]*/
-  noSuchMethod(/*[null|subclass=Object]*/ im) => 42;
-}
-
-/*element: Sub9.:[exact=Sub9]*/
-class Sub9 extends Super9 {
-  /*element: Sub9.method:[exact=JSUInt31]*/
-  // ignore: abstract_super_member_reference
-  method() => super.method();
-}
-
-/*element: abstractSuperMethodInvokeNoSuchMethod:[null]*/
-abstractSuperMethodInvokeNoSuchMethod() {
-  new Sub9(). /*invoke: [exact=Sub9]*/ method();
-}
-
-////////////////////////////////////////////////////////////////////////////////
 // Invocation of abstract super method that overrides a concrete method.
 ////////////////////////////////////////////////////////////////////////////////
 
diff --git a/tests/compiler/dart2js/inference/data/super_set.dart b/tests/compiler/dart2js/inference/data/super_set.dart
index 6c7f0e8..e4f5314 100644
--- a/tests/compiler/dart2js/inference/data/super_set.dart
+++ b/tests/compiler/dart2js/inference/data/super_set.dart
@@ -6,7 +6,6 @@
 main() {
   superFieldUpdate();
   superSetterUpdate();
-  missingSuperFieldUpdate();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -55,25 +54,3 @@
 superSetterUpdate() {
   new Sub2(). /*invoke: [exact=Sub2]*/ method();
 }
-
-////////////////////////////////////////////////////////////////////////////////
-// Update of missing super field.
-////////////////////////////////////////////////////////////////////////////////
-
-/*element: Super4.:[exact=Super4]*/
-class Super4 {}
-
-/*element: Sub4.:[exact=Sub4]*/
-class Sub4 extends Super4 {
-  /*element: Sub4.method:[empty]*/
-  method() {
-    // ignore: UNDEFINED_SUPER_SETTER
-    var a = super.field = new Sub4();
-    return a. /*[empty]*/ method;
-  }
-}
-
-/*element: missingSuperFieldUpdate:[null]*/
-missingSuperFieldUpdate() {
-  new Sub4(). /*invoke: [exact=Sub4]*/ method();
-}
diff --git a/tests/compiler/dart2js/inference/inference_test_helper.dart b/tests/compiler/dart2js/inference/inference_test_helper.dart
index 8e760c1..ed2bc4a 100644
--- a/tests/compiler/dart2js/inference/inference_test_helper.dart
+++ b/tests/compiler/dart2js/inference/inference_test_helper.dart
@@ -25,6 +25,19 @@
   'mixin_constructor_default_parameter_values.dart',
 ];
 
+const List<String> skipForStrong = const <String>[
+  // TODO(johnniwinther): Remove this when issue 31767 is fixed.
+  'mixin_constructor_default_parameter_values.dart',
+  // These contain compile-time errors:
+  'erroneous_super_get.dart',
+  'erroneous_super_invoke.dart',
+  'erroneous_super_set.dart',
+  'switch3.dart',
+  'switch4.dart',
+  // TODO(johnniwinther): Make a strong mode clean version of this?
+  'call_in_loop.dart',
+];
+
 main(List<String> args) {
   runTests(args);
 }
@@ -35,10 +48,12 @@
     await checkTests(
         dataDir, computeMemberAstTypeMasks, computeMemberIrTypeMasks,
         libDirectory: new Directory.fromUri(Platform.script.resolve('libs')),
+        testStrongMode: true,
         forUserLibrariesOnly: true,
         args: args,
         options: [stopAfterTypeInference],
         skipForKernel: skipForKernel,
+        skipForStrong: skipForStrong,
         shardIndex: shardIndex ?? 0,
         shards: shardIndex != null ? 2 : 1);
   });
diff --git a/tests/language_2/language_2_kernel.status b/tests/language_2/language_2_kernel.status
index 2fb1e0f..e5a5738 100644
--- a/tests/language_2/language_2_kernel.status
+++ b/tests/language_2/language_2_kernel.status
@@ -601,10 +601,8 @@
 async_star_pause_test: Fail, OK
 async_star_test/02: RuntimeError # Issue 31402 (Invocation arguments)
 built_in_identifier_prefix_test: CompileTimeError
-call_method_as_cast_test/06: RuntimeError
 call_method_implicit_tear_off_implements_function_test/05: RuntimeError
 call_method_implicit_tear_off_implements_function_test/06: RuntimeError
-call_method_is_check_test/06: RuntimeError
 call_method_must_not_be_field_test/03: RuntimeError # Issue 32265
 call_method_must_not_be_getter_test/03: RuntimeError # Issue 32265
 compile_time_constant_k_test/01: MissingCompileTimeError
@@ -918,10 +916,8 @@
 bad_override_test/04: MissingCompileTimeError # Issue 32613: override check is missing in CFE.
 bad_override_test/05: MissingCompileTimeError # Issue 32613: override check is missing in CFE.
 built_in_identifier_prefix_test: CompileTimeError
-call_method_as_cast_test/06: RuntimeError
 call_method_implicit_tear_off_implements_function_test/05: RuntimeError
 call_method_implicit_tear_off_implements_function_test/06: RuntimeError
-call_method_is_check_test/06: RuntimeError
 call_method_must_not_be_field_test/03: RuntimeError # Issue 32265
 call_method_must_not_be_getter_test/03: RuntimeError # Issue 32265
 check_member_static_test/02: MissingCompileTimeError # Issue 32613: override check is missing in CFE.
diff --git a/tests/lib_2/lib_2_kernel.status b/tests/lib_2/lib_2_kernel.status
index 7cace3c..9ea3c4e 100644
--- a/tests/lib_2/lib_2_kernel.status
+++ b/tests/lib_2/lib_2_kernel.status
@@ -112,6 +112,7 @@
 mirrors/empty_test: Crash, RuntimeError
 mirrors/enum_test: RuntimeError # Issue 31402 (Invocation arguments)
 mirrors/equality_test: RuntimeError
+mirrors/fake_function_without_call_test: RuntimeError, OK
 mirrors/function_apply_test: RuntimeError, OK
 mirrors/function_type_mirror_test: RuntimeError
 mirrors/generic_f_bounded_mixin_application_test: RuntimeError
diff --git a/tools/VERSION b/tools/VERSION
index 6492cf9..1d9868f 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 0
 PATCH 0
-PRERELEASE 45
+PRERELEASE 46
 PRERELEASE_PATCH 0
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index 9b22618..585a075 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -526,7 +526,7 @@
         },
         {
           "name": "ddc sourcemap tests",
-          "script": "out/xcodebuild/dart",
+          "script": "xcodebuild/ReleaseX64/dart",
           "arguments": [
             "pkg/dev_compiler/test/sourcemap/sourcemaps_ddc_suite.dart",
             "-rnone"
@@ -534,7 +534,7 @@
         },
         {
           "name": "ddk sourcemap tests",
-          "script": "out/xcodebuild/dart",
+          "script": "xcodebuild/ReleaseX64/dart",
           "arguments": [
             "pkg/dev_compiler/test/sourcemap/sourcemaps_ddk_suite.dart",
             "-rnone"
@@ -542,7 +542,7 @@
         },
         {
           "name": "ddc sourcemap stacktrace tests",
-          "script": "out/xcodebuild/dart",
+          "script": "xcodebuild/ReleaseX64/dart",
           "arguments": [
             "pkg/dev_compiler/test/sourcemap/stacktrace_ddc_suite.dart",
             "-rnone"
@@ -550,7 +550,7 @@
         },
         {
           "name": "ddk sourcemap stacktrace tests",
-          "script": "out/xcodebuild/dart",
+          "script": "xcodebuild/ReleaseX64/dart",
           "arguments": [
             "pkg/dev_compiler/test/sourcemap/stacktrace_ddk_suite.dart",
             "-rnone"
diff --git a/tools/infra/config/cq.cfg b/tools/infra/config/cq.cfg
index 74ce8ab..cb94e5f 100644
--- a/tools/infra/config/cq.cfg
+++ b/tools/infra/config/cq.cfg
@@ -24,10 +24,10 @@
       builders { name: "vm-linux-release-x64-try"}
       builders { name: "vm-mac-release-x64-try"}
       builders { name: "dart2js-linux-d8-hostchecked-try"}
-      builders { name: "dart2js-linux-d8-kernel-minified-try" }
+      builders { name: "dart2js-linux-d8-kernel-minified-try"}
       builders { name: "dart2js-linux-none-only-unittest-try"}
+      builders { name: "dart2js-linux-x64-chrome-try"}
       builders { name: "pkg-linux-release-try"}
-      builders { name: "dart2js-linux-chrome-try"}
       builders { name: "ddc-linux-release-chrome-try"}
       builders { name: "vm-linux-product-x64-try"}
       builders { name: "dart-sdk-windows-try"}