Version 2.10.0-135.0.dev

Merge commit '623a9bda6798f0196513ceee40c072bc846f1ad6' into 'dev'
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index 9e55d9d21..3708c2d 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -1142,6 +1142,8 @@
     if (declaredMember == interfaceMember) {
       return;
     }
+    Member interfaceMemberOrigin =
+        interfaceMember.memberSignatureOrigin ?? interfaceMember;
     if (declaredMember is Constructor || interfaceMember is Constructor) {
       unimplemented(
           "Constructor in override check.", declaredMember.fileOffset, fileUri);
@@ -1150,18 +1152,18 @@
       if (declaredMember.kind == interfaceMember.kind) {
         if (declaredMember.kind == ProcedureKind.Method ||
             declaredMember.kind == ProcedureKind.Operator) {
-          bool seenCovariant = checkMethodOverride(
-              types, declaredMember, interfaceMember, isInterfaceCheck);
+          bool seenCovariant = checkMethodOverride(types, declaredMember,
+              interfaceMember, interfaceMemberOrigin, isInterfaceCheck);
           if (seenCovariant) {
             handleSeenCovariant(
                 types, declaredMember, interfaceMember, isSetter, callback);
           }
         } else if (declaredMember.kind == ProcedureKind.Getter) {
-          checkGetterOverride(
-              types, declaredMember, interfaceMember, isInterfaceCheck);
+          checkGetterOverride(types, declaredMember, interfaceMember,
+              interfaceMemberOrigin, isInterfaceCheck);
         } else if (declaredMember.kind == ProcedureKind.Setter) {
-          bool seenCovariant = checkSetterOverride(
-              types, declaredMember, interfaceMember, isInterfaceCheck);
+          bool seenCovariant = checkSetterOverride(types, declaredMember,
+              interfaceMember, interfaceMemberOrigin, isInterfaceCheck);
           if (seenCovariant) {
             handleSeenCovariant(
                 types, declaredMember, interfaceMember, isSetter, callback);
@@ -1187,12 +1189,12 @@
               !interfaceMember.isConst) ||
           interfaceMember is Procedure && interfaceMember.isSetter;
       if (declaredMemberHasGetter && interfaceMemberHasGetter) {
-        checkGetterOverride(
-            types, declaredMember, interfaceMember, isInterfaceCheck);
+        checkGetterOverride(types, declaredMember, interfaceMember,
+            interfaceMemberOrigin, isInterfaceCheck);
       }
       if (declaredMemberHasSetter && interfaceMemberHasSetter) {
-        bool seenCovariant = checkSetterOverride(
-            types, declaredMember, interfaceMember, isInterfaceCheck);
+        bool seenCovariant = checkSetterOverride(types, declaredMember,
+            interfaceMember, interfaceMemberOrigin, isInterfaceCheck);
         if (seenCovariant) {
           handleSeenCovariant(
               types, declaredMember, interfaceMember, isSetter, callback);
@@ -1214,6 +1216,7 @@
       Types types,
       Member declaredMember,
       Member interfaceMember,
+      Member interfaceMemberOrigin,
       FunctionNode declaredFunction,
       FunctionNode interfaceFunction,
       bool isInterfaceCheck) {
@@ -1234,15 +1237,15 @@
           templateOverrideTypeVariablesMismatch.withArguments(
               "${declaredMember.enclosingClass.name}."
                   "${declaredMember.name.name}",
-              "${interfaceMember.enclosingClass.name}."
-                  "${interfaceMember.name.name}"),
+              "${interfaceMemberOrigin.enclosingClass.name}."
+                  "${interfaceMemberOrigin.name.name}"),
           declaredMember.fileOffset,
           noLength,
           context: [
             templateOverriddenMethodCause
-                .withArguments(interfaceMember.name.name)
-                .withLocation(_getMemberUri(interfaceMember),
-                    interfaceMember.fileOffset, noLength)
+                .withArguments(interfaceMemberOrigin.name.name)
+                .withLocation(_getMemberUri(interfaceMemberOrigin),
+                    interfaceMemberOrigin.fileOffset, noLength)
           ]);
     } else if (declaredFunction?.typeParameters != null) {
       Map<TypeParameter, DartType> substitutionMap =
@@ -1283,16 +1286,16 @@
                     "${declaredMember.enclosingClass.name}."
                         "${declaredMember.name.name}",
                     computedBound,
-                    "${interfaceMember.enclosingClass.name}."
-                        "${interfaceMember.name.name}",
+                    "${interfaceMemberOrigin.enclosingClass.name}."
+                        "${interfaceMemberOrigin.name.name}",
                     library.isNonNullableByDefault),
                 declaredMember.fileOffset,
                 noLength,
                 context: [
                   templateOverriddenMethodCause
-                      .withArguments(interfaceMember.name.name)
-                      .withLocation(_getMemberUri(interfaceMember),
-                          interfaceMember.fileOffset, noLength)
+                      .withArguments(interfaceMemberOrigin.name.name)
+                      .withLocation(_getMemberUri(interfaceMemberOrigin),
+                          interfaceMemberOrigin.fileOffset, noLength)
                 ]);
           }
         }
@@ -1322,6 +1325,7 @@
       Substitution declaredSubstitution,
       Member declaredMember,
       Member interfaceMember,
+      Member interfaceMemberOrigin,
       DartType declaredType,
       DartType interfaceType,
       bool isCovariant,
@@ -1365,8 +1369,9 @@
       if (isErrorInNnbdOptedOutMode || library.isNonNullableByDefault) {
         String declaredMemberName = '${declaredMember.enclosingClass.name}'
             '.${declaredMember.name.name}';
-        String interfaceMemberName = '${interfaceMember.enclosingClass.name}'
-            '.${interfaceMember.name.name}';
+        String interfaceMemberName =
+            '${interfaceMemberOrigin.enclosingClass.name}'
+            '.${interfaceMemberOrigin.name.name}';
         Message message;
         int fileOffset;
         if (declaredParameter == null) {
@@ -1401,18 +1406,28 @@
             isInterfaceCheck, declaredMember, message, fileOffset, noLength,
             context: [
               templateOverriddenMethodCause
-                  .withArguments(interfaceMember.name.name)
-                  .withLocation(_getMemberUri(interfaceMember),
-                      interfaceMember.fileOffset, noLength)
+                  .withArguments(interfaceMemberOrigin.name.name)
+                  .withLocation(_getMemberUri(interfaceMemberOrigin),
+                      interfaceMemberOrigin.fileOffset, noLength)
             ]);
       }
     }
   }
 
+  /// Checks whether [declaredMember] correctly overrides [interfaceMember].
+  ///
+  /// If an error is reporter [interfaceMemberOrigin] is used as the context
+  /// for where [interfaceMember] was declared, since [interfaceMember] might
+  /// itself be synthesized.
+  ///
   /// Returns whether a covariant parameter was seen and more methods thus have
   /// to be checked.
-  bool checkMethodOverride(Types types, Procedure declaredMember,
-      Procedure interfaceMember, bool isInterfaceCheck) {
+  bool checkMethodOverride(
+      Types types,
+      Procedure declaredMember,
+      Procedure interfaceMember,
+      Member interfaceMemberOrigin,
+      bool isInterfaceCheck) {
     assert(declaredMember.kind == interfaceMember.kind);
     assert(declaredMember.kind == ProcedureKind.Method ||
         declaredMember.kind == ProcedureKind.Operator);
@@ -1424,6 +1439,7 @@
         types,
         declaredMember,
         interfaceMember,
+        interfaceMemberOrigin,
         declaredFunction,
         interfaceFunction,
         isInterfaceCheck);
@@ -1437,6 +1453,7 @@
         declaredSubstitution,
         declaredMember,
         interfaceMember,
+        interfaceMemberOrigin,
         declaredFunction.returnType,
         interfaceFunction.returnType,
         false,
@@ -1505,6 +1522,7 @@
           declaredSubstitution,
           declaredMember,
           interfaceMember,
+          interfaceMemberOrigin,
           declaredParameter.type,
           interfaceParameter.type,
           declaredParameter.isCovariant || interfaceParameter.isCovariant,
@@ -1524,15 +1542,15 @@
           templateOverrideFewerNamedArguments.withArguments(
               "${declaredMember.enclosingClass.name}."
                   "${declaredMember.name.name}",
-              "${interfaceMember.enclosingClass.name}."
-                  "${interfaceMember.name.name}"),
+              "${interfaceMemberOrigin.enclosingClass.name}."
+                  "${interfaceMemberOrigin.name.name}"),
           declaredMember.fileOffset,
           noLength,
           context: [
             templateOverriddenMethodCause
-                .withArguments(interfaceMember.name.name)
-                .withLocation(interfaceMember.fileUri,
-                    interfaceMember.fileOffset, noLength)
+                .withArguments(interfaceMemberOrigin.name.name)
+                .withLocation(interfaceMemberOrigin.fileUri,
+                    interfaceMemberOrigin.fileOffset, noLength)
           ]);
     }
     int compareNamedParameters(VariableDeclaration p0, VariableDeclaration p1) {
@@ -1582,6 +1600,7 @@
           declaredSubstitution,
           declaredMember,
           interfaceMember,
+          interfaceMemberOrigin,
           declaredParameter.type,
           interfaceNamedParameters.current.type,
           declaredParameter.isCovariant,
@@ -1604,9 +1623,9 @@
             noLength,
             context: [
               templateOverriddenMethodCause
-                  .withArguments(interfaceMember.name.name)
-                  .withLocation(_getMemberUri(interfaceMember),
-                      interfaceMember.fileOffset, noLength)
+                  .withArguments(interfaceMemberOrigin.name.name)
+                  .withLocation(_getMemberUri(interfaceMemberOrigin),
+                      interfaceMemberOrigin.fileOffset, noLength)
             ]);
       }
       if (declaredParameter.isCovariant) seenCovariant = true;
@@ -1614,10 +1633,25 @@
     return seenCovariant;
   }
 
-  void checkGetterOverride(Types types, Member declaredMember,
-      Member interfaceMember, bool isInterfaceCheck) {
+  /// Checks whether [declaredMember] correctly overrides [interfaceMember].
+  ///
+  /// If an error is reporter [interfaceMemberOrigin] is used as the context
+  /// for where [interfaceMember] was declared, since [interfaceMember] might
+  /// itself be synthesized.
+  void checkGetterOverride(
+      Types types,
+      Member declaredMember,
+      Member interfaceMember,
+      Member interfaceMemberOrigin,
+      bool isInterfaceCheck) {
     Substitution interfaceSubstitution = _computeInterfaceSubstitution(
-        types, declaredMember, interfaceMember, null, null, isInterfaceCheck);
+        types,
+        declaredMember,
+        interfaceMember,
+        interfaceMemberOrigin,
+        /* declaredFunction = */ null,
+        /* interfaceFunction = */ null,
+        isInterfaceCheck);
     Substitution declaredSubstitution =
         _computeDeclaredSubstitution(types, declaredMember);
     DartType declaredType = declaredMember.getterType;
@@ -1628,19 +1662,36 @@
         declaredSubstitution,
         declaredMember,
         interfaceMember,
+        interfaceMemberOrigin,
         declaredType,
         interfaceType,
-        false,
-        null,
+        /* isCovariant = */ false,
+        /* declaredParameter = */ null,
         isInterfaceCheck);
   }
 
+  /// Checks whether [declaredMember] correctly overrides [interfaceMember].
+  ///
+  /// If an error is reporter [interfaceMemberOrigin] is used as the context
+  /// for where [interfaceMember] was declared, since [interfaceMember] might
+  /// itself be synthesized.
+  ///
   /// Returns whether a covariant parameter was seen and more methods thus have
   /// to be checked.
-  bool checkSetterOverride(Types types, Member declaredMember,
-      Member interfaceMember, bool isInterfaceCheck) {
+  bool checkSetterOverride(
+      Types types,
+      Member declaredMember,
+      Member interfaceMember,
+      Member interfaceMemberOrigin,
+      bool isInterfaceCheck) {
     Substitution interfaceSubstitution = _computeInterfaceSubstitution(
-        types, declaredMember, interfaceMember, null, null, isInterfaceCheck);
+        types,
+        declaredMember,
+        interfaceMember,
+        interfaceMemberOrigin,
+        /* declaredFunction = */ null,
+        /* interfaceFunction = */ null,
+        isInterfaceCheck);
     Substitution declaredSubstitution =
         _computeDeclaredSubstitution(types, declaredMember);
     DartType declaredType = declaredMember.setterType;
@@ -1660,6 +1711,7 @@
         declaredSubstitution,
         declaredMember,
         interfaceMember,
+        interfaceMemberOrigin,
         declaredType,
         interfaceType,
         isCovariant,
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 6df5e4c..be090da 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -1903,7 +1903,9 @@
           isMixinDeclaration ? null : supertype,
           isNamedMixinApplication
               ? interfaces
-              : isMixinDeclaration ? [supertype, mixin] : null,
+              : isMixinDeclaration
+                  ? [supertype, mixin]
+                  : null,
           null, // No `on` clause types.
           new Scope(
               local: <String, MemberBuilder>{},
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart
index ff8a429..874d7be 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart
@@ -511,11 +511,28 @@
 
     // If Q is a legacy type Q0* then the match holds under constraint set C:
     //
-    // Only if P is a subtype match for Q? under constraint set C.
+    // If P is dynamic or void and P is a subtype match for Q0 under constraint
+    // set C.
+    // Or if P is not dynamic or void and P is a subtype match for Q0? under
+    // constraint set C.
     if (_isLegacyTypeConstructorApplication(q)) {
-      return _isNullabilityAwareSubtypeMatch(
-          p, q.withDeclaredNullability(Nullability.nullable),
-          constrainSupertype: constrainSupertype);
+      final int baseConstraintCount = _protoConstraints.length;
+
+      if ((p is DynamicType || p is VoidType) &&
+          _isNullabilityAwareSubtypeMatch(p, _computeRawType(q),
+              constrainSupertype: constrainSupertype)) {
+        return true;
+      }
+      _protoConstraints.length = baseConstraintCount;
+
+      if (p is! DynamicType &&
+          p is! VoidType &&
+          _isNullabilityAwareSubtypeMatch(
+              p, q.withDeclaredNullability(Nullability.nullable),
+              constrainSupertype: constrainSupertype)) {
+        return true;
+      }
+      _protoConstraints.length = baseConstraintCount;
     }
 
     // If Q is FutureOr<Q0> the match holds under constraint set C:
@@ -560,6 +577,8 @@
     // If Q is Q0? the match holds under constraint set C:
     //
     // If P is P0? and P0 is a subtype match for Q0 under constraint set C.
+    // Or if P is dynamic or void and Object is a subtype match for Q0 under
+    // constraint set C.
     // Or if P is a subtype match for Q0 under non-empty constraint set C.
     // Or if P is a subtype match for Null under constraint set C.
     // Or if P is a subtype match for Q0 under empty constraint set C.
@@ -575,6 +594,14 @@
       }
       _protoConstraints.length = baseConstraintCount;
 
+      if ((p is DynamicType || p is VoidType) &&
+          _isNullabilityAwareSubtypeMatch(
+              coreTypes.objectNonNullableRawType, rawQ,
+              constrainSupertype: constrainSupertype)) {
+        return true;
+      }
+      _protoConstraints.length = baseConstraintCount;
+
       bool isMatchWithRawQ = _isNullabilityAwareSubtypeMatch(p, rawQ,
           constrainSupertype: constrainSupertype);
       bool matchWithRawQAddsConstraints =
diff --git a/pkg/front_end/test/incremental_compiler_leak_test.dart b/pkg/front_end/test/incremental_compiler_leak_test.dart
index e8927d1..e526d98 100644
--- a/pkg/front_end/test/incremental_compiler_leak_test.dart
+++ b/pkg/front_end/test/incremental_compiler_leak_test.dart
@@ -36,15 +36,22 @@
         new Map<vmService.ClassRef, vmService.Class>();
 
     Completer<String> cTimeout = new Completer();
-    Timer timer = new Timer(new Duration(minutes: 4), () {
+    Timer timer = new Timer(new Duration(minutes: 6), () {
       cTimeout.complete("Timeout");
       killProcess();
     });
 
     Completer<String> cRunDone = new Completer();
     // ignore: unawaited_futures
-    runInternal(isolateRef, classInfo, instanceCounts,
-        () => cTimeout.isCompleted || cProcessExited.isCompleted).then((value) {
+    runInternal(
+        isolateRef,
+        classInfo,
+        instanceCounts,
+        (int iteration) =>
+            // Subtract 2 as it's logically one ahead and asks _before_ the run.
+            (iteration - 2) > limit ||
+            cTimeout.isCompleted ||
+            cProcessExited.isCompleted).then((value) {
       cRunDone.complete("Done");
     });
 
@@ -54,6 +61,9 @@
     print("\n\n======================\n\n");
 
     findPossibleLeaks(instanceCounts, classInfo);
+
+    // Make sure the process doesn't hang.
+    killProcess();
   }
 
   void findPossibleLeaks(Map<vmService.ClassRef, List<int>> instanceCounts,
@@ -115,11 +125,11 @@
       vmService.IsolateRef isolateRef,
       Map<vmService.ClassRef, vmService.Class> classInfo,
       Map<vmService.ClassRef, List<int>> instanceCounts,
-      bool Function() shouldBail) async {
+      bool Function(int iteration) shouldBail) async {
     int iterationNumber = 1;
     try {
       while (true) {
-        if (shouldBail()) break;
+        if (shouldBail(iterationNumber)) break;
         if (!await waitUntilPaused(isolateRef.id)) break;
         print("\n\n====================\n\nIteration #$iterationNumber");
         iterationNumber++;
diff --git a/pkg/front_end/test/lint_suite.dart b/pkg/front_end/test/lint_suite.dart
index d047ab7..23b1f6b 100644
--- a/pkg/front_end/test/lint_suite.dart
+++ b/pkg/front_end/test/lint_suite.dart
@@ -30,12 +30,18 @@
 import 'package:testing/testing.dart'
     show Chain, ChainContext, Result, Step, TestDescription, runMe;
 
+import 'testing_utils.dart' show checkEnvironment, getGitFiles;
+
 main([List<String> arguments = const []]) =>
     runMe(arguments, createContext, configurationPath: "../testing.json");
 
 Future<Context> createContext(
     Chain suite, Map<String, String> environment) async {
-  return new Context();
+  const Set<String> knownEnvironmentKeys = {"onlyInGit"};
+  checkEnvironment(environment, knownEnvironmentKeys);
+
+  bool onlyInGit = environment["onlyInGit"] != "false";
+  return new Context(onlyInGit: onlyInGit);
 }
 
 class LintTestDescription extends TestDescription {
@@ -70,6 +76,9 @@
 }
 
 class Context extends ChainContext {
+  final bool onlyInGit;
+  Context({this.onlyInGit});
+
   final List<Step> steps = const <Step>[
     const LintStep(),
   ];
@@ -82,6 +91,11 @@
   }
 
   Stream<LintTestDescription> list(Chain suite) async* {
+    Set<Uri> gitFiles;
+    if (onlyInGit) {
+      gitFiles = await getGitFiles(suite);
+    }
+
     Directory testRoot = new Directory.fromUri(suite.uri);
     if (await testRoot.exists()) {
       Stream<FileSystemEntity> files =
@@ -91,6 +105,7 @@
         String path = entity.uri.path;
         if (suite.exclude.any((RegExp r) => path.contains(r))) continue;
         if (suite.pattern.any((RegExp r) => path.contains(r))) {
+          if (onlyInGit && !gitFiles.contains(entity.uri)) continue;
           Uri root = suite.uri;
           String baseName = "${entity.uri}".substring("$root".length);
           baseName = baseName.substring(0, baseName.length - ".dart".length);
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index e985d0b..519403a 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -188,6 +188,7 @@
 doctype
 doesnt
 dog
+donly
 doo
 downstream
 draw
@@ -429,6 +430,7 @@
 observable
 oh
 okay
+onull
 ooo
 operate
 ops
@@ -535,6 +537,7 @@
 sigwinch
 slight
 smoke
+snull
 somehow
 spans
 spawn
diff --git a/pkg/front_end/test/spelling_test_base.dart b/pkg/front_end/test/spelling_test_base.dart
index 056d0e7..9879c8c 100644
--- a/pkg/front_end/test/spelling_test_base.dart
+++ b/pkg/front_end/test/spelling_test_base.dart
@@ -24,18 +24,21 @@
 import 'package:kernel/kernel.dart';
 
 import 'package:testing/testing.dart'
-    show ChainContext, Result, Step, TestDescription;
+    show Chain, ChainContext, Result, Step, TestDescription;
 
 import 'spell_checking_utils.dart' as spell;
 
+import 'testing_utils.dart' show filterList;
+
 abstract class SpellContext extends ChainContext {
   final List<Step> steps = const <Step>[
     const SpellTest(),
   ];
 
   final bool interactive;
+  final bool onlyInGit;
 
-  SpellContext({this.interactive});
+  SpellContext({this.interactive, this.onlyInGit});
 
   // Override special handling of negative tests.
   @override
@@ -52,6 +55,11 @@
   Set<String> reportedWordsDenylisted = {};
 
   @override
+  Stream<TestDescription> list(Chain suite) {
+    return filterList(suite, onlyInGit, super.list(suite));
+  }
+
+  @override
   Future<void> postRun() {
     if (reportedWordsDenylisted.isNotEmpty) {
       print("\n\n\n");
@@ -152,7 +160,8 @@
           print("");
           print("To add words easily, try to run this script in interactive "
               "mode via the command");
-          print("dart ${Platform.script.toFilePath()} -Dinteractive=true");
+          print("dart ${Platform.script.toFilePath()} "
+              "-DonlyInGit=$onlyInGit -Dinteractive=true");
         }
       }
       print("================");
diff --git a/pkg/front_end/test/spelling_test_external_targets.dart b/pkg/front_end/test/spelling_test_external_targets.dart
index 98faa82..f339a46 100644
--- a/pkg/front_end/test/spelling_test_external_targets.dart
+++ b/pkg/front_end/test/spelling_test_external_targets.dart
@@ -13,17 +13,25 @@
 
 import 'spell_checking_utils.dart' as spell;
 
+import 'testing_utils.dart' show checkEnvironment;
+
 main([List<String> arguments = const []]) =>
     runMe(arguments, createContext, configurationPath: "../testing.json");
 
 Future<SpellContext> createContext(
     Chain suite, Map<String, String> environment) async {
+  const Set<String> knownEnvironmentKeys = {"interactive", "onlyInGit"};
+  checkEnvironment(environment, knownEnvironmentKeys);
+
   bool interactive = environment["interactive"] == "true";
-  return new SpellContextExternal(interactive: interactive);
+  bool onlyInGit = environment["onlyInGit"] != "false";
+  return new SpellContextExternal(
+      interactive: interactive, onlyInGit: onlyInGit);
 }
 
 class SpellContextExternal extends SpellContext {
-  SpellContextExternal({bool interactive}) : super(interactive: interactive);
+  SpellContextExternal({bool interactive, bool onlyInGit})
+      : super(interactive: interactive, onlyInGit: onlyInGit);
 
   @override
   List<spell.Dictionaries> get dictionaries => const <spell.Dictionaries>[];
diff --git a/pkg/front_end/test/spelling_test_not_src_suite.dart b/pkg/front_end/test/spelling_test_not_src_suite.dart
index 32627a6..28d5262 100644
--- a/pkg/front_end/test/spelling_test_not_src_suite.dart
+++ b/pkg/front_end/test/spelling_test_not_src_suite.dart
@@ -10,17 +10,24 @@
 
 import 'spell_checking_utils.dart' as spell;
 
+import 'testing_utils.dart' show checkEnvironment;
+
 main([List<String> arguments = const []]) =>
     runMe(arguments, createContext, configurationPath: "../testing.json");
 
 Future<SpellContext> createContext(
     Chain suite, Map<String, String> environment) async {
+  const Set<String> knownEnvironmentKeys = {"interactive", "onlyInGit"};
+  checkEnvironment(environment, knownEnvironmentKeys);
+
   bool interactive = environment["interactive"] == "true";
-  return new SpellContextTest(interactive: interactive);
+  bool onlyInGit = environment["onlyInGit"] != "false";
+  return new SpellContextTest(interactive: interactive, onlyInGit: onlyInGit);
 }
 
 class SpellContextTest extends SpellContext {
-  SpellContextTest({bool interactive}) : super(interactive: interactive);
+  SpellContextTest({bool interactive, bool onlyInGit})
+      : super(interactive: interactive, onlyInGit: onlyInGit);
 
   @override
   List<spell.Dictionaries> get dictionaries => const <spell.Dictionaries>[
diff --git a/pkg/front_end/test/spelling_test_src_suite.dart b/pkg/front_end/test/spelling_test_src_suite.dart
index 3e4f1f5..4fe9568 100644
--- a/pkg/front_end/test/spelling_test_src_suite.dart
+++ b/pkg/front_end/test/spelling_test_src_suite.dart
@@ -10,17 +10,24 @@
 
 import 'spell_checking_utils.dart' as spell;
 
+import 'testing_utils.dart' show checkEnvironment;
+
 main([List<String> arguments = const []]) =>
     runMe(arguments, createContext, configurationPath: "../testing.json");
 
 Future<SpellContext> createContext(
     Chain suite, Map<String, String> environment) async {
+  const Set<String> knownEnvironmentKeys = {"interactive", "onlyInGit"};
+  checkEnvironment(environment, knownEnvironmentKeys);
+
   bool interactive = environment["interactive"] == "true";
-  return new SpellContextSource(interactive: interactive);
+  bool onlyInGit = environment["onlyInGit"] != "false";
+  return new SpellContextSource(interactive: interactive, onlyInGit: onlyInGit);
 }
 
 class SpellContextSource extends SpellContext {
-  SpellContextSource({bool interactive}) : super(interactive: interactive);
+  SpellContextSource({bool interactive, bool onlyInGit})
+      : super(interactive: interactive, onlyInGit: onlyInGit);
 
   @override
   List<spell.Dictionaries> get dictionaries => const <spell.Dictionaries>[
diff --git a/pkg/front_end/test/testing_utils.dart b/pkg/front_end/test/testing_utils.dart
new file mode 100644
index 0000000..0ab71ff
--- /dev/null
+++ b/pkg/front_end/test/testing_utils.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:io' show Directory, Process, ProcessResult;
+
+import 'package:testing/testing.dart' show Chain, TestDescription;
+
+Stream<TestDescription> filterList(
+    Chain suite, bool onlyInGit, Stream<TestDescription> base) async* {
+  Set<Uri> gitFiles;
+  if (onlyInGit) {
+    gitFiles = await getGitFiles(suite);
+  }
+  await for (TestDescription description in base) {
+    if (onlyInGit && !gitFiles.contains(description.uri)) {
+      continue;
+    }
+    yield description;
+  }
+}
+
+Future<Set<Uri>> getGitFiles(Chain suite) async {
+  ProcessResult result = await Process.run("git", ["ls-files", "."],
+      workingDirectory: new Directory.fromUri(suite.uri).absolute.path,
+      runInShell: true);
+  String stdout = result.stdout;
+  return stdout
+      .split(new RegExp('^', multiLine: true))
+      .map((line) => suite.uri.resolve(line.trimRight()))
+      .toSet();
+}
+
+void checkEnvironment(
+    Map<String, String> environment, Set<String> knownEnvironmentKeys) {
+  Set<String> environmentKeys = environment.keys.toSet();
+  environmentKeys.removeAll(knownEnvironmentKeys);
+  if (environmentKeys.isNotEmpty) {
+    throw "Unknown environment(s) given: ${environmentKeys.toList()}.\n"
+        "Knows about ${knownEnvironmentKeys.toList()}";
+  }
+}
diff --git a/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart
new file mode 100644
index 0000000..71068db
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+T f<T>(T t) => t;
+
+T g<T>(T? t) => t!;
+
+T h<T extends Object>(T? t) => t!;
+
+foo(dynamic d, void v, Object? onull, Object o, String? snull, String s) {
+  f(d);
+  f(v);
+  f(onull);
+  f(o);
+  f(snull);
+  f(s);
+
+  g(d);
+  g(v);
+  g(onull);
+  g(o);
+  g(snull);
+  g(s);
+
+  h(d);
+  h(v);
+  h(onull);
+  h(o);
+  h(snull);
+  h(s);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.outline.expect b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.outline.expect
new file mode 100644
index 0000000..4238908
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.outline.expect
@@ -0,0 +1,14 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
+  ;
+static method g<T extends core::Object? = dynamic>(self::g::T? t) → self::g::T%
+  ;
+static method h<T extends core::Object = core::Object>(self::h::T? t) → self::h::T
+  ;
+static method foo(dynamic d, void v, core::Object? onull, core::Object o, core::String? snull, core::String s) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.strong.expect b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.strong.expect
new file mode 100644
index 0000000..046b42e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.strong.expect
@@ -0,0 +1,46 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
+//   g(v);
+//     ^
+//
+// pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
+//   h(v);
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
+  return t;
+static method g<T extends core::Object? = dynamic>(self::g::T? t) → self::g::T%
+  return t!;
+static method h<T extends core::Object = core::Object>(self::h::T? t) → self::h::T
+  return t!;
+static method foo(dynamic d, void v, core::Object? onull, core::Object o, core::String? snull, core::String s) → dynamic {
+  self::f<dynamic>(d);
+  self::f<void>(v);
+  self::f<core::Object?>(onull);
+  self::f<core::Object>(o);
+  self::f<core::String?>(snull);
+  self::f<core::String>(s);
+  self::g<core::Object>(d);
+  self::g<core::Object>(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
+  g(v);
+    ^" in v);
+  self::g<core::Object>(onull);
+  self::g<core::Object>(o);
+  self::g<core::String>(snull);
+  self::g<core::String>(s);
+  self::h<core::Object>(d);
+  self::h<core::Object>(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
+  h(v);
+    ^" in v);
+  self::h<core::Object>(onull);
+  self::h<core::Object>(o);
+  self::h<core::String>(snull);
+  self::h<core::String>(s);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.strong.transformed.expect
new file mode 100644
index 0000000..046b42e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.strong.transformed.expect
@@ -0,0 +1,46 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
+//   g(v);
+//     ^
+//
+// pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
+//   h(v);
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
+  return t;
+static method g<T extends core::Object? = dynamic>(self::g::T? t) → self::g::T%
+  return t!;
+static method h<T extends core::Object = core::Object>(self::h::T? t) → self::h::T
+  return t!;
+static method foo(dynamic d, void v, core::Object? onull, core::Object o, core::String? snull, core::String s) → dynamic {
+  self::f<dynamic>(d);
+  self::f<void>(v);
+  self::f<core::Object?>(onull);
+  self::f<core::Object>(o);
+  self::f<core::String?>(snull);
+  self::f<core::String>(s);
+  self::g<core::Object>(d);
+  self::g<core::Object>(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
+  g(v);
+    ^" in v);
+  self::g<core::Object>(onull);
+  self::g<core::Object>(o);
+  self::g<core::String>(snull);
+  self::g<core::String>(s);
+  self::h<core::Object>(d);
+  self::h<core::Object>(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
+  h(v);
+    ^" in v);
+  self::h<core::Object>(onull);
+  self::h<core::Object>(o);
+  self::h<core::String>(snull);
+  self::h<core::String>(s);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.textual_outline.expect
new file mode 100644
index 0000000..51fed79
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.textual_outline.expect
@@ -0,0 +1,5 @@
+T f<T>(T t) => t;
+T g<T>(T? t) => t!;
+T h<T extends Object>(T? t) => t!;
+foo(dynamic d, void v, Object? onull, Object o, String? snull, String s) {}
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..51fed79
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.textual_outline_modelled.expect
@@ -0,0 +1,5 @@
+T f<T>(T t) => t;
+T g<T>(T? t) => t!;
+T h<T extends Object>(T? t) => t!;
+foo(dynamic d, void v, Object? onull, Object o, String? snull, String s) {}
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.weak.expect b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.weak.expect
new file mode 100644
index 0000000..046b42e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.weak.expect
@@ -0,0 +1,46 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
+//   g(v);
+//     ^
+//
+// pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
+//   h(v);
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
+  return t;
+static method g<T extends core::Object? = dynamic>(self::g::T? t) → self::g::T%
+  return t!;
+static method h<T extends core::Object = core::Object>(self::h::T? t) → self::h::T
+  return t!;
+static method foo(dynamic d, void v, core::Object? onull, core::Object o, core::String? snull, core::String s) → dynamic {
+  self::f<dynamic>(d);
+  self::f<void>(v);
+  self::f<core::Object?>(onull);
+  self::f<core::Object>(o);
+  self::f<core::String?>(snull);
+  self::f<core::String>(s);
+  self::g<core::Object>(d);
+  self::g<core::Object>(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
+  g(v);
+    ^" in v);
+  self::g<core::Object>(onull);
+  self::g<core::Object>(o);
+  self::g<core::String>(snull);
+  self::g<core::String>(s);
+  self::h<core::Object>(d);
+  self::h<core::Object>(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
+  h(v);
+    ^" in v);
+  self::h<core::Object>(onull);
+  self::h<core::Object>(o);
+  self::h<core::String>(snull);
+  self::h<core::String>(s);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.weak.transformed.expect
new file mode 100644
index 0000000..046b42e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.weak.transformed.expect
@@ -0,0 +1,46 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
+//   g(v);
+//     ^
+//
+// pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
+//   h(v);
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
+  return t;
+static method g<T extends core::Object? = dynamic>(self::g::T? t) → self::g::T%
+  return t!;
+static method h<T extends core::Object = core::Object>(self::h::T? t) → self::h::T
+  return t!;
+static method foo(dynamic d, void v, core::Object? onull, core::Object o, core::String? snull, core::String s) → dynamic {
+  self::f<dynamic>(d);
+  self::f<void>(v);
+  self::f<core::Object?>(onull);
+  self::f<core::Object>(o);
+  self::f<core::String?>(snull);
+  self::f<core::String>(s);
+  self::g<core::Object>(d);
+  self::g<core::Object>(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
+  g(v);
+    ^" in v);
+  self::g<core::Object>(onull);
+  self::g<core::Object>(o);
+  self::g<core::String>(snull);
+  self::g<core::String>(s);
+  self::h<core::Object>(d);
+  self::h<core::Object>(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
+  h(v);
+    ^" in v);
+  self::h<core::Object>(onull);
+  self::h<core::Object>(o);
+  self::h<core::String>(snull);
+  self::h<core::String>(s);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart.weak.expect
index 2571ea6..433878f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart.weak.expect
@@ -2,15 +2,15 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart:11:27: Error: The parameter 'cls' of the method 'SubClass.invariant' has type 'SubClass', which does not match the corresponding type, 'Class', in the overridden method, 'Class with Mixin.invariant'.
+// pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart:11:27: Error: The parameter 'cls' of the method 'SubClass.invariant' has type 'SubClass', which does not match the corresponding type, 'Class', in the overridden method, 'Class.invariant'.
 //  - 'SubClass' is from 'pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart'.
 //  - 'Class' is from 'pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in_lib.dart'.
 // Change to a supertype of 'Class', or, for a covariant parameter, a subtype.
 //   void invariant(SubClass cls) {} // error
 //                           ^
-// pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart:9:7: Context: This is the overridden method ('invariant').
-// class SubClass extends Class with Mixin {
-//       ^
+// pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in_lib.dart:9:8: Context: This is the overridden method ('invariant').
+//   void invariant(Class cls);
+//        ^
 //
 import self as self;
 import "covariant_from_opt_in_lib.dart" as cov;
diff --git a/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart
new file mode 100644
index 0000000..0e43b03
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for 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 './opt_out_lib.dart';
+
+foo(dynamic d, void v, Object? onull, Object o, String? snull, String s) {
+  f(d);
+  f(v);
+  f(onull);
+  f(o);
+  f(snull);
+  f(s);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.textual_outline.expect
new file mode 100644
index 0000000..7188a11
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+import './opt_out_lib.dart';
+
+foo(dynamic d, void v, Object? onull, Object o, String? snull, String s) {}
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..7188a11
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+import './opt_out_lib.dart';
+
+foo(dynamic d, void v, Object? onull, Object o, String? snull, String s) {}
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.weak.expect
new file mode 100644
index 0000000..216a6b7
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.weak.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "opt_out_lib.dart" as opt;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+static method foo(dynamic d, void v, core::Object? onull, core::Object o, core::String? snull, core::String s) → dynamic {
+  opt::f<dynamic>(d);
+  opt::f<void>(v);
+  opt::f<core::Object?>(onull);
+  opt::f<core::Object>(o);
+  opt::f<core::String?>(snull);
+  opt::f<core::String>(s);
+}
+static method main() → dynamic {}
+
+library;
+import self as opt;
+import "dart:core" as core;
+
+static method f<T extends core::Object* = dynamic>(opt::f::T* a) → opt::f::T*
+  return a;
diff --git a/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.weak.transformed.expect
new file mode 100644
index 0000000..216a6b7
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.weak.transformed.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "opt_out_lib.dart" as opt;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+static method foo(dynamic d, void v, core::Object? onull, core::Object o, core::String? snull, core::String s) → dynamic {
+  opt::f<dynamic>(d);
+  opt::f<void>(v);
+  opt::f<core::Object?>(onull);
+  opt::f<core::Object>(o);
+  opt::f<core::String?>(snull);
+  opt::f<core::String>(s);
+}
+static method main() → dynamic {}
+
+library;
+import self as opt;
+import "dart:core" as core;
+
+static method f<T extends core::Object* = dynamic>(opt::f::T* a) → opt::f::T*
+  return a;
diff --git a/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/opt_out_lib.dart b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/opt_out_lib.dart
new file mode 100644
index 0000000..1b2aaa8
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/opt_out_lib.dart
@@ -0,0 +1,7 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart=2.8
+
+T f<T>(T a) => a;
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index bbde631..74ef5a2 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -3790,13 +3790,16 @@
 
   factory Arguments.forwarded(FunctionNode function, Library library) {
     return new Arguments(
-        function.positionalParameters.map((p) => new VariableGet(p)).toList(),
+        function.positionalParameters
+            .map<Expression>((p) => new VariableGet(p))
+            .toList(),
         named: function.namedParameters
             .map((p) => new NamedExpression(p.name, new VariableGet(p)))
             .toList(),
         types: function.typeParameters
-            .map((p) => new TypeParameterType.withDefaultNullabilityForLibrary(
-                p, library))
+            .map<DartType>((p) =>
+                new TypeParameterType.withDefaultNullabilityForLibrary(
+                    p, library))
             .toList());
   }
 
diff --git a/pkg/kernel/lib/transformations/mixin_full_resolution.dart b/pkg/kernel/lib/transformations/mixin_full_resolution.dart
index 314803a..f075b34 100644
--- a/pkg/kernel/lib/transformations/mixin_full_resolution.dart
+++ b/pkg/kernel/lib/transformations/mixin_full_resolution.dart
@@ -325,7 +325,9 @@
         hierarchy.getDispatchTarget(lookupClass, new Name("noSuchMethod"));
     String methodNameUsed = (isGetter)
         ? "get:$methodName"
-        : (isSetter) ? "set:$methodName=" : methodName;
+        : (isSetter)
+            ? "set:$methodName="
+            : methodName;
     if (noSuchMethod != null &&
         noSuchMethod.function.positionalParameters.length == 1 &&
         noSuchMethod.function.namedParameters.isEmpty) {
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 70955b1..6391890 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -85,7 +85,7 @@
 front_end/test/fasta/text_serialization_test: Pass, ExtraSlow
 front_end/test/fasta/types/dart2js_benchmark_test: Pass, Slow
 front_end/test/fasta/types/large_app_benchmark_test: Pass, ExtraSlow
-front_end/test/incremental_compiler_leak_test: Pass, Slow
+front_end/test/incremental_compiler_leak_test: Pass, ExtraSlow
 front_end/test/incremental_dart2js_test: Pass, Slow
 front_end/test/minimal_incremental_kernel_generator_test: Slow, Pass
 front_end/testcases/*: Skip # These are not tests but input for tests.
diff --git a/pkg/test_runner/lib/src/test_suite.dart b/pkg/test_runner/lib/src/test_suite.dart
index 02d1f3e..25709e2 100644
--- a/pkg/test_runner/lib/src/test_suite.dart
+++ b/pkg/test_runner/lib/src/test_suite.dart
@@ -678,7 +678,7 @@
       for (var name in testFile.otherResources) {
         var namePath = Path(name);
         var fromPath = testFile.path.directoryPath.join(namePath);
-        File('$tempDir/$name').parent.createSync(recursive: true);
+        File('$tempDir/$name').createSync(recursive: true);
         File(fromPath.toNativePath()).copySync('$tempDir/$name');
       }
     }
diff --git a/pkg/vm/lib/transformations/ffi_definitions.dart b/pkg/vm/lib/transformations/ffi_definitions.dart
index 9ba04b2..8ec1805 100644
--- a/pkg/vm/lib/transformations/ffi_definitions.dart
+++ b/pkg/vm/lib/transformations/ffi_definitions.dart
@@ -406,7 +406,9 @@
     //   _fromAddress<Int8>(_loadIntPtr(pointer, offset));
     final loadMethod = isPointer
         ? loadMethods[NativeType.kIntptr]
-        : optimizedTypes.contains(type) ? loadMethods[type] : loadStructMethod;
+        : optimizedTypes.contains(type)
+            ? loadMethods[type]
+            : loadStructMethod;
     Expression getterReturnValue = StaticInvocation(
         loadMethod,
         Arguments([
diff --git a/tests/language/async/await_test.dart b/tests/language/async/await_test.dart
index eca75a8..07c3dad 100644
--- a/tests/language/async/await_test.dart
+++ b/tests/language/async/await_test.dart
@@ -1367,7 +1367,7 @@
 
   group("if", () {
     test("await in test", () {
-      f(v) async {
+      f(bool v) async {
         if (await new Future.value(v)) {
           return 42;
         } else {
@@ -1379,7 +1379,7 @@
     });
 
     test("await err in test", () {
-      f(v) async {
+      f(bool v) async {
         if (await new Future.error("err")) {
           return 42;
         } else {
@@ -1391,7 +1391,7 @@
     });
 
     test("await in then", () {
-      f(v) async {
+      f(bool v) async {
         if (v) {
           return await new Future.value(42);
         }
@@ -1402,7 +1402,7 @@
     });
 
     test("await err in then", () {
-      f(v) async {
+      f(bool v) async {
         if (v) {
           return await new Future.error("err");
         }
@@ -1413,7 +1413,7 @@
     });
 
     test("await in then with else", () {
-      f(v) async {
+      f(bool v) async {
         if (v) {
           return await new Future.value(42);
         } else {
@@ -1426,7 +1426,7 @@
     });
 
     test("await err in then with else", () {
-      f(v) async {
+      f(bool v) async {
         if (v) {
           return await new Future.error("err");
         } else {
@@ -1439,7 +1439,7 @@
     });
 
     test("await in else", () {
-      f(v) async {
+      f(bool v) async {
         if (v) {
           return 37;
         } else {
@@ -1452,7 +1452,7 @@
     });
 
     test("await err in else", () {
-      f(v) async {
+      f(bool v) async {
         if (v) {
           return 37;
         } else {
@@ -1465,7 +1465,7 @@
     });
 
     test("await in else-if test", () {
-      f(v) async {
+      f(bool v) async {
         if (v) {
           return 37;
         } else if (!await new Future.value(v)) {
@@ -1480,7 +1480,7 @@
     });
 
     test("await in else-if then", () {
-      f(v) async {
+      f(bool v) async {
         if (v) {
           return 37;
         } else if (!v) {
@@ -1497,7 +1497,7 @@
 
   group("conditional operator", () {
     test("await in test", () {
-      f(v) async {
+      f(bool v) async {
         return (await new Future.value(v)) ? 42 : 37;
       }
 
@@ -1505,7 +1505,7 @@
     });
 
     test("await err in test", () {
-      f(v) async {
+      f(bool v) async {
         return (await new Future.error("err")) ? 42 : 37;
       }
 
@@ -1513,7 +1513,7 @@
     });
 
     test("await in then", () {
-      f(v) async {
+      f(bool v) async {
         return v ? (await new Future.value(42)) : 37;
       }
 
@@ -1521,7 +1521,7 @@
     });
 
     test("await err in then", () {
-      f(v) async {
+      f(bool v) async {
         return v ? (await new Future.error("err")) : 37;
       }
 
@@ -1529,7 +1529,7 @@
     });
 
     test("await in else", () {
-      f(v) async {
+      f(bool v) async {
         return v ? 37 : (await new Future.value(42));
       }
 
@@ -1537,7 +1537,7 @@
     });
 
     test("await err in else", () {
-      f(v) async {
+      f(bool v) async {
         return v ? 37 : (await new Future.error("err"));
       }
 
diff --git a/tests/language/function/call_generic_test.dart b/tests/language/function/call_generic_test.dart
index de3b0bd..19ea8ba 100644
--- a/tests/language/function/call_generic_test.dart
+++ b/tests/language/function/call_generic_test.dart
@@ -35,7 +35,7 @@
 }
 
 main() {
-  check([dynamic, 1, 2, 3, null, null], staticFn(1 as dynamic, 2, 3));
+  check([Object, 1, 2, 3, null, null], staticFn(1 as dynamic, 2, 3));
 
   check([Object, 'Z', 2, 4, null, null], staticFn('Z', 2, 4));
 
@@ -53,13 +53,13 @@
 
   var c = new C();
 
-  check([dynamic, 8, 2, 3, null, null], c.memberFn(8 as dynamic, 2, 3));
+  check([Object, 8, 2, 3, null, null], c.memberFn(8 as dynamic, 2, 3));
 
   check([Object, 'A', 2, 3, null, null], c.memberFn('A', 2, 3));
 
   check([int, 9, 2, 3, null, null], c.memberFn<int>(9, 2, 3));
 
-  check([dynamic, 10, 2, 3, null, null], c.map(10 as dynamic, 2, 3));
+  check([Object, 10, 2, 3, null, null], c.map(10 as dynamic, 2, 3));
 
   check([Object, 'B', 2, 3, null, null], c.map('B', 2, 3));
 
diff --git a/tests/language/inference/dynamic_nullable_test.dart b/tests/language/inference/dynamic_nullable_test.dart
index 6bcb121..46b6591 100644
--- a/tests/language/inference/dynamic_nullable_test.dart
+++ b/tests/language/inference/dynamic_nullable_test.dart
@@ -55,7 +55,7 @@
 
     var c = C.list(o);
     var f = bar(o);
-    var l = o.whereNotNull;
+    var l = o.whereNotNull();
 
     c.expectStaticType<Exactly<C<Object>>>();
     Expect.type<C<Object>>(c); // Run-time type is subtype of C<Object>.
diff --git a/tools/VERSION b/tools/VERSION
index 66e08aa..6597a0f 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 10
 PATCH 0
-PRERELEASE 134
+PRERELEASE 135
 PRERELEASE_PATCH 0
\ No newline at end of file